Нет возможности синхронизации объектов по общему реквизиту объекта ВИБ. Временнное решение.

1. AlikK 02.02.12 16:06 Сейчас в теме
Нет возможности синхронизации объектов по общему реквизиту объекта ВИБ.
Может кому-то поможет временное решение.

В модуле объекта справочника "СправочникиВИБ" нужно добавить небольшую вставку в текст модуля, процедура "ЗаполнитьРеквизитыОбъекта".

Проверил, консолидация начала видеть общие реквизиты и без проблем заработала синхронизация по общим реквизитам.

Процедура ЗаполнитьРеквизитыОбъекта() Экспорт

Если Не ПроверитьНаименование() Тогда

Возврат;

КонецЕсли;

Если ТекСоединениеВИБ=Неопределено Тогда

ТекСоединениеВИБ=ОбщегоНазначения.ПолучитьСоединениеСВИБПоУмолчанию(Владелец,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;

СтрокаВладелец.ТипДанных = СтрТипЗначения;

КонецЕсли;

КонецЦикла;

КонецЕсли;

КонецЕсли;

КонецПроцедуры // ЗаполнитьРеквизитыОбъекта()
Anselm; +1
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот