Как правильно организовать регулярную выгрузку DBF-файлов на FTP-сервер в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При решении задач по регулярному обмену данными с внешними контрагентами или системами начинающие разработчики часто сталкиваются с дилеммой: написать быстрое решение «на коленке» с помощью внешних скриптов или глубоко интегрироваться в механизмы конфигурации. В этой статье мы разберем, как методологически верно реализовать выгрузку данных (например, прайс-листов или отчетов в формате dbf) на внешний FTP-сервер в среде «1С:Предприятие 8.3» на примере конфигурации «Управление торговлей 11».

Рассмотрим ситуацию, когда необходимо не просто «выкинуть» файл наружу, но и сохранить в системе «аудиторский след»: логи выгрузок, историю отправленных файлов и статусы выполнения. Проанализируем несколько подходов, от простейших обработок до использования тяжелых подсистем БСП (Библиотеки стандартных подсистем).

Способ 1: Использование дополнительных отчетов и обработок

Самый «чистый» способ внедрения нового функционала без внесения изменений в типовую конфигурацию — это создание внешней обработки. Этот метод позволяет избежать проблем при обновлении программы и предоставляет пользователям удобный интерфейс для управления расписанием.

Разберем по шагам, как это работает:

  1. Создаем внешнюю обработку в конфигураторе. В модуле объекта обязательно описываем функцию СведенияОВнешнейОбработке(), чтобы система распознала её как подключаемую.
  2. Регистрируем обработку в справочнике Дополнительные отчеты и обработки.
  3. Прямо из интерфейса 1С настраиваем расписание выполнения команды (регламентное задание).

Преимущества этого подхода: выполнение происходит на стороне сервера через фоновое задание, а история запусков фиксируется в типовом журнале регистрации. Пользователи могут видеть результат выполнения в мониторе регламентных заданий.

Способ 2: Использование подсистемы «Обмен данными» (БСП)

Хотя многие считают, что подсистема «Обмен данными» нужна только для связи между двумя базами 1С, это не так. Рассмотрим ее возможности шире. В БСП существует механизм «Транспортных сообщений», который идеально подходит для нашей задачи.

Проанализируем преимущества настройки «Узла обмена» с типом транспорта FTP:

Способ 3: Адаптация механизмов ЭДО

Интересный вариант, к которому пришел автор темы, — использование подсистемы электронного документооборота. Это решение оправдано, если выгружаемый файл по своей сути является электронным документом (например, заказом или актом сверки).

Выясним, почему это может быть удобно: в ЭДО уже реализованы механизмы «Пакетов электронных документов». При такой реализации каждый отправленный файл сохраняется в базе как присоединенный файл к техническому документу. Пользователь в любой момент может зайти в архив и посмотреть, какой именно вариант прайс-листа ушел на сервер неделю назад.

Техническая реализация: работа с FTPСоединение

При написании кода выгрузки важно правильно инициализировать объект FTPСоединение. Посмотрим на пример кода, учитывающий современные требования безопасности и сетевых настроек:


// Настройка параметров подключения
Сервер = "ftp.example.com";
Порт = 21;
Пользователь = "admin";
Пароль = "secure_password";
ПассивныйРежим = Истина; // Важно для работы через Firewall

Попытка
    Соединение = Новый FTPСоединение(Сервер, Порт, Пользователь, Пароль, , ПассивныйРежим);
    // Формируем имя временного файла, чтобы избежать конфликтов
    ПутьКВременномуФайлу = ПолучитьИмяВременногоФайла("dbf");
    
    // Здесь должен быть код формирования DBF через объект XBase
    // ...
    
    // Отправка файла на сервер
    Соединение.Записать(ПутьКВременномуФайлу, "upload/price_list.dbf");
    ЗаписатьЛогВыгрузки("Успешно отправлено", Истина);
Исключение
    ИнформацияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
    ЗаписатьЛогВыгрузки("Ошибка: " + ИнформацияОбОшибке, Ложь);
КонецПопытки;

Важное замечание: Если принимающая сторона требует протокол SFTP (через SSH), стандартный объект FTPСоединение не подойдет, так как он поддерживает только FTP и FTPS. В этом случае мы рекомендуем использовать вызов внешних утилит, например, WinSCP, через метод ЗапуститьПриложение().

Работа с форматом DBF через объект XBase

Разберем нюансы создания файла данных. Часто возникают проблемы с кодировками. По умолчанию 1С создает файлы в кодировке Windows (ANSI), но принимающие системы (особенно старые) могут ожидать DOS (OEM).

Проанализируем пример инициализации XBase:


ФайлDBF = Новый XBase;
ФайлDBF.Кодировка = КодировкаXBase.OEM; // Установка кодировки DOS
ФайлDBF.Поля.Добавить("ID", "N", 10, 0);
ФайлDBF.Поля.Добавить("NAME", "S", 100);
ФайлDBF.Поля.Добавить("PRICE", "N", 15, 2);

ФайлDBF.СоздатьФайл(ПутьКФайлу);
// Наполнение данными
Для Каждого СтрокаДанных Из ТаблицаРезультатов Цикл
    ФайлDBF.Добавить();
    ФайлDBF.ID = СтрокаДанных.Код;
    ФайлDBF.NAME = СтрокаДанных.Наименование;
    ФайлDBF.PRICE = СтрокаДанных.Цена;
    ФайлDBF.Записать();
КонецЦикла;
ФайлDBF.ЗакрытьФайл();

Методологические рекомендации

Чтобы ваше решение было надежным и удобным для поддержки, придерживайтесь следующих правил:

  1. Используйте временные файлы: Всегда формируйте файл через ПолучитьИмяВременногоФайла(). Это гарантирует, что при одновременном запуске нескольких сессий выгрузки они не будут пытаться записать данные в один и тот же файл на диске сервера.
  2. Безопасное хранение паролей: Никогда не храните пароли в открытом виде в коде или обычных реквизитах справочников. Используйте методы БСП: ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище().
  3. Журналирование: Все критические события (подключение, ошибка передачи, успешное завершение) должны фиксироваться. Если вы не используете тяжелые подсистемы обмена, делайте записи в ЖурналРегистрации с указанием разделенного имени события (например, "ОбменДанными.ВыгрузкаНаФТП").
  4. Присоединенные файлы: Для реализации «аудиторского следа», который так важен пользователям, привязывайте отправленные файлы к объектам системы. В БСП за это отвечает подсистема Присоединенные файлы. Это позволит хранить историю выгрузок не в логах, а в удобном для пользователя виде.

Подводя итог, можно сказать: несмотря на то, что написать скрипт «на коленке» кажется быстрее, использование штатных механизмов 1С и БСП в долгосрочной перспективе экономит время на поддержку и делает систему прозрачной для конечных пользователей.

← На главную