Как автоматизировать загрузку данных из XML по расписанию в 1С:Бухгалтерия 3.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

Автоматизация обмена данными — одна из самых частых задач при интеграции 1С с внешними системами. Часто возникает ситуация, когда данные (например, сведения о физических лицах или сотрудниках) выгружаются из сторонней базы в формате XML, соответствующем «Конвертации данных 2.0». Рассмотрим подробнее, как настроить автоматическую загрузку таких файлов по расписанию, чтобы исключить ручной труд и избежать типичных ошибок при подключении внешних обработок.

Способ 1. Использование механизма дополнительных отчетов и обработок (БСП)

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

Проанализируем структуру модуля объекта внешней обработки, которая требуется для корректной регистрации в системе. Чтобы избежать ошибки «не подходит для этой версии программы», мы должны обязательно добавить функцию СведенияОВнешнейОбработке.


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.Наименование = "Автоматическая загрузка XML (расписание)";
    ПараметрыРегистрации.БезопасныйРежим = Ложь; 

    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Запустить загрузку данных";
    НоваяКоманда.Идентификатор = "ЗагрузитьДанные";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    НоваяКоманда.ПоказыватьОповещение = Истина;

    Возврат ПараметрыРегистрации;
КонецФункции

Важным моментом является тип команды ВызовСерверногоМетода. Это позволяет регламентному заданию запускать код на стороне сервера без участия пользователя. После регистрации такой обработки в разделе Администрирование — Печатные формы, отчеты и обработки, у вас появится возможность настроить расписание выполнения прямо в карточке обработки.

Теперь разберем сам код загрузки, который должен располагаться в процедуре ВыполнитьКоманду модуля объекта:


Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
    Если ИдентификаторКоманды = "ЗагрузитьДанные" Тогда
        ЗагрузитьФайлНаСервере();
    КонецЕсли;
КонецПроцедуры

Процедура ЗагрузитьФайлНаСервере()
    ПутьКФайлу = "D:\Exchange\Upload.xml"; // Рекомендуется использовать UNC-пути
    
    Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать();
    Обработка.ИмяФайлаОбмена = ПутьКФайлу;
    Обработка.РежимОбмена = "Загрузка";
    Обработка.ОптимизированнаяЗаписьОбъектов = Истина;
    Обработка.ЗаписыватьРегистрыНаборамиЗаписей = Истина;
    Обработка.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты = Истина;
    Обработка.ЗагружатьДанныеВРежимеОбмена = Истина;
    
    Попытка
        Обработка.ВыполнитьЗагрузку();
        ЗаписьЖурналаРегистрации("ЗагрузкаДанныхXML", УровеньЖурналаРегистрации.Информационный, , , "Загрузка завершена успешно");
    Исключение
        ЗаписьЖурналаРегистрации("ЗагрузкаДанныхXML", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка при загрузке: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Способ 2. Запуск через планировщик задач Windows и командную строку

Если по каким-то причинам использование БСП невозможно, рассмотрим альтернативу: запуск сеанса 1С в режиме предприятия с параметрами командной строки. Выясним, как это реализовать. Нам понадобится создать скрипт (бат-файл) и настроить планировщик Windows.

Пример строки запуска для файловой базы:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "C:\Base1C" /N "Admin" /P "Pass" /Execute "C:\Scripts\LoadData.epf"

В самой внешней обработке LoadData.epf в модуле формы или в процедуре ПриОткрытии (для обычных форм) или ПриСозданииНаСервере (с последующим вызовом клиента) необходимо прописать завершение работы системы после выполнения загрузки, используя команду ЗавершитьРаботуСистемы(Ложь). Это важно, чтобы сеансы не «зависали» в диспетчере задач.

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

Решение проблемы «Ошибка открытия файла обмена»

Проанализируем ситуацию, когда код написан верно, но 1С выдает ошибку при попытке прочитать файл. Если база работает в клиент-серверном варианте, код регламентного задания выполняется от имени пользователя операционной системы, под которым запущен процесс агента сервера 1С (обычно это USR1CV8).

Разберем по шагам, что нужно проверить:

  1. Права доступа: Пользователь USR1CV8 должен иметь полные права (чтение, запись, изменение) на папку, в которой лежит файл Upload.xml.
  2. UNC-пути: Сервер 1С часто не видит локальные диски (например, D:), если они являются примонтированными сетевыми ресурсами. Всегда используйте сетевые пути формата \\ServerName\Folder\File.xml.
  3. Видимость ресурсов: Убедитесь, что сервер, на котором установлена 1С, физически имеет доступ к сетевому ресурсу, где лежит файл выгрузки.

Использование штатных механизмов синхронизации

Не стоит забывать, что формат «Конвертации данных 2.0» можно интегрировать в стандартный механизм синхронизации данных. Несмотря на то что автор темы счел это «не тем», для многих задач это будет оптимальным решением. Мы можем создать «фиктивный» узел обмена (например, через «Обмен в распределенной ИБ» или используя «Универсальный обмен данными»), загрузить туда правила обмена и настроить типовое расписание. Это обеспечит нам встроенное логирование, мониторинг и возможность интерактивного решения коллизий в стандартном интерфейсе 1С.

Дополнительные рекомендации по логированию

При работе в фоновом режиме мы не видим сообщений об ошибках на экране. Поэтому крайне важно использовать объект ЗаписьЖурналаРегистрации. Разберем пример: если загрузка падает из-за некорректной структуры XML, мы узнаем об этом только из журнала. Рекомендуется записывать не только факт ошибки, но и количество загруженных объектов, обращаясь к свойствам объекта Обработка после завершения метода ВыполнитьЗагрузку().

Таким образом, самым стабильным решением для «1С:Бухгалтерия 3.0» является создание внешней обработки с функциями БСП и её запуск через справочник дополнительных обработок. Это сохраняет конфигурацию «типовой» и обеспечивает гибкое управление расписанием без привлечения системного администратора для настройки планировщика Windows.

← На главную