Создание формы документа на основании.

1. Marliiin 13.11.19 09:06 Сейчас в теме
Доброе утро.
Цитата с ИТС:

Скрытый текст



Но что если мне нужно сначала получить форму, потом заполнить некий реквизит, а уже затем заполнить эту форму на основании? (разумеется, в расширении типовой обработки заполнения я внесу правки вида "если ЗначениеЗаполнено(МойРеквизит) тогда..."

Как быть? При этом, конечно, мне нужно обойтись без записи объекта, а просто открыть форму для пользователя, где уже пользователь примет решение, записывать объект или нет.


ФормаДокумента = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта", , ЭтотОбъект, Истина);
	
ФормаДокумента.Объект.МойРеквизит = ЗначениеМоегоРеквизита; 

???




Или в данном случае решения это обработку заполнения свою писать/редактировать уже заполненную форму как нужно?
По теме из базы знаний
Найденные решения
2. dhurricane 13.11.19 09:12 Сейчас в теме
(1) Попробуйте передавать значение реквизита вместе с основанием. Например, в виде структуры.
Остальные ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. dhurricane 13.11.19 09:12 Сейчас в теме
(1) Попробуйте передавать значение реквизита вместе с основанием. Например, в виде структуры.
4. Marliiin 13.11.19 09:15 Сейчас в теме
(2)
Но насколько я понимаю, типовой код не предназначен для этого.
Выходит, мне нужно будет в расширении перед данной процедурой обработать мою структуру из данных заполнения и записать значение реквизита в реквизит формы, а сами данные заполнения заполнить уже моим документом?

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
	
	Если ТипДанныхЗаполнения = Тип("Структура") Тогда
		ЗаполнитьДокументПоОтбору(ДанныеЗаполнения);
	ИначеЕсли ТипДанныхЗаполнения = Тип("СправочникСсылка.Партнеры") Тогда
		ЗаполнитьДокументНаОснованииПартнера(ДанныеЗаполнения);
	ИначеЕсли ТипДанныхЗаполнения = Тип("СправочникСсылка.СделкиСКлиентами") Тогда
		ЗаполнитьДокументНаОснованииСделкиПоПродаже(ДанныеЗаполнения);
	ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.КоммерческоеПредложениеКлиенту") Тогда
		ЗаполнитьДокументНаОснованииКоммерческогоПредложенияКлиенту(ДанныеЗаполнения);
	ИначеЕсли ТипДанныхЗаполнения = Тип("СправочникСсылка.СоглашенияСКлиентами") Тогда
		ЗаполнитьДокументНаОснованииИндивидуальногоСоглашенияСКлиент­ом(ДанныеЗаполнения);
	ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ЗаданиеТорговомуПредставителю") Тогда
		ЗаполнитьДокументНаОснованииЗаданияТорговомуПредставителю(ДанныеЗаполнения);
	КонецЕсли;
Показать
5. dhurricane 13.11.19 09:18 Сейчас в теме
7. Marliiin 13.11.19 09:34 Сейчас в теме
(5) Большое спасибо, так и сделаю. Вы мне очень помогли!
9. EVKash 14 13.11.19 09:38 Сейчас в теме
(7) если это реквизит формы, то да - выкручиваться программно.
10. Marliiin 13.11.19 09:41 Сейчас в теме
(9) Нет, это реквизит объекта. Галку эту поставил.

Написал вот такой код:
		 ЭлементыОтбора = Новый Структура("МойРеквизит", ЗначениеМоегоРеквизита);
		 
		 ПараметрыФормы = Новый Структура;
		 ПараметрыФормы.Вставить("Основание", Объект.Ссылка);
		 ПараметрыФормы.Вставить("ЗначенияЗаполнения", ЭлементыОтбора);
		 ФормаДокумента = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект, Истина);


Но после исполнения кода значение "ФормаДокумента.Объект.МойРеквизит" не заполнено. Да и в начало процедуры "ОбработкаЗаполнения" у ЭтотОбъект значение моего реквизита пустое. Хотя значение передаю.
11. EVKash 14 13.11.19 10:41 Сейчас в теме
(10) да. поторопился. в типовых тоже программно обрабатывается. без кода - никак.
причем "Основание" в параметрах процедуры ОбработкаЗаполнения замещает "ЗначенияЗаполнения",
т.е. если передали только "ЗначенияЗаполнения", то в ДанныеЗаполнения будет наша структура, а если и то и другое, то будет "Основание".
И наши "ЗначенияЗаполнения" останутся только в параметрах в ПриСозданииНаСервере.
Был не прав.
8. EVKash 14 13.11.19 09:35 Сейчас в теме
(2) (4) (5) зачем?
Прикрепленные файлы:
3. EVKash 14 13.11.19 09:15 Сейчас в теме
(1) Если у реквизита стоит свойство "Заполнять из данных заполнения", то можно через параметры открытия.
с итс
ЭлементыОтбора = Новый Структура("Поставщик, Склад", СсылкаНаПоставщика, СсылкаНаСклад);
ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ЭлементыОтбора);
ОткрытьФорму("Документ.Накладная.ФормаОбъекта", ПараметрыФормы);
ЭлементыОтбора тут условно названо, смысла не меняет.
6. Marliiin 13.11.19 09:34 Сейчас в теме
(3)
Написал такой код, но значение моего реквизита не передается:

	
         ЭлементыОтбора = Новый Структура("МойРеквизит", ЗначениеМоегоРеквизита);

	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("Основание", Объект.Ссылка);
        ПараметрыФормы.Вставить("ЗначенияЗаполнения", ЭлементыОтбора);
	ФормаДокумента = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект, Истина);


Впрочем, в (2) был подсказан хороший метод, сделаю так.
Спасибо большое за помощь)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот