Свёртка данных в 1С 8.3: база, табличные части, запросы и отчёты

· 10 мин

Содержание

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

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

Три вида свертки и чем они отличаются

Прежде чем что-то сворачивать, определите, о какой свертке идёт речь. Последствия у них несопоставимые.

Вид сверткиЧто происходитОбратимостьКто делает
Свертка информационной базыДокументы до даты свертки удаляются, вместо них — остатки на датуТолько из резервной копииАдминистратор базы
Свертка строк (табличная часть, таблица значений, запрос)Строки с одинаковыми реквизитами сливаются, количества и суммы складываютсяТолько повторным вводом или из истории версийПользователь или программист
Свертка группировок отчётаДетальные строки скрываются, видны итоги по группамПолностью, в один кликЛюбой пользователь
Какая свертка вам нужна?

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

Механизм простой по идее. Выбирается дата свертки, например 01.01 текущего года. Программа фиксирует остатки по регистрам на эту дату: товары на складах, взаиморасчёты с контрагентами, деньги, партии. Затем создаёт служебные документы ввода остатков с этими значениями и удаляет все документы, датированные раньше.

После свертки база «начинается» с даты свертки. Остатки на конец периода сходятся с прежними, а обороты и детальная история за прошлые годы пропадают.

Где найти свертку в типовых конфигурациях

  • 📦 1С:Управление торговлей 11, Комплексная автоматизация 2, ERP 2 — встроенная обработка «Свертка информационной базы» в разделе НСИ и администрирование → Администрирование, на панели обслуживания. Если в вашем релизе панель выглядит иначе, найдите команду через поиск по интерфейсу по слову «свертка».
  • 📊 1С:Бухгалтерия предприятия 3.0 — привычный путь при разросшейся базе другой: новая база на начало года с переносом остатков. Перед работой проверьте поиском по командам, нет ли свертки в вашем релизе.
  • 🗂️ Старые конфигурации на 8.2 и обычных формах — свертку делали внешней обработкой. Её поведение зависит от версии конкретной обработки, поэтому здесь только общий совет: тестовый прогон на копии обязателен.

Порядок свертки базы

  1. Договоритесь с бухгалтерией о дате свертки. Обычно это начало года, за которым все периоды закрыты и отчётность сдана.
  2. Сделайте резервную копию: Конфигуратор → Администрирование → Выгрузить информационную базу (файл .dt) или штатный бэкап СУБД для клиент-серверной базы.
  3. Разверните копию в отдельную базу и выполните свертку на ней.
  4. Сформируйте на копии контрольные отчёты на дату свертки и сравните с рабочей базой (подробно — в разделе про проверку ниже).
  5. Если цифры совпали, повторите свертку на рабочей базе в нерабочее время, когда пользователи вышли из программы.
  6. Выполните тестирование и исправление с пересчётом итогов (раздел про оптимизацию).

Свертка удаляет документы безвозвратно. Отменить её кнопкой нельзя — только восстановлением из копии, сделанной до свертки. Копию храните отдельно, а не в той же папке, что и база.

По 402-ФЗ первичные документы и регистры учёта хранят не менее пяти лет после отчётного года. Свертка рабочей базы этой обязанности не отменяет: сохраните архивную копию до свертки и оформите, где она лежит.

Свертка строк в табличных частях и печатных формах

Типичная ситуация: менеджер подбирал товар несколькими заходами, и в реализации один артикул встречается трижды. Типовые документы такие строки сами не объединяют — каждая строка остаётся отдельной и в документе, и в печатной форме.

Объединить можно двумя путями.

Вариант 1. Свернуть строки в самом документе

Подходит, когда строки действительно одинаковые и их дробление ничего не значит. Делается через таблицу значений на сервере:

&НаСервере
Процедура СвернутьТоварыНаСервере()
    ТЗ = Объект.Товары.Выгрузить();
    ТЗ.Свернуть("Номенклатура, Характеристика, Цена, СтавкаНДС",
                "Количество, Сумма, СуммаНДС");
    Объект.Товары.Загрузить(ТЗ);
