В крупных отраслевых решениях, таких как «1С:Бухгалтерия сельскохозяйственного предприятия» (Агрокомплекс), специалисты часто сталкиваются с проблемой экстремальной нагрузки на механизмы синхронизации в периоды закрытия отчетных периодов. Специфика агропромышленного сектора такова, что основные затраты распределяются в конце года, что порождает документы Регламентная операция с сотнями тысяч бухгалтерских проводок. При использовании стандартного механизма синхронизации данных через формат Enterprise Data или FTP-ресурс такие объемы могут передаваться неделями, блокируя при этом передачу оперативной информации (НСИ, платежные поручения, накладные).
Разберем детально, почему так происходит и какие технические и методологические приемы помогут нам решить эту задачу эффективно.
Прежде всего, проанализируем ситуацию. Стандартный механизм синхронизации 1С при выгрузке документа выполняет XDTO-сериализацию. Если документ содержит 100 000 и более строк в табличной части проводок, платформа пытается построить дерево объектов в памяти. Это приводит к следующим проблемам:
Рассмотрим вариант выноса тяжелых документов в отдельный поток. Вместо того чтобы пытаться «протолкнуть» регламентные операции через типовую синхронизацию, мы можем создать отдельный план обмена. В этом случае мы разделим потоки данных.
Для реализации этого подхода выполним следующие шаги:
Конвертации данных 2.0 правила обмена только для документа Регламентная операция.Это позволит оперативной информации (НСИ, документы текущего дня) передаваться по основному каналу без задержек.
Проанализируем ситуацию с точки зрения методологии. Действительно ли в центральной базе (УХ) необходима детализация до каждого поля, культуры или конкретной партии семян в каждой из 100 000 проводок? Зачастую для управленческого учета в холдинге достаточно агрегированных данных.
Мы можем доработать алгоритм выгрузки так, чтобы проводки сворачивались по ключевым аналитикам:
Такая свертка может сократить количество строк с 100 000 до 2 000–3 000, что моментально решит проблему скорости передачи без потери качества учета в центральной базе.
Если нам всё же необходимо передать все 100 000 проводок «один в один», то формат XML становится главным врагом. Рассмотрим вариант использования простых текстовых форматов или CSV. В этом случае мы передаем в синхронизации только «шапку» документа, а его табличную часть (движения) переносим отдельно.
Алгоритм действий следующий:
Пример кода для быстрой записи движений в приемнике:
НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокумент);
// Читаем данные из файла и заполняем набор
Пока Файл.ПрочитатьСтроку() Цикл
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = ДатаИзФайла;
// Заполнение остальных полей...
КонецЦикла;
НаборЗаписей.Записать(Истина); // Флаг Истина позволяет быстро перезаписать движения
Использование НабораЗаписей с прямой записью минуя объектную модель документа работает в десятки раз быстрее, чем стандартная загрузка через XDTO.
Если мы не хотим отказываться от типовой синхронизации, нам следует посмотреть в сторону технических настроек платформы 1С. Выясним, можем ли мы ускорить сам процесс сериализации.
Начиная с современных версий платформы 8.3, для обмена данными можно использовать бинарный формат FastInfoSet. Он значительно эффективнее обычного XML, так как сжимает данные на лету и быстрее обрабатывается парсером. Для этого в настройках подключения (если используется веб-сервис или прямой обмен) необходимо активировать соответствующие параметры. Однако помните, что при обмене через FTP мы все равно ограничены скоростью записи и чтения файла на диск.
Подведем итог нашему анализу. Если синхронизация в «Агрокомплексе» не справляется с годовым закрытием, мы рекомендуем:
Выбрав один из этих путей, мы обеспечим стабильную работу системы даже в самые напряженные периоды отчетности.