Андрей Луконькин
Работаем с FTP-сервером из «1С»
Столкнувшись с острой необходимостью получить довольно большой файл из удаленного офиса, я начал поиск программы для комфортной работы с FTP. Интерфейс FAR напомнил мне полузабытый DOS, Google предлагает в основном платные клиенты, из командной строки работать тоже не совсем удобно. Поэтому я задумался о создании собственного инструмента в той среде, в которой я работаю каждый день, т.е. в «1С».
Что нам нужно от обработки? Чтобы была возможность по указанному адресу, с заданным логином и паролем подключаться к FTP-серверу, смотреть список находящихся там файлов, получать необходимые файлы с сервера, и наоборот, закачивать туда что-то.
Создадим внешнюю обработку, а в ней реквизиты:
- «АдресFTP», «Логин», «Пароль», «КаталогДляПолученияФайлов», «ВыгружаемыйФайл» – тип «Строка» неограниченной длины;
- на форме разместим «ПолеСписка» с признаком «Отображатьпометку»;
- кнопки «Прочитать», «ЗагрузитьОтмеченные», «ОбновитьСписок» и «ВыложитьФайл».
Теперь перейдем непосредственно к программному коду.
Определим переменную «НашеСоединение», которая будет использоваться в нескольких процедурах.
Перем НашеСоединение;
При открытии формы убираем доступность всех кнопок до тех пор, пока не будет установлено соединение, и задаем каталог для получения файлов по умолчанию.
Процедура ПриОткрытии()
ЭлементыФормы.ЗагрузитьОтмеченные.Доступность = Ложь;
ЭлементыФормы.ВыложитьФайл.Доступность = Ложь;
ЭлементыФормы.ОбновитьСписок.Доступность = Ложь;
КаталогДляПолученияФайлов = "C:\";
КонецПроцедуры
После указания адреса, логина и пароля нужно нажать кнопку «Прочитать» для установки соединения. Список файлов заполнится при обращении к процедуре «ОбновитьСписок()».
Процедура ПрочитатьНажатие(Элемент)
ПроксиСервер = Новый ИнтернетПрокси(Истина);
Попытка
НашеСоединение = Новый FTPСоединение(АдресFTP, 21, Логин, Пароль , , );
Исключение
Сообщить("Ошибка создания соединения: "+ОписаниеОшибки());
Возврат;
КонецПопытки;
ЭлементыФормы.ЗагрузитьОтмеченные.Доступность = Истина;
ЭлементыФормы.ВыложитьФайл.Доступность = Истина;
ЭлементыФормы.ОбновитьСписок.Доступность = Истина;
ОбновитьСписок();
КонецПроцедуры
Процедура ОбновитьСписок()
ПолеСписка.Очистить();
СписокФайлов = НашеСоединение.НайтиФайлы("/","*.*");
Для Каждого Файл Из СписокФайлов Цикл
Если Файл.ЭтоФайл() Тогда
ПолеСписка.Добавить(Файл, Файл.Имя);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
После подключения видим файлы на сервере
Отметив галочками нужные файлы, их можно сохранить локально в предварительно выбранный каталог.
Процедура КаталогДляПолученияФайловНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
РежимДиалога = РежимДиалогаВыбораФайла.ВыборКаталога;
ДиалогВыбораКаталога = Новый ДиалогВыбораФайла(РежимДиалога);
ДиалогВыбораКаталога.МножественныйВыбор = Ложь;
ДиалогВыбораКаталога.Заголовок = "Выберите путь для сохранения файлов";
Если ДиалогВыбораКаталога.Выбрать() Тогда
КаталогДляПолученияФайлов = ДиалогВыбораКаталога.Каталог;
КонецЕсли;
КонецПроцедуры
Процедура ЗагрузитьОтмеченныеНажатие(Элемент)
Для каждого Файл из ПолеСписка Цикл
Если Файл.Пометка Тогда
НашеСоединение.Получить(Файл.Значение.ПолноеИмя,КаталогДляПолученияФайлов+Файл.Значение.ПолноеИмя);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Для размещения файла на сервере нужно нажать кнопку «Выложить файл на FTP» и выбрать необходимый файл. Ответив «Да» в дополнительном подтверждении о размещении, мы инициализируем запуск процедуры «ВыложитьФайлНажатие()».
Процедура ВыложитьФайлНажатие(Элемент)
РежимДиалога = РежимДиалогаВыбораФайла.Открытие;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалога);
ДиалогВыбораФайла.МножественныйВыбор = Ложь;
ДиалогВыбораФайла.Заголовок = "Выберите файл для загрузки";
ДиалогВыбораФайла.ПолноеИмяФайла = ВыгружаемыйФайл;
Если ДиалогВыбораФайла.Выбрать() Тогда
ВыгружаемыйФайл = ДиалогВыбораФайла.ПолноеИмяФайла;
ВыгружаемыйФайлОбъект = Прав(ВыгружаемыйФайл,СтрДлина(ВыгружаемыйФайл)-СтрДлина(ДиалогВыбораФайла.Каталог));
Ответ = Вопрос("Выложить файл на FTP?",РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
НашеСоединение.Записать(ВыгружаемыйФайл,ВыгружаемыйФайлОбъект);
ОбновитьСписок();
КонецЕсли;
ВыгружаемыйФайл="";
Иначе
ВыгружаемыйФайл="";
КонецЕсли;
КонецПроцедуры
Процедура ОбновитьСписокНажатие(Элемент)
ОбновитьСписок();
КонецПроцедуры
Перед отправкой файла на сервер запросим подтверждение
Что мы имеем? Нехитрая, в несколько десятков строчек, обработка позволяет принимать файлы и отправлять их на FTP-сервер.
Цель нами достигнута, остается только совершенствовать программу, наращивая её дополнительным функционалом.
Приложение
Наше «1С». Собрание авторских материалов
В апреле 2009 года открылся новый проект «Наше 1С» по адресу http://www.nashe1c.ru. Здесь собираются авторские материалы, относящиеся к программному продукту «1С». Каждый желающий может опубликовать свою разработку, поделиться с коллегами методиками, получив при этом оценку своего творчества или «know how».
Чем примечателен этот портал и в чем его принципиальное отличие от множества существующих сайтов на данный момент? Во-первых, этот проект создан и курируется самой фирмой «1С», что говорит об уровне и масштабе мероприятия. Во-вторых, работы оценивают не только пользователи, но и представители фирмы «1С» оставляют оценки и комментарии. В-третьих, материалы предварительно отбираются и фильтруются таким образом, что посетители избавляются от некачественных «изобретений».
Ресурс полезен как разработчикам, так и администраторам. Желающие опубликовать свои материалы получают официальные оценки, а также возможность использовать прямую ссылку на свой профиль в резюме.
В открытом доступе любой посетитель может найти что-то полезное из следующих рубрик:
- «Работа с программами»;
- «Установка, администрирование»;
- «Разработка и программирование»;
- «Внедрение»;
- «Библиотека дипломных проектов»;
- «Программы «1С:Предприятие 7.7».
Сейчас на сайте уже десятки опубликованных работ, с каждым днем их количество увеличивается, а это значит, что уникальная коллекция высококачественного материала собирается в одном месте и будет доступна любому желающему.