Думаю те, кто пишут правила обмена нередко сталкиваются с проблемой переноса подчиненных справочников вместе с владельцем.
Сейчас я покажу одно из решений проблемы на примере переноса реквизита номенклатуры «Единица измерения».
Как известно, в 1с. Бухгалтерия 2.0 в справочнике «Номенклатура» есть реквизит «БазоваяЕдиницаИзмерения» с типом «СправочникСсылка.КлассифкаторЕдиницИзмерения», в 1С. Управление торговлей 10.3 кроме указанного реквизита есть еще несколько идентичных реквизитов, например, «ЕдиницаХраненияОстатков» (тип, «СправочникСсылка.ЕдиницыИзмерения»).
Алгоритм состоит в следующем:
Выполнение 1 шага не таит в себе никаких сложностей. Стандартная настройка ПКС и ПКО. Обращаю внимание на то, что переносится реквизит «БазоваяЕдиницаИзмерения».
На втором шаге в ПКО Номенклатура необходимо в обработчике «После загрузки» прописать процедура по поиску и созданию единицы измерения.
Предлагаю следующий код:
Если НЕ Объект.ЭтоГруппа И НЕ (Объект.Услуга И НЕ ЗначениеЗаполнено(Объект.БазоваяЕдиницаИзмерения)) Тогда Если НЕ ЗначениеЗаполнено(Объект.ЕдиницаХраненияОстатков) И НЕ Объект.ЭтоГруппа Тогда ВыборкаЕдиниц = Справочники.ЕдиницыИзмерения.Выбрать(, Объект.Ссылка); Если ВыборкаЕдиниц.Следующий() Тогда НайденнаяЕдиница = ВыборкаЕдиниц.Ссылка; Иначе НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); НайденнаяЕдиницаОбъект.Наименование = СокрЛП(Объект.БазоваяЕдиницаИзмерения); НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = Объект.БазоваяЕдиницаИзмерения; НайденнаяЕдиницаОбъект.Коэффициент = 1; НайденнаяЕдиницаОбъект.Владелец = Объект.Ссылка; НайденнаяЕдиницаОбъект.УстановитьНовыйКод(); ЗаписатьОбъектВИБ(НайденнаяЕдиницаОбъект, Тип("СправочникСсылка.ЕдиницыИзмерения")); НайденнаяЕдиница = НайденнаяЕдиницаОбъект.Ссылка; КонецЕсли; Объект.ЕдиницаХраненияОстатков = НайденнаяЕдиница; Если НЕ ЗначениеЗаполнено(Объект.ЕдиницаДляОтчетов) Тогда Объект.ЕдиницаДляОтчетов = НайденнаяЕдиница; КонецЕсли; ИначеЕсли ЗначениеЗаполнено(Объект.ЕдиницаХраненияОстатков) И НЕ ЗначениеЗаполнено(Объект.ЕдиницаХраненияОстатков.Наименование) Тогда НайденнаяЕдиницаОбъект = Объект.ЕдиницаХраненияОстатков.ПолучитьОбъект(); НайденнаяЕдиницаОбъект.Наименование = СокрЛП(Объект.БазоваяЕдиницаИзмерения); НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = Объект.БазоваяЕдиницаИзмерения; ЗаписатьОбъектВИБ(НайденнаяЕдиницаОбъект, Тип("СправочникСсылка.ЕдиницыИзмерения")); КонецЕсли; КонецЕсли;