Как перенести большой объем НСИ и остатков в чистую базу «1С:Управление торговлей 11» при переполнении диска?

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

Перенос нормативно-справочной информации (НСИ) и начальных остатков — классическая задача при переходе на чистую базу данных или обновлении конфигурации «1С:Управление торговлей 11». Однако при больших объемах накопленных данных стандартная выгрузка через универсальную обработку обмена XML может приводить к формированию гигантских файлов (вплоть до 40–50 Гб и более). Попытка загрузить такой файл на стандартном рабочем компьютере гарантированно заканчивается аварийным завершением работы платформы, нехваткой оперативной памяти или полным переполнением системного диска.

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

Выясняем причины: почему файл XML весит 44 Гб и переполняет диск?

Перед тем как приступать к активным действиям, давайте разберем, из чего складывается такой огромный объем файла выгрузки. Как правило, в базе «1С:Управление торговлей 11» основными «тяжеловесами» являются:

  1. Присоединенные файлы и изображения. Сканы договоров, фотографии товаров в справочнике Номенклатура, PDF-инструкции хранятся непосредственно в базе данных в виде двоичных данных (в Хранилищах значений). При выгрузке в XML эти бинарные данные преобразуются в текстовый формат Base64, что увеличивает их объем примерно на 30–40%.
  2. Временные файлы кэша (TEMP). Платформа 1С при сериализации и десериализации XML активно использует системный каталог временных файлов. Даже если сам файл выгрузки сохраняется на внешний жесткий диск, системный диск C: стремительно заполняется временным кэшем XDTO.
  3. Файлы транзакций СУБД (лог транзакций). При импорте огромного объема данных в СУБД (MS SQL Server, PostgreSQL) файл транзакций разрастается до колоссальных размеров, так как база пытается записать все новые объекты за один сеанс.

Рассмотрим пошагово действенные альтернативные способы решения этой задачи.

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

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

Выполним следующие действия в обработке выгрузки:

  1. Откроем список выгружаемых объектов.
  2. Найдем подчиненные справочники, отвечающие за хранение файлов. Для конфигурации УТ 11 это будут:
    • Справочник.НоменклатураПрисоединенныеФайлы
    • Справочник.ДоговорыКонтрагентовПрисоединенныеФайлы
    • Справочник.ПартнерыПрисоединенныеФайлы
  3. Полностью снимем флажки с этих справочников. Сами файлы картинок и сканов можно перенести позже, либо предварительно настроить их хранение в томах на диске (вне базы данных). Это сократит размер XML-файла в несколько раз.

Решение 2. Использование бинарного формата FastInfoSet

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

Проанализируем преимущества формата FastInfoSet (двоичный XML):

Для использования этого режима достаточно установить соответствующий флаг в настройках обработки перед началом выгрузки.

Решение 3. Перенаправление системных временных папок (TEMP)

Если диск C: все равно переполняется в процессе загрузки, необходимо перенести кэш платформы на более емкий накопитель (например, внешний диск или диск D:). Сделаем это через переменные среды операционной системы:

  1. Создадим папку на целевом диске, например: D:\1C_TEMP.
  2. Откроем свойства системы: Панель управления -> Система -> Дополнительные параметры системы -> Переменные среды.
  3. Для переменных пользователя TEMP и TMP установим значение D:\1C_TEMP.
  4. Если база клиент-серверная, аналогичные действия нужно проделать для пользователя ОС, под которым запущен процесс сервера 1С (rphost).

Решение 4. Настройка порционной записи (транзакций) при загрузке

Чтобы избежать переполнения оперативной памяти и логов СУБД, импорт данных нужно выполнять порциями. В обработке «Универсальный обмен данными в формате XML» обязательно настроим параметры записи:

Это заставит платформу периодически фиксировать транзакции в базе данных и очищать оперативную память, предотвращая ошибку недостатка ресурсов памяти на компьютере.

Решение 5. Свертка базы данных перед выгрузкой

Если в базе-источнике содержится огромное количество документов (например, около 400 000 документов, как у автора темы), то пытаться выгружать остатки «напрямую» не имеет смысла. Наиболее правильным архитектурным решением будет предварительное проведение процедуры свертки.

Разберем этот процесс по шагам:

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

Решение 6. Прямой перенос данных через COM-соединение или EnterpriseData

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

Вариант А: Использование COM-соединения

Мы можем использовать специализированные обработки переноса, которые подключаются к базе-источнику по COM-технологии и считывают данные напрямую в оперативную память приемника. Ниже приведен пример программного подключения к базе-источнику:


Соединитель = Новый COMОбъект("V83.COMConnector");
ПараметрыПодключения = "Srvr=""ИмяСервера"";Ref=""ИмяБазыИсточник"";Usr=""Администратор"";Pwd=""Пароль"";";
Попытка
    БазаИсточник = Соединитель.Connect(ПараметрыПодключения);
    Сообщить("Подключение к базе-источнику выполнено успешно!");
Исключение
    Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;

При таком подходе данные передаются порциями и сразу записываются в базу-приемник, минуя промежуточную стадию сохранения XML на жесткий диск компьютера.

Вариант Б: Синхронизация через универсальный формат EnterpriseData

В конфигурацию «1С:Управление торговлей 11» встроен современный механизм синхронизации. Мы можем настроить обмен данными через локальный каталог или веб-сервис. С помощью планов обмена система будет регистрировать только необходимые к выгрузке справочники и документы ввода остатков, передавая их небольшими пакетами (пачками), что гарантирует стабильность процесса.

Решение 7. Технические настройки платформы и сервера

Для обработки крупных массивов данных необходимо использовать соответствующую программную инфраструктуру:

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

← На главную