При настройке обмена данными между типовыми конфигурациями 1С:Управление торговлей 11 и 1С:Бухгалтерия предприятия 3.0 (особенно через универсальный формат Enterprise Data), технические специалисты часто сталкиваются с ситуацией, когда объем накопленных данных за несколько лет работы превращает первичную выгрузку в многочасовой процесс. Возникает закономерный вопрос: можно ли позволить пользователям продолжать работу в исходной базе (УТ), пока идет длительная загрузка и сопоставление объектов в принимающей базе (БП)?
В этой статье мы подробно разберем механизм работы синхронизации, проанализируем риски параллельной работы пользователей и рассмотрим способы преодоления технических ограничений, таких как нехватка оперативной памяти на сервере.
Разберем, как ведет себя система при запуске процесса обмена. Основу любой типовой синхронизации составляют Планы обмена. Когда вы инициируете первую выгрузку, система формирует файл на основе данных, зарегистрированных к обмену на текущий момент. Рассмотрим подробнее, что происходит, если в этот момент пользователи начинают изменять данные в УТ 11:
Проанализируем ситуацию с точки зрения целостности данных. Если пользователь изменит документ, который уже находится в «длинном» файле обмена, в Бухгалтерии сначала появится старая версия документа. Однако сразу после завершения текущего цикла и запуска следующего (инкрементального) обмена, система увидит свежую регистрацию изменения в УТ и обновит документ в БП до актуального состояния. Таким образом, работать пользователям в УТ можно, это не приведет к критическим ошибкам или потере данных.
Одной из главных проблем при работе с Enterprise Data является потребление ресурсов. Ошибка «Недостаточно памяти» возникает из-за того, что при чтении и разборе огромного XML-файла (или JSON) платформа пытается построить дерево объектов в оперативной памяти. Если сервер имеет всего 8 ГБ ОЗУ или используется 32-битная версия рабочего процесса rphost, падение системы практически неизбежно.
Рассмотрим по шагам, как оптимизировать этот процесс:
rphost, однако это сильно замедлит процесс (загрузка может растянуться на сутки и более).Для ускорения процесса в принимающей базе (Бухгалтерии) и предотвращения блокировок, выясним причины медленной записи. Вы можете использовать следующие приемы:
Отключение итогов. Перед массовой загрузкой документов за несколько лет крайне полезно временно отключить расчет итогов по регистрам бухгалтерии и накопления. Это позволит системе просто записывать данные, не пересчитывая итоги после каждой транзакции. После завершения обмена итоги нужно будет включить и пересчитать за один раз.
Режим загрузки данных. Проверьте, что обмен идет в режиме загрузки. В коде это управляется свойством ОбменДанными.Загрузка = Истина. В этом режиме:
ПередЗаписью и ПриЗаписи.Самый трудоемкий этап — сопоставление данных (мэппинг). Рассмотрим подробнее, как облегчить этот процесс. Если БП 3.0 была абсолютно пустой («чистой»), то сопоставление пройдет автоматически по внутренним идентификаторам (GUID). Если же в БП уже велся какой-то учет, крайне важно настроить поля поиска.
Проанализируем типичные поля поиска для Enterprise Data:
ИНН + КПП.Артикул или Наименование + ЭтоГруппа.Номер + Дата.Выясним причину, по которой сопоставление может «висеть». Часто это происходит из-за поиска по неиндексированным полям или при попытке системы сопоставить тысячи записей за один проход в интерактивном окне. Если объектов более 50 000, старайтесь выполнять сопоставление порциями.
После того как 12-часовая (или более) загрузка в БП завершится, критически важно выполнить «ответный ход»:
Зачем это нужно? Пока УТ 11 не получит подтверждение, что объекты успешно загружены в БП, она будет продолжать хранить информацию об их «изменении» в таблицах регистрации. Если вы не загрузите ответное сообщение, следующая выгрузка снова будет содержать те же самые 375 МБ данных плюс новые изменения, что опять приведет к ошибке памяти. Загрузка квитанции очищает таблицу регистрации на узле плана обмена.
Пример анализа состояния регистрации изменений:
Для контроля за тем, сколько данных «стоит в очереди» на выгрузку, программист может использовать обработку «Регистрация изменений для обмена». В ней наглядно видно количество объектов каждого типа, ожидающих отправки. Если после успешной загрузки в БП список не очистился — значит, номер сообщения обмена не синхронизировался, и это требует ручного вмешательства в номера принятых и отправленных сообщений на узлах обмена.
Подводя итог, можно составить следующий алгоритм действий для настройки обмена при больших объемах:
rphost и объем ОЗУ.