При возникновении задачи выгрузки документов, таких как «Акт выполненных работ» или «Реализация товаров и услуг», в формат XML в программе 1С:Бухгалтерия (редакции 2.0 или 3.0), важно сразу определить конечную цель. Выгрузка в формат XML принципиально отличается от сохранения печатных форм в привычные графические форматы, такие как PDF или Excel.
Рассмотрим подробно основные нюансы формирования XML-файлов, выясним причину, почему печатную форму нельзя штатно перевести в бизнес-XML, и проанализируем доступные технические варианты решения этой задачи.
В отличие от визуальных табличных документов, файл XML представляет собой структурированные данные, упорядоченные с помощью тегов. Сам по себе произвольный XML-файл без заранее утвержденной структуры (схемы) не имеет смысла для внешних систем, контрагентов или государственных органов.
Схема XML (XSD) определяет жесткие правила: какие теги должны присутствовать в файле, в каком порядке, какие типы данных и реквизиты они могут содержать. Прежде чем формировать выгрузку, необходимо чётко понимать, для кого готовится файл:
Попытки сохранить печатную форму документа из программы или экспортировать её через Excel в формат XML не принесут желаемого результата. Табличный редактор сохранит файл по собственному внутреннему XML-шаблону, который отражает лишь визуальную разметку таблицы, а не структуру бизнес-данных.
Печатная форма 1С — это графическое представление данных для человека, в то время как XML предназначен для автоматизированного считывания учетными системами. Поэтому выгрузка всегда формируется непосредственно из данных самого объекта базы (ссылки или объекта документа), а не из его печатной формы.
Если задача заключается во внутренней технической выгрузке структуры документа для сохранения или последующего чтения средствами платформы 1С, применяются встроенные объекты ЗаписьXML и процедура ЗаписатьXML().
Проанализируем пример программного кода для выгрузки объекта документа в XML-строку:
Функция ВыгрузитьXML(ДокументСсылка) Экспорт
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписатьXML(ЗаписьXML, ДокументСсылка.ПолучитьОбъект());
Возврат ЗаписьXML.Закрыть();
КонецФункции
Для обратного считывания объекта из полученной XML-строки используется объект ЧтениеXML и функция ПрочитатьXML():
Функция ЗагрузитьXML(Стр) Экспорт
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Стр);
Возврат ПрочитатьXML(ЧтениеXML);
КонецФункции
Обратите внимание: данный метод производит стандартную сериализацию метаданных 1С. Полученный XML-файл содержит внутренние идентификаторы и типы платформы, поэтому может быть корректно прочитан только другой базой 1С с идентичной конфигурацией. Для передачи сторонним контрагентам или в ФНС такой файл не подходит.
Если акты выполненных работ нужно передавать контрагентам в юридически значимом виде, следует использовать механизмы Электронного документооборота (1С:ЭДО):
Если выгрузка актов требуется для смены редакции программы (например, с 1С:Бухгалтерии 2.0 на 1С:Бухгалтерию 3.0), выгрузка отдельных документов через стандартные механизмы XML не требуется. Для таких задач применяются специализированные правила обмена, созданные в «1С:Конвертации данных», либо типовая обработка ВыгрузкаЗагрузкаДанныхXML.epf.