Свёртка данных в 1С 8.3: база, табличные части, запросы и отчёты
Содержание
Свертка в 1С — это объединение множества записей в меньшее число итоговых строк с сохранением сумм. Под этим словом в 1С понимают три разные вещи: свертку информационной базы (старые документы заменяются остатками на дату), свертку строк в табличной части, таблице значений или запросе (одинаковые позиции сливаются в одну строку с суммой количества) и свертку группировок в отчёте (детали скрываются, видны только итоги).
В торговых конфигурациях чаще всего встречаются первые два вида. Свертку базы делают, когда файл разросся до десятков гигабайт и отчёты за год формируются минутами. Свертку строк — когда в накладной пять раз подряд стоит один и тот же товар и покупатель просит «одну строку на позицию».
Три вида свертки и чем они отличаются
Прежде чем что-то сворачивать, определите, о какой свертке идёт речь. Последствия у них несопоставимые.
| Вид свертки | Что происходит | Обратимость | Кто делает |
|---|---|---|---|
| Свертка информационной базы | Документы до даты свертки удаляются, вместо них — остатки на дату | Только из резервной копии | Администратор базы |
| Свертка строк (табличная часть, таблица значений, запрос) | Строки с одинаковыми реквизитами сливаются, количества и суммы складываются | Только повторным вводом или из истории версий | Пользователь или программист |
| Свертка группировок отчёта | Детальные строки скрываются, видны итоги по группам | Полностью, в один клик | Любой пользователь |
Как устроена свертка информационной базы
Механизм простой по идее. Выбирается дата свертки, например 01.01 текущего года. Программа фиксирует остатки по регистрам на эту дату: товары на складах, взаиморасчёты с контрагентами, деньги, партии. Затем создаёт служебные документы ввода остатков с этими значениями и удаляет все документы, датированные раньше.
После свертки база «начинается» с даты свертки. Остатки на конец периода сходятся с прежними, а обороты и детальная история за прошлые годы пропадают.
Где найти свертку в типовых конфигурациях
- 📦 1С:Управление торговлей 11, Комплексная автоматизация 2, ERP 2 — встроенная обработка «Свертка информационной базы» в разделе
НСИ и администрирование → Администрирование, на панели обслуживания. Если в вашем релизе панель выглядит иначе, найдите команду через поиск по интерфейсу по слову «свертка». - 📊 1С:Бухгалтерия предприятия 3.0 — привычный путь при разросшейся базе другой: новая база на начало года с переносом остатков. Перед работой проверьте поиском по командам, нет ли свертки в вашем релизе.
- 🗂️ Старые конфигурации на 8.2 и обычных формах — свертку делали внешней обработкой. Её поведение зависит от версии конкретной обработки, поэтому здесь только общий совет: тестовый прогон на копии обязателен.
Порядок свертки базы
- Договоритесь с бухгалтерией о дате свертки. Обычно это начало года, за которым все периоды закрыты и отчётность сдана.
- Сделайте резервную копию:
Конфигуратор → Администрирование → Выгрузить информационную базу(файл.dt) или штатный бэкап СУБД для клиент-серверной базы. - Разверните копию в отдельную базу и выполните свертку на ней.
- Сформируйте на копии контрольные отчёты на дату свертки и сравните с рабочей базой (подробно — в разделе про проверку ниже).
- Если цифры совпали, повторите свертку на рабочей базе в нерабочее время, когда пользователи вышли из программы.
- Выполните тестирование и исправление с пересчётом итогов (раздел про оптимизацию).
Свертка удаляет документы безвозвратно. Отменить её кнопкой нельзя — только восстановлением из копии, сделанной до свертки. Копию храните отдельно, а не в той же папке, что и база.
По 402-ФЗ первичные документы и регистры учёта хранят не менее пяти лет после отчётного года. Свертка рабочей базы этой обязанности не отменяет: сохраните архивную копию до свертки и оформите, где она лежит.
Свертка строк в табличных частях и печатных формах
Типичная ситуация: менеджер подбирал товар несколькими заходами, и в реализации один артикул встречается трижды. Типовые документы такие строки сами не объединяют — каждая строка остаётся отдельной и в документе, и в печатной форме.
Объединить можно двумя путями.
Вариант 1. Свернуть строки в самом документе
Подходит, когда строки действительно одинаковые и их дробление ничего не значит. Делается через таблицу значений на сервере:
&НаСервере
Процедура СвернутьТоварыНаСервере()
ТЗ = Объект.Товары.Выгрузить();
ТЗ.Свернуть("Номенклатура, Характеристика, Цена, СтавкаНДС",
"Количество, Сумма, СуммаНДС");
Объект.Товары.Загрузить(ТЗ);
КонецПроцедуры
Метод Свернуть() принимает две строки через запятую:
- 🔑 колонки группировки — строки сливаются, только если значения во всех этих колонках равны;
- ➕ колонки суммирования — их значения складываются.
Все остальные колонки из таблицы удаляются. При загрузке обратно в табличную часть они получат пустые значения. Отсюда главное правило: перечислите в группировках все реквизиты, которые должны сохраниться, — склад, единицу измерения, серию, назначение, если они есть в вашей табличной части.
Такой код размещают в расширении конфигурации и выводят на форму документа кнопкой, а не правят типовую конфигурацию. После свертки документ нужно перепровести.
Вариант 2. Свернуть строки только в печатной форме
Если документ должен остаться как есть (например, строки различаются по сериям, а покупатель хочет видеть одну строку), сворачивают данные на этапе печати. Программист в расширении берёт результат запроса для печатной формы и сворачивает его перед выводом. Документ и движения по регистрам не меняются.
Цена — тоже колонка группировки. Если один товар продан по 100 и по 105 рублей, строки не сольются. Это правильное поведение: иначе цена в объединённой строке стала бы неверной.
Почему свертка работает некорректно
Большинство жалоб «свертка не сработала» или «после свертки всё поехало» сводится к нескольким причинам.
Отдельный случай — распределённые базы. Если рабочая база — узел обмена (РИБ или обмен с бухгалтерией), свертка в одном узле без согласования с другими ломает синхронизацию: удалённые документы пытаются прийти обратно или выгрузиться как удаление. Перед сверткой такой базы остановите обмен и проверьте, как ваша конфигурация обрабатывает свертку в узлах.
Свертка в регистрах, запросах и отчётах
В регистрах накопления
Регистры остатков хранят не только движения, но и таблицу итогов — фактически уже свёрнутые данные по периодам. Благодаря этому остаток на дату программа получает без перебора всех движений. Свертка базы опирается именно на эти итоги: остатки регистра на дату становятся строками документов ввода остатков.
В запросах
В языке запросов свертка — это СГРУППИРОВАТЬ ПО с агрегатными функциями:
ВЫБРАТЬ
Товары.Номенклатура КАК Номенклатура,
СУММА(Товары.Количество) КАК Количество,
СУММА(Товары.Сумма) КАК Сумма
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК Товары
ГДЕ
Товары.Ссылка = &Документ
СГРУППИРОВАТЬ ПО
Товары.Номенклатура
Все поля, которые выбираются без агрегатной функции, обязаны стоять в СГРУППИРОВАТЬ ПО, иначе запрос не выполнится.
В отчётах на СКД
Торговые отчёты — «Валовая прибыль», «Остатки товаров», «Продажи» — строятся на системе компоновки данных. Свернуть их можно на двух уровнях.
- 👁️ На экране. Слева от табличного документа отчёта выводятся маркеры группировок «плюс/минус», а сверху — кнопки с номерами уровней. Нажмите кнопку уровня 1, и отчёт покажет только верхние группы с итогами. Данные при этом не меняются.
- ⚙️ В структуре отчёта. Через
Настройкиотчёта (расширенный режим) можно убрать лишнюю группировку, например по характеристикам или документам, и тогда отчёт сразу формируется в свёрнутом виде. Сохраните вариант отчёта, чтобы не повторять настройку.
Если отчёт формируется долго, сворачивать на экране бессмысленно: время тратится на расчёт, а не на вывод. Убирайте лишние группировки в структуре и сужайте период и отборы.
Как исправить свертку вручную или отменить её
Действия зависят от вида свертки.
Свертка группировок в отчёте. Отмена мгновенная: кнопка последнего уровня или маркеры «плюс» раскрывают всё обратно. Если отчёт сохранён в свёрнутой структуре — верните группировку в настройках или выберите стандартный вариант отчёта.
Свертка строк в документе. Обратной операции у метода Свернуть() нет. Варианты:
- Если в базе включена история изменений объектов, откройте предыдущую версию документа и восстановите табличную часть из неё.
- Если истории нет — разбейте строки вручную: уменьшите количество в объединённой строке и добавьте нужные строки заново, затем перепроведите документ.
- Для массовой ошибки (свернули сотни документов обработкой) надёжнее восстановить базу из копии, сделанной до обработки.
Свертка информационной базы. Отмена — только восстановление из копии до свертки. Если копии нет, а остаток после свертки неверный, его корректируют:
- ✏️ правкой созданных сверткой документов ввода остатков — они обычные документы, их можно открыть, исправить строку и перепровести;
- 📋 инвентаризацией товаров с оформлением излишков и недостач — если расхождение по складу подтверждено пересчётом;
- 🤝 актом сверки с контрагентом и корректировкой долга — если расхождение по взаиморасчётам.
Правка документов ввода остатков меняет остатки на дату свертки и всё, что рассчитано после неё, в том числе себестоимость. После правки перезапустите закрытие месяца за затронутые периоды.
Как ускорить работу со свёрнутыми и большими данными
Свертка — крайняя мера. Часто базу удаётся ускорить без удаления истории.
| Способ | Когда помогает | Риски |
|---|---|---|
| Управление итогами | Отчёты по остаткам на текущую дату медленные | Нет, операция служебная |
| Тестирование и исправление с пересчётом итогов и сжатием таблиц | После свертки или массового удаления в файловой базе | Нужен монопольный доступ, все пользователи выходят |
| Обслуживание СУБД (индексы, статистика) | Клиент-серверная база тормозит в целом | Нагрузка на сервер во время работы |
| Удаление помеченных объектов | Много мусора от черновиков | Удаляются только помеченные, но проверьте список |
| Свертка базы | Объём мешает работе, история за годы не нужна | Необратима без копии |
Управление итогами
Открывается через Функции для технического специалиста → Стандартные → Управление итогами (пункт «Все функции» включается в настройках программы). Там задают период рассчитанных итогов и пересчитывают итоги регистров. Для оборотных регистров на этой же форме управляют агрегатами — заранее посчитанными свёрнутыми данными для быстрых отчётов.
Тестирование и исправление после свертки
После свертки в таблицах базы остаётся пустое место от удалённых записей. Его возвращают так:
- Предупредите пользователей: им нужно выйти из базы, сеансы будут недоступны на время операции.
- Откройте
Конфигуратор → Администрирование → Тестирование и исправление. - Отметьте «Пересчет итогов» и, для файловой базы, «Сжатие таблиц информационной базы».
- Запустите проверку и дождитесь завершения.
Для клиент-серверной базы место освобождают средствами СУБД — это задача администратора сервера.
Как проверить результат свертки
Проверка занимает полчаса и снимает почти все споры после свертки. Сформируйте одни и те же отчёты на дату свертки в копии до свертки и в базе после неё:
- 📦 остатки товаров по складам — количество и сумма;
- 💰 остатки денежных средств по кассам и счетам;
- 🤝 задолженность покупателей и поставщикам в разрезе контрагентов;
- 🧾 себестоимость остатков, если ведётся партионный учёт.
Цифры должны совпасть до копейки. Расхождение даже в одной позиции — повод найти причину на копии, а не переносить ошибку в рабочую базу. Удобно выгрузить оба отчёта в табличный документ и сравнить построчно.
Частые вопросы
Сколько места освобождает свертка базы?
Можно ли свернуть базу на середину года?
Метод Свернуть работает на клиенте?
Можно ли продолжать работать в базе во время свертки?
Нужна ли свертка, если база в облаке 1С:Фреш или у провайдера?
Источники
- Федеральный закон от 06.12.2011 № 402-ФЗ «О бухгалтерском учете», статья 29