Как программно изменить порядок расчетов в документе Реализация товаров и услуг в 1С:УТ 11.4?

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

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

Причина возникновения проблемы

В современных версиях 1С:УТ используется сложный механизм оперативного учета (онлайн-проведение). Движения по регистрам взаиморасчетов, таким как РасчетыСКлиентами, формируются в момент проведения. Если вы просто меняете значение реквизита в объекте, система не пересчитывает уже созданные движения. Более того, табличная часть РасшифровкаПлатежа (которая в конфигураторе называется именно так, хотя в интерфейсе может отображаться как Взаиморасчеты) жестко привязана к выбранному порядку расчетов. Если она заполнена по старым правилам, проведение с новым порядком приведет к логическим ошибкам.

Пошаговый алгоритм решения

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

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

Пример программной реализации

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


ДокОбъект = ДокРеализация.ПолучитьОбъект();
// 1. Отмена проведения для корректного пересчета движений
ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);

// 2. Установка новых параметров расчетов
ДокОбъект.Договор = НовыйДоговор;
ДокОбъект.ПорядокРасчетов = НовыйДоговор.ПорядокРасчетов;
ДокОбъект.Основание = Строка(ДокОбъект.Договор);

// 3. Очистка табличной части Взаиморасчетов (РасшифровкаПлатежа)
ДокОбъект.РасшифровкаПлатежа.Очистить();

// 4. Сохранение и проведение документа
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);

Важные нюансы при работе

Не всегда изменения в одном документе Реализация товаров и услуг достаточно. Если с этой реализацией связаны документы оплаты, их также необходимо перепровести. В некоторых случаях система «помнит» старые связи через механизмы зачета авансов. Если после выполнения указанного выше алгоритма движения по-прежнему некорректны, попробуйте следующий комплексный подход:

Помните, что использование Записать(РежимЗаписиДокумента.Проведение) является предпочтительным, так как оно запускает все стандартные процедуры проверки данных и формирования движений, предусмотренные логикой 1С:УТ 11.4.

← На главную