Почему документ отражен в регламентированном учете без проводок и как это исправить

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

При этом, если бухгалтер или администратор открывает форму проводок документа вручную и нажимает кнопку «Отразить в регл. учете», проводки формируются корректно и в полном объеме. Разберем детально, почему интерактивное и регламентное отражение ведут себя по-разному, какие механизмы платформы и типовых конфигураций задействованы в этом сбое и как устранить проблему.

Причины расхождения между интерактивным и пакетным отражением

Проанализируем механику работы генератора проводок в типовых конфигурациях. Отражение документов в регламентированном учете опирается не на исходные реквизиты табличных частей самого документа, а на служебные регистры формирования проводок (например, ДвиженияКонтрагентКонтрагент, ДвиженияНоменклатураДоходыРасходы и другие оборотные регистры накопления).

Выделим ключевые факторы, приводящие к возникновению пустых проводок:

  1. Разный стек вызовов процедур проведения: при интерактивном вызове отражения из формы документа или формы проводок система принудительно вызывает пересчет и перезапись служебных наборов записей. В момент повторного прохода модуль подсистемы взаиморасчетов полноценно обогащает строки необходимой аналитикой — проставляются значения измерений и ресурсов ТипСуммы и КорТипСуммы (аванс, оплата, задолженность и т. д.).
  2. Оптимизация пакетного отражения: при работе регламентного задания в фоновом режиме конфигурация в целях производительности не инициализирует повторное проведение документов. Генератор проводок считывает движения служебных регистров напрямую из базы данных в том виде, в котором их оставила первоначальная оперативная транзакция. Если в регистре ДвиженияКонтрагентКонтрагент поля ТипСуммы и КорТипСуммы остались незаполненными, алгоритм поиска шаблонов проводок и счетов учета не находит соответствующих правил настройки и просто пропускает такие записи.
  3. Логика фиксации статуса в регистре сведений: процедура пакетного отражения проверяет факт возникновения критических программных исключений и наличие ошибок настроек счетов. Если проводки не были сгенерированы из-за отсутствия подходящей аналитики типов сумм, алгоритм трактует это как корректную операцию с нулевым финансовым результатом. В регистр сведений ОтражениеДокументовВРеглУчете записывается статус «Отражен», хотя реальных записей по бухгалтерскому учету создано не было.

Влияние онлайн-взаиморасчетов и асинхронных очередей

В современных версиях ERP расчет взаиморасчетов часто переведен в режим «Онлайн». Это означает, что выделение авансов, распределение оплат по накладным и расчет курсовых разниц отделены от оперативного проведения документа и выполняются через специальный механизм очередей.

Рассмотрим последовательность процессов во времени:

  1. Документ проводится оперативно, фиксируя основные движения и регистрируя запись в очереди заданий взаиморасчетов (регистры ЗаданияКРаспределениюРасчетовСКлиентами или ЗаданияКРаспределениюРасчетовСПоставщиками).
  2. Отдельное фоновое задание (актуализация движений документов по взаиморасчетам) должно разобрать эту очередь и дописать аналитику (включая ТипСуммы) в регистры движений.
  3. Параллельно стартует регламентное задание пакетного отражения в регл. учете. Если это задание успевает запустить обработку документа раньше, чем фоновые задания взаиморасчетов рассчитали аналитику долга, документ отражается по «сырым» движениям.

В итоге возникает логическая рассинхронизация: транзакция документа уже зафиксирована, «грязного чтения» (dirty read) на уровне СУБД нет, но данные в базе еще не достигли состояния бизнес-целостности, необходимой для формирования проводок.

Способы решения проблемы

Разберем практические варианты исправления данной ситуации — от организационно-настроечных мер до доработки конфигурации через механизм расширений.

Вариант 1. Корректировка расписания регламентных заданий и настроек взаиморасчетов

