Ситуация, когда при выполнении процедуры «Закрытие месяца» механизм перепроведения документов «застревает» на определенной дате, — одна из самых коварных проблем в 1С:Бухгалтерия КОРП 3.0. Особенность заключается в том, что система не выдает критических ошибок, Журнал регистрации остается чистым, а групповое проведение документов через стандартные обработки проходит успешно. Однако заветная «зеленая галочка» на этапе перепроведения не появляется, и граница последовательности не сдвигается ни на секунду дальше проблемной точки.
В данной статье мы подробно разберем, почему так происходит, и проанализируем пошаговый алгоритм поиска и устранения причин этой неисправности.
Разберем наиболее частую ситуацию, упомянутую в обсуждении. Когда пользователь устанавливает в документе флаг «Ручная корректировка (разрешает редактирование движений документа)», этот документ становится своего рода «статичным островком» для механизмов автоматического перепроведения. Рассмотрим подробнее механизм возникновения ошибки:
Последовательность.ДокументыОрганизации дальше этого документа.Что делать: Выясним, на каком документе «спотыкается» система. Для этого проанализируем Журнал регистрации непосредственно в момент запуска закрытия месяца. Если мы нашли документ (например, ПриходныйКассовыйОрдер от 6 числа), попробуем выполнить следующие действия:
Проанализируем ситуацию, когда в конфигурации есть доработки. Одной из неочевидных причин является наличие подписок на события. Допустим, при проведении документа «А» программный код инициирует проведение документа «Б». Если документ «Б» по времени стоит раньше документа «А» (даже на секунду), происходит нарушение логической цепочки последовательности.
Механизм закрытия месяца строго следит за хронологией. Если проведение текущего документа вызывает изменение данных «в прошлом», граница последовательности мгновенно сбрасывается назад, и процесс превращается в бесконечный цикл или просто останавливается без вывода ошибки.
Рассмотрим пример кода в подписке на событие, который может вызвать такую проблему:
// Пример потенциально опасного кода в подписке на событие ОбработкаПроведения
Процедура ПриПроведенииДокументаА(Источник, Отказ, РежимПроведения)
// Если этот код находит документ "Б" с более ранней датой и проводит его
ДокументБ = НайтиРанееСозданныйДокумент(Источник.Организация);
Если ДокументБ.Проведен Тогда
ДокументБ.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
КонецПроцедуры
В этом случае групповая обработка проведения может отработать штатно, так как она просто перебирает документы по списку, а вот механизм контроля границы будет постоянно блокировать переход к следующему дню.
Иногда корень проблемы лежит не в самих документах, а в техническом состоянии базы данных. В системе существует скрытый регистр Последовательность.ДокументыОрганизации. Бывают случаи, когда в этой таблице зависают ссылки на удаленные объекты или документы, помеченные на удаление.
Посмотрим, как это проверить. Если стандартное Типовое Исследование (ТИИ) не помогло, стоит воспользоваться консолью запросов и проверить содержимое таблицы последовательности за проблемный период. Если мы обнаружим там «битые» ссылки или документы, которые не должны участвовать в проведении, таблицу необходимо очистить программно или с помощью специализированных обработок с портала ИТС.
В современных версиях «1С:Бухгалтерия 8.3» закрытие месяца выполняется в фоновом режиме. Это означает, что ошибка может произойти в отдельном сеансе на сервере. Журнал регистрации может не зафиксировать ее, если сеанс завершился аварийно или если фильтр журнала настроен слишком грубо.
Рассмотрим шаги для диагностики:
"Поле 'Склад' не заполнено", который не виден в обычном интерфейсе.Выясним еще одну интересную особенность: влияние документов, которые не делают движений по регистру «Бухгалтерский и налоговый учет». Например, документ КорректировкаРеализации может быть проведен, но при определенных настройках не формировать проводок.
Механизм восстановления последовательности иногда «ожидает» записи в регистрах от каждого проведенного документа. Если документ от 6-го числа (на котором стоит граница) признан системой как «участник последовательности», но по факту он пустой, алгоритм может войти в ступор. Попробуйте найти такие документы за проблемный день, отменить их проведение и запустить закрытие месяца снова.
В платформе 1С время документа отображается с точностью до секунды. Однако на уровне СУБД (SQL) записи могут иметь более высокую точность. Если два документа созданы программно или загружены из другой системы (например, из «1С:Управление торговлей») в одну и ту же секунду, их порядок в базе может отличаться от визуального порядка в журнале.
Проанализируем ситуацию: документ поступления и документ реализации имеют время 12:00:00. Если реализация фактически записана в базу на долю миллисекунды раньше поступления, граница последовательности не сможет двигаться корректно. Чтобы решить эту проблему, рекомендуется вручную разнести документы по времени (например, установить 12:00:01 и 12:00:02 соответственно).
Для того чтобы эффективно победить проблему «зависшей» границы, выполним следующие шаги:
Использование этого комплексного подхода позволяет в 99% случаев восстановить корректную работу механизма закрытия месяца и обеспечить актуальность учетных данных в системе 1С:Бухгалтерия.