В платформе 1С:Предприятие 7.7, в отличие от современных версий 8.x, отсутствует встроенный объект FTPСоединение. Это создает определенные трудности при необходимости автоматизировать передачу файлов (например, прайс-листов или отчетов в формате XLS) на сайт или удаленный сервер. Тем не менее, задача решаема несколькими способами: от использования системных утилит Windows до подключения внешних библиотек. Рассмотрим подробно каждый из вариантов.
Прежде чем отправить файл по протоколу FTP, нам необходимо получить его физическую копию на диске. Разберем типичную ситуацию: у нас есть сформированная печатная форма документа. Проанализируем, как сохранить ее программно. Для этого в 1С 7.7 используется объект Таблица и его метод Записать. Выясним, как это выглядит в коде:
// Предположим, Таб - это объект сформированной печатной формы
ИмяФайла = "C:\Temp\Report.xls";
Таб.Записать(ИмяФайла, "XLS");
Важно помнить, что штатный метод Записать в версии 7.7 сохраняет файлы в формате Excel 97-2003. Если принимающая сторона требует более современные форматы, такие как .xlsx, вам потребуется использование COM-объекта Excel или внешней компоненты Йоксель.
Рассмотрим наиболее универсальный способ, который не требует регистрации дополнительных библиотек в системе. Мы воспользуемся стандартной утилитой ftp.exe, которая присутствует в любой версии Windows. Основная идея заключается в формировании текстового файла с набором команд и его последующем выполнении через WScript.Shell.
Разберем по шагам создание функции для загрузки:
Функция ЗагрузитьНаФТП(ПараметрыСвязи)
ПутьКВременнымФайлам = КаталогВременныхФайлов();
WshShell = СоздатьОбъект("WScript.Shell");
// Подготавливаем временный файл с командами для утилиты ftp.exe
ИмяСкрипта = "ftp_commands.tmp";
ТекстСкрипта = СоздатьОбъект("Текст");
ТекстСкрипта.ДобавитьСтроку("open " + СокрЛП(ПараметрыСвязи.АдресСервера));
ТекстСкрипта.ДобавитьСтроку(СокрЛП(ПараметрыСвязи.Логин));
ТекстСкрипта.ДобавитьСтроку(СокрЛП(ПараметрыСвязи.Пароль));
// Отключаем интерактивные запросы подтверждения
ТекстСкрипта.ДобавитьСтроку("prompt");
// Переходим в бинарный режим передачи (важно для XLS)
ТекстСкрипта.ДобавитьСтроку("binary");
// Включаем пассивный режим, если сервер за NAT или брандмауэром
Если ПараметрыСвязи.ПассивныйРежим = 1 Тогда
ТекстСкрипта.ДобавитьСтроку("literal pasv");
КонецЕсли;
ТекстСкрипта.ДобавитьСтроку("cd " + СокрЛП(ПараметрыСвязи.КаталогНаСервере));
// Формируем команду отправки файлов
Список = ПараметрыСвязи.СписокФайлов;
Для Ном = 1 По Список.РазмерСписка() Цикл
ФайлДляОтправки = Список.ПолучитьЗначение(Ном);
ТекстСкрипта.ДобавитьСтроку("put """ + ФайлДляОтправки + """");
КонецЦикла;
ТекстСкрипта.ДобавитьСтроку("quit");
ТекстСкрипта.Записать(ПутьКВременнымФайлам + ИмяСкрипта);
// Запускаем выполнение команд. Параметр 0 скрывает окно консоли
Команда = "ftp -s:""" + ПутьКВременнымФайлам + ИмяСкрипта + """";
WshShell.Run("cmd /c " + Команда, 0, -1);
// Удаляем временный файл скрипта
ФС.УдалитьФайл(ПутьКВременнымФайлам + ИмяСкрипта);
КонецФункции
Проанализируем преимущества этого метода: он работает "из коробки" и легко отлаживается. Главный недостаток — пароль в открытом виде записывается во временный файл. Чтобы минимизировать риски, мы рекомендуем удалять файл команд сразу после выполнения WshShell.Run.
Многие типовые конфигурации 1С 7.7 поставлялись с библиотекой v7plus.dll. Выясним, как использовать ее возможности. В этой библиотеке есть объект InternetMail, который, несмотря на название, умеет работать с FTP через протоколы передачи файлов.
Для работы с этим методом выполним следующую последовательность действий:
v7plus.dll в каталоге программы или базы.СоздатьОбъект("AddIn.V7Plus").Однако на современных 64-битных системах v7plus.dll часто выдает ошибку "Компонента не найдена", что требует ручной регистрации библиотеки в SysWOW64 или использования специальных патчей.
Если требуется высокая надежность, поддержка шифрования (SFTP/FTPS) или корректная работа с длинными именами файлов в кодировке UTF-8, мы советуем обратить внимание на внешние консольные утилиты, такие как WinSCP или cURL. Посмотрим, как упрощается код при использовании cURL:
Команда = "curl -u login:password -T ""C:\Temp\Report.xls"" ftp://my-site.com/uploads/";
WshShell = СоздатьОбъект("WScript.Shell");
WshShell.Run("cmd /c " + Команда, 0, -1);
Это решение гораздо стабильнее штатного ftp.exe, так как современные утилиты лучше обрабатывают разрывы связи и специфические настройки серверных брандмауэров.
Рассмотрим еще один интересный вариант: использование стороннего ПО для отображения FTP-ресурса в виде обычной папки в Windows (например, с помощью утилит RaiDrive или FTP Drive). В этом случае процесс выгрузки из 1С сводится к простому копированию файла:
ФС.КопироватьФайл("C:\Temp\Report.xls", "Z:\Uploads\Report.xls", 0);
Где Z: — это примонтированный FTP-сервер. Этот подход максимально упрощает код 1С, но требует предварительной настройки окружения на сервере или рабочей станции.
При реализации выгрузки на FTP следует учитывать несколько критических моментов:
PASV режим, так как активный режим часто блокируется корпоративными антивирусами и роутерами.binary (команда bin), иначе файл будет поврежден при передаче из-за замены символов перевода строк.ftp.exe перенаправляйте вывод во внешний файл (например, > report.txt), чтобы в случае ошибки вы могли проанализировать ответ сервера.Таким образом, выбрав подходящий метод — от простых системных скриптов до надежных внешних компонент — мы можем обеспечить стабильную передачу данных из устаревшей платформы 7.7 в современные веб-системы.