Как загрузить документ из XML-файла в 1С:Бухгалтерия: разбираем все способы от штатного ЭДО до автоматизации

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

Приветствуем вас, коллеги! В практике администрирования и разработки на платформе 1С:Предприятие 8 часто возникает необходимость переноса документов из одной информационной базы в другую. Особое место здесь занимает работа с файлами формата XML. Это могут быть выгруженные из модуля электронного документооборота (ЭДО) коммерческие документы (такие как УПД, накладные или счета-фактуры), файлы обмена между одинаковыми конфигурациями или структурированные данные, сформированные с помощью правил конвертации.

В этой статье мы подробно разберем, как решить задачу загрузки XML-файлов в программу 1С:Бухгалтерия. Мы рассмотрим как стандартные интерактивные методы, доступные обычному пользователю, так и программные способы автоматизации загрузки по расписанию.

Способ 1. Загрузка формализованных XML-файлов через встроенный ЭДО (без программирования)

Если ваш XML-файл представляет собой регламентированный ФНС документ (например, универсальный передаточный документ — УПД, Торг-12 или счет-фактуру), сохраненный из модуля ЭДО одной базы, то для его загрузки в другую базу писать программный код не требуется. Платформа предоставляет готовые интерактивные инструменты.

Для современных версий «1С:Бухгалтерия» (ред. 3.0):

  1. Перейдем в раздел программы, отвечающий за закупки (или продажи), например, откроем список документов Поступление (акты, накладные, УПД).
  2. В командной панели списка нажмем кнопку Еще, выберем подменю ЭДО и воспользуемся командой Загрузить документ из файла.
  3. В открывшемся диалоговом окне укажем путь к нашему XML-файлу. Система автоматически запустит парсер, который распознает структуру документа, сопоставит реквизиты контрагента по ИНН/КПП и предложит сопоставить номенклатурные позиции. Если номенклатура загружается впервые, программа поможет создать новые карточки в справочнике.
  4. После успешного сопоставления будет автоматически сформирован непроведенный документ учета.

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

  1. Откроем рабочее место Текущие дела ЭДО (или аналогичный интерфейс настройки электронного документооборота).
  2. В панели действий найдем раздел Создать новый и нажмем команду Загрузить с диска.
  3. Выберем файл на диске. Программа загрузит его в качестве входящего электронного документа. После этого, используя стандартную функцию сопоставления (подбора), мы сможем создать на его основе документ нашей информационной базы.

Способ 2. Перенос данных между идентичными базами через обработку «Выгрузка и загрузка данных XML»

Рассмотрим ситуацию, когда нам необходимо перенести документы из одной базы 1С:Бухгалтерия 2.0 в другую базу точно такого же релиза. Создавать правила конвертации в данном случае — избыточная работа. Разработчики фирмы 1С предусмотрели готовую системную обработку ВыгрузкаЗагрузкаДанныхXML.epf.

Эта обработка работает напрямую с объектами СУБД, сохраняя их внутренние идентификаторы (UUID). Это гарантирует, что при повторной загрузке данные не задвоятся, а обновятся. Выполним загрузку по шагам:

  1. Запустим обработку в информационной базе-источнике. На вкладке выгрузки отметим флажками нужные типы документов (например, РеализацияТоваровУслуг) и настроим период или отбор по организации.
  2. Укажем путь для сохранения файла обмена и нажмем кнопку выгрузки.
  3. Перейдем в базу-приемник и откроем ту же обработку.
  4. Перейдем на вкладку Загрузка, выберем созданный XML-файл и нажмем кнопку Загрузить данные.

Важное замечание: данный способ абсолютно безопасен и корректен только в том случае, если конфигурации источника и приемника полностью идентичны по метаданным (совпадают релизы). В противном случае возникнут ошибки несоответствия типов реквизитов.

Способ 3. Загрузка через обработку «Универсальный обмен данными в формате XML»

Если базы имеют разные конфигурации (например, мы хотим перенести данные из 1С:Управление торговлей в 1С:Бухгалтерия или из устаревшей редакции 2.0 в новую 3.0), нам потребуется использовать правила обмена. Такие правила создаются в специализированной конфигурации Конвертация данных 2.0 (КД 2).

