Описать старший и дочерний периоды отчёта

Учебные задачи

Месяц получает номер 1, День номер 2. На собственных датах видно, какой период является старшим.

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

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

Подготовка

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

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

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

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

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

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

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

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

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

  1. Создать поля Месяц и День типа Дата. Поле Сумма не является периодом.

  2. Назначить периоду Месяц номер 1, Дню номер 2. Номера описывают иерархию периодов, а не дату 1-го и 2-го числа.

  3. Сначала описать старший период как Основной, затем намеренно изменить его на Дополнительный. Это разрешает не использовать его в компоновке, когда используется дочерний период.

  4. Проверить два собственных дня 10 и 11 января, общий месяц 1 января и сумму 800. Настройки группировки и итоговый отчёт здесь не строятся.

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

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

  2. После изменения РольМесяца.ТипПериода = Дополнительный, номер остаётся 1. У Дня номер 2, у Суммы 0.

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

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

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

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

  2. Если запрос возвращает регистратор и номер строки, надо описывать их реальные уровни, а не слепо копировать Месяц/День.

  3. Этот запуск проверяет описание и исходные даты, не итоговые остатки по периодам.

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

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

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

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

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