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

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) был подсказан хороший метод, сделаю так.
Спасибо большое за помощь)
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день