Посмотрим, как стабилизировать работу типового функционала без внесения изменений в код конфигурации:

  1. Настройка очереди регламентных процессов: необходимо разнести во времени расписания заданий Актуализация движений документов по данным взаиморасчетов и Отражение документов в регламентированном учете. Расчет взаиморасчетов должен гарантированно предшествовать пакетному отражению.
  2. Включение автоматического запуска фоновых заданий: в разделе администрирования взаиморасчетов следует проверить активность опции автоматического запуска фонового задания расчета при проведении документов. Это минимизирует задержку между оперативным проведением и заполнением типов сумм.
  3. Проверка многопоточного режима: если используется пакетное отражение с разделением на несколько параллельных фоновых потоков, имеет смысл временно перевести процесс в один поток, чтобы исключить конкуренцию потоков за общие ресурсы и кэши метаданных.

Вариант 2. Программный контроль и актуализация движений в модуле отражения

Если организационное разделение расписаний не помогает из-за непрерывного документооборота, используем расширение конфигурации. Наша цель — перед генерацией проводок гарантировать актуальность движений взаиморасчетов и запретить установку статуса «Отражен», если проводки отсутствуют при наличии оборотов по расчетам.

Разберем пример реализации доработки через аннотацию &Вместо или &Перед для процедуры пакетного формирования проводок:


&Вместо("ОтразитьПакетДокументов")
Процедура Расш_ОтразитьПакетДокументов(МассивДокументов, ПараметрыОтражения)

    Для Каждого СсылкаНаДокумент Из МассивДокументов Цикл
        // Проверяем наличие неотработанных заданий по взаиморасчетам
        Если ВзаиморасчетыСервер.ЕстьНерассчитанныеДвижения(СсылкаНаДокумент) Тогда
            // Принудительно актуализируем движения документа по взаиморасчетам
            ВзаиморасчетыСервер.ВыполнитьРаспределениеВзаиморасчетовПоДокументу(СсылкаНаДокумент);
        КонецЕсли;
    КонецЦикла;

    // Вызываем базовый механизм генерации проводок
    ПродолжитьВызов(МассивДокументов, ПараметрыОтражения);

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

КонецПроцедуры

Вспомогательная процедура контроля позволяет отменить ошибочный статус документа:


Процедура ПроверитьКорректностьРезультатаОтражения(СсылкаНаДокумент)

    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |   Хозрасчетный.Регистратор КАК Регистратор
        |ИЗ
        |   РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
        |       ,
        |       ,
        |       Регистратор = &Документ,
        |       ,
        |       ) КАК Хозрасчетный";
    
    Запрос.УстановитьПараметр("Документ", СсылкаНаДокумент);
    Результат = Запрос.Выполнить();
    
    // Если по документу есть движения расчетов, но в регистре Хозрасчетный записей нет:
    Если Результат.Пустой() И ТребуютсяПроводкиПоДокументу(СсылкаНаДокумент) Тогда
        // Возвращаем документу статус необходимости повторного отражения
        МенеджерЗаписи = РегистрыСведений.ОтражениеДокументовВРеглУчете.СоздатьМенеджерЗаписи();
        МенеджерЗаписи.Документ = СсылкаНаДокумент;
        МенеджерЗаписи.Прочитать();
        
        Если МенеджерЗаписи.Выбран() Тогда
            МенеджерЗаписи.Статус = Перечисления.СтатусыОтраженияДокументовВРеглУчете.КОткрытию;
            МенеджерЗаписи.Записать(Истина);
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры

Вариант 3. Установка официальных патчей

Проблема некорректного заполнения измерений ТипСуммы и КорТипСуммы в регистре ДвиженияКонтрагентКонтрагент признавалась разработчиками фирмы «1С» для ряда релизов линеек 2.5 и 3.2. Рекомендуется проверить портал технической поддержки и установить доступные точечные патчи (EF_XXXXXXXX) для используемой версии конфигурации, закрывающие ошибки алгоритмов модуля РегламентированныйУчетСервер.

← На главную