Коллекция элементов состава общего реквизита.
Полное описание, параметры и ограничения
СоставОбщегоРеквизита (CommonAttributeContent)
СоставОбщегоРеквизита (CommonAttributeContent)
Доступен, начиная с версии 8.2.
Элементы коллекции:
ЭлементСоставаОбщегоРеквизита
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы состава общего реквизита.
Методы:
Количество (Count)
Найти (Find)
Содержит (Contains)
Описание:
Коллекция элементов состава общего реквизита.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Проверить, как общий реквизит включён в Номенклатуру
Ищем элемент состава по описанию справочника, затем сравниваем два способа поиска. Не считаем размер состава количеством товаров.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Запускайте в учебной копии конфигурации. Примеры читают структуру метаданных, но не создают объекты, не записывают регистры и не проводят документы.
Сверяйте вывод с деревом конфигурации в Конфигураторе. Имена, длины и настройки в УНФ, КА2, БП, УТ 11 и УТ 10.3 могут различаться.
Имена объектов взяты из XML КА2 Progress: C:\claude\KA2\Progress\XML_CF_KA2_PROGRESS. Исходные XML не изменяйте. Выполняйте код только в своей учебной копии соответствующей конфигурации.
В другой конфигурации предварительно найдите аналогичный объект в Конфигураторе и замените только строку имени в поиске. Отсутствие имени обрабатывается до чтения свойств; оно не доказывает отсутствие аналогичной возможности.
Каждый урок запускайте отдельно. Код не вызывает бизнес-функции модулей и обработчики команд, не переключает привилегированный режим и не меняет параметры сеанса.
Описание = Метаданные.ОбщиеРеквизиты.Найти("КомментарийЯзык1");
Если Описание = Неопределено Тогда
ВызватьИсключение "В учебной конфигурации отсутствует ОбщиеРеквизиты.КомментарийЯзык1";
КонецЕсли;
Справочник = Метаданные.Справочники.Найти("Номенклатура");
Если Справочник = Неопределено Тогда
ВызватьИсключение "В учебной конфигурации отсутствует Справочники.Номенклатура";
КонецЕсли;
Сообщить("Автоиспользование: " + Строка(Описание.АвтоИспользование));
Сообщить("Элементов состава: " + Строка(Описание.Состав.Количество()));
Сообщить(Описание.Состав.Содержит(Справочник));
Элемент = Описание.Состав.Найти(Справочник);
Если Элемент = Неопределено Тогда
Сообщить("Элемент состава не получен; проверьте реквизит и объект конфигурации");
Иначе
Сообщить(Элемент.Метаданные = Справочник);
Сообщить(Элемент.Использование);
Сообщить("Условие элемента: " + Строка(Элемент.УсловноеРазделение));
ПоИмени = Описание.Состав.Найти(Справочник.ПолноеИмя());
Сообщить(ПоИмени = Элемент);
КонецЕсли;Разбор по шагам
Справочник ищем отдельно и не подменяем его именем произвольного документа.
Состав хранит описания объектов и настройки включения общего реквизита.
У элемента читаем Использование; автоматическое значение нужно интерпретировать вместе с АвтоИспользование общего реквизита.
УсловноеРазделение элемента — описание условия, а не вычисленный результат разделения текущих данных.
Как проверить результат
Если элемент найден, его Метаданные совпадают с выбранным справочником; поиск по полному имени должен найти тот же элемент.
Если элемент отсутствует, обращений к его свойствам нет. Не требуйте Истина от Содержит в любой конфигурации.
Ожидаемый результат
Связаны общий реквизит, объект состава и способ включения.
На что обратить внимание
Содержит само по себе не означает фактическое использование реквизита: нужно учитывать Использование и АвтоИспользование.
Количество элементов состава — число описаний, а не количество записей номенклатуры.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Отделить автоматическое использование общего реквизита от явного состава
ОбластьДанныхОсновныеДанные имеет автоматическое использование. Для Номенклатуры сначала ищем явную настройку, а отсутствие записи не объявляем отсутствием общего реквизита.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Запускайте в учебной копии конфигурации. Примеры читают структуру метаданных, но не создают объекты, не записывают регистры и не проводят документы.
Сверяйте вывод с деревом конфигурации в Конфигураторе. Имена, длины и настройки в УНФ, КА2, БП, УТ 11 и УТ 10.3 могут различаться.
Имена объектов взяты из XML КА2 Progress: C:\claude\KA2\Progress\XML_CF_KA2_PROGRESS. Исходные XML не изменяйте. Выполняйте код только в своей учебной копии соответствующей конфигурации.
В другой конфигурации предварительно найдите аналогичный объект в Конфигураторе и замените только строку имени в поиске. Отсутствие имени обрабатывается до чтения свойств; оно не доказывает отсутствие аналогичной возможности.
Каждый урок запускайте отдельно. Код не вызывает бизнес-функции модулей и обработчики команд, не переключает привилегированный режим и не меняет параметры сеанса.
Варианты = Метаданные.СвойстваОбъектов;
Описание = Метаданные.ОбщиеРеквизиты.Найти("ОбластьДанныхОсновныеДанные");
Если Описание = Неопределено Тогда
ВызватьИсключение "В учебной конфигурации отсутствует ОбщиеРеквизиты.ОбластьДанныхОсновныеДанные";
КонецЕсли;
Номенклатура = Метаданные.Справочники.Найти("Номенклатура");
Если Номенклатура = Неопределено Тогда
ВызватьИсключение "В учебной конфигурации отсутствует Справочники.Номенклатура";
КонецЕсли;
Сообщить(Описание.АвтоИспользование = Варианты.АвтоИспользованиеОбщегоРеквизита.Использовать);
Настройка = Описание.Состав.Найти(Номенклатура);
Если Настройка = Неопределено Тогда
Сообщить("Явной настройки Номенклатуры нет; учитывайте АвтоИспользование, не объявляйте реквизит отсутствующим");
Иначе
Сообщить(Настройка.Метаданные = Номенклатура);
Если Настройка.Использование = Варианты.ИспользованиеОбщегоРеквизита.Авто Тогда
Сообщить("Явный элемент состава наследует автоматическую настройку");
ИначеЕсли Настройка.Использование = Варианты.ИспользованиеОбщегоРеквизита.Использовать Тогда
Сообщить("Для объекта явно включено использование");
ИначеЕсли Настройка.Использование = Варианты.ИспользованиеОбщегоРеквизита.НеИспользовать Тогда
Сообщить("Для объекта явно выключено использование");
Иначе
ВызватьИсключение "Неизвестный вариант использования общего реквизита";
КонецЕсли;
Сообщить("Тип условия разделения элемента: " + Строка(ТипЗнч(Настройка.УсловноеРазделение)));
КонецЕсли;Разбор по шагам
АвтоИспользование всего общего реквизита и Использование конкретного элемента состава имеют разные контейнеры вариантов.
Найти получает объект метаданных Номенклатуры. Состав может содержать только явные настройки, поэтому отсутствие обрабатывается отдельной веткой.
В найденном элементе проверяется владелец, затем различаются Авто, Использовать, НеИспользовать. Одного числового/строкового сравнения нет.
УсловноеРазделение элемента диагностируется по типу, не вызывается как константа и не изменяется.
Как проверить результат
Первое сравнение Истина по XML. Затем либо понятное отсутствие явного элемента, либо его фактическое правило.
Никакой флаг использования или параметр сеанса не изменён.
Ожидаемый результат
Отсутствие явного элемента состава не стало ложным выводом об отсутствии общего реквизита.
На что обратить внимание
Не объединяйте АвтоИспользование и Использование в одно перечисление.
Результат не доказывает доступ конкретного пользователя к данным.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.