Как реализовать выгрузку файлов в формате XLS на FTP-сервер из 1С 7.7?

Программист 1С v7.7
← На главную

В платформе 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 или внешней компоненты Йоксель.

Способ 1. Использование стандартного FTP-клиента Windows через скрипты

Рассмотрим наиболее универсальный способ, который не требует регистрации дополнительных библиотек в системе. Мы воспользуемся стандартной утилитой 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.

Способ 2. Использование компоненты v7plus.dll

Многие типовые конфигурации 1С 7.7 поставлялись с библиотекой v7plus.dll. Выясним, как использовать ее возможности. В этой библиотеке есть объект InternetMail, который, несмотря на название, умеет работать с FTP через протоколы передачи файлов.

Для работы с этим методом выполним следующую последовательность действий:

  1. Проверим наличие v7plus.dll в каталоге программы или базы.
  2. Создадим объект через СоздатьОбъект("AddIn.V7Plus").
  3. Используем методы загрузки, предварительно инициализировав соединение.

Однако на современных 64-битных системах v7plus.dll часто выдает ошибку "Компонента не найдена", что требует ручной регистрации библиотеки в SysWOW64 или использования специальных патчей.

Способ 3. Профессиональное решение через WinSCP или cURL

Если требуется высокая надежность, поддержка шифрования (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, так как современные утилиты лучше обрабатывают разрывы связи и специфические настройки серверных брандмауэров.

Способ 4. Монтирование FTP как сетевого диска

Рассмотрим еще один интересный вариант: использование стороннего ПО для отображения FTP-ресурса в виде обычной папки в Windows (например, с помощью утилит RaiDrive или FTP Drive). В этом случае процесс выгрузки из 1С сводится к простому копированию файла:

ФС.КопироватьФайл("C:\Temp\Report.xls", "Z:\Uploads\Report.xls", 0);

Где Z: — это примонтированный FTP-сервер. Этот подход максимально упрощает код 1С, но требует предварительной настройки окружения на сервере или рабочей станции.

Важные рекомендации по безопасности и стабильности

При реализации выгрузки на FTP следует учитывать несколько критических моментов:

Таким образом, выбрав подходящий метод — от простых системных скриптов до надежных внешних компонент — мы можем обеспечить стабильную передачу данных из устаревшей платформы 7.7 в современные веб-системы.

← На главную