При разработке отчетов на Системе компоновки данных (СКД) часто возникает задача группировки или отображения данных по периодам, в частности — по кварталам. Стандартный вывод даты не всегда информативен, а простое получение номера квартала функцией запроса часто не устраивает пользователей из-за отсутствия года или некрасивого представления. В этой статье мы подробно разберем все способы решения этой задачи: от самых простых до наиболее гибких и профессиональных.
Прежде чем приступать к написанию кода или изменению запроса, рассмотрим самый простой механизм, заложенный в платформу 1С. Если в вашем наборе данных (запросе) уже есть поле типа Дата, СКД автоматически понимает его структуру.
Разберем этот метод пошагово:
ДатаДокумента). Обратите внимание на иконку «плюс» слева от названия поля. Нажмите на неё.ДатаДокумента.Квартал.Важное ограничение: Этот способ удобен для быстрой настройки, но он имеет существенный минус — формат вывода будет стандартным (просто цифра квартала), и вы не сможете легко изменить его на представление вида «III кв. 2023 г.». Кроме того, если вы хотите, чтобы поле было доступно сразу без лишних манипуляций пользователя, лучше использовать другие методы.
Проанализируем ситуацию, когда нам нужно подготовить данные еще на уровне извлечения из базы данных. В языке запросов 1С существуют специальные функции для работы с датами.
Рассмотрим пример кода в тексте запроса:
ВЫБРАТЬ
Продажи.Период КАК Дата,
КВАРТАЛ(Продажи.Период) КАК НомерКвартала,
НАЧАЛОПЕРИОДА(Продажи.Период, КВАРТАЛ) КАК НачалоКвартала
ИЗ
РегистрНакопления.Продажи КАК Продажи
Здесь мы видим два подхода:
КВАРТАЛ() вернет просто число от 1 до 4. Это удобно для расчетов, но плохо для вывода в отчет, так как теряется контекст года.НАЧАЛОПЕРИОДА(..., КВАРТАЛ) вернет дату, соответствующую первому дню квартала (например, 01.01.2024, 01.04.2024 и т.д.). Это предпочтительный вариант, так как он сохраняет тип данных Дата, что критически важно для правильной сортировки в отчете.Выясним, как заставить дату превратиться в красивую строку. Если вы использовали НАЧАЛОПЕРИОДА, то в СКД у этого поля можно настроить Оформление.
Перейдите на вкладку «Наборы данных», найдите ваше поле и в колонке «Оформление» нажмите на кнопку выбора. Нас интересует параметр «Формат». Рассмотрим строку формата подробнее:
ДФ='к "квартал" гггг', то получите результат: 1 квартал 2024.ДФ='кк "квартал" гггг' (две буквы «к»), система выведет квартал римскими цифрами: I квартал 2024.Полезный совет: Всегда берите текстовые вставки в строке формата в двойные кавычки (например, "кв."), чтобы система не пыталась интерпретировать эти буквы как управляющие символы формата даты.
Это самый профессиональный способ решения проблемы. Часто программисты совершают ошибку, превращая дату в строку прямо в запросе через оператор ВЫБОР КОГДА. Это приводит к тому, что «I квартал 2024 года» в списке окажется раньше, чем «IV квартал 2023 года», так как строка «I» идет по алфавиту раньше «IV».
Чтобы этого избежать, выполним следующие шаги:
НАЧАЛОПЕРИОДА(Дата, КВАРТАЛ).
Формат(ПериодКвартал, "ДФ='кк ""квартал"" гггг ""г.""'")
В этом случае 1С будет использовать реальную дату для сортировки и группировки (внутри системы), но в самом отчете пользователь увидит текст, который вы сформировали. Это позволяет сохранить хронологический порядок данных.
В СКД (в вычисляемых полях или выражениях представления) доступна встроенная функция ПредставлениеПериода. Проанализируем её синтаксис:
ПредставлениеПериода(НачалоКвартала, КонецКвартала, "ФП=Истина")
Параметры функции:
НачалоКвартала — дата начала периода.КонецКвартала — дата конца периода (можно получить функцией КОНЕЦПЕРИОДА(Дата, "КВАРТАЛ"))."ФП=Истина" — формат периода. Этот флаг заставляет систему выдавать стандартное представление (например, «3 кв. 2023 г.»).Преимущество этого метода в том, что он учитывает локализацию. Если ваша база будет открыта на компьютере с английским языком интерфейса, функция автоматически переведет «кв.» на соответствующее сокращение.
Если вы не хотите менять структуру запроса или добавлять вычисляемые поля, можно воспользоваться Условным оформлением в настройках отчета:
ДФ='кк "кв." гггг'.Этот метод хорош тем, что он не затрагивает логику получения данных и может быть настроен даже пользователем в режиме «1С:Предприятие» через изменение варианта отчета.
Подводя итог, можно сказать: для корректной работы отчета лучше всего использовать НАЧАЛОПЕРИОДА в запросе, сохраняя тип Дата, и настраивать визуальное отображение через Формат или Выражение представления. Помните о разнице между к и кк для выбора между арабскими и римскими цифрами — это мелочь, которая делает отчет гораздо более презентабельным.