РольПоляНабораДанныхКомпоновкиДанных.Основное

Свойства · IsMain

Тип: Булево. Это свойство учитывается компоновщиком макета при формировании макета расшифровки для детальных записей. Генератор макета для табличного документа при генерации макета ячеек детальных записей, если в наборе данных есть поле с ролью "Основное", добавляет это поле первым в расшифровку каждой ячейки, и устанавливает основное действие расшифровки в значение "Открыть". Если основных полей больше одного (не рекомендуется), то используется первое.

Полное описание, параметры и ограничения

РольПоляНабораДанныхКомпоновкиДанных.Основное (DataCompositionDataSetFieldRole.IsMain)

РольПоляНабораДанныхКомпоновкиДанных (DataCompositionDataSetFieldRole)

Основное (IsMain)

Доступен, начиная с версии 8.5.1.

Использование:
Чтение и запись.
Описание:
Тип: Булево.
Это свойство учитывается компоновщиком макета при формировании макета расшифровки для детальных записей.
Генератор макета для табличного документа при генерации макета ячеек детальных записей, если в наборе данных есть поле с ролью "Основное", добавляет это поле первым в расшифровку каждой ячейки, и устанавливает основное действие расшифровки в значение "Открыть". Если основных полей больше одного (не рекомендуется), то используется первое.
Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.5.1.

Методическая информация

Практические примеры

Связать название товара с его измерением

Код BOOK является измерением, Книга — его реквизитом. Родитель задаётся путём поля Товар, а не его отображаемым заголовком.

Где и как запускать

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

Подготовка

  1. В своей отдельной учебной базе 8.5.1.1343 создайте серверный общий модуль УчебныеРолиПолейСКД. Вставьте полный текст одного урока: процедуру и две функции ниже неё.

  2. Вызовите УчебныеРолиПолейСКД.ВыполнитьПример() из серверной команды собственной обработки. Схема и таблицы остаются на сервере, на клиент выводятся только сообщения.

  3. Товары, даты, остатки и номер 50 заданы собственными константами. Код не читает и не изменяет регистры, план счетов, документы или файлы.

  4. Схема описывается явно: АвтоЗаполнениеДоступныхПолей выключено, каждое поле добавляется через коллекцию Поля. Роль получается из настоящего поля, отдельного конструктора роли нет.

  5. В первом уроке выполняется СКД. Уроки остатков, измерений, периодов и бухгалтерских ролей отдельно проверяют настройку схемы и её исходные строки; это не доказательство корректных итогов рабочего отчёта.

