Как правильно выполнить свертку распределенной информационной базы (РИБ) в 1С:Управление торговлей 10.3?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Развенчиваем мифы о критическом размере базы

Перед тем как приступать к свертке, проанализируем причины. Часто пользователи решаются на свертку, когда объем файловой базы достигает 6–10 Гб, опасаясь фатальных сбоев. Разберем ситуацию: в платформе 1С существует ограничение не на общий размер файла .1CD, а на размер **одной таблицы** внутри этого файла, который составляет 4 Гб. Если ваша база весит 12 Гб, но данные распределены по разным таблицам (товары, остатки, цены), она будет прекрасно работать. Однако, если вы планируете массово загружать изображения (например, для выгрузки на сайт), таблица двоичных данных может быстро достичь этого предела. В таком случае свертка — лишь временная мера, и правильнее будет рассмотреть переход на клиент-серверный вариант (SQL) или хранение картинок вне базы (в томах).

Стратегия №1: Свертка через центральную базу с трансляцией изменений

Это самый простой с точки зрения реализации метод, который подходит для баз небольшого и среднего объема. Рассмотрим его по шагам:

  1. Подготовка: Создадим полные резервные копии всех узлов. Завершим все текущие обмены, чтобы базы находились в идентичном состоянии.
  2. Свертка в ЦБ: Запустим обработку basetrimming.epf (Свертка информационной базы) в центральном узле. Выберем дату свертки и сформируем документы ввода остатков.
  3. Пометка на удаление: Обработка пометит старые документы на удаление. Важно: на этом этапе мы не запускаем «Удаление помеченных объектов».
  4. Синхронизация: Выполним обмен данными со всеми периферийными узлами. Информация о новых документах (ввод остатков) и пометки на удаление старых объектов уйдут в дочерние базы.
  5. Окончательная очистка: Только после того, как все узлы подтвердили прием изменений, запускаем процедуру удаления помеченных объектов в центральной базе, а затем — по очереди в каждой периферийной.

Проблема «Out of Memory»: Проанализируем главный риск этого метода. При удалении сотен тысяч документов в ЦБ, записи в таблицах регистрации изменений создают колоссальную нагрузку. При попытке выгрузки файл обмена XML может достичь нескольких гигабайт. При чтении такого файла периферийная база может выдать ошибку нехватки памяти. Если вы столкнулись с этим, рекомендуем выполнять обмен порциями или временно увеличить лимит виртуальной памяти процесса 1С.

Стратегия №2: Параллельная свертка во всех узлах (для больших баз)

Если база данных велика и передача миллионов удалений через XML физически невозможна, рассмотрим метод «автономной» свертки. Проанализируем последовательность действий:

  1. Остановка обмена: Полностью прекращаем обмен данными.
  2. Идентичная свертка: Запускаем basetrimming.epf в каждом узле (в ЦБ и во всех периферийных базах) с абсолютно одинаковыми настройками.
  3. Синхронизация GUID: Это критический момент. Документы ввода остатков, созданные обработкой, должны иметь одинаковые уникальные идентификаторы (GUID). Если обработка генерирует их случайно, базы перестанут быть идентичными. В этом случае после свертки в ЦБ можно программно выгрузить созданные документы ввода остатков в узлы, чтобы заменить «местные» копии.
  4. Очистка регистрации: После того как свертка завершена во всех базах, нам нужно «обмануть» систему обмена, сказав ей, что обмениваться результатами свертки не нужно. Для этого воспользуемся встроенными функциями платформы.

Разберем пример кода для полной очистки регистрации изменений в конкретном узле, чтобы предотвратить выгрузку «мусора» после свертки:


// Выбираем узел, для которого нужно очистить регистрацию
УзелОбмена = ПланыОбмена.По Организациям.НайтиПоКоду("П01");

// Удаляем регистрацию всех изменений для этого узла
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена);

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

Стратегия №3: Создание новых начальных образов

Выясним причину, по которой этот метод часто называют самым «чистым». Если в базе накопилось много ошибок в регистрах или механизм обмена работает нестабильно, проще всего пересоздать структуру РИБ.

  1. Выполним свертку только в центральной базе.
  2. Произведем полное удаление помеченных объектов и выполним «Тестирование и исправление» (ТИИ) с опцией «Сжатие таблиц».
  3. В плане обмена удалим старые записи о периферийных узлах и создадим их заново.
  4. Для каждого нового узла сформируем «Начальный образ».
  5. Доставим эти файлы в филиалы и заменим ими старые базы.

Этот метод гарантирует, что периферийные базы будут иметь минимально возможный размер и не будут содержать «хвостов» от удаленных данных.

Техническое обслуживание после свертки

Просто пометить объекты на удаление и нажать кнопку «Удалить» недостаточно для уменьшения размера файла на диске. Рассмотрим, что нужно сделать обязательно:

Для файловых баз: Обязательно запустите «Тестирование и исправление» из конфигуратора. Выберите пункт «Сжатие таблиц информационной базы». В файловой версии 1С удаленные данные физически остаются в файле .1CD, просто помечаются как свободное место. Сжатие перестроит файл и реально уменьшит его размер, что ОС увидит как освобождение места на диске.

Для клиент-серверных баз (SQL): После удаления большого объема данных лог транзакций (файл .ldf) может вырасти до огромных размеров. Проанализируем ситуацию: необходимо выполнить операцию Shrink Database (Сжатие базы данных) средствами SQL Server Management Studio. Это вернет неиспользуемое пространство операционной системе.

Особенности работы с обработкой basetrimming

Посмотрим на нюансы работы самой обработки с ИТС. Она эффективно сворачивает регистры накопления, создавая корректировки, но часто не затрагивает независимые регистры сведений. Если у вас есть самописные регистры, в которых хранятся логи или история каких-то событий, их придется вычищать вручную или с помощью специализированных обработок «Очистка регистров». Также помните, что свертка может повлиять на интеграцию с сайтом (например, на Битриксе). Если идентификаторы объектов изменятся или удалятся связи, сайт может потребовать полной перевыгрузки каталога. Всегда проверяйте узлы обмена с сайтом после проведения подобных процедур.

Подводя итог: если ваша база весит около 6 Гб и не испытывает явных проблем с производительностью, возможно, со сверткой стоит повременить, сосредоточившись на оптимизации кода или переходе на SQL. Если же свертка неизбежна — используйте Стратегию №1 для простоты или Стратегию №3 для достижения максимальной чистоты системы.

← На главную