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