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

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

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

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

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

&НаКлиенте
Процедура ТаблицаДокументОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)	
	
	Если ТипЗнч(ВыбранноеЗначение) = Тип("Тип") Тогда
		МассивТипов = Новый Массив;
		МассивТипов.Добавить(ВыбранноеЗначение);
		ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);
		ТекущиеДанные = Элементы.Таблица.ТекущиеДанные;
		ТекущиеДанные.Документ = ОписаниеТипов.ПривестиЗначение();
		СтандартнаяОбработка = Ложь;
		
		// после выбора типа можно сразу вызвать выбор документа, но это не обязательно
		ОткрытьФормуВыбораДокумента(ТекущиеДанные.Документ, Элемент)
	КонецЕсли;
	
КонецПроцедуры
Показать
Прикрепленные файлы:
ВнешняяОбработка1.epf
Egovigor; _nameless_; Andy1981; huzden; user640247; AzagTot; Casek2012; urukk; eeeio; dm1trygord; pavlo; +11 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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)Можно использовать список значений и его метод ВыбратьЭлемент():

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

ТипДокумента = ВыбранныйЭлемент.Значение;
aezdakov; NittenRenegade; mark_oilbass; dandykry; +4 Ответить
5. mark_oilbass 28.06.18 12:55 Сейчас в теме
6. Rain88 336 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
Egovigor; _nameless_; Andy1981; huzden; user640247; AzagTot; Casek2012; urukk; eeeio; dm1trygord; pavlo; +11 Ответить
9. mark_oilbass 28.06.18 20:31 Сейчас в теме
(8) спасибо огромное, получилось:)
10. Casek2012 9 14.08.20 09:54 Сейчас в теме
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Руководитель проектов 1С
Москва
зарплата от 200 000 руб.
Полный день

Консультант-аналитик 1С
Нижний Новгород
зарплата от 55 000 руб. до 100 000 руб.
Полный день

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

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

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