Почему долго создаются и проводятся документы в 1С:ERP и как это ускорить?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием
← На главную

Часто разработчики сталкиваются с ситуацией, когда простейшая процедура загрузки документов из внешнего источника (например, Excel) в конфигурацию 1С:ERP начинает «зависать» или выполняться недопустимо долго. Казалось бы, документ содержит всего несколько полей, но создание даже сотни объектов растягивается на минуты. Рассмотрим подробнее, какие факторы влияют на производительность, и разберем по шагам методы оптимизации процесса записи и проведения документов.

Оптимизация поиска ссылочных данных в цикле

Проанализируем типичную ошибку в программном коде: использование методов поиска (НайтиПоНаименованию, НайтиПоРеквизиту) внутри цикла обхода строк. Каждый такой вызов — это не просто обращение к памяти, а полноценный, пусть и неявный, запрос к базе данных. Если у вас 200 документов и в каждом вы дважды ищете одного и того же пользователя, система выполнит 400 лишних запросов.

Рассмотрим, как правильно организовать получение ссылок. Выясним причину замедления: постоянные обращения к СУБД. Решением будет вынос поиска за пределы цикла или использование кэширования (соответствия).

Плохой пример:


Для Каждого СтрТз Из ТзЗагрузки Цикл
    НовыйДок = Документы.Реестр.СоздатьДокумент();
    НовыйДок.Ответственный = Справочники.Пользователи.НайтиПоНаименованию("Иванов И.И.", Истина);
    // ... заполнение полей ...
    НовыйДок.Записать();
КонецЦикла;

Оптимизированный вариант:


// Находим ссылку один раз до начала цикла
НужныйПользователь = Справочники.Пользователи.НайтиПоНаименованию("Иванов И.И.", Истина);

Для Каждого СтрТз Из ТзЗагрузки Цикл
    НовыйДок = Документы.Реестр.СоздатьДокумент();
    НовыйДок.Ответственный = НужныйПользователь; // Используем готовую ссылку
    // ... заполнение полей ...
    НовыйДок.Записать();
КонецЦикла;

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

Различие между записью и проведением документа

Посмотрим на метод Записать(РежимЗаписиДокумента.Проведение). Проведение — это сложный процесс, который в 1С:ERP включает не только запись движений по регистрам, но и выполнение многочисленных проверок, актуализацию взаиморасчетов и работу подписок на события. Если документ не должен делать движений сразу, стоит использовать РежимЗаписиДокумента.Запись.

Проанализируем ситуацию: если запись документа занимает 0.1 секунды, а проведение — 5 секунд, то проблема кроется в ОбработкеПроведения или в общих подписках. Для массовой загрузки данных часто эффективнее сначала просто записать все документы, а затем провести их отдельным регламентным заданием или групповой обработкой в периоды низкой нагрузки на систему.

Использование флага ОбменДанными.Загрузка

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


НовыйДок = Документы.ХХХ_РеестрВыданныхПТС.СоздатьДокумент();
// Установка флага для ускорения
НовыйДок.ОбменДанными.Загрузка = Истина;
// Заполнение данных
ЗаполнитьЗначенияСвойств(НовыйДок, СтрТзДок);
НовыйДок.Записать(РежимЗаписиДокумента.Запись);

Важное ограничение: Если установлен флаг Загрузка = Истина, метод Записать с режимом Проведение может выдать ошибку или отработать некорректно, так как проведение подразумевает бизнес-логику, которая в режиме загрузки отключается. Используйте этот флаг только для записи (РежимЗаписиДокумента.Запись).

Скрытые механизмы ERP: Версионирование и Подписки

В конфигурациях уровня ERP даже на самописный документ могут действовать десятки «Общих подписок на события». Разберем наиболее ресурсоемкие из них:

  1. Версионирование объектов: Если в настройках системы включено версионирование для вашего типа документа, то при каждой записи система сериализует весь объект в формат XML и записывает его в регистр сведений ВерсииОбъектов. При массовой загрузке, такой как загрузка номенклатуры контрагентов, это создает огромную нагрузку на дисковую подсистему и процессор.
  2. Заполнение дополнительных реквизитов: Даже если вы их не используете явно (например, когда идет загрузка номенклатуры из Excel), программный код БСП (Библиотеки Стандартных Подсистем) может инициировать проверку метаданных для хранения доп. сведений.
  3. Rls (Access Control): Ограничение прав на уровне записей. Если загрузка идет под обычным пользователем, каждое действие проверяется через сложные SQL-запросы. Рекомендуется выполнять массовую загрузку под учетной записью с полными правами.

Методика поиска «узких мест» с помощью замера производительности

Если код кажется простым, но «зависает», не нужно гадать — воспользуемся встроенным инструментом отладки. Рассмотрим алгоритм действий:

  1. Откройте конфигуратор и запустите сеанс в режиме отладки.
  2. Включите Замер производительности (меню Отладка — Замер производительности).
  3. Выполните загрузку нескольких документов (не нужно ждать завершения всех 164, достаточно 5-10).
  4. Выключите замер.

В открывшемся окне мы увидим таблицу со списком всех выполненных строк кода. Отсортируйте колонку «Чистое время» по убыванию. Чаще всего в топе окажутся:

Внешние факторы: Сеть и Антивирусы

Проанализируем техническое окружение. 1С:ERP очень чувствительна к скорости работы с временными файлами и логами транзакций. Если база данных работает в режиме Full Recovery Model, файл лога транзакций (.ldf) может мгновенно разрастись при массовой вставке записей, вызывая паузы (Wait) в работе SQL-сервера. Также убедитесь, что антивирус на сервере исключает из проверки рабочие каталоги кластера 1С и файлы базы данных, иначе проверка каждой новой записи антивирусом превратит загрузку в бесконечный процесс.

При использовании подсистемы «Присоединенные файлы» в ERP, обратите внимание, куда физически сохраняются файлы (в базу или на диск). Если на диске настроен сетевой путь (UNC-путь), то любая задержка сети приведет к «зависанию» документа при записи.

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

← На главную