Автоматизация обмена данными — одна из самых частых задач при интеграции 1С с внешними системами. Часто возникает ситуация, когда данные (например, сведения о физических лицах или сотрудниках) выгружаются из сторонней базы в формате XML, соответствующем «Конвертации данных 2.0». Рассмотрим подробнее, как настроить автоматическую загрузку таких файлов по расписанию, чтобы исключить ручной труд и избежать типичных ошибок при подключении внешних обработок.
Это наиболее правильный и современный метод для конфигураций на базе БСП (Библиотеки стандартных подсистем), к которым относится «1С:Бухгалтерия 3.0». Он позволяет добавить логику загрузки в базу без внесения изменений в саму конфигурацию. Однако просто написать код загрузки недостаточно — необходимо соблюсти стандарты разработки для внешних обработок.
Проанализируем структуру модуля объекта внешней обработки, которая требуется для корректной регистрации в системе. Чтобы избежать ошибки «не подходит для этой версии программы», мы должны обязательно добавить функцию СведенияОВнешнейОбработке.
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Наименование = "Автоматическая загрузка XML (расписание)";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Запустить загрузку данных";
НоваяКоманда.Идентификатор = "ЗагрузитьДанные";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
Возврат ПараметрыРегистрации;
КонецФункции
Важным моментом является тип команды ВызовСерверногоМетода. Это позволяет регламентному заданию запускать код на стороне сервера без участия пользователя. После регистрации такой обработки в разделе Администрирование — Печатные формы, отчеты и обработки, у вас появится возможность настроить расписание выполнения прямо в карточке обработки.
Теперь разберем сам код загрузки, который должен располагаться в процедуре ВыполнитьКоманду модуля объекта:
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
Если ИдентификаторКоманды = "ЗагрузитьДанные" Тогда
ЗагрузитьФайлНаСервере();
КонецЕсли;
КонецПроцедуры
Процедура ЗагрузитьФайлНаСервере()
ПутьКФайлу = "D:\Exchange\Upload.xml"; // Рекомендуется использовать UNC-пути
Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать();
Обработка.ИмяФайлаОбмена = ПутьКФайлу;
Обработка.РежимОбмена = "Загрузка";
Обработка.ОптимизированнаяЗаписьОбъектов = Истина;
Обработка.ЗаписыватьРегистрыНаборамиЗаписей = Истина;
Обработка.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты = Истина;
Обработка.ЗагружатьДанныеВРежимеОбмена = Истина;
Попытка
Обработка.ВыполнитьЗагрузку();
ЗаписьЖурналаРегистрации("ЗагрузкаДанныхXML", УровеньЖурналаРегистрации.Информационный, , , "Загрузка завершена успешно");
Исключение
ЗаписьЖурналаРегистрации("ЗагрузкаДанныхXML", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка при загрузке: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Если по каким-то причинам использование БСП невозможно, рассмотрим альтернативу: запуск сеанса 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).
Разберем по шагам, что нужно проверить:
USR1CV8 должен иметь полные права (чтение, запись, изменение) на папку, в которой лежит файл Upload.xml.D:), если они являются примонтированными сетевыми ресурсами. Всегда используйте сетевые пути формата \\ServerName\Folder\File.xml.Не стоит забывать, что формат «Конвертации данных 2.0» можно интегрировать в стандартный механизм синхронизации данных. Несмотря на то что автор темы счел это «не тем», для многих задач это будет оптимальным решением. Мы можем создать «фиктивный» узел обмена (например, через «Обмен в распределенной ИБ» или используя «Универсальный обмен данными»), загрузить туда правила обмена и настроить типовое расписание. Это обеспечит нам встроенное логирование, мониторинг и возможность интерактивного решения коллизий в стандартном интерфейсе 1С.
При работе в фоновом режиме мы не видим сообщений об ошибках на экране. Поэтому крайне важно использовать объект ЗаписьЖурналаРегистрации. Разберем пример: если загрузка падает из-за некорректной структуры XML, мы узнаем об этом только из журнала. Рекомендуется записывать не только факт ошибки, но и количество загруженных объектов, обращаясь к свойствам объекта Обработка после завершения метода ВыполнитьЗагрузку().
Таким образом, самым стабильным решением для «1С:Бухгалтерия 3.0» является создание внешней обработки с функциями БСП и её запуск через справочник дополнительных обработок. Это сохраняет конфигурацию «типовой» и обеспечивает гибкое управление расписанием без привлечения системного администратора для настройки планировщика Windows.