Обмен данными между ТБ.Корпорацией и 1С через XML-based формат CommerceML

Способ обмена

Обмен информацией с системой 1С производится путем импорта-экспорта XML-файлов в формате, специально разработанном для этого фирмой 1С. Данный формат называется CommerceML (CML) и представляет собой набор XML-тегов, для чтения и записи которых в составе стандартных конфигураций 1С есть процедуры.

CML изначально предназначен для обмена коммерческой информацией с приложениями типа «интернет-магазин», поэтому данный формат имеет существенные ограничения. Так, список типов документов, которыми можно обмениваться через него, жестко зафиксирован. Однако, во-первых, даже этим списком можно воспользоваться, сопоставив перечисленным в стандарте CML видам документов свое их наполнение, а во-вторых - всегда остается возможность создать собственное расширение CML или даже собственный XML-формат обмена данными - правда, для этого придется допрограммировать как 1С, так и ТБ.Корпорацию.

Синхронизация информации

По стандарту CML в одном файле может передаваться вся информация, нужная для импорта-экспорта бизнес-данных: справочник номенклатуры ТМЦ, возможно, разделенный на части (каталоги); справочник контрагентов и информация о них; информация о нашем предприятии; банковские реквизиты сторон; документы различных типов со списками товарных позиций и ссылками на указанную выше информацию.

Импорт и экспорт со стороны ТБ.Корпорации

В ТБ.Корпорации реализованы две сервисные процедуры, которые можно использовать в реквизитах типа «Сервисная процедура». Это процедуры «Экспорт документа в формат CML (для 1С)» (Управление\Сервис\Реквизит\блСервисЭкспортВ1С.cod) и «Импорт документа из формата CML (для 1С)» (Управление\Сервис\Реквизит\блСервисИмпортИз1С.cod). Каждая из процедур имеет дополнительные параметры. В основном это перечисление реквизитов, из которых берется информация при экспорте документов и в которые информация записывается при импорте, плюс дополнительные настройки.

Настройщик должен создать в информационной базе реквизиты - сервисные процедуры, настроить их параметры, а затем вызвать их из пересчетов или расположив данные реквизиты в виде кнопок на представлении документа или на панели сервисов.

Импорт и экспорт со стороны 1С

Точная реализация алгоритмов обмена информацией через CML может отличаться в разных версиях и конфигурациях 1С. Так, в конфигурации «Торговля+Склад» версии 7.7 данные алгоритмы собраны в обработках с именами, начинающимися с «XML…». Это довольно простые алгоритмы, чтение которых настоятельно рекомендуется для понимания способов работы с форматом CML в 1С.

В рабочем режиме «1С:Предприятия» указанной выше конфигрурации команды обмена информацией через формат CML собраны в меню «Сервис» вместе с остальными командами импорта-экспорта, а также доступны в некоторых (почему-то) типах документов по кнопке «Действия» в форме документа.

Особенности синхронизации данных

Для синхронизации информации в базе данных 1С и ТБ.Корпорации применяются следующие механизмы:

  1. Во многих элементах справочников системы 1С есть поля типа «Идентификатор для XML-обмена» или просто «Идентификатор». Это идентификатор, используемый стандартными алгоритмами импорта/экспорта в CML. В ТБ.Корпорации он по умолчанию сопоставляется коду соответствующего справочника.
  2. Способ идентификации номенклатуры - более хитрый. Форматом CML предусмотрено, что в одном CML-файле можно передать несколько независимых справочников номенклатуры, разделенных по каталогам. Справочник каталогов также присутствует в системе 1С, причем различаются каталоги, которыми владеет наше предприятие, и каталоги сторонних организаций. В карточке свойств каталога, которым владеет наше предприятие, явно указывается способ идентификации элемента номенклатуры - например, по коду, артикулу или по штрих-коду, что в нашем случает позволяет использовать для синхронизации справочника номенклатуры со справочником ресурсов ТБ.Корпорации различные поля справочника «Номенклатура» в 1С. Наличие же каталогов контрагента, вместе с существующим в 1С механизмом аналогов, предоставляет возможность передавать в CML-файлах номенклатуру с кодами, принятыми у стороннего контрагента (например, с кодами по классификатору номенклатуры компании-производителя), а при импорте перекодировать их - для этого в справочнике аналогов заводятся записи, содержащие код ТМЦ по каталогу сторонней организации и соответствующую этой ТМЦ ссылку на элемент справочника номенклатуры. Таким образом, система каталогов и аналогов позволяет организовать различные способы синхронизации справочника номенклатуры 1С и справочника ресурсов ТБ.Корпорации. Со стороны ТБ.Корпорации в качестве идентифи катора ресурса по умолчанию выступает поле Код.
  3. Тип документа передается в CML-файле в виде строковой константы хозяйственной операции, варианты которых явно указаны в описании стандарта CML - например, »«Order», «Sale» и т.п. Аналогично зафиксированы и роли, в которых выступают стороны по отношению к операции - например, предусмотрены роли «Saler» и «Buyer». В формате CML для каждого документа указывается его хозяйственная операция и список контрагентов (два или больше), для каждого из которых указана его роль. Так вот, тип документа, создаваемого по этой информации системой 1С, определяется на основании его хозяйственной операции и той роли, которую в нем выполняет наше предприятие. Причем данный список «зашит» в систему «жестко» - в виде куска программного кода (по крайней мере, в рассматривавшейся конфигурации «Торговля+Склад» версии 7.7). Вот цитата из алгоритма импорта документа. Первый параметр процедуры ДобавитьОперацию - это роль, которую выполняет в документе наше предприятие, второй параметр - это хозяйственная операция, третий - тип документа из конфигурации 1С.
