Почему платежка в 1С:ERP проведена в регламентированном учете, но не проведена в управленческом?

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

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

Архитектурные особенности отражения документов в 1С:ERP

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

Связь между документом и проводками осуществляется через служебный регистр сведений Отражение документов в регламентированном учете. Когда документ проводится, в этот регистр записывается информация о том, что документ ожидает отражения. Когда проводки сформированы, статус в этом регистре меняется на «Отражено».

Причина 1: Некорректное программное изменение статуса документа

Рассмотрим наиболее вероятную причину появления проводок у непроведенного документа — использование механизмов, которые меняют реквизиты объекта без вызова стандартных процедур проведения. Если кто-то из пользователей или администраторов воспользовался обработкой Групповое изменение реквизитов и установил полю Проведен значение Ложь, платформа 1С выполнит запись объекта в базу данных напрямую.

Важно понимать разницу между методом ОтменаПроведения() и простой записью. Проанализируем программный код:


// Неправильный способ, порождающий фантомные проводки:
ОбъектДокумента = СсылкаНаДокумент.ПолучитьОбъект();
ОбъектДокумента.Проведен = Ложь;
ОбъектДокумента.Записать(РежимЗаписиДокумента.Запись); 

// Правильный способ:
ОбъектДокумента.Записать(РежимЗаписиДокумента.ОтменаПроведения);

В первом случае обработчик ОбработкаУдаленияПроведения() не вызывается. Система просто меняет флаг в таблице документов, но не инициирует очистку связанных регистров (включая регистр бухгалтерии). В результате мы получаем «непроведенный» документ с полным набором проводок.

Причина 2: Флаг «Проведено банком» и логика модуля отражения

В документах Поступление безналичных денежных средств и Списание безналичных денежных средств существует реквизит ПроведеноБанком. Этот флаг подтверждает выписку. Проанализируем ситуацию: в некоторых релизах ERP логика формирования проводок была тесно завязана на этот флаг. Если флаг стоит, система считает операцию финансово завершенной.

Выясним причину возможного сбоя: если в момент отмены проведения документа произошла блокировка базы или аварийное завершение сеанса, статус документа мог успеть записаться как Ложь, а транзакция по очистке движений в «тяжелом» регистре Хозрасчетный откатилась или не завершилась. При этом наличие флага ПроведеноБанком = Истина может блокировать последующие автоматические попытки системы «выровнять» состояние документа при групповых перепроведениях.

Причина 3: Ручная корректировка проводок

Еще один сценарий связан с использованием механизма Ручная корректировка. Если бухгалтер установил в документе флаг «Ручная корректировка» и внес правки в проводки, система помечает эти записи как защищенные. Рассмотрим, что происходит при попытке программной отмены проведения такого документа: в некоторых случаях типовые механизмы обхода движений могут «пропустить» ручные записи, считая, что их нельзя удалять автоматически. Хотя штатно 1С стремится очищать всё, сочетание ручных правок и сбоев в фоновых заданиях часто приводит к «зависанию» проводок.

Причина 4: Влияние обмена данными

Проанализируем ситуацию, когда документы загружаются из внешних систем (например, из «1С:Бухгалтерии» или через клиент-банк). Если при загрузке используется режим ОбменДанными.Загрузка = Истина, то все проверки и обработчики событий (включая те, что отвечают за синхронизацию статуса и проводок) отключаются. Если во внешнем файле документ был помечен как непроведенный, но к нему были приложены наборы записей регистров, система запишет их «как есть», создав логическое несоответствие.

Как найти и исправить такие документы?

Для выявления проблемы нам необходимо сопоставить данные таблицы документов и регистра бухгалтерии. Разберем по шагам, как это сделать:

  1. Использование консоли запросов: Напишите простой запрос, который выбирает документы со статусом Проведен = Ложь, но имеющие записи в регистре Хозрасчетный по данному регистратору.
  2. Проверка очереди отражения: Загляните в регистр сведений Отражение документов в регламентированном учете. Найдите там ваш проблемный документ. Если статус стоит «Отражено», это подтверждает разрыв связи.
  3. Принудительное перепроведение: Самый простой способ решения — сначала провести документ (статус станет Истина, управленческий учет заполнится), а затем штатно отменить проведение кнопкой в интерфейсе. Это заставит систему вызвать все необходимые обработчики очистки.
  4. Программная очистка: Если документов много, можно воспользоваться внешней обработкой, которая для каждого документа вызовет метод Записать(РежимЗаписиДокумента.ОтменаПроведения). Это гарантированно очистит все движения по всем регистрам.

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |   Хозрасчетный.Регистратор КАК Ссылка
    |ИЗ
    |   РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
    |ГДЕ
    |   Хозрасчетный.Регистратор.Проведен = ЛОЖЬ
    |   И Хозрасчетный.Регистратор ССЫЛКА Документ.СписаниеБезналичныхДенежныхСредств";

Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
    Объект = Результат.Ссылка.ПолучитьОбъект();
    // Принудительно вызываем штатную отмену проведения
    Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЦикла;

Рекомендации по предотвращению проблемы

Чтобы подобные ситуации не повторялись, проанализируем настройки вашей базы 1С:ERP:

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

← На главную