Нет возможности синхронизации объектов по общему реквизиту объекта ВИБ. Временнное решение.
Нет возможности синхронизации объектов по общему реквизиту объекта ВИБ.
Может кому-то поможет временное решение.
В модуле объекта справочника "СправочникиВИБ" нужно добавить небольшую вставку в текст модуля, процедура "ЗаполнитьРеквизитыОбъекта".
Проверил, консолидация начала видеть общие реквизиты и без проблем заработала синхронизация по общим реквизитам.
Процедура ЗаполнитьРеквизитыОбъекта() Экспорт
Если Не ПроверитьНаименование() Тогда
Возврат;
КонецЕсли;
Если ТекСоединениеВИБ=Неопределено Тогда
ТекСоединениеВИБ=ОбщегоНазначения.ПолучитьСоединениеСВИБПоУмолчанию(Владелец,1);
Если ТекСоединениеВИБ=Неопределено Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Реквизиты.Очистить();
Владельцы.Очистить();
Если Использование77() Тогда
СправочникВИБ=ТекСоединениеВИБ.Метаданные().Справочник(Наименование);
Синоним=СправочникВИБ.Представление();
НоваяСтрока=Реквизиты.Добавить();
НоваяСтрока.Имя="Наименование";
НоваяСтрока.Синоним="Наименование";
НоваяСтрока.ТипДанных="Строка";
НоваяСтрока=Реквизиты.Добавить();
НоваяСтрока.Имя="Код";
НоваяСтрока.Синоним="Код";
НоваяСтрока.ТипДанных=?(СправочникВИБ.ТипКода = "Текстовый","Строка","Число");
Для Инд =1 По СправочникВИБ.Реквизит() Цикл
ТекРеквизит=СправочникВИБ.Реквизит(Инд);
ТипРеквизита = ТекРеквизит.Тип();
НоваяСтрока=Реквизиты.Добавить();
НоваяСтрока.Имя=ТекРеквизит.Идентификатор();
НоваяСтрока.Синоним=ТекРеквизит.Представление();
Если ТипРеквизита = "Строка"
ИЛИ ТипРеквизита = "Число"
ИЛИ ТипРеквизита = "Дата"
ИЛИ ТипРеквизита = "Булево" Тогда
НоваяСтрока.ТипДанных=ТипРеквизита;
ИначеЕсли (ТипРеквизита = "Справочник"
ИЛИ ТипРеквизита = "Перечисление" ИЛИ ТипРеквизита = "Документ")
И НЕ ПустаяСтрока(ТекРеквизит.Вид()) Тогда
НоваяСтрока.ТипДанных = ТипРеквизита + "." + ТекРеквизит.Вид();
КонецЕсли;
КонецЦикла;
Иначе
СправочникВИБ = ТекСоединениеВИБ.Metadata.Catalogs[Наименование];
Синоним=СправочникВИБ.Presentation();
ИерархическийСправочник=СправочникВИБ.Hierarchical;
Если ИерархическийСправочник Тогда
Если СправочникВИБ.HierarchyType=ТекСоединениеВИБ.Metadata.ObjectProperties.HierarchyType.HierarchyFoldersAndItems Тогда
ВидИерархии=Перечисления.ВидИерархии.ИерархияГруппИЭлементов;
Иначе
ВидИерархии=Перечисления.ВидИерархии.ИерархияЭлементов;
КонецЕсли;
КонецЕсли;
// Отдельно добавим код и наименование.
Если СправочникВИБ.CodeLength <> 0 Тогда
ТипКода = ?(СправочникВИБ.CodeType = ТекСоединениеВИБ.Метаданные.ObjectProperties.CatalogCodeType.String, "Строка", "Число");
СтрокаРеквизитов = Реквизиты.Добавить(); // Добавим синхронизацию по коду;;
СтрокаРеквизитов.Имя="Код";
СтрокаРеквизитов.Синоним="Код";
СтрокаРеквизитов.ТипДанных = ТипКода;
СтрокаРеквизитов.Использование=Перечисления.ИспользованиеРеквизита.ДляГруппыИЭлемента;
КонецЕсли;
Если СправочникВИБ.DescriptionLength <> 0 Тогда
СтрокаРеквизитов = Реквизиты.Добавить(); // Добавим синхронизацию по коду;;
СтрокаРеквизитов.Имя="Наименование";
СтрокаРеквизитов.Синоним="Наименование";
СтрокаРеквизитов.ТипДанных = "Строка";
СтрокаРеквизитов.Использование=Перечисления.ИспользованиеРеквизита.ДляГруппыИЭлемента;
КонецЕсли;
Для Каждого Реквизит Из СправочникВИБ.Attributes Цикл
ПримитивныйТип = УправлениеОтчетами.ПолучитьОписаниеПримитивногоТипаИзСОМ(ТекСоединениеВИБ, Реквизит.Type);
Если ПримитивныйТип <> Неопределено Тогда // Строки неограниченной длины не должны попадать в список выбора.
Если ПримитивныйТип.СодержитТип(Тип("Строка")) И ПримитивныйТип.КвалификаторыСтроки.Длина = 0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
СтрокаРеквизитов = Реквизиты.Добавить();
СтрокаРеквизитов.Имя=Реквизит.Name;
СтрокаРеквизитов.Синоним=Реквизит.Synonym;
СтрокаРеквизитов.ТипДанных = ОбщегоНазначения.ПолучитьСтрокуТиповДанныхВИБ(ТекСоединениеВИБ,Реквизит.Type,Владелец,Ложь);
Если ИерархическийСправочник Тогда
Если Реквизит.Use=ТекСоединениеВИБ.Metadata.ObjectProperties.AttributeUse.ForFolder Тогда
СтрокаРеквизитов.Использование=Перечисления.ИспользованиеРеквизита.ДляГруппы;
ИначеЕсли Реквизит.Use=ТекСоединениеВИБ.Metadata.ObjectProperties.AttributeUse.ForItem Тогда
СтрокаРеквизитов.Использование=Перечисления.ИспользованиеРеквизита.ДляЭлемента;
Иначе
СтрокаРеквизитов.Использование=Перечисления.ИспользованиеРеквизита.ДляГруппыИЭлемента;
КонецЕсли;
Иначе
СтрокаРеквизитов.Использование=Перечисления.ИспользованиеРеквизита.ДляЭлемента;
КонецЕсли;
КонецЦикла;
// ВСТАВКА НАЧАЛО
ОбщиеРеквизитыВИБ = ТекСоединениеВИБ.Metadata.CommonAttributes;
Для Каждого Реквизит Из ОбщиеРеквизитыВИБ Цикл
ЭлементСостава = Реквизит.Состав.Найти(СправочникВИБ);
ИспользованиеОбщегоРеквизита = ЭлементСостава <> Неопределено
И ЭлементСостава.Использование = ТекСоединениеВИБ.Metadata.ObjectProperties.CommonAttributeUse.Use;
Если НЕ ИспользованиеОбщегоРеквизита Тогда
Продолжить;
КонецЕсли;
ПримитивныйТип = УправлениеОтчетами.ПолучитьОписаниеПримитивногоТипаИзСОМ(ТекСоединениеВИБ, Реквизит.Type);
Если ПримитивныйТип <> Неопределено Тогда
// Строки неограниченной длины не должны попадать в список выбора.
Если ПримитивныйТип.СодержитТип(Тип("Строка")) И ПримитивныйТип.КвалификаторыСтроки.Длина = 0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
СтрокаРеквизитов = Реквизиты.Добавить();
СтрокаРеквизитов.Имя=Реквизит.Name;
СтрокаРеквизитов.Синоним=Реквизит.Synonym;
СтрокаРеквизитов.ТипДанных = ОбщегоНазначения.ПолучитьСтрокуТиповДанныхВИБ(ТекСоединениеВИБ,Реквизит.Type,Владелец,Ложь);
КонецЦикла;
// ВСТАВКА КОНЕЦ
Если СправочникВИБ.Owners.Count()>0 Тогда
Для Каждого ТекВладелец ИЗ СправочникВИБ.Owners Цикл
СтрТипЗначения=ТекВладелец.FullName();
Если ОбщегоНазначения.ПроверитьНаличиеОписанияОбъектаВИБ(ТекСоединениеВИБ,СтрТипЗначения,Владелец,Истина) Тогда
СтрокаВладелец = Владельцы.Добавить();
СтрокаВладелец.Имя = ТекВладелец.Name;
СтрокаВладелец.Синоним = ТекВладелец.Synonym;
СтрокаВладелец.ТипДанных = СтрТипЗначения;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры // ЗаполнитьРеквизитыОбъекта()
Может кому-то поможет временное решение.
В модуле объекта справочника "СправочникиВИБ" нужно добавить небольшую вставку в текст модуля, процедура "ЗаполнитьРеквизитыОбъекта".
Проверил, консолидация начала видеть общие реквизиты и без проблем заработала синхронизация по общим реквизитам.
Процедура ЗаполнитьРеквизитыОбъекта() Экспорт
Если Не ПроверитьНаименование() Тогда
Возврат;
КонецЕсли;
Если ТекСоединениеВИБ=Неопределено Тогда
ТекСоединениеВИБ=ОбщегоНазначения.ПолучитьСоединениеСВИБПоУмолчанию(Владелец,1);
Если ТекСоединениеВИБ=Неопределено Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Реквизиты.Очистить();
Владельцы.Очистить();
Если Использование77() Тогда
СправочникВИБ=ТекСоединениеВИБ.Метаданные().Справочник(Наименование);
Синоним=СправочникВИБ.Представление();
НоваяСтрока=Реквизиты.Добавить();
НоваяСтрока.Имя="Наименование";
НоваяСтрока.Синоним="Наименование";
НоваяСтрока.ТипДанных="Строка";
НоваяСтрока=Реквизиты.Добавить();
НоваяСтрока.Имя="Код";
НоваяСтрока.Синоним="Код";
НоваяСтрока.ТипДанных=?(СправочникВИБ.ТипКода = "Текстовый","Строка","Число");
Для Инд =1 По СправочникВИБ.Реквизит() Цикл
ТекРеквизит=СправочникВИБ.Реквизит(Инд);
ТипРеквизита = ТекРеквизит.Тип();
НоваяСтрока=Реквизиты.Добавить();
НоваяСтрока.Имя=ТекРеквизит.Идентификатор();
НоваяСтрока.Синоним=ТекРеквизит.Представление();
Если ТипРеквизита = "Строка"
ИЛИ ТипРеквизита = "Число"
ИЛИ ТипРеквизита = "Дата"
ИЛИ ТипРеквизита = "Булево" Тогда
НоваяСтрока.ТипДанных=ТипРеквизита;
ИначеЕсли (ТипРеквизита = "Справочник"
ИЛИ ТипРеквизита = "Перечисление" ИЛИ ТипРеквизита = "Документ")
И НЕ ПустаяСтрока(ТекРеквизит.Вид()) Тогда
НоваяСтрока.ТипДанных = ТипРеквизита + "." + ТекРеквизит.Вид();
КонецЕсли;
КонецЦикла;
Иначе
СправочникВИБ = ТекСоединениеВИБ.Metadata.Catalogs[Наименование];
Синоним=СправочникВИБ.Presentation();
ИерархическийСправочник=СправочникВИБ.Hierarchical;
Если ИерархическийСправочник Тогда
Если СправочникВИБ.HierarchyType=ТекСоединениеВИБ.Metadata.ObjectProperties.HierarchyType.HierarchyFoldersAndItems Тогда
ВидИерархии=Перечисления.ВидИерархии.ИерархияГруппИЭлементов;
Иначе
ВидИерархии=Перечисления.ВидИерархии.ИерархияЭлементов;
КонецЕсли;
КонецЕсли;
// Отдельно добавим код и наименование.
Если СправочникВИБ.CodeLength <> 0 Тогда
ТипКода = ?(СправочникВИБ.CodeType = ТекСоединениеВИБ.Метаданные.ObjectProperties.CatalogCodeType.String, "Строка", "Число");
СтрокаРеквизитов = Реквизиты.Добавить(); // Добавим синхронизацию по коду;;
СтрокаРеквизитов.Имя="Код";
СтрокаРеквизитов.Синоним="Код";
СтрокаРеквизитов.ТипДанных = ТипКода;
СтрокаРеквизитов.Использование=Перечисления.ИспользованиеРеквизита.ДляГруппыИЭлемента;
КонецЕсли;
Если СправочникВИБ.DescriptionLength <> 0 Тогда
СтрокаРеквизитов = Реквизиты.Добавить(); // Добавим синхронизацию по коду;;
СтрокаРеквизитов.Имя="Наименование";
СтрокаРеквизитов.Синоним="Наименование";
СтрокаРеквизитов.ТипДанных = "Строка";
СтрокаРеквизитов.Использование=Перечисления.ИспользованиеРеквизита.ДляГруппыИЭлемента;
КонецЕсли;
Для Каждого Реквизит Из СправочникВИБ.Attributes Цикл
ПримитивныйТип = УправлениеОтчетами.ПолучитьОписаниеПримитивногоТипаИзСОМ(ТекСоединениеВИБ, Реквизит.Type);
Если ПримитивныйТип <> Неопределено Тогда // Строки неограниченной длины не должны попадать в список выбора.
Если ПримитивныйТип.СодержитТип(Тип("Строка")) И ПримитивныйТип.КвалификаторыСтроки.Длина = 0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
СтрокаРеквизитов = Реквизиты.Добавить();
СтрокаРеквизитов.Имя=Реквизит.Name;
СтрокаРеквизитов.Синоним=Реквизит.Synonym;
СтрокаРеквизитов.ТипДанных = ОбщегоНазначения.ПолучитьСтрокуТиповДанныхВИБ(ТекСоединениеВИБ,Реквизит.Type,Владелец,Ложь);
Если ИерархическийСправочник Тогда
Если Реквизит.Use=ТекСоединениеВИБ.Metadata.ObjectProperties.AttributeUse.ForFolder Тогда
СтрокаРеквизитов.Использование=Перечисления.ИспользованиеРеквизита.ДляГруппы;
ИначеЕсли Реквизит.Use=ТекСоединениеВИБ.Metadata.ObjectProperties.AttributeUse.ForItem Тогда
СтрокаРеквизитов.Использование=Перечисления.ИспользованиеРеквизита.ДляЭлемента;
Иначе
СтрокаРеквизитов.Использование=Перечисления.ИспользованиеРеквизита.ДляГруппыИЭлемента;
КонецЕсли;
Иначе
СтрокаРеквизитов.Использование=Перечисления.ИспользованиеРеквизита.ДляЭлемента;
КонецЕсли;
КонецЦикла;
// ВСТАВКА НАЧАЛО
ОбщиеРеквизитыВИБ = ТекСоединениеВИБ.Metadata.CommonAttributes;
Для Каждого Реквизит Из ОбщиеРеквизитыВИБ Цикл
ЭлементСостава = Реквизит.Состав.Найти(СправочникВИБ);
ИспользованиеОбщегоРеквизита = ЭлементСостава <> Неопределено
И ЭлементСостава.Использование = ТекСоединениеВИБ.Metadata.ObjectProperties.CommonAttributeUse.Use;
Если НЕ ИспользованиеОбщегоРеквизита Тогда
Продолжить;
КонецЕсли;
ПримитивныйТип = УправлениеОтчетами.ПолучитьОписаниеПримитивногоТипаИзСОМ(ТекСоединениеВИБ, Реквизит.Type);
Если ПримитивныйТип <> Неопределено Тогда
// Строки неограниченной длины не должны попадать в список выбора.
Если ПримитивныйТип.СодержитТип(Тип("Строка")) И ПримитивныйТип.КвалификаторыСтроки.Длина = 0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
СтрокаРеквизитов = Реквизиты.Добавить();
СтрокаРеквизитов.Имя=Реквизит.Name;
СтрокаРеквизитов.Синоним=Реквизит.Synonym;
СтрокаРеквизитов.ТипДанных = ОбщегоНазначения.ПолучитьСтрокуТиповДанныхВИБ(ТекСоединениеВИБ,Реквизит.Type,Владелец,Ложь);
КонецЦикла;
// ВСТАВКА КОНЕЦ
Если СправочникВИБ.Owners.Count()>0 Тогда
Для Каждого ТекВладелец ИЗ СправочникВИБ.Owners Цикл
СтрТипЗначения=ТекВладелец.FullName();
Если ОбщегоНазначения.ПроверитьНаличиеОписанияОбъектаВИБ(ТекСоединениеВИБ,СтрТипЗначения,Владелец,Истина) Тогда
СтрокаВладелец = Владельцы.Добавить();
СтрокаВладелец.Имя = ТекВладелец.Name;
СтрокаВладелец.Синоним = ТекВладелец.Synonym;
СтрокаВладелец.ТипДанных = СтрТипЗначения;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры // ЗаполнитьРеквизитыОбъекта()
Свернуть все
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот