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 3 13.11.19 09:38 Сейчас в теме
(7) если это реквизит формы, то да - выкручиваться программно.
10. Marliiin 13.11.19 09:41 Сейчас в теме
(9) Нет, это реквизит объекта. Галку эту поставил.

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


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

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

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


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

Вакансии

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

Программист 1С
Калининград
зарплата от 60 000 руб. до 80 000 руб.
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день

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

Консультант-аналитик 1С
Москва
зарплата от 40 000 руб. до 120 000 руб.
Полный день