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

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 337 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С (УХ)
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день

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

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

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

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