Как быстро и правильно свернуть базу «1С:Торговля и Склад 7.7»?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

Свертка старых периодов в конфигурации «Торговля и Склад 7.7» (ТиС) — классическая задача, с которой сталкивается любой администратор или разработчик систем на платформе «1С:Предприятие 7.7». Главная проблема стандартных механизмов заключается в их низкой скорости работы. База объемом в несколько гигабайт при попытке свернуть ее «штатным» универсальным инструментом WRAP.ert (разработанным в первую очередь для бухгалтерских конфигураций) может зависнуть на несколько суток. Процесс удаления миллионов документов превращается в кошмар из-за рекурсивной проверки ссылочной целостности платформой.

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

Штатный механизм: использование режима «Завершение периода»

Прежде чем переходить к радикальным техническим средствам, разберем архитектурную особенность «Торговли и Склада 7.7». Многие разработчики по ошибке пытаются использовать для свертки внешнюю обработку свертки конфигурации «Бухгалтерский учет». Для торговой базы это неэффективно, так как логика регистров накопления принципиально отличается от бухгалтерских проводок.

В ТиС 7.7 предусмотрен встроенный штатный механизм, о котором часто забывают. Он находится в меню Сервис — Завершение периода. Рассмотрим принцип его работы:

  1. Механизм анализирует остатки по всем регистрам конфигурации (товары, взаиморасчеты, резервы, партии) на выбранную дату среза.
  2. На основе полученных итогов автоматически формируются документы ввода остатков (например, «Ввод остатков ТМЦ», «Ввод остатков по покупателям» и другие).
  3. Все сформированные документы проводятся, фиксируя состояние системы на дату начала нового периода.

Основная проблема этого метода — последующее удаление документов за закрытый период. Если документов сотни тысяч, стандартная процедура удаления объектов в 1С 7.7 будет выполняться бесконечно долго. Ниже мы разберем, как обойти это ограничение. Для ускорения этого процесса можно воспользоваться обработкой усовершенствованной свертки конфигурации «Торговля и Склад 7.7».

Метод №1: Перенос остатков и справочников в чистую базу (наиболее безопасный)

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

  1. Создаем резервную копию рабочей базы данных.
  2. В копии базы запускаем штатную процедуру «Завершение периода» на дату свертки (например, на 31.12.2023). Ждем, пока система сформирует и проведет все документы ввода остатков.
  3. Создаем новую пустую базу данных с аналогичной конфигурацией (переносим только файл 1cv7.md).
  4. Используем специализированные обработки для переноса данных (например, популярную утилиту Rocket Launcher 7.7 или правила обмена через «Конвертацию данных 1.0»).
  5. Переносим из свернутой копии в новую базу только документы ввода остатков на дату свертки, а также все документы, созданные после даты свертки.
  6. Механизм рекурсивного переноса автоматически определит и скопирует в новую базу только те элементы справочников (контрагенты, номенклатура, договоры, партии), на которые есть живые ссылки в переносимых документах.

Этот метод позволяет не только мгновенно избавиться от документов прошлых лет, но и полностью очистить справочники от накопленного «мусора» — элементов, которые давно не используются в текущей деятельности. Для реализации такого переноса остатков и связанных объектов подойдёт конфигурация для свертки базы 1С 7.7 и выборочного переноса данных.

Метод №2: Прямое удаление документов через SQL-запросы

Если ваша база данных «1С 7.7» работает под управлением СУБД MS SQL Server, мы можем обойти платформенные ограничения и удалить старые документы за считанные секунды с помощью прямых запросов. Для реализации этого метода обычно используется внешняя компонента 1С++, которая позволяет выполнять низкоуровневые SQL-команды прямо из кода 1С.

Выясним причину высокой скорости: СУБД удаляет записи напрямую из таблиц базы данных, минуя долгие проверки ссылок платформой 1С. Разберем примерный алгоритм и структуру SQL-запроса:

  1. Формируем документы ввода остатков на дату свертки штатным методом.
  2. Пишем SQL-скрипт для очистки таблиц документов. Нам необходимо очистить общий журнал документов _1SJOURN, а также таблицы шапок (DH*) и табличных частей (DT*) документов за период до даты свертки.

Пример концептуального SQL-запроса для очистки документов старше определенной даты:


-- Пример SQL-запроса для удаления документов до 01.01.2024
DECLARE @CutOffDate varchar(8)
SET @CutOffDate = '20240101'

-- Удаляем движения документов по регистрам (таблицы RA*)
-- Имена таблиц движений индивидуальны для каждой конфигурации
DELETE FROM RA999 WHERE DATE_TIME_IDDOC < @CutOffDate;

-- Удаляем строки табличных частей документов (таблицы DT*)
-- Требуется выполнить соединение с журналом документов по IDDOC
DELETE DT 
FROM DT123 DT
INNER JOIN _1SJOURN J ON DT.IDDOC = J.IDDOC
WHERE J.DATE_TIME_IDDOC < @CutOffDate;

-- Удаляем шапки документов (таблицы DH*)
DELETE DH 
FROM DH123 DH
INNER JOIN _1SJOURN J ON DH.IDDOC = J.IDDOC
WHERE J.DATE_TIME_IDDOC < @CutOffDate;

-- В последнюю очередь очищаем журнал документов
DELETE FROM _1SJOURN WHERE DATE_TIME_IDDOC < @CutOffDate;

Важно: После выполнения таких низкоуровневых операций необходимо обязательно запустить Конфигуратор и выполнить полное «Тестирование и исправление БД» с установленными галочками пересчета итогов и очистки ссылок на несуществующие объекты. Это восстановит логическую целостность базы данных.

Метод №3: Физическая очистка DBF-файлов (для файловых баз)

Для файловых баз данных (DBF-формат) также существует быстрый технический обход стандартного удаления, основанный на временном отключении и пересоздании таблиц регистров. Разберем эту последовательность действий:

  1. В копии базы формируем документы ввода остатков на выбранную дату свертки. Проверяем, что все остатки сходятся с отчетами.
  2. Закрываем 1С. Переходим в каталог базы данных средствами операционной системы.
  3. Копируем в отдельную временную папку файлы таблиц итогов и движений регистров. Это файлы с расширениями .DBF и .CDX, имена которых начинаются на RA* (движения регистров) и RG* (итоги регистров).
  4. Удаляем эти файлы в основном каталоге базы данных.
  5. Запускаем Конфигуратор. Программа заметит отсутствие таблиц регистров и автоматически создаст их заново — абсолютно пустыми.
  6. Теперь запускаем 1С в режиме Предприятия и спокойно удаляем старые документы. Так как таблицы движений пусты, удаление документов в журнале 1sjourn.dbf пройдет во много раз быстрее, поскольку системе не придется очищать миллионы строк движений по регистрам.
  7. После удаления документов возвращаем ранее скопированные файлы RG* и RA* обратно в каталог базы данных с заменой.
  8. Запускаем утилиту Тестирование и исправление в Конфигураторе, выбираем пункты «Пересчет итогов» и «Восстановление последовательностей». Система заново пересчитает все итоги с учетом созданных документов ввода остатков.

Важные технологические нюансы при свертке ТиС 7.7

Проводя свертку «Торговли и Склада 7.7», обязательно учитывайте критически важные особенности этой конфигурации:

Используя предложенные методики, мы можем сократить время свертки даже самых запущенных баз «1С:Торговля и Склад 7.7» до разумных пределов, обеспечив при этом абсолютную точность переноса остатков и стабильную работу системы в новом отчетном периоде.

← На главную