Открыть форму выбора у реквизита с составным типом данных

1. mark_oilbass 28.06.18 11:54 Сейчас в теме
Здравствуйте коллеги!

Помоги пожалуйста советом!
Есть внешняя обработка. На этой обработке есть реквизит "Документ", тип данных у этого реквизита составной (Реализация, Отчет о розничных продажах и Возврат поставщику). До этого был не составной тип данных и поэтому при подборе я спокойно ставил СтандартнаяОбратотка=Ложь и накладывал отборы на Период и еще пару реквизитов. Но как быть, когда реквизит составной ведь при подборе сначала всплывает окно с выбором типа и только потом сама форма подбора? Мне необходимо открыть нужную форму и установить отборы на динамический список в форме выбора. Необходимо создать свою форму выбора типа и ее открывать при подборе, а после выбора открывать нужную форму?
По теме из базы знаний
Найденные решения
8. SlavaKron 28.06.18 16:19 Сейчас в теме
Можно обойтись стандартным выбором типа, тогда и при добавлении строки не будет выскакивать список выбора. Только в обработке выбора нужно будет прерывать стандартное поведение после выбора типа.
&НаКлиенте
Процедура ТаблицаДокументНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)	
	
	ТекущиеДанные = Элементы.Таблица.ТекущиеДанные;
	
	Если ТекущиеДанные.Документ = Неопределено Тогда
		Возврат
	КонецЕсли;
	
	СтандартнаяОбработка = Ложь;
	
	ОткрытьФормуВыбораДокумента(ТекущиеДанные.Документ, Элемент)	
КонецПроцедуры

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

&НаСервереБезКонтекста
Функция ПолучитьИмяФормыВыбораПоСсылке(Ссылка)
	Возврат Ссылка.Метаданные().ПолноеИмя() + ".ФормаВыбора";
КонецФункции

&НаКлиенте
Процедура ТаблицаДокументОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)	
	
	Если ТипЗнч(ВыбранноеЗначение) = Тип("Тип") Тогда
		МассивТипов = Новый Массив;
		МассивТипов.Добавить(ВыбранноеЗначение);
		ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);
		ТекущиеДанные = Элементы.Таблица.ТекущиеДанные;
		ТекущиеДанные.Документ = ОписаниеТипов.ПривестиЗначение();
		СтандартнаяОбработка = Ложь;
		
		// после выбора типа можно сразу вызвать выбор документа, но это не обязательно
		ОткрытьФормуВыбораДокумента(ТекущиеДанные.Документ, Элемент)
	КонецЕсли;
	
КонецПроцедуры
Показать
Прикрепленные файлы:
ВнешняяОбработка1.epf
wauri; daemon_1912; kabantus; e-9; SlavaS65; KOTzilla; user1906040; user1552405; 1cUserAndrew; candoit; Патриот; HIVvich; Egovigor; _nameless_; Andy1981; huzden; user640247; AzagTot; Casek2012; urukk; eeeio; dm_137; pavlo; +23 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. mad375 28.06.18 12:33 Сейчас в теме
(1)Вариантов мне кажется масса, создать журнал(если его нет) и открывать его. Или сначала выбирать тип документа а потом открывать форму списка документа и т.д.
3. mark_oilbass 28.06.18 12:41 Сейчас в теме
(2) а как выбрать тип если я прописываю СтандартнаяОбработка=Ложь? Форма с выбором типа не открывается. Надо свою форму создавать для выбора типа документа?
4. mad375 28.06.18 12:47 Сейчас в теме
(3)Можно использовать список значений и его метод ВыбратьЭлемент():

СписокТиповДокументов = Новый СписокЗначений;
СписокТиповДокументов.Добавить(Тип("ДокументСсылка.Реализация", "Реализация");
СписокТиповДокументов.Добавить(Тип("ДокументСсылка.......
......
ВыбранныйЭлемент = СписокЗначений.ВыбратьЭлемент();

ТипДокумента = ВыбранныйЭлемент.Значение;
Pafasan; nollff; aezdakov; NittenRenegade; mark_oilbass; dandykry; +6 Ответить
5. mark_oilbass 28.06.18 12:55 Сейчас в теме
6. Rain88 376 28.06.18 12:57 Сейчас в теме
(1)
ведь при подборе сначала всплывает окно с выбором типа и только потом сама форма подбора?

Т.е. вам нужно в момент выбора пользователем типа документа программно определять выбор типа, чтобы наложить соответствующие отборы при подборе?

Пока писала, тут уже решение озвучили)
7. mark_oilbass 28.06.18 14:33 Сейчас в теме
(6)из за того что я отключаю стандартную обработку список с выбором типа не всплывает. Я так понял мне нужно либо свою форму выбора типа создать либо поймать событие после выбора типа документа. Вообщем необходимо открыть форму выбора выбранного типа документа и накинуть на не отборы.
(4)Ваш метод приближает меня к истине. Но всплыла друга проблема. Форма с выбором типа открывается и при добавлении строки в тч, т.е. нажать кнопку Добавить сработал обработчик НачалоВыбора и открывается форма выбора типа документа. Как устранить эту проблему?
8. SlavaKron 28.06.18 16:19 Сейчас в теме
Можно обойтись стандартным выбором типа, тогда и при добавлении строки не будет выскакивать список выбора. Только в обработке выбора нужно будет прерывать стандартное поведение после выбора типа.
&НаКлиенте
Процедура ТаблицаДокументНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)	
	
	ТекущиеДанные = Элементы.Таблица.ТекущиеДанные;
	
	Если ТекущиеДанные.Документ = Неопределено Тогда
		Возврат
	КонецЕсли;
	
	СтандартнаяОбработка = Ложь;
	
	ОткрытьФормуВыбораДокумента(ТекущиеДанные.Документ, Элемент)	
КонецПроцедуры

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

&НаСервереБезКонтекста
Функция ПолучитьИмяФормыВыбораПоСсылке(Ссылка)
	Возврат Ссылка.Метаданные().ПолноеИмя() + ".ФормаВыбора";
КонецФункции

&НаКлиенте
Процедура ТаблицаДокументОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)	
	
	Если ТипЗнч(ВыбранноеЗначение) = Тип("Тип") Тогда
		МассивТипов = Новый Массив;
		МассивТипов.Добавить(ВыбранноеЗначение);
		ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);
		ТекущиеДанные = Элементы.Таблица.ТекущиеДанные;
		ТекущиеДанные.Документ = ОписаниеТипов.ПривестиЗначение();
		СтандартнаяОбработка = Ложь;
		
		// после выбора типа можно сразу вызвать выбор документа, но это не обязательно
		ОткрытьФормуВыбораДокумента(ТекущиеДанные.Документ, Элемент)
	КонецЕсли;
	
КонецПроцедуры
Показать
Прикрепленные файлы:
ВнешняяОбработка1.epf
wauri; daemon_1912; kabantus; e-9; SlavaS65; KOTzilla; user1906040; user1552405; 1cUserAndrew; candoit; Патриот; HIVvich; Egovigor; _nameless_; Andy1981; huzden; user640247; AzagTot; Casek2012; urukk; eeeio; dm_137; pavlo; +23 Ответить
9. mark_oilbass 28.06.18 20:31 Сейчас в теме
(8) спасибо огромное, получилось:)
10. Casek2012 10 14.08.20 09:54 Сейчас в теме
11. user1883157 14.10.24 15:31 Сейчас в теме
У поля с составным типом данных после выбора типа выполняется процедура "ПриИзменении", вот туда можно подключится и настроить список выбора
Оставьте свое сообщение

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