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