Приветствуем вас, коллеги! В практике администрирования и разработки на платформе 1С:Предприятие 8 часто возникает необходимость переноса документов из одной информационной базы в другую. Особое место здесь занимает работа с файлами формата XML. Это могут быть выгруженные из модуля электронного документооборота (ЭДО) коммерческие документы (такие как УПД, накладные или счета-фактуры), файлы обмена между одинаковыми конфигурациями или структурированные данные, сформированные с помощью правил конвертации.
В этой статье мы подробно разберем, как решить задачу загрузки XML-файлов в программу 1С:Бухгалтерия. Мы рассмотрим как стандартные интерактивные методы, доступные обычному пользователю, так и программные способы автоматизации загрузки по расписанию.
Если ваш XML-файл представляет собой регламентированный ФНС документ (например, универсальный передаточный документ — УПД, Торг-12 или счет-фактуру), сохраненный из модуля ЭДО одной базы, то для его загрузки в другую базу писать программный код не требуется. Платформа предоставляет готовые интерактивные инструменты.
Для современных версий «1С:Бухгалтерия» (ред. 3.0):
Поступление (акты, накладные, УПД).Еще, выберем подменю ЭДО и воспользуемся командой Загрузить документ из файла.Для более старых версий конфигураций (например, «Бухгалтерия предприятия» ред. 2.0) или при использовании внешнего модуля ЭДО:
Текущие дела ЭДО (или аналогичный интерфейс настройки электронного документооборота).Создать новый и нажмем команду Загрузить с диска.Рассмотрим ситуацию, когда нам необходимо перенести документы из одной базы 1С:Бухгалтерия 2.0 в другую базу точно такого же релиза. Создавать правила конвертации в данном случае — избыточная работа. Разработчики фирмы 1С предусмотрели готовую системную обработку ВыгрузкаЗагрузкаДанныхXML.epf.
Эта обработка работает напрямую с объектами СУБД, сохраняя их внутренние идентификаторы (UUID). Это гарантирует, что при повторной загрузке данные не задвоятся, а обновятся. Выполним загрузку по шагам:
РеализацияТоваровУслуг) и настроим период или отбор по организации.Загрузка, выберем созданный XML-файл и нажмем кнопку Загрузить данные.Важное замечание: данный способ абсолютно безопасен и корректен только в том случае, если конфигурации источника и приемника полностью идентичны по метаданным (совпадают релизы). В противном случае возникнут ошибки несоответствия типов реквизитов.
Если базы имеют разные конфигурации (например, мы хотим перенести данные из 1С:Управление торговлей в 1С:Бухгалтерия или из устаревшей редакции 2.0 в новую 3.0), нам потребуется использовать правила обмена. Такие правила создаются в специализированной конфигурации Конвертация данных 2.0 (КД 2).
Разберем процесс загрузки с помощью встроенного механизма:
Операции -> Обработки -> Универсальный обмен данными в формате XML, в управляемых формах обработку можно вызвать через функции для технического специалиста).Загрузка данных.Имя файла для загрузки укажем путь к нашему XML-файлу, который был ранее выгружен из источника с использованием соответствующих правил.Загрузить данные. Программа последовательно прочитает XML-структуру и на основе заложенных правил обмена создаст или обновит документы в базе.Часто возникает необходимость автоматизировать этот процесс, чтобы пользователям не приходилось каждый раз вручную открывать обработки. Разберем два основных метода автоматической загрузки XML-файлов.
Этот вариант является наиболее надежным и современным для клиент-серверных баз данных. Нам понадобится внесить небольшие изменения в конфигурацию через режим Конфигуратор.
Создадим общий модуль (например, с именем ОбменДаннымиСервер) и установим для него свойства Сервер и Вызов сервера. Напишем в нем процедуру загрузки, которая программно вызывает объект встроенной обработки УниверсальныйОбменДаннымиXML:
Процедура ВыполнитьАвтоматическуюЗагрузкуXML() Экспорт
ПутьКФайлу = "C:\Exchange\import_data.xml";
ФайлПроверки = Новый Файл(ПутьКФайлу);
Если Не ФайлПроверки.Существует() Тогда
ЗаписьЖурналаРегистрации("Обмен данными", УровеньЖурналаРегистрации.Предупреждение, , , "Файл обмена не найден по пути: " + ПутьКФайлу);
Возврат;
КонецЕсли;
Попытка
ОбработкаЗагрузки = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаЗагрузки.ИмяФайлаОбмена = ПутьКФайлу;
ОбработкаЗагрузки.РежимОбмена = "Загрузка";
ОбработкаЗагрузки.ЗагружатьДанныеВРежимеОбмена = Истина;
ОбработкаЗагрузки.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты = Истина;
ОбработкаЗагрузки.ВыполнитьЗагрузку();
ЗаписьЖурналаРегистрации("Обмен данными", УровеньЖурналаРегистрации.Информация, , , "Файл успешно загружен: " + ПутьКФайлу);
// После успешной загрузки удалим или переименуем файл, чтобы исключить повторную загрузку тех же данных
ПереместитьФайл(ПутьКФайлу, "C:\Exchange\Archive\imported_" + Формат(ТекущаяДата(), "ДФ=ггггММддЧЧммсс") + ".xml");
Исключение
ИнформацияОбОшибке = ОписаниеОшибки();
ЗаписьЖурналаРегистрации("Обмен данными", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка загрузки: " + ИнформацияОбОшибке);
КонецПопытки;
КонецПроцедуры
Далее в дереве метаданных добавим новое РегламентныеЗадания. В его свойствах укажем метод — созданную нами процедуру ОбменДаннымиСервер.ВыполнитьАвтоматическуюЗагрузкуXML. Настроим расписание (например, запускавать каждые 10 минут) и включим задание.
Если база работает в файловом режиме или вы не хотите вносить изменения в конфигурацию, можно использовать внешнюю обработку (формат .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-файла и автоматически завершит сеанс.
Если в будущем перед вами встанет задача организации постоянного обмена данными между устаревшей конфигурацией 1С:Бухгалтерия 2.0 и современной редакцией 1С:Бухгалтерия 3.0, классический подход с КД 2 может стать достаточно трудоемким в поддержке из-за частых изменений структуры конфигураций при обновлениях.
В современных решениях фирмы 1С применяется технология обмена через формат EnterpriseData. Это универсальный формат обмена, построенный на базе XML и XDTO-пакетов. Он стандартизирован и не привязан к внутренней структуре конкретной базы данных. Использование EnterpriseData позволяет настраивать синхронизацию между базами разного поколения в пользовательском режиме без написания сложных правил конвертации реквизитов. Это существенно упрощает масштабирование информационной системы предприятия и облегчает сопровождение.
Подводя итоги, отметим, что выбор инструмента для загрузки XML зависит от природы самого файла. Для разовых документов ЭДО используйте штатный функционал импорта в списках документов. Для полного переноса данных между идентичными конфигурациями отлично подойдет обработка выгрузки/загрузки XML. В сложных распределенных системах и при необходимости тонкой настройки правил обмена используйте универсальную обработку обмена в связке с механизмами автоматизации.