Как программно заполнить статью движения денежных средств в Расходном кассовом ордере в УТ 10.3?

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

При разработке внешних обработок в 1С:Управление торговлей 10.3 часто возникает задача автоматического заполнения документов. Начинающие разработчики сталкиваются с тем, что присвоение значения реквизиту объекта напрямую не приводит к появлению данных в открываемой форме. Давайте разберем, почему это происходит и как правильно решить данную задачу.

Причина проблемы: почему прямой метод не работает?

Многие объекты в типовых конфигурациях 1С, такие как РасходныйКассовыйОрдер, имеют сложную структуру. Поле СтатьяДвиженияДенежныхСредств в форме документа часто связано не с «шапкой» самого документа, а с данными, расположенными в табличной части (ТЧ) РасшифровкаПлатежа. При открытии формы 1С выполняет проверку данных, и если табличная часть пуста, форма может проигнорировать или затереть значения, установленные вами программно.

Важно помнить, что логика работы типовых форм сильно зависит от ВидОперации. Без установки вида операции система не понимает, какой контекст данных должен быть активен, и не может корректно проинициализировать поля формы.

Разбор решения задачи по шагам

Для того чтобы данные отобразились корректно, необходимо следовать четкой последовательности действий при создании объекта документа:

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

Пример правильного программного кода

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


// Создаем новый объект документа
РКО = Документы.РасходныйКассовыйОрдер.СоздатьДокумент();

// Устанавливаем вид операции, чтобы форма «поняла» контекст
РКО.ВидОперации = Перечисления.ВидыОперацийРКО.ОплатаПоставщику; 

// Находим нужную статью ДДС
СтатьяДДС = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоНаименованию("Расчеты по кредитам и займам с контрагентами");

// Добавляем строку в ТЧ «Расшифровка платежа» и заполняем статью
РКО.РасшифровкаПлатежа.Добавить().СтатьяДвиженияДенежныхСредств = СтатьяДДС; 

// Заполняем реквизит в самом объекте
РКО.СтатьяДвиженияДенежныхСредств = СтатьяДДС; 

// Открываем форму для пользователя
РКО.ПолучитьФорму("ФормаДокумента").Открыть();

Рекомендации по отладке

Если в будущем вы столкнетесь с аналогичной проблемой в других документах, используйте следующие советы для быстрой диагностики:

Используя данный подход, вы сможете корректно управлять данными документов 1С и исключите ситуацию, когда программно заданные значения «теряются» при открытии формы.

← На главную