При работе с конфигурацией 1С:Управление торговлей 11.5.17.209 пользователи могут столкнуться с ситуацией, когда при проведении документа «Реализация товаров и услуг» регистр «Расчеты с клиентами по срокам» не заполняется. Эта проблема проявляется не постоянно, а периодически, примерно в одном из двадцати случаев. Примечательно, что повторное проведение документа или использование обработки «Заполнение регистров взаиморасчетов» успешно решает эту задачу. Давайте разберемся, почему это происходит и как найти корень проблемы.
Прежде всего, важно понимать, что регистр «Расчеты с клиентами по срокам» является ключевым элементом новой архитектуры взаиморасчетов в современных конфигурациях 1С, таких как УТ 11.5, ERP и Комплексная автоматизация. Эта архитектура может работать в двух основных режимах: «Онлайн» и «Офлайн», что существенно влияет на порядок формирования движений.
Начнем с того, как устроено проведение документов в современных версиях 1С:Управление торговлей. Мы привыкли думать, что все движения по регистрам формируются непосредственно в процедуре ОбработкаПроведения() модуля объекта документа. Однако это не совсем так. В текущей архитектуре ОбработкаПроведения() документа, например, «Реализация товаров и услуг», выполняет вызов вспомогательной процедуры, такой как:
ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
Эта служебная процедура, в свою очередь, уже не формирует движения "с нуля", а скорее записывает заранее подготовленные наборы движений. То есть, основная логика формирования движений по регистрам, включая сложные расчеты взаиморасчетов, вынесена в специализированные механизмы.
Для регистра «Расчеты с клиентами по срокам» этот механизм еще более сложен. Сам документ «Реализация товаров и услуг» не является его прямым регистратором. Движения по этому вспомогательному регистру формируются в рамках так называемой «кофемолки» взаиморасчетов. Это означает, что при записи основных регистров, таких как РасчетыСКлиентами или РасчетыСПоставщиками, автоматически запускается процесс формирования движений еще по шести дополнительным регистрам, к которым относится и наш РасчетыСКлиентамиПоСрокам. Этот процесс призван обеспечить актуализацию данных по срокам оплаты, задолженности и другим аналитикам.
Плановые сроки оплаты, на основании которых формируются движения по срокам, обычно определяются либо в заказах клиентов, либо непосредственно в договорах с контрагентами, если в них жестко прописан график платежей.
Рассмотрим подробнее два режима ведения взаиморасчетов, которые могут влиять на проблему:
Проблема, когда регистр не заполняется, но перепроведение или обработка помогает, чаще всего указывает на сбои именно в «Онлайн» режиме или при отложенной записи в «Офлайн».
Теперь давайте разберем, в какую сторону копать, чтобы найти и устранить причину незаполнения регистра.
Прежде всего, нам необходимо убедиться, какой режим ведения взаиморасчетов установлен в вашей базе. Мы должны проверить это в разделе настроек:
Если у вас установлен режим «Офлайн», то проблема с незаполнением регистра при проведении документа является ожидаемым поведением, и вам нужно убедиться, что регламентное задание «Выполнение отложенных движений по расчетам с клиентами/поставщиками» настроено и корректно выполняется. Если же установлен режим «Онлайн», но регистр не заполняется, значит, причина кроется в другом.
Для программиста одним из самых эффективных инструментов является отладчик. Мы вооружимся им и посмотрим стек вызовов, чтобы понять, что происходит в момент проведения документа:
ОбработкаПроведения() модуля объекта документа «Реализация товаров и услуг».ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);. Зайдите внутрь этой процедуры.РасчетыСКлиентами. Именно запись этих основных регистров должна запустить «кофемолку» для формирования движений по вспомогательным регистрам, включая РасчетыСКлиентамиПоСрокам.На основе полученных данных из отладчика и общего понимания архитектуры, мы можем выделить несколько распространенных причин, приводящих к такой проблеме:
РасчетыСКлиентами и вспомогательным РасчетыСКлиентамиПоСрокам. При обнаружении таких «разрывов остатков взаиморасчетов» система может автоматически формировать документ Корректировка регистров с операцией «Исправление разрывов остатков взаиморасчетов». Если регистр периодически не заполняется, это может указывать на то, что либо сам механизм выявления расхождений работает с задержками, либо автоматическая корректировка не всегда срабатывает своевременно или корректно.
Тот факт, что обработка «Заполнение регистров взаиморасчетов» решает проблему, является очень важной подсказкой. Эта обработка — это служебный инструмент, предназначенный для принудительного перезаполнения или дозаполнения регистров взаиморасчетов на основании данных из других, более первичных регистров. Ее эффективность подтверждает, что исходные данные для формирования движений по срокам присутствуют в базе, но по какой-то причине они не были корректно записаны в регистр РасчетыСКлиентамиПоСрокам в момент проведения документа. Это еще раз указывает на сбой в процессе записи, а не в расчете самих данных.
Чтобы окончательно решить проблему, мы рекомендуем выполнить следующие действия:
Мы надеемся, что эти шаги помогут вам локализовать и устранить причину периодического незаполнения регистра «Расчеты с клиентами по срокам» и обеспечить стабильную работу вашей системы 1С.