КонецПроцедуры

Метод Свернуть() принимает две строки через запятую:

  • 🔑 колонки группировки — строки сливаются, только если значения во всех этих колонках равны;
  • ➕ колонки суммирования — их значения складываются.

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

Такой код размещают в расширении конфигурации и выводят на форму документа кнопкой, а не правят типовую конфигурацию. После свертки документ нужно перепровести.

Вариант 2. Свернуть строки только в печатной форме

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

Цена — тоже колонка группировки. Если один товар продан по 100 и по 105 рублей, строки не сольются. Это правильное поведение: иначе цена в объединённой строке стала бы неверной.

Почему свертка работает некорректно

Большинство жалоб «свертка не сработала» или «после свертки всё поехало» сводится к нескольким причинам.

Диагностика: выберите симптом

Отдельный случай — распределённые базы. Если рабочая база — узел обмена (РИБ или обмен с бухгалтерией), свертка в одном узле без согласования с другими ломает синхронизацию: удалённые документы пытаются прийти обратно или выгрузиться как удаление. Перед сверткой такой базы остановите обмен и проверьте, как ваша конфигурация обрабатывает свертку в узлах.

Свертка в регистрах, запросах и отчётах

В регистрах накопления

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

В запросах

В языке запросов свертка — это СГРУППИРОВАТЬ ПО с агрегатными функциями:

ВЫБРАТЬ
    Товары.Номенклатура КАК Номенклатура,
    СУММА(Товары.Количество) КАК Количество,
    СУММА(Товары.Сумма) КАК Сумма
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК Товары
ГДЕ
    Товары.Ссылка = &Документ
СГРУППИРОВАТЬ ПО
    Товары.Номенклатура

Все поля, которые выбираются без агрегатной функции, обязаны стоять в СГРУППИРОВАТЬ ПО, иначе запрос не выполнится.

В отчётах на СКД

Торговые отчёты — «Валовая прибыль», «Остатки товаров», «Продажи» — строятся на системе компоновки данных. Свернуть их можно на двух уровнях.

  • 👁️ На экране. Слева от табличного документа отчёта выводятся маркеры группировок «плюс/минус», а сверху — кнопки с номерами уровней. Нажмите кнопку уровня 1, и отчёт покажет только верхние группы с итогами. Данные при этом не меняются.
  • ⚙️ В структуре отчёта. Через Настройки отчёта (расширенный режим) можно убрать лишнюю группировку, например по характеристикам или документам, и тогда отчёт сразу формируется в свёрнутом виде. Сохраните вариант отчёта, чтобы не повторять настройку.

Если отчёт формируется долго, сворачивать на экране бессмысленно: время тратится на расчёт, а не на вывод. Убирайте лишние группировки в структуре и сужайте период и отборы.

Как исправить свертку вручную или отменить её

Действия зависят от вида свертки.

Свертка группировок в отчёте. Отмена мгновенная: кнопка последнего уровня или маркеры «плюс» раскрывают всё обратно. Если отчёт сохранён в свёрнутой структуре — верните группировку в настройках или выберите стандартный вариант отчёта.

Свертка строк в документе. Обратной операции у метода Свернуть() нет. Варианты:

  1. Если в базе включена история изменений объектов, откройте предыдущую версию документа и восстановите табличную часть из неё.
  2. Если истории нет — разбейте строки вручную: уменьшите количество в объединённой строке и добавьте нужные строки заново, затем перепроведите документ.
  3. Для массовой ошибки (свернули сотни документов обработкой) надёжнее восстановить базу из копии, сделанной до обработки.

