В практике работы с 1С:ERP 2.4 (и более свежими редакциями) технические специалисты и бухгалтеры иногда сталкиваются с парадоксальной ситуацией: документ, например, Списание безналичных денежных средств, имеет статус «Не проведен» (иконка без зеленой галочки), в управленческом учете движений нет, но при нажатии кнопки «Проводки регламентированного учета» мы видим сформированные и актуальные записи в регистре бухгалтерии Хозрасчетный. По логике системы 1С, непроведенный документ не должен иметь движений. Разберем подробно, почему так происходит, как устроены механизмы отражения в ERP и как исправить подобные «фантомные» проводки.
Для начала проанализируем, чем проведение в ERP отличается от старых систем вроде УПП. В ERP реализован принцип отложенного отражения в регламентированном учете. Это означает, что в момент нажатия кнопки «Провести и закрыть» документ делает только оперативные движения (управленческий учет: денежные средства, расчеты с партнерами и т.д.). Бухгалтерские проводки формируются либо специальным фоновым заданием, либо вручную через рабочее место «Отражение документов в регл. учете».
Связь между документом и проводками осуществляется через служебный регистр сведений Отражение документов в регламентированном учете. Когда документ проводится, в этот регистр записывается информация о том, что документ ожидает отражения. Когда проводки сформированы, статус в этом регистре меняется на «Отражено».
Рассмотрим наиболее вероятную причину появления проводок у непроведенного документа — использование механизмов, которые меняют реквизиты объекта без вызова стандартных процедур проведения. Если кто-то из пользователей или администраторов воспользовался обработкой Групповое изменение реквизитов и установил полю Проведен значение Ложь, платформа 1С выполнит запись объекта в базу данных напрямую.
Важно понимать разницу между методом ОтменаПроведения() и простой записью. Проанализируем программный код:
// Неправильный способ, порождающий фантомные проводки:
ОбъектДокумента = СсылкаНаДокумент.ПолучитьОбъект();
ОбъектДокумента.Проведен = Ложь;
ОбъектДокумента.Записать(РежимЗаписиДокумента.Запись);
// Правильный способ:
ОбъектДокумента.Записать(РежимЗаписиДокумента.ОтменаПроведения);
В первом случае обработчик ОбработкаУдаленияПроведения() не вызывается. Система просто меняет флаг в таблице документов, но не инициирует очистку связанных регистров (включая регистр бухгалтерии). В результате мы получаем «непроведенный» документ с полным набором проводок.
В документах Поступление безналичных денежных средств и Списание безналичных денежных средств существует реквизит ПроведеноБанком. Этот флаг подтверждает выписку. Проанализируем ситуацию: в некоторых релизах ERP логика формирования проводок была тесно завязана на этот флаг. Если флаг стоит, система считает операцию финансово завершенной.
Выясним причину возможного сбоя: если в момент отмены проведения документа произошла блокировка базы или аварийное завершение сеанса, статус документа мог успеть записаться как Ложь, а транзакция по очистке движений в «тяжелом» регистре Хозрасчетный откатилась или не завершилась. При этом наличие флага ПроведеноБанком = Истина может блокировать последующие автоматические попытки системы «выровнять» состояние документа при групповых перепроведениях.
Еще один сценарий связан с использованием механизма Ручная корректировка. Если бухгалтер установил в документе флаг «Ручная корректировка» и внес правки в проводки, система помечает эти записи как защищенные. Рассмотрим, что происходит при попытке программной отмены проведения такого документа: в некоторых случаях типовые механизмы обхода движений могут «пропустить» ручные записи, считая, что их нельзя удалять автоматически. Хотя штатно 1С стремится очищать всё, сочетание ручных правок и сбоев в фоновых заданиях часто приводит к «зависанию» проводок.
Проанализируем ситуацию, когда документы загружаются из внешних систем (например, из «1С:Бухгалтерии» или через клиент-банк). Если при загрузке используется режим ОбменДанными.Загрузка = Истина, то все проверки и обработчики событий (включая те, что отвечают за синхронизацию статуса и проводок) отключаются. Если во внешнем файле документ был помечен как непроведенный, но к нему были приложены наборы записей регистров, система запишет их «как есть», создав логическое несоответствие.
Для выявления проблемы нам необходимо сопоставить данные таблицы документов и регистра бухгалтерии. Разберем по шагам, как это сделать:
Проведен = Ложь, но имеющие записи в регистре Хозрасчетный по данному регистратору.Отражение документов в регламентированном учете. Найдите там ваш проблемный документ. Если статус стоит «Отражено», это подтверждает разрыв связи.Истина, управленческий учет заполнится), а затем штатно отменить проведение кнопкой в интерфейсе. Это заставит систему вызвать все необходимые обработчики очистки.Записать(РежимЗаписиДокумента.ОтменаПроведения). Это гарантированно очистит все движения по всем регистрам.Рассмотрим пример кода для исправления ситуации:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Хозрасчетный.Регистратор КАК Ссылка
|ИЗ
| РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
|ГДЕ
| Хозрасчетный.Регистратор.Проведен = ЛОЖЬ
| И Хозрасчетный.Регистратор ССЫЛКА Документ.СписаниеБезналичныхДенежныхСредств";
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Объект = Результат.Ссылка.ПолучитьОбъект();
// Принудительно вызываем штатную отмену проведения
Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЦикла;
Чтобы подобные ситуации не повторялись, проанализируем настройки вашей базы 1С:ERP:
Проведен напрямую — это нарушение целостности данных.Таким образом, наличие проводок у непроведенного документа в ERP — это не особенность системы, а следствие технического сбоя или некорректного программного воздействия на объект. Своевременный мониторинг очереди отражения и использование штатных методов отмены проведения позволят вам содержать учет в чистоте.