Каталог решений - Функция создания вложенных каталогов + ф-ции извлечения имен файлов для 1с 7.7

Функция создания вложенных каталогов + ф-ции извлечения имен файлов для 1с 7.7

Функция создания вложенных каталогов + ф-ции извлечения имен файлов для 1с 7.7

В наличии

Расширим возможности ФС.

Категория:

Описание

Вы когда-нибудь пытались создать вложенные папки из 1с?
Как ни странно, стандартной функции для этой операции нет.

ФС.СоздатьКаталог() позволяет создать папку лишь на один уровень вглубь, а порой хочется глубже,
и чтобы функция нормально относилась к уже существующим папкам, не пыталась создавать их повторно.

Так появилась функция глСоздатьКаталог().

А вот пример использования — создание файла приказа на основании шаблона.
На форме расположен объект «СписокЗначений» с именем «спШаблоны».

1. Заполним список шаблонов

// ...
спШаблоны.УдалитьВсе();
ПутьКПапкеШаблонов = КаталогИБ()+"Приказы\\Шаблоны";
Если глСоздатьКаталог(ПутьКПапкеШаблонов) = 1 Тогда
	ФС.УстТекКаталог(ПутьКПапкеШаблонов);
	ИмяШаблона = ФС.НайтиПервыйФайл("*.doc");
	Пока ИмяШаблона <> "" Цикл
		Если Лев(ИмяШаблона, 1) <> "~" Тогда
			спШаблоны.ДобавитьЗначение(ИмяШаблона);
		КонецЕсли;	
		ИмяШаблона = ФС.НайтиСледующийФайл();
	КонецЦикла;	
КонецЕсли;	
// ...

2. Создаем подпапку по имени файла шаблона, и копируем туда файл на основании шаблона.

 //..
ИмяШаблонаКратко = спШаблоны.ПолучитьЗначение(спШаблоны.ТекущаяСтрока());
ИмяШаблонаКраткоБезРасширения = глИзвлечьИмяФайлаБезРасширения(ИмяШаблонаКратко);
ПутьКПапкеГотовых = КаталогИБ() + "Приказы\" + ИмяШаблонаКраткоБезРасширения + "\";
Если глСоздатьКаталог(ПутьКПапкеГотовых) = 0 Тогда
	Возврат;
КонецЕсли;	
		
ИмяШаблона = КаталогИБ()+"Приказы\\Шаблоны\"+ИмяШаблонаКратко;
ИмяФайла = ПутьКПапкеГотовых + ИмяШаблонаКраткоБезРасширения + " "
	+Формат(ТекущаяДата(), "ДГГГГММДД")+" "+СтрЗаменить(ТекущееВремя(), ":", "")+".doc";

Если ФС.СуществуетФайл(ИмяШаблона) = 0 Тогда
	Предупреждение("Шаблон "+ИмяШаблона+" не найден!");
	Возврат;
КонецЕсли;	

ФС.КопироватьФайл(ИмяШаблона, ИмяФайла, 1);
//..

Текст функций:

//-----------------------------------------------------
Функция глСоздатьКаталог(Знач Путь) Экспорт
	
	Пока Прав(Путь, 1) = "\" Цикл
		Путь = Сред(Путь, 1, СтрДлина(Путь) - 1);
	КонецЦикла;	
	
	// Проверим, возможно каталог существует
	Атрибуты = "";
	ФС.АтрибутыФайла(Путь, , Атрибуты);
	Если Сред(Атрибуты, 4, 1) = "1" Тогда
		Возврат 1;
	КонецЕсли;	
	
	спКСозданию = СоздатьОбъект("СписокЗначений");
	
	текПуть = Путь;
	врДлина = СтрДлина(Путь);
	Для к = -врДлина по -1 Цикл
		Если Сред(Путь, -к, 1) = "\" Тогда
			спКСозданию.ДобавитьЗначение(текПуть);
			текПуть = Лев(Путь, -к-1);
			
			// Проверяем наличие текущего уровня
			Атрибуты = "";
			ФС.АтрибутыФайла(текПуть, , Атрибуты);
			фЕстьТекПуть = ?(Сред(Атрибуты, 4, 1) = "1", 1, 0);
			
			Если фЕстьТекПуть = 0 Тогда
				Продолжить;
			КонецЕсли;	
			
			// Пытаемся создать с текущего уровня
			Для н = -спКСозданию.РазмерСписка() по -1 Цикл
				врПутьХ = спКСозданию.ПолучитьЗначение(-н);
				ФС.СоздатьКаталог(врПутьХ);
				Если н = - 1 Тогда
					Атрибуты = "";
					ФС.АтрибутыФайла(врПутьХ, , Атрибуты);
					Если Сред(Атрибуты, 4, 1) = "1" Тогда
						// Удачное создание с текущего уровня
						Возврат 1;
					КонецЕсли;	
				КонецЕсли;	
			КонецЦикла;	
		КонецЕсли;	
	КонецЦикла;	
	
	Предупреждение("Невозможно создать путь: "+РазделительСтрок+Путь, 4);
	Возврат 0;
	
КонецФункции

//-----------------------------------------------------
Функция глИзвлечьИмяФайла(ПолноеИмяФайла) Экспорт

	Файл = "";
	врДлина = СтрДлина(ПолноеИмяФайла);
	Для к = -врДлина по -1 Цикл
		Если Сред(ПолноеИмяФайла, -к, 1) = "\" Тогда
			Файл = Прав(ПолноеИмяФайла, врДлина+к);
			Прервать;
		КонецЕсли;	
	КонецЦикла;	
	
	Возврат(Файл);
КонецФункции

//-----------------------------------------------------
Функция глИзвлечьИмяФайлаБезРасширения(КраткоеИмяФайла) Экспорт

	Файл = "";
	врДлина = СтрДлина(КраткоеИмяФайла);
	Для к = -врДлина по -1 Цикл
		Если Сред(КраткоеИмяФайла, -к, 1) = "." Тогда
			Файл = Лев(КраткоеИмяФайла, -к-1);
			Прервать;
		КонецЕсли;	
	КонецЦикла;	
	
	Возврат(Файл);
КонецФункции

Все таки 1с это сила, даже если чего-то не хватает, всегда можно дописать.

has been added to your cart:
Оформление заказа