1С. Как открыть форму ещё не записанного документа.



Постановка задачи: в информационной системе имеется документ "Спецификация". На форме документа есть кнопка "Запрос цен". По нажатию этой кнопки должен создаться и заполниться документ "Запрос цен". Его заполненная форма должна открыться для редактирования пользователем, при этом документ не должен быть записан.



Итак, реализация задуманного:



&НаКлиенте

Процедура ЗапросЦен(Команда)



ФормаНовогоЗапросаЦен = ПолучитьФорму("Документ.ЗапросЦен.Форма.ФормаДокумента");

ДанныеФормы = ФормаНовогоЗапросаЦен.Объект;

ЗаполнитьЗапросЦенНаСервере(ДанныеФормы); // Процедура, в которой на сервере заполняется объект документа.

КопироватьДанныеФормы(ДанныеФормы, ФормаНовогоЗапросаЦен.Объект); // Здесь данные заполненного объекта документа копируются в форму.

ФормаНовогоЗапросаЦен.Открыть(); // Открываем заполненную форму.



КонецПроцедуры






Серверная процедура, в которой заполняется объект документа:



&НаСервере

Процедура ЗаполнитьЗапросЦен(ДанныеФормы)



// В этой серверной процедуре заполняем объект.

ДанныеФормы.Организация = Объект.Организация;



//... заполняем все необходимые реквизиты.



КонецПроцедуры






Для уменьшения объёма передаваемых данных между клиентом и сервером можно организовать серверную процедуру без передачи в неё контекста формы:



&НаСервереБезКонтекста

Процедура ЗаполнитьЗапросЦен(ДанныеФормы)



// Получаем объект документа из данных формы

НовыйЗапросЦен = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.ЗапросЦен"));

// Или создаём новый документ:

НовыйЗапросЦен = Документы.ЗапросЦен.СоздатьДокумент();



// Заполняем реквизиты объекта документа

НовыйЗапросЦен.Организация = Объект.Организация;



//... заполняем все необходимые реквизиты.



// Данные заполненного документа помещаем в объект формы

ЗначениеВДанныеФормы(НовыйЗапросЦен,ДанныеФормы);



КонецФункции




✍️ @odin1C_rus