Разберем процесс загрузки с помощью встроенного механизма:

  1. Перейдем в меню программы (в обычных формах это Операции -> Обработки -> Универсальный обмен данными в формате XML, в управляемых формах обработку можно вызвать через функции для технического специалиста).
  2. В открывшемся окне перейдем на вкладку Загрузка данных.
  3. В поле Имя файла для загрузки укажем путь к нашему XML-файлу, который был ранее выгружен из источника с использованием соответствующих правил.
  4. При необходимости настроим параметры загрузки: например, включим режим оптимизированной записи объектов или транзакционный режим.
  5. Нажмем кнопку Загрузить данные. Программа последовательно прочитает XML-структуру и на основе заложенных правил обмена создаст или обновит документы в базе.

Способ 4. Автоматизация загрузки XML по расписанию

Часто возникает необходимость автоматизировать этот процесс, чтобы пользователям не приходилось каждый раз вручную открывать обработки. Разберем два основных метода автоматической загрузки XML-файлов.

Вариант А. Настройка регламентного задания на стороне сервера

Этот вариант является наиболее надежным и современным для клиент-серверных баз данных. Нам понадобится внесить небольшие изменения в конфигурацию через режим Конфигуратор.

Создадим общий модуль (например, с именем ОбменДаннымиСервер) и установим для него свойства Сервер и Вызов сервера. Напишем в нем процедуру загрузки, которая программно вызывает объект встроенной обработки УниверсальныйОбменДаннымиXML:


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

Далее в дереве метаданных добавим новое РегламентныеЗадания. В его свойствах укажем метод — созданную нами процедуру ОбменДаннымиСервер.ВыполнитьАвтоматическуюЗагрузкуXML. Настроим расписание (например, запускавать каждые 10 минут) и включим задание.

Вариант Б. Использование внешнего скрипта и Планировщика задач Windows

Если база работает в файловом режиме или вы не хотите вносить изменения в конфигурацию, можно использовать внешнюю обработку (формат .epf), запускаемую по расписанию операционной системы.

Создадим внешнюю обработку AutoLoadXML.epf. В модуле формы в обработчике события ПриОткрытии (или ПередОткрытием) пропишем следующий код выполнения загрузки и последующего закрытия сеанса 1С:


Процедура ПриОткрытии()
    
    // Считываем параметры запуска, если они были переданы из командной строки
    ПараметрыЗапускаСтрока = ПараметрыЗапуска;
    
    // По умолчанию зададим жесткий путь, если параметры пусты
    ИмяФайлаЗагрузки = "C:\Exchange\import_data.xml";
    
    ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
    ОбработкаОбмена.ИмяФайлаОбмена = ИмяФайлаЗагрузки;
    ОбработкаОбмена.РежимОбмена = "Загрузка";
    ОбработкаОбмена.ЗагружатьДанныеВРежимеОбмена = Истина;
    
    Попытка
        ОбработкаОбмена.ВыполнитьЗагрузку();
    Исключение
        // Логируем ошибку во внешний файл
        ТекстЛога = Новый ТекстовыйДокумент;
        ТекстЛога.ДобавитьСтроку(ОписаниеОшибки());
        ТекстЛога.Записать("C:\Exchange\log_error.txt", КодировкаТекста.UTF8);
    КонецПопытки;
    
    // Завершаем работу программы после выполнения обмена
    ЗавершитьРаботуСистемы(Ложь);
    
КонецПроцедуры

Теперь настроим автоматический запуск через планировщик Windows. Создадим командный BAT-файл (например, start_exchange.bat) следующего содержания:


"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"C:\1C_Bases\Accounting" /N"RobotExchange" /P"StrongPassword" /Execute"C:\Exchange\AutoLoadXML.epf"

Добавим этот BAT-файл в планировщик задач Windows, установив требуемое время запуска. При наступлении назначенного времени операционная система запустит тонкий или толстый клиент 1С под служебной учетной записью RobotExchange, выполнит загрузку XML-файла и автоматически завершит сеанс.

Развитие технологий обмена: переход на формат EnterpriseData

Если в будущем перед вами встанет задача организации постоянного обмена данными между устаревшей конфигурацией 1С:Бухгалтерия 2.0 и современной редакцией 1С:Бухгалтерия 3.0, классический подход с КД 2 может стать достаточно трудоемким в поддержке из-за частых изменений структуры конфигураций при обновлениях.

В современных решениях фирмы 1С применяется технология обмена через формат EnterpriseData. Это универсальный формат обмена, построенный на базе XML и XDTO-пакетов. Он стандартизирован и не привязан к внутренней структуре конкретной базы данных. Использование EnterpriseData позволяет настраивать синхронизацию между базами разного поколения в пользовательском режиме без написания сложных правил конвертации реквизитов. Это существенно упрощает масштабирование информационной системы предприятия и облегчает сопровождение.

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

← На главную