При настройке синхронизации данных между различными конфигурациями 1С (например, между «Управление нашей фирмой» и «Бухгалтерия предприятия») разработчики и администраторы часто сталкиваются с неприятной ситуацией. Мы создаем новый элемент справочника (например, Номенклатура), добавляем его в табличную часть нового документа (например, РасходнаяНакладная), запускаем обмен, но в базе-приемнике вместо правильного наименования номенклатуры видим пустую ссылку с текстом: (GUID из источника) или <Объект не найден> (GUID). При этом сам справочник в базу-приемник перенесся успешно, а повторный обмен полностью решает проблему. Почему так происходит и как исправить этот сбой раз и навсегда? Разберем эту проблему подробно по шагам.
Давайте проанализируем, как устроен механизм сериализации и десериализации данных при стандартном обмене XML. База-источник формирует единый файл выгрузки, в который последовательно записывает XML-узлы объектов. База-приемник читает этот файл последовательно, сверху вниз.
Рассмотрим сценарий, когда в XML-файле документ идет раньше, чем справочник:
РасходнаяНакладная. В табличной части он видит ссылку на элемент справочника Номенклатура с определенным уникальным идентификатором (GUID).СоответствиеОбъектовДляОбмена). Но так как этот элемент еще не был загружен из файла, поиск завершается неудачей.Номенклатура. Номенклатура успешно создается, её GUID прописывается в регистре соответствия. Но документ уже записан, и платформа автоматически не обновляет его табличную часть в этот момент.Если же объекты выгружаются в правильном порядке (сначала справочник Номенклатура, а затем документ РасходнаяНакладная), приемник сначала создает номенклатуру, а при чтении документа мгновенно находит её и подставляет без каких-либо ошибок. Именно поэтому с ПриходнойНакладной у автора сообщения проблем не возникало — ее правила или регистрация обеспечивали верный порядок выгрузки.
Рассмотрим несколько эффективных способов решения этой проблемы, начиная с настройки правил обмена и заканчивая программными методами.
В конфигурации «Конвертация данных 2.1» последовательность выгрузки объектов в XML-файл напрямую зависит от порядка расположения правил в дереве ПВД. Выполним следующие действия:
Номенклатура и правила для документов РасходнаяНакладная и ПриходнаяНакладная.Этот простой шаг гарантирует, что при формировании файла обмена платформа сначала обработает выборку справочников и запишет их в XML-файл первыми.
Что делать, если обмен идет по плану обмена, и объекты регистрируются динамически, из-за чего порядок ПВД не всегда срабатывает идеально? Мы можем принудительно выгрузить номенклатуру непосредственно в момент выгрузки самого документа.
Для этого в ПКО (Правила конвертации объектов) для документа РасходнаяНакладная напишем обработчик события «Перед выгрузкой». Выполним выгрузку связанных элементов номенклатуры из табличной части до того, как начнется запись документа:
// Проверим наличие табличной части и выгрузим номенклатуру принудительно
Если Источник.Товары.Количество() > 0 Тогда
Для Каждого СтрокаТЧ Из Источник.Товары Цикл
Если ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) Тогда
// Выгружаем номенклатуру по правилу конвертации "Номенклатура"
ВыгрузитьПоПравилу(СтрокаТЧ.Номенклатура, , , , "Номенклатура");
КонецЕсли;
КонецЦикла;
КонецЕсли;
Метод ВыгрузитьПоПравилу запишет данные всех номенклатурных позиций из документа в XML-поток раньше самого документа. При загрузке в базу-приемник эти объекты уже будут существовать в базе к моменту чтения табличной части накладной.
Иногда проблема кроется в том, что для справочника отключена выгрузка по ссылке. Проанализируем настройки ПКО для справочника Номенклатура:
Номенклатура.В современных конфигурациях 1С, использующих Библиотеку стандартных подсистем (БСП), реализованы встроенные механизмы борьбы с битыми ссылками. Выясним, почему они могут не работать в вашем случае:
ПубличныеИдентификаторыСинхронизируемыхОбъектов. Платформа автоматически создает временные «фиктивные» элементы и корректно связывает их при последующем получении полных данных объекта.Применяя эти методы настройки правил и конфигурации, мы полностью избавимся от проблемы появления битых ссылок при первой синхронизации документов.