ДобавитьОперацию("Покупатель",	"Order",			"ЗаказПоставщику",			"Заказ товара");
ДобавитьОперацию("Покупатель",	"PayableBill",		"ПлатежноеПоручение",		"Счет на оплату");
  
ДобавитьОперацию("Покупатель",	"Sale",				"ПоступлениеТМЦ",			"Поступление товара");
ДобавитьОперацию("Покупатель",	"Comission",		"ПоступлениеТМЦ",			"Прием товара на реализацию");

ДобавитьОперацию("Покупатель",	"BackSale",			"ВозвратОтПокупателя",		"Возврат товара от покупателя");
ДобавитьОперацию("Покупатель",	"BackComission",	"ВозвратОтПокупателя",		"Возврат товара от комиссионера");

ДобавитьОперацию("Покупатель",	"Invoice",			"СчетФактураПолученный",	"Счет-Фактура поставщика");
                                
ДобавитьОперацию("Продавец",	"Order",			"ЗаявкаПокупателя",			"Заказ товара");
ДобавитьОперацию("Продавец",	"PayableBill",		"ЗаявкаПокупателя",			"Счет на оплату");

ДобавитьОперацию("Продавец",	"Sale",				"Реализация",				"Отпуск товара");
ДобавитьОперацию("Продавец",	"Comission",		"Реализация",				"Передача товара на реализацию");

ДобавитьОперацию("Продавец",	"BackSale",			"ВозвратПоставщику",		"Возврат товара поставщику");
ДобавитьОперацию("Продавец",	"BackComission",	"ВозвратПоставщику",		"Возврат товара комитенту");

ДобавитьОперацию("Продавец",	"Invoice",			"СчетФактураВыданный",		"Счет-Фактура");

ДобавитьОперацию("Получатель",	"Cash",				"ПКО",						"Поступление наличных денег от покупателя");
ДобавитьОперацию("Получатель",	"BackCash",			"ПКО",						"Возврат наличных денег от поставщика");

ДобавитьОперацию("Получатель",	"Payment",			"СтрокаВыпискиПриход",		"Поступление  безналичных денег от покупателя");
ДобавитьОперацию("Получатель",	"BackPayment",		"СтрокаВыпискиПриход",		"Возврат безналичных денег от поставщика");

ДобавитьОперацию("Получатель",	"ReportComission",	"ОтчетКомиссионера",		"Отчет комиссионера");
ДобавитьОперацию("Плательщик",	"ReportComission",	"ОтчетКомитенту",			"Отчет комитенту");

ДобавитьОперацию("Плательщик",	"Cash",				"РКО",						"Выплата наличных денег поставщику");
ДобавитьОперацию("Плательщик",	"BackCash",			"РКО",						"Возврат наличных денег покупателю");

ДобавитьОперацию("Плательщик",	"Payment",			"СтрокаВыпискиРасход",		"Выплата безналичных денег поставщику");
ДобавитьОперацию("Плательщик",	"BackPayment",		"СтрокаВыпискиРасход",		"Возврат безналичных денег покупателю");

По аналогичным правилам производится и экспорт данных из 1С в формат CML - константа хозяйственной операции определяется на основании типа документа и места в нем нашего предприятия.

Замечания по реализации

  1. В настоящий момент реализована поддержка только двух типов контрагентов - Buyer и Saler. Поэтому при экспорте документа из ТБ.Корпорации в нем всегда будет только два контрагента, причем один из них всегда продавец, а второй - покупатель. Это может создать трудности при передаче, например, платежных документов. Для поддержки остальных типов контрагентов, предусмотренные стандартом CML, нужны доработки сервисных процедур импорта-экспорта.
  2. Выше было указано, что для идентификации элемента справочника со стороны ТБ.Корпорации используется поле Код, но используется оно «по умолчанию». Действительно, предусмотрен механизм, который позволяет это умолчание изменить: у объекта CML.Файл есть свойство Параметры, в котором предусмотрены настройки имен полей, используемых в алгоритмах импорта-экспорта. Однако на данный момент никаких опций, меняющих эти поля, в диалогах настройки сервисов импорта/экспорта в CML не предусмотрено, и умолчания никак не меняются. Если потребуется их менять - то понадобится доработка сервисных процедур.
  3. Алгоритмы импорта информации в 1С довольно чувствительны к недостаточности информации в CML-файле - вместо того, чтобы загрузить ту информацию, которая присутствует в файле, они часто прекращают импорт, считая файл ошибочным. Поэтому, возможно, при неудачном импорте придется проанализировать или протрассировать алгоритм загрузки в 1С и добавить в CML-файл информацию, для целей обмена избыточную (такую как банковские реквизиты нашего предприятия), только потому, что алгоритмы импорта, реализованные в 1С, ее требуют.

Что делать, если CML не подходит?

Стандарт CML был разработан для решения определенных задач (обмен коммерческой информации в торговле) и поэтому может не подойти в каких-то случаях в силу своей жесткости (фиксированный список ролей контрагентов и хозяйственных операций). В этом случае можно реализовать собственный формат обмена данными, являющийся надмножеством CML или просто базирующийся на XML. В ТБ.Корпорации для этого можно использовать классы группы XML из проекта СИС2 (на них и базируется обмен данными через формат CML, но это не единственное возможное их приложение), а в 1С - объект типа «AddIn.XMLParser», предоставляющий доступ к XML DOM - структуре.

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

 
doc/cml.txt · Последние изменения: 2016/04/15 15:26 (внешнее изменение)
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki