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

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

Ситуация, при которой в информационной базе обнаруживаются непроведенные документы с заполненными и активными движениями по регистрам бухгалтерии или накопления, встречается достаточно часто. Такие документы искажают оборотно-сальдовую ведомость и расчетные остатки, так как платформенные виртуальные таблицы формируют итоги на основании поля Регистратор и признака Активность, совершенно не проверяя реквизит Проведен самого документа. Выясним причину этой проблемы и рассмотрим по шагам методы её устранения.

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

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

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

Важно помнить: стандартная процедура «Тестирование и исправление» проверяет только наличие физической ссылки в поле Регистратор. Если документ существует в базе (пусть даже непроведенный), тестирование не сочтет проводки ошибочными и не удалит их.

Диагностика: как найти документы с некорректными проводками

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


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

Результат = Запрос.Выполнить().Выгрузить();

Способ 1. Полная очистка движений через пустой набор записей

Если непроведенный документ не должен влиять на учет, наиболее безопасным и быстрым способом является очистка набора записей без вызова тяжелых прикладных обработчиков документа:


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

Этот метод не изменяет версию самого объекта документа и предотвращает лишнюю регистрацию изменений в планах обмена.

Способ 2. Штатная отмена проведения документа

Если необходимо, чтобы сработали все прикладные механизмы конфигурации, используем стандартную отмену проведения:


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

Обратите внимание: этот вариант модифицирует документ, обновляет дату его изменения и вызовет повторную отправку объекта в узлы РИБ.

Способ 3. Отключение активности записей без их физического удаления

Если удалять строки нельзя (например, требуется сохранить исторические данные для сверки или аудита), можно отключить признак Активность. Проводки останутся в базе, но перестанут влиять на отчеты и остатки:


НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокумент);
НаборЗаписей.Прочитать();

Для Каждого Запись Из НаборЗаписей Цикл
    Запись.Активность = Ложь;
КонецЦикла;

НаборЗаписей.Записать();

Способ 4. Проведение документов с сохранением движений

Бывают ситуации, когда проводки верны и соответствуют закрытому периоду, но сам документ ошибочно числится непроведенным. В этом случае документ переводят в статус проведенного без повторного пересчета сумм:


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

После применения любого из выбранных вариантов обязательно сформируйте оборотно-сальдовую ведомость за проблемный период, чтобы убедиться в восстановлении корректности учетных данных.

← На главную