Разработка и Конфигурация · 10 мин
Как свернуть таблицу в 1С: все способы с примерами
Как свернуть таблицу в 1С: метод Свернуть() для таблицы значений, свертка базы данных, группировки в отчетах и табличных документах. Пошаговые инструкции.
Фраза «свернуть таблицу в 1С» может означать три разные задачи: программную свертку таблицы значений методом Свернуть(), свертку информационной базы для удаления старых данных и сворачивание группировок в отчете или табличном документе. У каждой задачи свой инструмент, свой порядок действий и свои риски. Ниже разобраны все три сценария с конкретными шагами, примерами кода и проверками результата.
Главное правило перед началом: любая свертка, изменяющая данные (особенно свертка базы), выполняется только после создания резервной копии. Свертка базы — необратимая операция: документы прошлых периодов удаляются, и восстановить их без копии невозможно. Программная свертка таблицы значений в памяти безопасна, но тоже требует понимания, какие колонки будут агрегированы.
Что именно нужно свернуть: определяем задачу
Прежде чем искать кнопку или писать код, определите, с каким объектом вы работаете. В 1С словом «таблица» называют таблицу значений (объект в памяти), табличную часть документа, табличный документ (печатная форма, отчет) и данные регистров в базе. Для каждого объекта свертка означает разное.
Если вы разработчик и вам нужно сгруппировать строки в коде — это метод Свернуть() таблицы значений. Если вы администратор и база стала слишком большой и медленной — это свертка информационной базы. Если вы пользователь и хотите скрыть детализацию в отчете — это управление группировками. Смешивать эти сценарии нельзя: кнопка сворачивания группировки не изменяет данные, а свертка базы удаляет документы безвозвратно.
Как выбрать действие
Свертка таблицы значений методом Свернуть()
Таблица значений — основной объект для промежуточной обработки данных в 1С. Метод Свернуть() группирует строки по указанным колонкам и суммирует значения в остальных перечисленных колонках. Синтаксис: Таблица.Свернуть(КолонкиГруппировок, КолонкиСуммирования), где оба параметра — строки с именами колонок через запятую.
Типичный пример: есть таблица продаж с колонками «Номенклатура», «Склад», «Количество», «Сумма», где один товар встречается несколько раз. Чтобы получить итоги по каждому товару, выполняется свертка по колонке «Номенклатура» с суммированием «Количество, Сумма».
ТЗ.Свернуть("Номенклатура", "Количество, Сумма");
// Теперь в ТЗ одна строка на каждый товар,
// колонки Количество и Сумма содержат итогиПосле свертки в таблице остаются только колонки группировок и колонки суммирования — все остальные колонки удаляются вместе с данными. Если какие-то колонки нужны для дальнейшей работы, либо включите их в группировки, либо заранее скопируйте таблицу через ТЗ.Скопировать() и сворачивайте копию.
Особенности и ограничения метода
Метод суммирует только числовые колонки. Если в колонке суммирования есть значения других типов или NULL, результат может быть некорректным — перед сверткой такие колонки стоит привести к числу. Строки с пустыми значениями в колонках группировки объединяются в одну строку с пустым ключом.
Свертка выполняется «в лоб» перебором строк, поэтому на очень больших таблицах (сотни тысяч строк) быстрее получить уже сгруппированные данные запросом с конструкцией СГРУППИРОВАТЬ ПО и функцией СУММА(). Запрос выполняется на сервере СУБД и обычно значительно эффективнее.
Сворачивание строк в запросе вместо таблицы значений
Если данные еще не загружены в таблицу значений, группировку лучше сделать сразу в запросе. Это снижает объем передаваемых данных и нагрузку на память. В языке запросов 1С для этого служат предложение СГРУППИРОВАТЬ ПО и агрегатные функции: СУММА, КОЛИЧЕСТВО, МАКСИМУМ, МИНИМУМ, СРЕДНЕЕ.
ВЫБРАТЬ
Продажи.Номенклатура КАК Номенклатура,
СУММА(Продажи.Количество) КАК Количество,
СУММА(Продажи.Сумма) КАК Сумма
ИЗ
РегистрНакопления.Продажи КАК Продажи
СГРУППИРОВАТЬ ПО
Продажи.НоменклатураПризнак правильно написанного запроса: все поля выборки либо входят в список группировки, либо являются агрегатными функциями. Если включить в выборку неагрегированное поле, которого нет в группировке, запрос вернет несколько строк на группу — то есть свертки фактически не произойдет. Это одна из самых частых ошибок начинающих разработчиков.
Свертка информационной базы
Свертка базы — это удаление документов и движений за прошлые периоды с формированием документов ввода остатков на дату свертки. Она нужна, когда база выросла настолько, что замедлилась работа: долго открываются списки, отчеты строятся минутами, резервное копирование занимает часы. После свертки объем базы заметно уменьшается, а скорость работы возрастает.
В типовых конфигурациях (например, «1С:Бухгалтерия», «Управление торговлей», «ERP») есть встроенная обработка свертки. Обычно она находится в разделе «Администрирование» — «Обслуживание» — «Свертка информационной базы» либо подключается как внешняя обработка из поставки. Обработка проводит пользователя по шагам: выбор даты свертки, настройка формирования остатков, анализ базы, непосредственно свертка.
- 1Сделайте полную резервную копию базы и проверьте, что из нее можно восстановиться
- 2Завершите все незакрытые периоды: проведите документы, закройте месяц, сформируйте регламентные операции
- 3Запустите обработку свертки и укажите дату — все документы раньше нее будут удалены
- 4Выполните анализ базы, который предложит обработка, и устраните найденные проблемы
- 5Запустите свертку в монопольном режиме и дождитесь завершения
- 6Сверьте остатки по отчетам до даты свертки с остатками после нее
После свертки обязательно сравните ключевые отчеты: оборотно-сальдовую ведомость, остатки по складу, взаиморасчеты с контрагентами. Остатки на дату свертки в «старой» копии и в свернутой базе должны совпадать. Расхождения означают, что какие-то данные не были учтены при формировании вводов остатков — такие ситуации разбираются индивидуально.
Сворачивание группировок в отчетах и табличных документах
Если под «свернуть таблицу» понимается скрытие детализации на экране, то в отчетах на СКД (системе компоновки данных) это делается кнопками уровней группировок на панели табличного документа. Кнопки с цифрами показывают соответствующий уровень: нажатие на «1» оставляет только верхние группировки, «2» раскрывает второй уровень и так далее.
В настройках самого отчета можно убрать группировку совсем: откройте «Настройки» (или «Еще» — «Изменить вариант»), найдите нужную группировку и снимите флажок использования либо удалите ее. Для того чтобы отчет по умолчанию открывался в свернутом виде, в схеме компоновки программно задается состояние группировки через свойства вывода.
В обычных табличных документах (печатных формах) группировки строк сворачиваются щелчком по значку «минус» слева от строки или программно методами работы с группировками строк табличного документа. Если значков группировок нет — значит, при формировании документа группировки не создавались, и сворачивать нечего.
Как проверить результат
Одна строка на каждую комбинацию колонок группировки, суммы совпадают с исходными итогами
Потерялись нужные колонки или суммы не сходятся с исходной таблицей
Остатки по ОСВ, складу и взаиморасчетам совпадают с копией, база заметно меньше
Расхождения в остатках, отсутствуют нужные остатки по счетам или складам
Видны только итоговые строки нужного уровня, итоги не изменились
Пропали итоги или структура отчета изменилась не так, как ожидалось
Типичные ошибки при свертке
Отдельно стоит упомянуть ожидание мгновенного эффекта от свертки базы. Физическое уменьшение файла базы происходит не всегда сразу: в файловом варианте может потребоваться сжатие через тестирование и исправление (chdbfl или конфигуратор), в клиент-серверном — шринк базы средствами СУБД. Сама по себе свертка удаляет данные логически, а файловое пространство освобождается дополнительными операциями.
Что важно запомнить
Таблица значений сворачивается методом Свернуть() с указанием колонок группировки и суммирования; для больших данных эффективнее группировка в запросе. Свертка базы выполняется типовой обработкой только после резервной копии и закрытия периода, с обязательной сверкой остатков. Детализация в отчетах скрывается кнопками уровней группировок или настройкой СКД — данные при этом не изменяются.
Часто задаваемые вопросы
Можно ли отменить свертку таблицы значений после выполнения?
Нет, метод изменяет таблицу необратимо. Чтобы сохранить исходные данные, перед сверткой создайте копию: ТЗСвернутая = ТЗ.Скопировать(); ТЗСвернутая.Свернуть(...). Тогда оригинал останется нетронутым.
Что делать, если после Свернуть() пропали нужные колонки?
Это штатное поведение: остаются только колонки группировок и суммирования. Включите нужные колонки в список группировок, если их значения одинаковы внутри группы, либо получите их отдельным запросом и соедините результаты.
Как часто нужно делать свертку информационной базы?
Жесткого правила нет. Ориентир — заметная деградация скорости работы и большой объем базы. Многие организации сворачивают данные старше нескольких лет, оставляя в рабочей базе периоды, необходимые для отчетности и проверок. Решение принимается с учетом требований к хранению первичных документов.
Можно ли свернуть базу, если в ней работают пользователи?
Нет. Свертка требует монопольного доступа: все сеансы должны быть завершены, регламентные задания остановлены. Иначе обработка либо не запустится, либо данные будут повреждены из-за параллельных изменений.
Почему в отчете нет кнопок уровней группировок?
Кнопки уровней появляются только если в отчете есть группировки и включен показ заголовков группировок в табличном документе. Если отчет построен без группировок (плоский список), сворачивать нечего — добавьте группировку в настройках варианта отчета.