Перенос нормативно-справочной информации (НСИ) и начальных остатков — классическая задача при переходе на чистую базу данных или обновлении конфигурации «1С:Управление торговлей 11». Однако при больших объемах накопленных данных стандартная выгрузка через универсальную обработку обмена XML может приводить к формированию гигантских файлов (вплоть до 40–50 Гб и более). Попытка загрузить такой файл на стандартном рабочем компьютере гарантированно заканчивается аварийным завершением работы платформы, нехваткой оперативной памяти или полным переполнением системного диска.
В этой статье мы подробно проанализируем причины возникновения этой проблемы и разберем по шагам эффективные профессиональные методики, которые позволят успешно перенести данные даже при жестких ограничениях на дисковое пространство и оперативную память.
Перед тем как приступать к активным действиям, давайте разберем, из чего складывается такой огромный объем файла выгрузки. Как правило, в базе «1С:Управление торговлей 11» основными «тяжеловесами» являются:
Номенклатура, PDF-инструкции хранятся непосредственно в базе данных в виде двоичных данных (в Хранилищах значений). При выгрузке в XML эти бинарные данные преобразуются в текстовый формат Base64, что увеличивает их объем примерно на 30–40%.C: стремительно заполняется временным кэшем XDTO.Рассмотрим пошагово действенные альтернативные способы решения этой задачи.
Самый простой и эффективный способ уменьшить объем выгружаемого файла — это исключить из него двоичные данные. Картинки и сканы документов не влияют на проведение документов и расчет остатков, поэтому их перенос можно (и нужно) выполнять отдельно.
Выполним следующие действия в обработке выгрузки:
Справочник.НоменклатураПрисоединенныеФайлыСправочник.ДоговорыКонтрагентовПрисоединенныеФайлыСправочник.ПартнерыПрисоединенныеФайлыМало кто знает, что стандартная обработка «Выгрузка и загрузка данных XML» поддерживает альтернативный высокопроизводительный формат.
Проанализируем преимущества формата FastInfoSet (двоичный XML):
Для использования этого режима достаточно установить соответствующий флаг в настройках обработки перед началом выгрузки.
Если диск C: все равно переполняется в процессе загрузки, необходимо перенести кэш платформы на более емкий накопитель (например, внешний диск или диск D:). Сделаем это через переменные среды операционной системы:
D:\1C_TEMP.TEMP и TMP установим значение D:\1C_TEMP.Чтобы избежать переполнения оперативной памяти и логов СУБД, импорт данных нужно выполнять порциями. В обработке «Универсальный обмен данными в формате XML» обязательно настроим параметры записи:
500 или 1000.Это заставит платформу периодически фиксировать транзакции в базе данных и очищать оперативную память, предотвращая ошибку недостатка ресурсов памяти на компьютере.
Если в базе-источнике содержится огромное количество документов (например, около 400 000 документов, как у автора темы), то пытаться выгружать остатки «напрямую» не имеет смысла. Наиболее правильным архитектурным решением будет предварительное проведение процедуры свертки.
Разберем этот процесс по шагам:
Чтобы полностью отказаться от записи промежуточных файлов на жесткий диск, мы можем организовать передачу данных напрямую из одной базы в другую. Рассмотрим два варианта реализации этого подхода:
Мы можем использовать специализированные обработки переноса, которые подключаются к базе-источнику по COM-технологии и считывают данные напрямую в оперативную память приемника. Ниже приведен пример программного подключения к базе-источнику:
Соединитель = Новый COMОбъект("V83.COMConnector");
ПараметрыПодключения = "Srvr=""ИмяСервера"";Ref=""ИмяБазыИсточник"";Usr=""Администратор"";Pwd=""Пароль"";";
Попытка
БазаИсточник = Соединитель.Connect(ПараметрыПодключения);
Сообщить("Подключение к базе-источнику выполнено успешно!");
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;
При таком подходе данные передаются порциями и сразу записываются в базу-приемник, минуя промежуточную стадию сохранения XML на жесткий диск компьютера.
В конфигурацию «1С:Управление торговлей 11» встроен современный механизм синхронизации. Мы можем настроить обмен данными через локальный каталог или веб-сервис. С помощью планов обмена система будет регистрировать только необходимые к выгрузке справочники и документы ввода остатков, передавая их небольшими пакетами (пачками), что гарантирует стабильность процесса.
Для обработки крупных массивов данных необходимо использовать соответствующую программную инфраструктуру:
SafeCallMemoryLimit (Безопасный расход памяти за один вызов), чтобы рабочий процесс rphost не перезапускался при обработке сложных пакетов данных.Применяя предложенные методики комплексно — исключая тяжелые файлы из выгрузки, используя порционную загрузку в транзакциях и предварительно свернув базу для получения остатков — вы гарантированно решите задачу переноса данных в чистую базу УТ 11 без необходимости покупки нового оборудования.