К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как свернуть таблицу в 1С: все способы с примерами

Как свернуть таблицу в 1С: метод Свернуть() для таблицы значений, свертка базы данных, группировки в отчетах и табличных документах. Пошаговые инструкции.

Фраза «свернуть таблицу в 1С» может означать три разные задачи: программную свертку таблицы значений методом Свернуть(), свертку информационной базы для удаления старых данных и сворачивание группировок в отчете или табличном документе. У каждой задачи свой инструмент, свой порядок действий и свои риски. Ниже разобраны все три сценария с конкретными шагами, примерами кода и проверками результата.

Главное правило перед началом: любая свертка, изменяющая данные (особенно свертка базы), выполняется только после создания резервной копии. Свертка базы — необратимая операция: документы прошлых периодов удаляются, и восстановить их без копии невозможно. Программная свертка таблицы значений в памяти безопасна, но тоже требует понимания, какие колонки будут агрегированы.

Что именно нужно свернуть: определяем задачу

Прежде чем искать кнопку или писать код, определите, с каким объектом вы работаете. В 1С словом «таблица» называют таблицу значений (объект в памяти), табличную часть документа, табличный документ (печатная форма, отчет) и данные регистров в базе. Для каждого объекта свертка означает разное.

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

Маршрут решения

Как выбрать действие

Нужно сгруппировать строки и просуммировать числовые колонки в кодеИспользуйте метод Свернуть() таблицы значений
База разрослась, работает медленно, старые периоды не нужны в оперативной работеВыполните свертку информационной базы типовой обработкой после бэкапа
Нужно убрать детализацию в отчете или печатной форме на экранеСверните группировки кнопками уровней или настройкой СКД

Свертка таблицы значений методом Свернуть()

Таблица значений — основной объект для промежуточной обработки данных в 1С. Метод Свернуть() группирует строки по указанным колонкам и суммирует значения в остальных перечисленных колонках. Синтаксис: Таблица.Свернуть(КолонкиГруппировок, КолонкиСуммирования), где оба параметра — строки с именами колонок через запятую.

Типичный пример: есть таблица продаж с колонками «Номенклатура», «Склад», «Количество», «Сумма», где один товар встречается несколько раз. Чтобы получить итоги по каждому товару, выполняется свертка по колонке «Номенклатура» с суммированием «Количество, Сумма».

bsl
ТЗ.Свернуть("Номенклатура", "Количество, Сумма");
// Теперь в ТЗ одна строка на каждый товар,
// колонки Количество и Сумма содержат итоги

После свертки в таблице остаются только колонки группировок и колонки суммирования — все остальные колонки удаляются вместе с данными. Если какие-то колонки нужны для дальнейшей работы, либо включите их в группировки, либо заранее скопируйте таблицу через ТЗ.Скопировать() и сворачивайте копию.

Особенности и ограничения метода

Метод суммирует только числовые колонки. Если в колонке суммирования есть значения других типов или NULL, результат может быть некорректным — перед сверткой такие колонки стоит привести к числу. Строки с пустыми значениями в колонках группировки объединяются в одну строку с пустым ключом.

Свертка выполняется «в лоб» перебором строк, поэтому на очень больших таблицах (сотни тысяч строк) быстрее получить уже сгруппированные данные запросом с конструкцией СГРУППИРОВАТЬ ПО и функцией СУММА(). Запрос выполняется на сервере СУБД и обычно значительно эффективнее.

Сворачивание строк в запросе вместо таблицы значений

Если данные еще не загружены в таблицу значений, группировку лучше сделать сразу в запросе. Это снижает объем передаваемых данных и нагрузку на память. В языке запросов 1С для этого служат предложение СГРУППИРОВАТЬ ПО и агрегатные функции: СУММА, КОЛИЧЕСТВО, МАКСИМУМ, МИНИМУМ, СРЕДНЕЕ.

bsl
ВЫБРАТЬ
	Продажи.Номенклатура КАК Номенклатура,
	СУММА(Продажи.Количество) КАК Количество,
	СУММА(Продажи.Сумма) КАК Сумма
ИЗ
	РегистрНакопления.Продажи КАК Продажи
СГРУППИРОВАТЬ ПО
	Продажи.Номенклатура

Признак правильно написанного запроса: все поля выборки либо входят в список группировки, либо являются агрегатными функциями. Если включить в выборку неагрегированное поле, которого нет в группировке, запрос вернет несколько строк на группу — то есть свертки фактически не произойдет. Это одна из самых частых ошибок начинающих разработчиков.

Свертка информационной базы

Свертка базы — это удаление документов и движений за прошлые периоды с формированием документов ввода остатков на дату свертки. Она нужна, когда база выросла настолько, что замедлилась работа: долго открываются списки, отчеты строятся минутами, резервное копирование занимает часы. После свертки объем базы заметно уменьшается, а скорость работы возрастает.

В типовых конфигурациях (например, «1С:Бухгалтерия», «Управление торговлей», «ERP») есть встроенная обработка свертки. Обычно она находится в разделе «Администрирование» — «Обслуживание» — «Свертка информационной базы» либо подключается как внешняя обработка из поставки. Обработка проводит пользователя по шагам: выбор даты свертки, настройка формирования остатков, анализ базы, непосредственно свертка.

Порядок свертки базы
  1. 1
    Сделайте полную резервную копию базы и проверьте, что из нее можно восстановиться
  2. 2
    Завершите все незакрытые периоды: проведите документы, закройте месяц, сформируйте регламентные операции
  3. 3
    Запустите обработку свертки и укажите дату — все документы раньше нее будут удалены
  4. 4
    Выполните анализ базы, который предложит обработка, и устраните найденные проблемы
  5. 5
    Запустите свертку в монопольном режиме и дождитесь завершения
  6. 6
    Сверьте остатки по отчетам до даты свертки с остатками после нее

После свертки обязательно сравните ключевые отчеты: оборотно-сальдовую ведомость, остатки по складу, взаиморасчеты с контрагентами. Остатки на дату свертки в «старой» копии и в свернутой базе должны совпадать. Расхождения означают, что какие-то данные не были учтены при формировании вводов остатков — такие ситуации разбираются индивидуально.

Сворачивание группировок в отчетах и табличных документах

Если под «свернуть таблицу» понимается скрытие детализации на экране, то в отчетах на СКД (системе компоновки данных) это делается кнопками уровней группировок на панели табличного документа. Кнопки с цифрами показывают соответствующий уровень: нажатие на «1» оставляет только верхние группировки, «2» раскрывает второй уровень и так далее.

В настройках самого отчета можно убрать группировку совсем: откройте «Настройки» (или «Еще» — «Изменить вариант»), найдите нужную группировку и снимите флажок использования либо удалите ее. Для того чтобы отчет по умолчанию открывался в свернутом виде, в схеме компоновки программно задается состояние группировки через свойства вывода.

В обычных табличных документах (печатных формах) группировки строк сворачиваются щелчком по значку «минус» слева от строки или программно методами работы с группировками строк табличного документа. Если значков группировок нет — значит, при формировании документа группировки не создавались, и сворачивать нечего.

Контрольные точки

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

Таблица значений после Свернуть()
Норма

Одна строка на каждую комбинацию колонок группировки, суммы совпадают с исходными итогами

Тревожный признак

Потерялись нужные колонки или суммы не сходятся с исходной таблицей

База после свертки
Норма

Остатки по ОСВ, складу и взаиморасчетам совпадают с копией, база заметно меньше

Тревожный признак

Расхождения в остатках, отсутствуют нужные остатки по счетам или складам

Отчет после сворачивания группировок
Норма

Видны только итоговые строки нужного уровня, итоги не изменились

Тревожный признак

Пропали итоги или структура отчета изменилась не так, как ожидалось

Типичные ошибки при свертке

Типичные ошибки
01
Свертка таблицы значений без копии: оригинал теряет колонки, и дальнейший код падает с ошибкой обращения к несуществующей колонке
02
Суммирование колонки со смешанными типами: строки и NULL в числовой колонке дают некорректный итог
03
Свертка базы без резервной копии: при ошибке или неверной дате восстановить удаленные документы невозможно
04
Свертка базы при незакрытом периоде: остатки формируются по неполным данным, и отчеты после свертки не сходятся
05
Попытка свернуть данные на клиенте для огромной таблицы вместо группировки запросом: рост времени выполнения и расхода памяти

Отдельно стоит упомянуть ожидание мгновенного эффекта от свертки базы. Физическое уменьшение файла базы происходит не всегда сразу: в файловом варианте может потребоваться сжатие через тестирование и исправление (chdbfl или конфигуратор), в клиент-серверном — шринк базы средствами СУБД. Сама по себе свертка удаляет данные логически, а файловое пространство освобождается дополнительными операциями.

Итог

Что важно запомнить

Таблица значений сворачивается методом Свернуть() с указанием колонок группировки и суммирования; для больших данных эффективнее группировка в запросе. Свертка базы выполняется типовой обработкой только после резервной копии и закрытия периода, с обязательной сверкой остатков. Детализация в отчетах скрывается кнопками уровней группировок или настройкой СКД — данные при этом не изменяются.

Часто задаваемые вопросы

Можно ли отменить свертку таблицы значений после выполнения?

Нет, метод изменяет таблицу необратимо. Чтобы сохранить исходные данные, перед сверткой создайте копию: ТЗСвернутая = ТЗ.Скопировать(); ТЗСвернутая.Свернуть(...). Тогда оригинал останется нетронутым.

Что делать, если после Свернуть() пропали нужные колонки?

Это штатное поведение: остаются только колонки группировок и суммирования. Включите нужные колонки в список группировок, если их значения одинаковы внутри группы, либо получите их отдельным запросом и соедините результаты.

Как часто нужно делать свертку информационной базы?

Жесткого правила нет. Ориентир — заметная деградация скорости работы и большой объем базы. Многие организации сворачивают данные старше нескольких лет, оставляя в рабочей базе периоды, необходимые для отчетности и проверок. Решение принимается с учетом требований к хранению первичных документов.

Можно ли свернуть базу, если в ней работают пользователи?

Нет. Свертка требует монопольного доступа: все сеансы должны быть завершены, регламентные задания остановлены. Иначе обработка либо не запустится, либо данные будут повреждены из-за параллельных изменений.

Почему в отчете нет кнопок уровней группировок?

Кнопки уровней появляются только если в отчете есть группировки и включен показ заголовков группировок в табличном документе. Если отчет построен без группировок (плоский список), сворачивать нечего — добавьте группировку в настройках варианта отчета.