1с ftp проверить существование каталога
Предлагаю вашему вниманию небольшую заметку по работе с FTP сервером. Рассмотрим поиск файлов по маске во всех каталогах ресурса. Для перехода во вложенные папки до самого нижнего уровня реализуем рекурсию. Можно конечно воспользоваться методом НайтиФайлы(, , ) где указать в качестве 3-го параметра истину, но настройки безопасности большинства ресурсов в интернете не дадут вам этого сделать.
- Подключаемся к FTP серверу на основании обязательных данных (адрес сервера, имя пользователя)
- Опрашиваем каждую папку сервера на предмет совпадения по максе с помощью рекурсии
- Выводим полученные данные в табличный документ.
Подключаемся к ftp серверу:
Все реквизиты необходимые для подключения функция получает через параметры. Это делает функцию универсальной. В операторных скобках "попытка" выполняется подключение к FTP серверу и в случае удачи возвращает объект FTP. Если в процессе подключения возникли ошибки, то функция вернёт строку с содержанием этой ошибки. К серверу подключились можно переходить ко 2 части плана, а именно рекурсивному опросу.
Понять как работает рекурсивная процедура проще всего по схеме:
Так как в массиве файлов, возвращаемым методом НайтиФайлы, есть и каталоги и файлы мы не выйдем из цикла пока не будет ни единого каталога. То есть мы опросим весь сервер. В процессе работы выполняется и 3 пункт нашей программы - заполнение табличной части информацией. Осталось только увязать наши механизмы в управляющей процедуре.
Вотсобственно и всё. В качестве бонуса приведу процедурку выгружающую результаты опроса в эксель.
Хочу обратить ваше внимание на то, что настройки удалённого ftp сервера могут иметь свои особенности. Например можно запретить анонимному пользователю заходить в папки ниже 3 уровня вложенности, или ограничить по трафику в 200 кб. В связи с этим можно наблюдать не адекватность при выполнении обработки. Сама обработка представлена как показательный рекурсивный механизм и не преследует цель обработать все возможные исключительные ситуации в роботе по протоколу FTP.
В этой статье я попробую рассказать о том, какими средствами располагает технологическая платформа 1С для работы с протоколом FTP. Первая часть статьи — теоретическая, вторая — практические примеры. Отмечу, что при написании статьи использовалась технологическая платформа версии 8.3.12.1595.
Общая информация
Для работы с протоколом FTP у технологической платформы 1С имеется два главных объекта — FTPСоединение и FTPФайл, кроме них существует объект ЗащищенноеСоединениеOpenSSL — который используется для подключения к FTPS-серверам (не следует путать с SFTP), а также объект ИнтернетПрокси — который используется для соединения с FTP-сервером через прокси-сервер.
FTPСоединение ключевой объект для работы с FTP в 1С — именно через этот объект происходит и соединение с FTP/FTPS сервером и все дальнейшие действия. Все параметры для соединения с сервером указываются в конструкторе объекта.
FTPФайл служит для получения информации о каталогах и файлах на FTP-сервере — этот объект позволяет получить информацию по объекту на FTP-сервере: имя, путь расширение, размер и тд.
ИнтернетПрокси позволяет указать прокси-сервер используемый для соединения с FTP/FTPS сервером — параметры для подключения к прокси-серверу указываются методом Установить(). Использование свойств «Пароль» и «Пользователь» нежелательно, так как эти свойства являются устаревшими.
ЗащищенноеСоединениеOpenSSL создает защищенное соединение OpenSSL — предоставляет возможность организовать защищенное соединение с FTP-сервером, также имеется возможность конкретный сертификат клиента и/или сертификат удостоверяющего центра.
Практические задачи при работе с FTP
В качестве практических примеров рассмотрим все операции которые позволяет выполнить объект FTPСоединение.
Как подключиться к серверу FTP?
Параметры для подключения указываются в конструкторе, сами параметры достаточно стандартны. Отдельно скажу про два параметра:
Предлагаю вашему вниманию небольшую заметку по работе с FTP сервером. Рассмотрим поиск файлов по маске во всех каталогах ресурса. Для перехода во вложенные папки до самого нижнего уровня реализуем рекурсию. Можно конечно воспользоваться методом НайтиФайлы(, , ) где указать в качестве 3-го параметра истину, но настройки безопасности большинства ресурсов в интернете не дадут вам этого сделать.
- Подключаемся к FTP серверу на основании обязательных данных (адрес сервера, имя пользователя)
- Опрашиваем каждую папку сервера на предмет совпадения по максе с помощью рекурсии
- Выводим полученные данные в табличный документ.
Подключаемся к ftp серверу:
Все реквизиты необходимые для подключения функция получает через параметры. Это делает функцию универсальной. В операторных скобках "попытка" выполняется подключение к FTP серверу и в случае удачи возвращает объект FTP. Если в процессе подключения возникли ошибки, то функция вернёт строку с содержанием этой ошибки. К серверу подключились можно переходить ко 2 части плана, а именно рекурсивному опросу.
Понять как работает рекурсивная процедура проще всего по схеме:
Так как в массиве файлов, возвращаемым методом НайтиФайлы, есть и каталоги и файлы мы не выйдем из цикла пока не будет ни единого каталога. То есть мы опросим весь сервер. В процессе работы выполняется и 3 пункт нашей программы - заполнение табличной части информацией. Осталось только увязать наши механизмы в управляющей процедуре.
Вотсобственно и всё. В качестве бонуса приведу процедурку выгружающую результаты опроса в эксель.
Хочу обратить ваше внимание на то, что настройки удалённого ftp сервера могут иметь свои особенности. Например можно запретить анонимному пользователю заходить в папки ниже 3 уровня вложенности, или ограничить по трафику в 200 кб. В связи с этим можно наблюдать не адекватность при выполнении обработки. Сама обработка представлена как показательный рекурсивный механизм и не преследует цель обработать все возможные исключительные ситуации в роботе по протоколу FTP.
Файлы и каталоги в 1С 8.3 используются для различных операций с данными: сохранение и восстановление, экспорт и импорт, архивация, обмен и др. Для реализации работы с файлами и каталогами, их параметрами и атрибутами, на встроенном языке программирования 1С 8.3 существуют различные предопределенные функции и модели.
✔ Чтение и запись файлов
&НаСервере
Процедура ЧтениеИЗаписьФайлов ()
// Любое сериализуемое значение (массив, структура, таблица значений, строки. ) можно сохранить в файл
НаборСимволов = Новый Массив ;
НаборСимволов . Добавить ( 125 );
НаборСимволов . Добавить ( "А" );
НаборСимволов . Добавить ( "99" );
НаборСимволов . Добавить ( "%" );
ЗначениеВФайл ( "D:\Symbol.txt" , НаборСимволов ); // работает только на &НаСервере
// Восстановление произвольных значений из файла
НаборСимволовИзФайла = ЗначениеИзФайла ( "D:\Symbol.txt" );
Сообщить ( НаборСимволовИзФайла [ 0 ]); // 125
Сообщить ( НаборСимволовИзФайла [ 1 ]); // А
Сообщить ( НаборСимволовИзФайла [ 2 ]); // 99
Сообщить ( НаборСимволовИзФайла [ 3 ]); // %
&НаКлиенте
Процедура ОперацииНадФайлами ( Команда )
// Создание переменных (имя и путь к файлу)
ПутьКФайлу_Test = "D:\Test.txt" ;
ПутьКФайлу_Copy = "D:\Copy.txt" ;
// Создание пустого файла
ТекстФайл = Новый ЗаписьТекста ();
ТекстФайл . Закрыть ();
// Проверка на существование файла
ТекстФайл = Новый Файл ( ПутьКФайлу_Test );
Если ТекстФайл . Существует () Тогда
Сообщить ( ПутьКФайлу_Test + " существует!" );
КонецЕсли;
// Копирование файла. Параметры: Какой файл копируем, Куда файл копируем
КопироватьФайл ( ПутьКФайлу_Test , ПутьКФайлу_Copy ); // Если файл существует, то перезапишет
// Перемещение файла. Параметры: Какой файл копируем, Куда файл копируем
ПереместитьФайл ( ПутьКФайлу_Test , ПутьКФайлу_Copy ); // Если файл существует, то перезапишет
// Поиск файлов в каталоге (функция возвращает массив значений)
// Параметры: Каталог поиска, Маска поиска, Поиск и в подкаталогах
МассивФайлов = НайтиФайлы ( "D:\" , "*.txt" , Ложь);
Для Каждого ТекФайл Из МассивФайлов Цикл
Сообщить ( "Найден файл: " + ТекФайл . ПолноеИмя );
КонецЦикла;
// Удаление файла
УдалитьФайлы ( ПутьКФайлу_Test ); // Если файл с параметром только для чтения, то будет ошибка
// Удаление файлов в каталоге по маске
// поиск в каталоге нерекурсивный
УдалитьФайлы ( "D:\" , "*.txt" ); // Если маски нет, то удалятся все файлы и сам каталог
// Получение имя временного файла
ПолучитьИмяВременногоФайла (); // Например, C:\Temp\H_kImX035.tmp
ПолучитьИмяВременногоФайла ( ".txt" ); // Например, C:\Temp\H_kImX035.txt
&НаКлиенте
Процедура ПолучениеИИзменениеАтрибутовФайла ( Команда )
ТекстФайл = Новый Файл ( "D:\Test.txt" );
// Чтение атрибутов
ТекстФайл . ПолучитьВремяИзменения (); // время последнего изменения файла
ТекстФайл . ПолучитьТолькоЧтение (); // проверяем атрибут только чтение
ТекстФайл . ПолучитьНевидимость (); // проверяем атрибут hidden (скрытность, невидимость)
ТекстФайл . Размер (); // размер файла в байтах
// Получение расширение файла из его пути
ТекстФайл . Расширение (); // .txt
// Получение имени файла без расширения
ТекстФайл . ИмяБезРасширения (); // Test
// Получение информации по пути файла - это файл или каталог
Если ТекстФайл . ЭтоКаталог () Тогда
// Это каталог
ИначеЕсли ТекстФайл . ЭтоФайл () Тогда
// Это файл
КонецЕсли;
// Изменение атрибутов
ТекстФайл . УстановитьВремяИзменения ( ТекущаяДата ()); // меняем время последнего изменения файла
ТекстФайл . УстановитьТолькоЧтение (Ложь); // меняем атрибут только чтение
ТекстФайл . УстановитьНевидимость (Ложь); // меняем атрибут невидимости
&НаКлиенте
Процедура ОперацииНадКаталогами ( Команда )
//Создание каталога (он может уже существовать)
СоздатьКаталог ( "D:\Catalog" );
//Создание подкаталогов
СоздатьКаталог ( "D:\Catalog\2020\1" );
// Проверка существования каталога
Каталог = Новый Файл ( "D:\Catalog" );
Если Каталог . Существует () Тогда
Сообщить ( "Каталог по пути D:\Catalog существует!" );
КонецЕсли;
// Удаление каталога (вместе с файлами и подкаталогами)
УдалитьФайлы ( "D:\Catalog" ); // Можно добавить максу
// Получение каталога временных файлов
КаталогВременныхФайлов (); // Например, C:\Windows\Temp
&НаКлиенте
Процедура ОперацииСВременнымХранилищем ( Команда )
// Временное хранилище позволяет передавать данные,
// которые иначе не передать (произвольного типа) между сервером и клиентом
// Сохранение произвольного значения (списка значений) во временном хранилище
СЗ = Новый СписокЗначений ;
СЗ . Добавить ( "Арбуз" );
СЗ . Добавить ( "Дыня" );
СЗ . Добавить ( "Яблоко" );
АдресВХранилище = ПоместитьВоВременноеХранилище ( СЗ );
// Чтение произвольного значения (списка значений) из временного хранилища
СЗИзХранилища = ПолучитьИзВременногоХранилища ( АдресВХранилище );
Если СЗИзХранилища = Неопределено Тогда
Сообщить ( "Значение по этому адресу из хранилища уже удалено!" );
Иначе
Сообщить ( СЗИзХранилища [ 0 ]); // Арбуз
КонецЕсли;
// Перезапись уже сохраненного значения (массив) во временном хранилище
НаборСимволов = Новый Массив ;
НаборСимволов . Добавить ( 125 );
НаборСимволов . Добавить ( "А" );
НаборСимволов . Добавить ( "99" );
НаборСимволов . Добавить ( "%" );
// Время хранения зависит от параметра "АдресВХранилище" функции ПоместитьВоВременноеХранилище
ПоместитьВоВременноеХранилище ( НаборСимволов , АдресВХранилище );
// Если адрес - уникальный идентификатор формы или существующий адрес в хранилище:
// Значение будет удалено после закрытия формы
ПоместитьВоВременноеХранилище ( НаборСимволов , ЭтаФорма . УникальныйИдентификатор );
// Если адрес - уникальный идентификатор, не являющийся уникальным идентификатором формы %
// Значение будет удалено после завершения сеанса пользвоателя
ПоместитьВоВременноеХранилище ( НаборСимволов , Новый УникальныйИдентификатор );
// Если адрес не указан:
// Значение будет удалено после очередного запроса сервера
ПоместитьВоВременноеХранилище ( НаборСимволов );
// Удаление значения из временного хранилища
УдалитьИзВременногоХранилища ( АдресВХранилище );
// Проверка является ли строка адресом во временном хранилище
Если ЭтоАдресВременногоХранилища ( АдресВХранилище ) Тогда
// Это адрес во временном хранилище
КонецЕсли;
&НаКлиенте
Процедура ПередачаФайлаСКлиентаНаСервер ( Команда )
ТекстФайл = Новый ЗаписьТекста ( "D:\Prostokvashino.txt" );
ТекстФайл . ЗаписатьСтроку ( "Кот Матроскин" );
ТекстФайл . ЗаписатьСтроку ( "Дядя Федор" );
ТекстФайл . ЗаписатьСтроку ( "Шарик" );
ТекстФайл . Закрыть ();
Завершено = Новый ОписаниеОповещения ( "ПослеПередачи" , ЭтотОбъект );
// Параметр УникальныйИдентификаторФормы - если не указывать - то файл будет удален после очередного запроса сервера
// если указать - то после удаления объекта формы
// Параметр Интерактивно (Истина) - дает пользователю выбрать файл самому
НачатьПомещениеФайла ( Завершено , , "D:\Prostokvashino.txt" , Ложь, ЭтаФорма . УникальныйИдентификатор );
&НаКлиенте
Процедура ПослеПередачи ( Результат , ХранимыйАдрес , ВыбранноеИмяФайла , ДопПараметры ) Экспорт
Если Результат Тогда
// Сохранение полученного адреса в реквизите формы (строка) - адрес файла в хранилище на сервере
АдресФайлаВХранилище = ХранимыйАдрес ;
Сообщить ( "Файл " + ВыбранноеИмяФайла + " передан на сервер и сохранён во временном хранилище. Адрес: " + ХранимыйАдрес );
Иначе
Сообщить ( "Ошибка передачи файла на сервер!" );
КонецЕсли;
FTP (англ. File Transfer Protocol — протокол передачи файлов) — стандартный протокол, предназначенный для передачи файлов по TCP-сетям (например, Интернет). FTP часто используется для загрузки сетевых страниц и других документов с частного устройства разработки на открытые сервера хостинга.
В 1С очень часто появляется потребность в работе со стандартным протоколом передачи файлов — FTP. Особенно актуален этот момент для обмена данными как с другими конфигурациями, так и другими системами. FTP часто используется для настройки обмена в 1С.
Подключение к FTP из 1С
Рассмотрим работу 1С через FTP, для начала подключимся и авторизируемся, указываем каталог для работы на сервере с помощью объекта FTPСоединение:
Далее мы будем рассматривать методы уже созданного объекта — FTPСоединение.
Получение файла с FTP
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Допустим, дальше проверим наличие текстового файла, получим его с FTP и сохраним на диск:
Запись файла на FTP из 1С 8
Рассмотрим другое действие — запись на файловый сервер :
Переименование /перемещение файла на FTP
Можно использовать метод объекта в 1C — Переместить() для этих двух видов операции.
Удаление файла на FTP из 1С
Удаление — самая простая операция, делается очень легко:
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Читайте также: