При настройке типовой синхронизации данных между 1С:Бухгалтерия предприятия 3.0 и 1С:ERP Управление предприятием 2.4 через механизм Enterprise Data (ED) специалисты часто сталкиваются с тем, что элементы справочника Банки (в ERP — КлассификаторБанков) переносятся без сохранения иерархии. Группы, созданные пользователем в исходной базе, попросту игнорируются. В этой статье мы подробно разберем, почему так происходит, и какие шаги необходимо предпринять для решения этой задачи.
Для начала выясним причину такого поведения системы. Механизм Enterprise Data — это формат обмена, основанный на XDTO, который ориентирован на передачу бизнес-сущностей в стандартизированном виде. В отличие от старых правил обмена (КД 2.1), где объекты часто «зеркалировались» один в один, ED накладывает свои ограничения.
Проанализируем ситуацию с технической точки зрения:
Bank часто описывается как плоская структура. В схеме могут отсутствовать реквизиты Parent (Родитель) или IsFolder (ЭтоГруппа). Если формат не предусматривает иерархию для конкретного типа объекта, то данные о группах просто не попадут в XML-файл сообщения обмена.МенеджерОбменаЧерезУниверсальныйФормат) может содержать жесткую фильтрацию. В процедурах выгрузки для справочников-классификаторов часто прописывается условие, которое прерывает обработку, если объект является группой. Это делается для того, чтобы не засорять целевую базу пользовательской иерархией, которая может конфликтовать с системной.Банки часто стоит отбор по реквизиту ЭтоГруппа = Ложь. Таким образом, папки даже не попадают в очередь на отправку.Важно понимать, что в БП 3.0 справочник называется Банки, а в ERP 2.4 — КлассификаторБанков. В ERP этот справочник является системным. Группы в нем часто формируются автоматически при загрузке данных из официального классификатора (РБК или серверов 1С) по региональному признаку (например, на основе БИК).
Если вы создали в БП 3.0 свои папки (например, «Наши основные банки», «Закрытые филиалы»), то для ERP эта информация считается избыточной. Поэтому типовой обмен настроен так, чтобы передавать только конечные элементы (банки), которые затем в ERP «раскладываются» по системным папкам или остаются в корне.
Прежде чем приступать к программированию, рассмотрим самый правильный с точки зрения методологии 1С путь. Вместо того чтобы пытаться перенести иерархию из одной базы в другую, следует выполнить обновление классификатора непосредственно в целевой базе.
Посмотрим на последовательность действий в ERP 2.4:
После этого система сама создаст актуальную иерархию согласно данным Центрального Банка. Все банки, перенесенные из БП через синхронизацию, автоматически сопоставятся по БИК и «встанут» в нужные системные группы.
Если вам критично перенести именно пользовательские группы, первым делом нужно заставить систему регистрировать изменения для папок. Рассмотрим, как это сделать без изменения основной конфигурации, используя механизм расширений.
Нам необходимо переопределить процедуру в модуле управления обменом данными. Проанализируем пример кода, который можно добавить в расширение для регистрации групп:
&После("ПриРегистрацииОбъекта")
Процедура Имя_ПриРегистрацииОбъекта(Объект, ПараметрыРегистрации, Отказ)
Если ТипЗнч(Объект) = Тип("СправочникСсылка.Банки") Тогда
Если Объект.ЭтоГруппа Тогда
// Принудительно регистрируем группу, если типовые правила её игнорируют
ПараметрыРегистрации.Событие = "Запись";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Обратите внимание: простая регистрация объекта не гарантирует его выгрузку. Вы увидите группу в обработке Регистрация изменений для обмена, но менеджер обмена может все еще «отбраковывать» её при формировании XML.
Для того чтобы группы физически попали в файл обмена, необходимо вмешаться в работу Менеджера обмена через универсальный формат. Это общий модуль, в котором описаны правила сопоставления объектов 1С и объектов XDTO.
Разберем по шагам, что нужно проверить:
Банки (обычно она называется ПакетXDTO_Выгрузка_Справочник_Банки_...).Если Данные.ЭтоГруппа Тогда Возврат;. Если оно есть, его нужно отключить в расширении.Родитель в текущей версии формата ED, используемой в вашей синхронизации. Если в схеме XDTO (пакет EnterpriseData_1_X_X) для типа Bank нет реквизита Parent, то передать иерархию штатными средствами ED невозможно. В этом случае потребуется создавать собственную версию формата, что является трудоемкой задачей.Выясним, с какими проблемами вы можете столкнуться, если все же решите переносить группы принудительно:
Проанализировав ситуацию, мы пришли к выводу, что отсутствие переноса групп справочника Банки — это не ошибка, а особенность типового решения, направленная на поддержание чистоты нормативно-справочной информации.
Наилучший алгоритм действий:
Если же бизнес-задача требует передачи специфических папок, которые не коррелируют с официальным классификатором, используйте расширение для корректировки Правил регистрации объектов и Менеджера обмена, предварительно убедившись, что версия формата ED в ваших базах поддерживает иерархию для данного объекта.