Свертка информационной базы. Отмена — только восстановление из копии до свертки. Если копии нет, а остаток после свертки неверный, его корректируют:

  • ✏️ правкой созданных сверткой документов ввода остатков — они обычные документы, их можно открыть, исправить строку и перепровести;
  • 📋 инвентаризацией товаров с оформлением излишков и недостач — если расхождение по складу подтверждено пересчётом;
  • 🤝 актом сверки с контрагентом и корректировкой долга — если расхождение по взаиморасчётам.

Правка документов ввода остатков меняет остатки на дату свертки и всё, что рассчитано после неё, в том числе себестоимость. После правки перезапустите закрытие месяца за затронутые периоды.

Как ускорить работу со свёрнутыми и большими данными

Свертка — крайняя мера. Часто базу удаётся ускорить без удаления истории.

СпособКогда помогаетРиски
Управление итогамиОтчёты по остаткам на текущую дату медленныеНет, операция служебная
Тестирование и исправление с пересчётом итогов и сжатием таблицПосле свертки или массового удаления в файловой базеНужен монопольный доступ, все пользователи выходят
Обслуживание СУБД (индексы, статистика)Клиент-серверная база тормозит в целомНагрузка на сервер во время работы
Удаление помеченных объектовМного мусора от черновиковУдаляются только помеченные, но проверьте список
Свертка базыОбъём мешает работе, история за годы не нужнаНеобратима без копии

Управление итогами

Открывается через Функции для технического специалиста → Стандартные → Управление итогами (пункт «Все функции» включается в настройках программы). Там задают период рассчитанных итогов и пересчитывают итоги регистров. Для оборотных регистров на этой же форме управляют агрегатами — заранее посчитанными свёрнутыми данными для быстрых отчётов.

Тестирование и исправление после свертки

После свертки в таблицах базы остаётся пустое место от удалённых записей. Его возвращают так:

  1. Предупредите пользователей: им нужно выйти из базы, сеансы будут недоступны на время операции.
  2. Откройте Конфигуратор → Администрирование → Тестирование и исправление.
  3. Отметьте «Пересчет итогов» и, для файловой базы, «Сжатие таблиц информационной базы».
  4. Запустите проверку и дождитесь завершения.

Для клиент-серверной базы место освобождают средствами СУБД — это задача администратора сервера.

Перед сверткой информационной базы
Выполнено: 0 / 7

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

Проверка занимает полчаса и снимает почти все споры после свертки. Сформируйте одни и те же отчёты на дату свертки в копии до свертки и в базе после неё:

  • 📦 остатки товаров по складам — количество и сумма;
  • 💰 остатки денежных средств по кассам и счетам;
  • 🤝 задолженность покупателей и поставщикам в разрезе контрагентов;
  • 🧾 себестоимость остатков, если ведётся партионный учёт.

Цифры должны совпасть до копейки. Расхождение даже в одной позиции — повод найти причину на копии, а не переносить ошибку в рабочую базу. Удобно выгрузить оба отчёта в табличный документ и сравнить построчно.

Частые вопросы

Сколько места освобождает свертка базы?
Зависит от доли старых документов. Если свернуть пять лет из шести, объём обычно уменьшается в разы, но точно это видно только после свертки и сжатия таблиц на копии.
Можно ли свернуть базу на середину года?
Технически да, но удобнее начало года или квартала: периоды закрыты, отчётность сдана, остатки на эту дату уже проверены.
Метод Свернуть работает на клиенте?
Нет. Таблица значений доступна на сервере, поэтому в управляемой форме свертку выполняют в процедуре с директивой &НаСервере.
Можно ли продолжать работать в базе во время свертки?
Нет. Свертка удаляет и создаёт документы массово, параллельный ввод даст расхождения. Планируйте её на нерабочее время.
Нужна ли свертка, если база в облаке 1С:Фреш или у провайдера?
Решение остаётся за вами, но порядок тот же: копия, прогон на копии, сверка остатков. Уточните у провайдера, как сделать выгрузку и восстановление.

Источники

  • Федеральный закон от 06.12.2011 № 402-ФЗ «О бухгалтерском учете», статья 29