Процедура ВыполнитьПример() Экспорт
    Схема = СоздатьУчебнуюСхему("ВЫБРАТЬ ""BOOK"" КАК Товар, ""Книга"" КАК Название, 750 КАК Сумма
    |ОБЪЕДИНИТЬ ВСЕ
    |ВЫБРАТЬ ""PEN"", ""Ручка"", 50");
    Набор = Схема.НаборыДанных.Получить(0);
    Товар = ДобавитьУчебноеПоле(Набор, "Товар", "Строка");
    Название = ДобавитьУчебноеПоле(Набор, "Название", "Строка");
    ДобавитьУчебноеПоле(Набор, "Сумма", "Число");
    Товар.Роль.Измерение = Истина;
    Товар.Роль.ИгнорироватьЗначенияNULL = Истина;
    Товар.Роль.Основное = Истина;
    РольНазвания = Название.Роль;
    РольНазвания.РеквизитИзмерения = Истина;
    РольНазвания.РодительскоеИзмерение = Товар.ПутьКДанным;
    РольНазвания.Измерение = Ложь;
    РольНазвания.Основное = Ложь;
    Сообщить(РольНазвания.РодительскоеИзмерение = "Товар");
    Сообщить(Набор.Поля.Найти(РольНазвания.РодительскоеИзмерение) = Товар);
    Сообщить(РольНазвания.РеквизитИзмерения И НЕ РольНазвания.Измерение);
    Сообщить(Товар.Роль.ИгнорироватьЗначенияNULL);
    Сообщить(Товар.Роль.Основное И НЕ РольНазвания.Основное);
    Запрос = Новый Запрос(Набор.Запрос);
    Строки = Запрос.Выполнить().Выгрузить();
    Сообщить(Строки.Количество() = 2);
    Сообщить(Строки.Найти("BOOK", "Товар").Название = "Книга");
    Сообщить(Строки.Найти("PEN", "Товар").Название = "Ручка");
    Сообщить(Строки.Итог("Сумма") = 800);
КонецПроцедуры

Функция СоздатьУчебнуюСхему(ТекстЗапроса)
    Схема = Новый СхемаКомпоновкиДанных;
    Источник = Схема.ИсточникиДанных.Добавить();
    Источник.Имя = "УчебныйИсточник";
    Источник.ТипИсточникаДанных = "Local";
    Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    Набор.Имя = "УчебныеДанные";
    Набор.ИсточникДанных = Источник.Имя;
    Набор.АвтоЗаполнениеДоступныхПолей = Ложь;
    Набор.Запрос = ТекстЗапроса;
    Возврат Схема;
КонецФункции

Функция ДобавитьУчебноеПоле(Набор, ИмяПоля, ТипПоля)
    Поле = Набор.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    Поле.Поле = ИмяПоля;
    Поле.ПутьКДанным = ИмяПоля;
    Поле.Заголовок = ИмяПоля;
    Поле.ТипЗначения = Новый ОписаниеТипов(ТипПоля);
    Возврат Поле;
КонецФункции

Разбор по шагам

  1. Создать самостоятельное поле Товар и поясняющее поле Название. Обозначить роль первого как Измерение.

  2. У Название включить РеквизитИзмерения, выключить самостоятельное измерение и указать РодительскоеИзмерение = Товар.ПутьКДанным.

  3. Для Товар установить ИгнорироватьЗначенияNULL: при группировке это исключает групповые записи с NULL. В собственных двух строках NULL нет, поэтому эффект группировки этим запуском не проверяется.

  4. Включить Основное только у Товар. В 8.5.1 генератор табличного документа помещает основное поле первым в расшифровке деталей; этот урок не создаёт табличный документ и не открывает объекты.

  5. Проверить настоящую связь полей через Найти и исходные пары BOOK/Книга, PEN/Ручка.

Как проверить результат

  1. Девять проверок дают Истина.

  2. Основное включено только у одного поля. BOOK — строка, не ссылка справочника: этот образец не обещает открытие карточки товара.

Ожидаемый результат

Корректно настроенные измерение, его название и единственное основное поле собственной схемы.

На что обратить внимание

  1. РодительскоеИзмерение — путь к данным, не название общего модуля и не имя таблицы SQL.

  2. NULL не равен пустой строке или Неопределено; флаг не является фильтром всех пустых значений.

  3. Несколько основных полей не рекомендуются. Это роль расшифровки, а не сортировка результата.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Построить отчёт без ошибочных ролей остатка и периода

Явно описываем четыре поля запроса и получаем две строки отчёта: Книга 750, Ручка 50. Сумма продажи — не остаток на дату.

Где и как запускать

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

Подготовка

  1. В своей отдельной учебной базе 8.5.1.1343 создайте серверный общий модуль УчебныеРолиПолейСКД. Вставьте полный текст одного урока: процедуру и две функции ниже неё.

  2. Вызовите УчебныеРолиПолейСКД.ВыполнитьПример() из серверной команды собственной обработки. Схема и таблицы остаются на сервере, на клиент выводятся только сообщения.

  3. Товары, даты, остатки и номер 50 заданы собственными константами. Код не читает и не изменяет регистры, план счетов, документы или файлы.

  4. Схема описывается явно: АвтоЗаполнениеДоступныхПолей выключено, каждое поле добавляется через коллекцию Поля. Роль получается из настоящего поля, отдельного конструктора роли нет.

  5. В первом уроке выполняется СКД. Уроки остатков, измерений, периодов и бухгалтерских ролей отдельно проверяют настройку схемы и её исходные строки; это не доказательство корректных итогов рабочего отчёта.

Процедура ВыполнитьПример() Экспорт
    Схема = СоздатьУчебнуюСхему("ВЫБРАТЬ
    |    ""Книга"" КАК Наименование,
    |    3 КАК Количество,
    |    250 КАК Цена,
    |    750 КАК Сумма
    |ОБЪЕДИНИТЬ ВСЕ
    |ВЫБРАТЬ ""Ручка"", 1, 50, 50");
    Набор = Схема.НаборыДанных.Получить(0);
    ДобавитьУчебноеПоле(Набор, "Наименование", "Строка");
    ДобавитьУчебноеПоле(Набор, "Количество", "Число");
    ДобавитьУчебноеПоле(Набор, "Цена", "Число");
    Сумма = ДобавитьУчебноеПоле(Набор, "Сумма", "Число");
    РольСуммы = Сумма.Роль;
    РольСуммы.Остаток = Ложь;
    РольСуммы.Измерение = Ложь;
    РольСуммы.НомерПериода = 0;
    РольСуммы.ТипОстатка = ТипОстаткаКомпоновкиДанных.Нет;
    РольСуммы.ТипБухгалтерскогоОстатка = ТипБухгалтерскогоОстаткаКомпоновкиДанных.Нет;
    РольСуммы.Основное = Ложь;
    Сообщить(ТипЗнч(РольСуммы) = Тип("РольПоляНабораДанныхКомпоновкиДанных"));
    Сообщить(ТипЗнч(РольСуммы.Обязательное) = Тип("Булево"));
    Сообщить(НЕ РольСуммы.Остаток И НЕ РольСуммы.Измерение);
    Сообщить(РольСуммы.НомерПериода = 0);
    Сообщить(РольСуммы.ТипОстатка = ТипОстаткаКомпоновкиДанных.Нет);
    Сообщить(НЕ РольСуммы.Основное);
    РабочиеНастройки = Схема.НастройкиПоУмолчанию;
    Для Каждого ПолеСхемы Из Набор.Поля Цикл
        Выбранное = РабочиеНастройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
        Выбранное.Поле = Новый ПолеКомпоновкиДанных(ПолеСхемы.ПутьКДанным);
        Выбранное.Использование = Истина;
    КонецЦикла;
    Детали = РабочиеНастройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
    Детали.Использование = Истина;
    АвтоВыбор = Детали.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
    АвтоВыбор.Использование = Истина;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = КомпоновщикМакета.Выполнить(Схема, РабочиеНастройки, , ,
        Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    Процессор = Новый ПроцессорКомпоновкиДанных;
    Процессор.Инициализировать(Макет);
    Приемник = Новый ТаблицаЗначений;
    Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    Вывод.ОтображатьПроцентВывода = Ложь;
    Вывод.УстановитьОбъект(Приемник);
    Результат = Вывод.Вывести(Процессор, Ложь);
    Сообщить(Результат.Количество() = 2);
    Сообщить(Результат.Итог("Сумма") = 800);
    Сообщить(Результат.Найти("Книга", "Наименование").Количество = 3);
КонецПроцедуры

Функция СоздатьУчебнуюСхему(ТекстЗапроса)
    Схема = Новый СхемаКомпоновкиДанных;
    Источник = Схема.ИсточникиДанных.Добавить();
    Источник.Имя = "УчебныйИсточник";
    Источник.ТипИсточникаДанных = "Local";
    Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    Набор.Имя = "УчебныеДанные";
    Набор.ИсточникДанных = Источник.Имя;
    Набор.АвтоЗаполнениеДоступныхПолей = Ложь;
    Набор.Запрос = ТекстЗапроса;
    Возврат Схема;
КонецФункции

Функция ДобавитьУчебноеПоле(Набор, ИмяПоля, ТипПоля)
    Поле = Набор.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    Поле.Поле = ИмяПоля;
    Поле.ПутьКДанным = ИмяПоля;
    Поле.Заголовок = ИмяПоля;
    Поле.ТипЗначения = Новый ОписаниеТипов(ТипПоля);
    Возврат Поле;
КонецФункции

Разбор по шагам

  1. Создать собственную схему и четыре настоящих поля. РольСуммы — объект из Сумма.Роль, не копия и не произвольная структура.

  2. Отключить роли остатка, измерения и основного поля; номер периода 0. Обязательное только прочитать: это вычисляемая служебная информация, не пользовательский переключатель.

  3. Добавить четыре выбранных поля и детальную группировку. Скомпилировать макет именно для вывода в коллекцию значений.

  4. Выполнить СКД и сравнить собственный результат с двумя константами. Итог 800 здесь проверяется у готовой таблицы, а не выдумывается из флага роли.

Как проверить результат

  1. Девять проверок выводят Истина.

  2. В Результат две строки, у Книга количество 3, итог Сумма 800. Порядок строк не проверяется.

Ожидаемый результат

Полный программный отчёт с явно описанной схемой и проверяемым результатом.

На что обратить внимание

  1. Роль и Обязательное нельзя заменить присваиванием: свойства только для чтения. Изменяются разрешённые свойства объекта Роль.

  2. НомерПериода не является номером строки таблицы. Для непериодного поля оставляют 0.

  3. ТипБухгалтерскогоОстатка.Нет подходит обычной сумме продажи: это не дебет и не кредит.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.