Группировки в отчётах, запросах, СКД и списках 1С 8.3: от кнопки «Настройки» до кода
Содержание
Чтобы добавить группировку в 1С, программист не нужен. В большинстве отчётов хватает кнопки Настройки (в оборотно-сальдовой ведомости — Показать настройки): там выбирается поле группировки, его уровень и порядок. Программист нужен, только если поля нет в отчёте или группировку надо зашить в схему, запрос или форму.
Частая ошибка — искать «группировку» в одном месте. В 1С 8.3 это слово означает четыре разные вещи: уровень итогов в отчёте, СГРУППИРОВАТЬ ПО в запросе, группировку строк в списке и группу (папку) в справочнике. Ниже — каждый вариант пошагово, от пользовательского режима до кода.
Где в 1С бывает группировка и какой способ выбрать
Сначала определите, что вы хотите получить. От этого зависит, куда идти.
| Задача | Где делается | Кто делает | Нужен Конфигуратор |
|---|---|---|---|
| Свернуть строки отчёта по контрагенту, складу, месяцу | Настройки отчёта | Пользователь | Нет |
| Субконто и подитоги в ОСВ по счёту | Показать настройки → вкладка Группировка | Бухгалтер | Нет |
| Новая группировка по полю, которого нет в отчёте | Схема компоновки данных | Разработчик | Да или расширение |
| Свернуть данные в запросе, посчитать суммы | Текст запроса | Разработчик | Да |
| Сгруппировать строки в журнале или списке | Настройка списка или форма | Пользователь или разработчик | Только для «зашитой» настройки |
| Разложить элементы справочника по папкам | Список справочника, кнопка создания группы | Пользователь | Нет, если справочник иерархический |
Если ваша задача в первых двух строках таблицы, хватит следующих трёх разделов. Запросы, СКД и код — для тех, кто дорабатывает конфигурацию.
Как добавить группировку в готовый отчёт без программиста
Большинство отчётов в БП 3.0, ЗУП 3.1 и УТ 11 построены на системе компоновки данных (СКД). Их структуру можно менять прямо в пользовательском режиме.
Отчёт на СКД с кнопкой «Настройки»
- Откройте отчёт и нажмите
Настройки. - Если форма короткая (только период и отборы), переключите вид настроек на расширенный. Переключатель стоит в верхней части окна настроек.
- Перейдите на вкладку со структурой отчёта. Там виден список уровней: «Отчёт» → группировки → «Детальные записи».
- Выделите уровень, под которым нужна новая группировка, и добавьте новую группировку командой на панели или через контекстное меню.
- Выберите поле: например,
Контрагент,Склад,Периодс типом «Месяц». - Нажмите
Закрыть и сформировать.
Если нужного поля нет в списке выбора, нажмите Показать все поля (или раскройте ссылочное поле через плюс). Часто нужный реквизит лежит внутри: Номенклатура → Вид номенклатуры, Контрагент → Основной менеджер.
Оборотно-сальдовая ведомость и отчёты по счёту
В бухгалтерских отчётах (Отчёты → Оборотно-сальдовая ведомость, ОСВ по счёту, Анализ счёта) группировка устроена проще:
- Нажмите
Показать настройки. - Откройте вкладку
Группировка. - Добавьте строку: выберите счёт и поле — субконто (
Контрагенты,Договоры,Номенклатура) или аналитику (Подразделение). - Поставьте флажок по нужным строкам и сформируйте отчёт.
Хотите, чтобы настройка не слетала? Сохраните её как вариант отчёта: в меню Ещё есть команда сохранения варианта. Иначе после закрытия отчёт может вернуться к стандартной структуре.
Многоуровневая группировка: как задать порядок уровней
Иерархия «Организация → Контрагент → Договор → Документ» — это несколько вложенных группировок. Главное правило: порядок уровней в структуре = порядок вложенности в отчёте.
Есть два способа сделать несколько уровней:
- 🧩 Одна группировка с несколькими полями. Строка в отчёте будет одна на каждую пару «Контрагент + Договор». Итог по контрагенту отдельно не выводится.
- 🪜 Вложенные группировки. Сначала группировка по
Контрагент, внутри неё — поДоговор. Каждый уровень получает свой подытог и сворачивается кнопками+/−слева.
Что выбирать:
| Нужно | Способ |
|---|---|
| Подытог по каждому верхнему уровню | Вложенные группировки |
| Плоский список уникальных сочетаний | Одна группировка, несколько полей |
| Выгрузка в Excel для сводной таблицы | Одна группировка без подытогов |
Тип группировки: элементы или иерархия
Для полей-справочников с папками (номенклатура, контрагенты, статьи затрат) у группировки есть тип:
- Без иерархии (элементы) — только сами элементы, папки игнорируются.
- Иерархия — папки справочника и вложенные в них элементы, с итогами по каждой папке.
- Только иерархия — одни папки, без элементов. Удобно для сводки «по группам номенклатуры».
Тип меняется в свойствах поля группировки. В пользовательском режиме он доступен в расширенных настройках, в Конфигураторе — двойным щелчком по полю в группировке.
Группировка по вычисляемому полю
Бывает, что сгруппировать нужно по признаку, которого в базе нет: «Крупный / мелкий клиент», «Просрочено / в срок», квартал вместо месяца.
В пользовательском режиме
В расширенных настройках отчёта на СКД можно добавить пользовательское поле. Это вычисляемое поле, которое пользователь создаёт сам:
- В настройках откройте вкладку с полями (обычно там же, где выбор показателей).
- Добавьте пользовательское поле типа «Выбор» — оно работает как
ВЫБОР КОГДА. - Задайте условия: например,
Сумма > 100000→ «Крупный», иначе «Мелкий». - Используйте новое поле в группировке.
В схеме компоновки
Разработчик добавляет поле на вкладке Вычисляемые поля конструктора СКД. Выражение пишется на языке выражений СКД:
ВЫБОР
КОГДА СуммаОборот >= 100000 ТОГДА "Крупный"
КОГДА СуммаОборот >= 10000 ТОГДА "Средний"
ИНАЧЕ "Мелкий"
КОНЕЦ
После этого поле появляется в списке доступных для группировки.
Группировка по вычисляемому полю, которое ссылается на ресурс, работает не так, как ждут: значение ресурса считается на уровне детальных записей, а не итога. Если нужно «крупный клиент по сумме за период», считайте сумму в запросе набора данных, а группируйте уже по результату.
Группировка в запросе: СГРУППИРОВАТЬ ПО и ИТОГИ
В языке запросов есть два разных механизма. Их часто путают.
| Конструкция | Что делает | Результат |
|---|---|---|
СГРУППИРОВАТЬ ПО | Сворачивает строки и считает агрегаты | Плоская таблица, одна строка на группу |
ИТОГИ ... ПО | Добавляет строки итогов поверх детальных | Дерево: группы + детальные записи |
СГРУППИРОВАТЬ ПО
Пример: сумма продаж по контрагентам за период.
ВЫБРАТЬ
Продажи.Контрагент КАК Контрагент,
СУММА(Продажи.СуммаОборот) КАК Сумма,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Продажи.Регистратор) КАК ЧислоДокументов
ИЗ
РегистрНакопления.Продажи.Обороты(&Начало, &Конец) КАК Продажи
СГРУППИРОВАТЬ ПО
Продажи.Контрагент
Правило без исключений: каждое поле в ВЫБРАТЬ либо стоит в СГРУППИРОВАТЬ ПО, либо обёрнуто в агрегатную функцию (СУММА, КОЛИЧЕСТВО, МАКСИМУМ, МИНИМУМ, СРЕДНЕЕ). Иначе запрос не выполнится.
Отбор по сгруппированным суммам делают через ИМЕЮЩИЕ, а не ГДЕ:
СГРУППИРОВАТЬ ПО
Продажи.Контрагент
ИМЕЮЩИЕ
СУММА(Продажи.СуммаОборот) > 100000
Группировка по выражению
Сгруппировать можно и по вычислению. Выражение повторяется в ВЫБРАТЬ и в СГРУППИРОВАТЬ ПО целиком:
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(Док.Дата, МЕСЯЦ) КАК Месяц,
СУММА(Док.СуммаДокумента) КАК Сумма
ИЗ
Документ.РеализацияТоваровУслуг КАК Док
ГДЕ
Док.Проведен
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(Док.Дата, МЕСЯЦ)
ИТОГИ и обход по группировкам
Если нужны и детальные строки, и подытоги, используют ИТОГИ:
ВЫБРАТЬ
Остатки.Номенклатура КАК Номенклатура,
Остатки.Склад КАК Склад,
Остатки.КоличествоОстаток КАК Количество
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
ИТОГИ
СУММА(Количество)
ПО
Склад,
Номенклатура ИЕРАРХИЯ
Ключевое слово ИЕРАРХИЯ добавляет итоги по папкам справочника. Результат обходят вложенными выборками:
Результат = Запрос.Выполнить();
ВыборкаСклад = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад");
Пока ВыборкаСклад.Следующий() Цикл
Сообщить(Строка(ВыборкаСклад.Склад) + ": " + Формат(ВыборкаСклад.Количество, "ЧГ=0"));
ВыборкаТовар = ВыборкаСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, "Номенклатура");
Пока ВыборкаТовар.Следующий() Цикл
Сообщить(" " + Строка(ВыборкаТовар.Номенклатура) + ": " + Формат(ВыборкаТовар.Количество, "ЧГ=0"));
КонецЦикла;
КонецЦикла;
Конструктор запроса (правой кнопкой по тексту → Конструктор запроса...) собирает обе конструкции мышкой: вкладка Группировка — для СГРУППИРОВАТЬ ПО, вкладка Итоги — для ИТОГИ. Агрегаты он расставляет сам.
Как добавить группировку в СКД отчёта
Это основной инструмент разработчика. Схема компоновки задаёт, какие группировки доступны и какая структура выводится по умолчанию.
Пошагово в конструкторе схемы
- Откройте отчёт в Конфигураторе (или в расширении, если конфигурация типовая и на поддержке).
- Откройте основную схему компоновки данных.
- На вкладке
Ресурсыукажите поля, по которым считаются итоги (Сумма,Количество), и функцию — обычноСумма. Без ресурсов группировки выводят строки без подытогов. - Перейдите на вкладку
Настройки. - В дереве структуры щёлкните правой кнопкой по корню «Отчёт» →
Новая группировка. - Выберите поле и тип (элементы, иерархия, только иерархия). Группировка без полей — это «Детальные записи».
- Для вложенного уровня щёлкните правой кнопкой уже по созданной группировке и добавьте новую внутрь.
- Проверьте отчёт: в Предприятии сформируйте его заново.
Таблица вместо списка
Для отчёта «товары по строкам, месяцы по колонкам» вместо группировки добавляют Новая таблица. У таблицы две ветки: строки и колонки. В каждую добавляются свои группировки. Например, строки — Номенклатура, колонки — Период с типом «Месяц».
Разрешить пользователю менять структуру
Чтобы пользователь мог сам добавлять группировки в отчёт, у элемента структуры в свойствах пользовательских настроек ставят флажок включения в пользовательские настройки и режим редактирования. Тогда в расширенных настройках отчёта эта группировка появится и её можно будет менять без Конфигуратора.
Не правьте схему типового отчёта напрямую в конфигурации на поддержке: доработка потеряется или помешает обновлению. Делайте копию отчёта во внешнем файле или через расширение конфигурации (доступны с платформы 8.3.6).
Группировка в списках и группы справочников
Строки в журнале документов или списке
В формах списков на управляемом интерфейсе есть настройка списка: она открывается из меню Ещё. В окне настройки несколько вкладок — отбор, сортировка, условное оформление и группировка.
- Откройте список, например
Продажи → Реализация (акты, накладные). - Откройте настройку списка через
Ещё. - На вкладке группировки добавьте поле —
КонтрагентилиОрганизация. - Нажмите
Завершить редактирование.
Список покажет строки-заголовки групп, которые сворачиваются. Настройка сохраняется для текущего пользователя.
Программно в динамическом списке
Разработчик задаёт группировку в модуле формы, в ПриСозданииНаСервере:
ЭлементГруппировки = Список.Группировка.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ЭлементГруппировки.Поле = Новый ПолеКомпоновкиДанных("Контрагент");
ЭлементГруппировки.Использование = Истина;
Поле указывается так, как оно называется в запросе или основной таблице динамического списка.
Группа (папка) в справочнике
Если под «группировкой» имеется в виду папка в справочнике — например, «Канцтовары» в номенклатуре:
- Откройте справочник (
Справочники → Номенклатура,Справочники → Контрагенты). - Нажмите кнопку создания группы — с иконкой папки, рядом с
Создать. Если её не видно, она есть в менюЕщё. - Введите наименование и укажите родителя, если папка вложенная.
- Перенесите элементы: выделите их и перетащите мышью в папку или используйте команду перемещения в группу.
Кнопки нет вообще — значит, справочник не иерархический. В Конфигураторе у объекта справочника на вкладке Иерархия ставится флажок Иерархический справочник и вид «Иерархия групп и элементов». Это изменение структуры: нужна резервная копия, монопольный доступ при обновлении базы данных и, для типовой конфигурации, снятие с поддержки или расширение.
Где чаще всего ошибаются при группировке
- 📅 Группировка по полю «Дата» без периода. Каждая секунда — отдельная строка. Для дат выбирайте поле
Периодс типом «Месяц» или «День», в запросе —НАЧАЛОПЕРИОДА. - 🔁 Одинаковое поле на двух уровнях. Группировка
КонтрагентвнутриКонтрагентдаёт пустые подуровни. Проверьте структуру сверху вниз. - 🧮 Ресурс считается неправильной функцией. Остаток на дату — это не
Суммапо дням. Для остатков выбирайте поля...КонечныйОстатокпо периоду, а не суммируйте ежедневные значения. - 📉
ГДЕвместоИМЕЮЩИЕ. Условие по агрегату (СУММА(...) > 0) вГДЕне работает . - 🗂 Группировка по представлению. Группировать по строке вместо ссылки опасно: два контрагента с одинаковым наименованием сольются в одну строку.