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