|
Как открывать нужную форму выбора для составного реквизита УФ | ☑ | ||
---|---|---|---|---|
0
ChAlex
06.09.12
✎
19:31
|
Задача: на УФ есть реквизит составного типа (допустим справочник "Товары" и справочник "Услуги"). Нужно при выборе реквизита открывать не форму выбора соответствующего справочника, а некую иную. Как такое организовать? Или это невозможно?
Трабл при этом возникающий: выбрать нужную форму можно было бы в событии "ПриНачалеВыбора" - но тут засада в том, что тип справочника еще не определен. Полазив с отладчиком - вырисовывается такая схема вызова событий при попытке выбора: 1. Вызывается событие "ПриНачалеВыбора" - тут тип еще не определен и соответственно что-либо определять безсмысленно. 2. Выводится окно выбора типа реквизита. 3. После выбора типа реквизита вызывается событие "ПриИзменении" и на этом все. Вот и вопрос: в какой точке можно переопределить какую форму открывать? |
|||
1
Feanorko
06.09.12
✎
19:40
|
>Вот и вопрос: в какой точке можно переопределить какую форму открывать?
СтандартнаяОбработка = Ложь и впегед |
|||
2
ChAlex
06.09.12
✎
19:44
|
(1) - Куда вперед? А самое главное когда? Что СтандартнаяОбработка = Ложь - и ежу понятно. Прочитайте внимательно пост выше: в момент когда вызывается событие ПриНачалеВыбора - еще не известно форму какого справочника открыть! Да елси даже в этот момент и определить: - то откроется 2 формы: - первая та , что переопределена в событии, а вторая - стандартная форма выбора уже выбранного типа справочника
|
|||
3
Азазелло
06.09.12
✎
19:56
|
(2) Пока первое, что пришло на ум - отключаем у реквизита свойство ВыбиратьТип и кастомизируем ПриНачалеВыбора. Первый раз, пока тип реквизита = Неопределено - генерим список выбора типа значения, второй раз - в зависимости от выбранного ранее типа открываем нужную форму.
|
|||
4
Feanorko
06.09.12
✎
19:58
|
(2)
Процедура ПриНачалеВыбора(или как она там) СтандартнаяОбработка = Ложь; ВыбираемТип(); ОткрываемФормуВыбора(); КонецПроцедуры .... Profit |
|||
5
ChAlex
06.09.12
✎
20:08
|
(3)(4) - в том то и дело "кастомизируем". Блин ну почему не сделать модель событий нормальную и логичную?! Хотя чего тут сетовать - в 1С много есть чего через Ж и фиг когда изменится. Кстати праллельный трабл - сначала на форме был реквизит, который не имел составной тип: все открывалось на ура. После того как реквизит изменить на составной: - ВСЕ! На форме ну никак не открывается выборка нужного справочника - ВСЕГДА ОТКРЫВАЕТСЯ форма того, справочника, который был раньше. И любые танцы с бубном - не помогаю. Пока с формы не удалить элемент и разместить повторно!!! И только после этого начинает срабатывать выбор нужного справочника! Я тихо шалею. А если посмотреть список зарегистрированных и не исправленных траблов в последнем релизе - с удивлением наталкиваюсь на ошибки, датированные еще 2010 годом!!! Это 2-х лет не хватило на то, чтобы отреагировать?... :)
|
|||
6
Азазелло
06.09.12
✎
20:16
|
(5) ну да, сложно... Много чего не продумано, из того, что можно было бы конфигурить лишь мышом, приходится программировать. Мне вот допустим всегда хотелось бы, чтобы значения булевых свойств элементов формы (а-ля Видимость, Доступность) можно было бы привязывать к значениям реквизитов объектов или форм.
Приходится играть по правилам, придуманным разработчиками платформы :( |
|||
7
ChAlex
06.09.12
✎
20:22
|
(3) - а как можно в УФ определить типы реквизита (для универсальности). Конечно решение влоб - явно прописывать, но хотелось бы универсально через ТипЗначение.Типы(). В хелпе написано что для управляемого приложения есть свойство ТипЗначения для реквизита (доступное на сервере) - тока что-то не могу до него достучаться
(6) - ну блин список хотелок - и я могу на н-ное количество листов нарисовать.. :) Я, например, не понимаю вооще ограничений, присутствующих в УФ - в частности, для элемента можно указать реквизит формы в поле "СвязьПоТипу". НО: если это реквизит не размещен на форме (вернее не имеет видимости!!!!) - то и это сразу не работает!! Кажется ну какая нах разница - ведь реквизит имеется на клиенте - ну каого городить хрен знает чего |
|||
8
Азазелло
06.09.12
✎
20:34
|
(7) мне почему-то видится единственным способом получить список возможных типов реквизита - через метаданные.
|
|||
9
ChAlex
06.09.12
✎
20:39
|
(8) - через метаданные сейчас и получаю. Но! Допустим поле в регистре имеет несколько больше типов, чем допустимые на форме. Т.е. на форме реквизит не имеет представления в сохраняемых данных - это просто реквизит формы - и все. Форма создается для конкретного списка видов - остальные не использовать. Вот и выпадает тогда. Опять придется ручками и не забыть, если состав реквизита изменится в листинге подобавлять: - неудобняк однако!
|
|||
10
ChAlex
06.09.12
✎
20:41
|
А кстати - еще один момент: в обычных формах при очистке составного реквизита появлялась пиктограмка на кнопке "Т", а в УФ - такого нет. Что-то мне казалось раньше и в УФ такое было. .. Или это мне только кажется?
|
|||
11
Азазелло
06.09.12
✎
20:44
|
(10) может, кажется? в УФ вроде для составных типов при очистке поля сразу и значение и тип зачищаются.
|
|||
12
Ns33
06.09.12
✎
21:00
|
Я тут поэкспериментировал, работает такая штука, правда только на второй выбор:
&НаСервере Процедура ФФ1() Элементы.реквизит1.ФормаВыбора="Справочник.Номенклатура.Форма.ФормаВыбора1"; КонецПроцедуры &НаКлиенте Процедура Реквизит1ПриИзменении(Элемент) фф1(); КонецПроцедуры Реквизит1ПриИзменении() вызывается 2 раза - при выборе типа и при выборе элемента. |
|||
13
ChAlex
06.09.12
✎
23:19
|
(11) - я имею ввиду что значение и тип то зачищены, но это состояние никак не индицируется. Такое же поведение и в обычных формах, только там точно при этом отображается пиктограмка выбора типа "Т", а в управляемых вот дежавю всвязи с этим (обычно не обращал внимания, а вот при детальном рассмотрении бросается в глаза ее отсутсвие). Но какое-то смутное ощущение, что где-то в управляемых формах на глаза попадалось отображение выбора типа. Но сприть не буду - может и показалось.
(12) - ПриИзменении вызывается 2 раза - спору нет (после выбора типа значение очищается, и после выбора значения естественно) - впринципе можно и так зацепится, но не лучший вариант: вызов сервера (который вообщем-то лучше избежать, как-никак необходимости в этом нет) ну и все равно писать алгоритм обработки. Так что наверное лучше способ (3). |
|||
14
chaplin-che
07.09.12
✎
00:19
|
Сделай как в 10.3 утэшке, сначала выбор из списка типа, потом че хочешь открывай.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |