Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
1C_LONG_TRANSACTION_POSTING 1С:Предприятие и СУБД

Оптимизация проведения документов по нескольким регистрам в 1С

Обновлено: 26.08.2026  ·  Официальная база знаний
  • Проведение одного документа длится более 3-10 секунд.
  • Транзакция удерживает исключительные блокировки на 5-10 регистрах одновременно, парализуя работу смежных отделов.
  • Длительные ожидания по событию технологического журнала SDBL и TLOCKS.

1. Переход на методику оперативного проведения (Запись = Истина)

Не записывайте движения в регистры по отдельности в теле алгоритма. Заполняйте наборы записей в оперативной памяти и записывайте их пакетом в конце процедуры ОбработкаПроведения:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    
    // 1. Установка управляемых блокировок по всем регистрам разом
    УстановитьБлокировки();
    
    // 2. Один пакетный запрос: чтение всех остатков и цен по всем регистрам
    РезультатыЗапроса = ВыполнитьПакетныйЗапрос();
    
    // 3. Проверка остатков в оперативной памяти
    Если Не ПроверитьОстатки(РезультатыЗапроса, Отказ) Тогда
        Возврат;
    КонецЕсли;
    
    // 4. Формирование наборов записей движений
    Движения.ТоварыНаСкладах.Записывать = Истина;
    Движения.Взаиморасчеты.Записывать = Истина;
    
    ЗаполнитьДвижения(Движения.ТоварыНаСкладах, РезультатыЗапроса);
    ЗаполнитьДвижения(Движения.Взаиморасчеты, РезультатыЗапроса);
    
КонецПроцедуры

2. Исключение тяжелых расчетов и внешних вызовов из транзакции

  • Никогда не отправляйте HTTP/SOAP запросы во внешние системы (CRM, Честный Знак, Банк) внутри транзакции проведения;
  • Не генерируйте печатные формы и PDF-файлы внутри ОбработкаПроведения;
  • Выносите вспомогательные расчеты в асинхронные фоновые очереди.
Практический опыт инженера: Главный KPI производительности проведения документов в 1С: время нахождения в транзакции не должно превышать 0.5-1 секунды. Все подготовительные чтения выполняйте ДО начала транзакции, если это допустимо бизнес-логикой.

Частые вопросы (FAQ)

Почему нельзя выполнять запросы внутри цикла по строкам документа?

Запрос внутри цикла (N+1) генерирует сотни обращений к СУБД, кратно увеличивая сетевые задержки и общее время удержания транзакции.

Что такое 'смещенная транзакция'?

Это антипаттерн, когда транзакция открывается задолго до реальной записи данных (например, во время подготовки экранной формы), блокируя ресурсы для других пользователей.

Как влияет режим 'Записывать = Истина' на скорость проведения?

Платформа 1С оптимизирует запись всех помеченных наборов движений, сбрасывая их в СУБД за минимальное количество сетевых пакетов перед фиксацией транзакции.

Нужно ли очищать движения перед повторным проведением?

При оперативном проведении рекомендуется использовать режим 'ЗаписыватьВыбранные', очищая только те наборы, которые действительно перезаписываются.