Предположим, нам нужно переместить файл, находящийся в определенном каталоге, с тем же именем, но в новый подкаталог, которое задано в поле ввода демонстрационной обработки (реквизит ИмяНовогоКаталога). Этот каталог мы создадим перед перемещением файла.
Для решения этой задачи добавим команду ПереместитьФайлВНовыйКаталог. Обработчик команды заполним следующим образом (листинг 6.14).
Листинг 6.14. Обработчик команды «ПереместитьФайлВНовыйКаталог»
&НаКлиенте
Процедура КопироватьФайлСНовымИменем(Команда)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл";
Диалог.Показать(Новый ОписаниеОповещения("ПереместитьФайлЗавершение", ЭтотОбъект));
КонецПроцедуры
В этом обработчике мы выбираем файл, который нам нужно переместить. Для этого мы показываем пользователю диалог выбора файла с помощью немодального метода Показать(). В этот метод мы передаем описание оповещения, указывающее на экспортную процедуру ПереместитьФайлЗавершение(), которая будет выполнена после того, как пользователь выберет файл для перемещения (листинг 6.15).
Листинг 6.15. Процедура «ПереместитьФайлЗавершение()»
&НаКлиенте
Процедура ПереместитьФайлЗавершение(ВыбранныеФайлы, Параметры) Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
Возврат;
КонецЕсли;
ИмяФайлаИсточника = ВыбранныеФайлы[0];
ФайлИсточник = Новый Файл(ИмяФайлаИсточника);
ИмяФайлаПриемника = ФайлИсточник.Путь + СокрЛП(ИмяНовогоКаталога) + "\" + ФайлИсточник.Имя;
ДопПараметры = Новый Структура("ИмяФайлаИсточника, ИмяФайлаПриемника", ИмяФайлаИсточника, ИмяФайлаПриемника);
НачатьСозданиеКаталога(Новый ОписаниеОповещения("СоздатьКаталогИПереместитьЗавершение", ЭтотОбъект, ДопПараметры),
ФайлИсточник.Путь + СокрЛП(ИмяНовогоКаталога) + "\");
КонецПроцедуры
В этом обработчике оповещения, в случае если файл выбран, мы получаем полный путь к файлу-источнику как первый элемент массива, содержащийся в параметре ВыбранныеФайлы (для простоты примера будем выбирать только один файл).
Затем создаем на основе пути к файлу-источнику объект Файл. Используя свойства этого объекта, получаем отдельно путь (ФайлИсточник.Путь) и имя файла с расширением (ФайлИсточник.Имя). Вставив имя нового каталога, мы получаем полный путь к файлу-приемнику.
После этого упаковываем полные пути к файлу-источнику и файлу-приемнику в структуру ДопПараметры.
Чтобы создать новый каталог для перемещения файла, мы вызываем метод НачатьСозданиеКаталога(), в который передаем полный путь к создаваемому каталогу (ФайлИсточник.Путь + СокрЛП(ИмяНовогоКаталога) + "\").
Первым параметром в немодальный метод НачатьСозданиеКаталога() мы передаем описание оповещения, указывающее на экспортную процедуру СоздатьКаталогИПереместитьЗавершение(), которая будет вызвана по окончании создания каталога (листинг 6.16). Кроме того, при создании этого обработчика оповещения мы заполняем дополнительные параметры структурой ДопПараметры, содержащей полные пути к файлу-источнику и файлу-приемнику.
Листинг 6.16. Процедура «СоздатьКаталогИПереместитьЗавершение()»
&НаКлиенте
Процедура СоздатьКаталогИПереместитьЗавершение(Каталог, ДопПараметры) Экспорт
НачатьПеремещениеФайла(Новый ОписаниеОповещения("ПереместитьФайлВНовыйКаталогЗавершение", ЭтотОбъект),
ДопПараметры.ИмяФайлаИсточника, ДопПараметры.ИмяФайлаПриемника);
КонецПроцедуры
Когда каталог для перемещения файла будет создан, мы вызываем немодальный метод НачатьПеремещениеФайла() и передаем в него поля структуры ДопПараметры (полные пути к файлу-источнику и файлу-приемнику). Первым параметром мы передаем в этот метод описание оповещения, указывающее на экспортную процедуру ПереместитьФайлВНовыйКаталогЗавершение(), которая будет вызвана по окончании перемещения файла (листинг 6.17).
Листинг 6.17. Процедура «ПереместитьФайлВНовыйКаталогЗавершение()»
&НаКлиенте
Процедура ПереместитьФайлВНовыйКаталогЗавершение(ПеремещенныйФайл, Дополнительно) Экспорт
РезультирующийФайл = Новый Файл(ПеремещенныйФайл);
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Файл: " + РезультирующийФайл.Имя + " перемещен в каталог: " + ИмяНовогоКаталога;
Сообщение.Сообщить();
КонецПроцедуры
В этой процедуре в параметре ПеремещенныйФайл содержится полный путь к новому файлу. На его основе мы создаем объект Файл. И затем показываем короткое имя нового файла (имя с расширением – РезультирующийФайл.Имя) в сообщении пользователю.