Почему документ в 1С подцепляет чужие проводки и как это исправить

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

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

Разберем детально, почему возникает подобный рассинхрон между шапкой документа и записями регистра бухгалтерии Хозрасчетный, как выяснить первоисточник проблемы и как гарантированно очистить некорректные движения.

Анализ причин появления некорректных движений

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

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

Поиск источника проблемы через журнал регистрации

Выясним причину модификации конкретного документа с помощью журнала регистрации. Для этого выполним следующие действия:

  1. Перейдем в раздел Администрирование → Обслуживание → Журнал регистрации.
  2. Установим отбор по событию: укажем в поле Данные ссылку на проблемный документ Поступление наличных.
  3. Проанализируем события Данные. Изменение и Данные. Проведение. Обратим внимание на то, кто из пользователей вносил правки, каким сеансом (фоновым заданием, внешним подключением или интерактивно) и в какое время менялся вид операции.

Исправление движений в документе

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

  1. Интерактивное перепроведение: Самый быстрый способ — открыть документ, отменить его проведение и нажать кнопку Провести и закрыть. Платформа полностью очистит старый набор записей регистратора и сформирует актуальные движения.
  2. Проверка флага ручной корректировки: Откроем движения документа (кнопка Дт/Кт). Проверим состояние тумблера Ручная корректировка. Если флаг активен, снимем его и нажмем кнопку Записать и закрыть, согласившись с пересчетом проводок.

Программный поиск и устранение расхождений

Посмотрим на пример кода, позволяющего программно перезаписать и перепровести документы, если в результате обменов или некорректных обработок вид операции разошелся с движениями:


Выборка = Документы.ПоступлениеНаличных.Выбрать();
Пока Выборка.Следующий() Цикл
    Если Выборка.Проведен И Выборка.ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперацийРКОПКО.РозничнаяВыручка") Тогда
        ДокОбъект = Выборка.ПолучитьОбъект();
        Если ДокОбъект.РучнаяКорректировка Тогда
            ДокОбъект.РучнаяКорректировка = Ложь;
        КонецЕсли;
        Попытка
            ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
        Исключение
            ЗаписьЖурналаРегистрации("ИсправлениеПроводок", УровеньЖурналаРегистрации.Ошибка, , ДокОбъект.Ссылка, ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;
КонецЦикла;

Профилактика и регламентное обслуживание базы

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

  1. Пересчет итогов регистра бухгалтерии: Перейдем в Администрирование → Обслуживание → Регламентные операции → Управление итогами и выполним пересчет итогов по регистру Хозрасчетный, либо запустим режим Тестирование и исправление в конфигураторе с обязательным выбором пункта Пересчет итогов.
  2. Очистка серверного кэша: При возникновении нетипичного поведения платформы после обновлений перезапустим службу сервера 1C:Enterprise 8.3 Server Agent и очистим каталоги кэша на сервере приложений.
  3. Обслуживание Microsoft SQL Server: Запустим обновление статистики (UPDATE STATISTICS) и перестроение индексов для таблиц регистров бухгалтерии.
← На главную