Автоматизация обмена данными между учетной системой 1С и внешним веб-ресурсом — классическая задача, с которой сталкивается практически каждый разработчик. В этой статье мы подробно разберем, как сформировать XML-файл по произвольному шаблону и организовать его передачу на сайт.
Для создания XML-файла в 1С наиболее эффективным и гибким инструментом является объект ЗаписьXML. Он позволяет вручную выстраивать иерархию элементов, точно соответствующую требованиям API вашего сайта.
Рассмотрим пример формирования структуры данных, который можно адаптировать под ваши нужды:
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку("UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML;
ЗаписьXML.ЗаписатьНачалоЭлемента("products");
ЗаписьXML.ЗаписатьНачалоЭлемента("product");
ЗаписьXML.ЗаписатьНачалоЭлемента("id");
ЗаписьXML.ЗаписатьТекст("GUID_товара");
ЗаписьXML.ЗаписатьКонецЭлемента;
// Цикл для вывода цен или характеристик
ЗаписьXML.ЗаписатьНачалоЭлемента("price");
ЗаписьXML.ЗаписатьНачалоЭлемента("type");
ЗаписьXML.ЗаписатьТекст("Розничная");
ЗаписьXML.ЗаписатьКонецЭлемента;
ЗаписьXML.ЗаписатьНачалоЭлемента("value");
ЗаписьXML.ЗаписатьТекст("479");
ЗаписьXML.ЗаписатьКонецЭлемента;
ЗаписьXML.ЗаписатьКонецЭлемента;
ЗаписьXML.ЗаписатьКонецЭлемента; // конец product
ЗаписьXML.ЗаписатьКонецЭлемента; // конец products
СтрокаXML = ЗаписьXML.Закрыть();
Если вам нужно сохранить полученный результат во внешний файл для отладки или передачи сторонним специалистам, используйте метод ОткрытьФайл вместо УстановитьСтроку.
Способ отправки напрямую зависит от версии платформы 1С и готовности API вашего сайта.
HTTPСоединение и HTTPЗапрос. Важно правильно задать заголовки Content-Type и Authorization, если этого требует API.Чтобы не перегружать сервер сайта при каждой синхронизации, необходимо реализовать логику «дельта-обмена»:
РегистрСведений, который будет хранить очередь на отправку.ПриЗаписи для справочника Номенклатура или документа УстановкаЦен фиксируйте факт изменения данных.Для корректного получения данных используйте запросы с соединениями к регистрам цен и остатков. Помните, что разделение на три логических потока (Номенклатура, Цены, Остатки) значительно упрощает отладку и парсинг данных на стороне сайта.
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка,
ЕСТЬNULL(Цены.Цена, 0) КАК Цена,
ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК Остаток
ИЗ
Справочник.Номенклатура КАК Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК Цены
ПО Номенклатура.Ссылка = Цены.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
ПО Номенклатура.Ссылка = Остатки.Номенклатура
Такой подход обеспечивает высокую надежность системы обмена. Если возникают сложности с форматами (например, при работе с ЭДО), всегда проверяйте соответствие структуры тегов требованиям получателя (XSD-схеме). В случае с государственными форматами, такими как счета-фактуры, настоятельно рекомендуется использовать специализированные модули операторов ЭДО, так как они автоматически обеспечивают подписание и валидацию файлов.