Имя: Пароль:
1C
1С v8
Обработка выбора значения составного типа
, , ,
0 neo1109
 
14.08.12
10:37
Имеем поле на форме составного типа: строка и несколько видов документов.

При выборе значения происходит следующее:
1. Начало выбора
2. Выбор типа
3. Если выбран какой нибудь из документов - открытие формы списка

Вопрос: как "влезть" между пунктами 2 и 3? т.е. сделать следующее: если выбран тип документа, то форму списка открыть с нужным отбором.
1 DrShad
 
14.08.12
10:38
в пункте 1 СтандартнаяОбработка = Ложь, выбрать тип и открыть форму с нужным выбором через собственный код
2 neo1109
 
14.08.12
10:43
(1) +100
А как программно выбрать тип?
3 hhhh
 
14.08.12
10:45
привестизначение
4 DrShad
 
14.08.12
10:45
МойРеквизит = Документы.ПриходныйКассовыйОрдер.ПустаяСсылка()  как пример
5 DrShad
 
14.08.12
10:45
(3)+1
6 neo1109
 
14.08.12
10:48
Про ПривестиЗначение() понятно. Но это я сам назначаю реквизиту тип. А мне надо у пользователя спросить...
7 Godofsin
 
14.08.12
10:51
(6) Нахера? Чо он сам выбрать не может?
8 neo1109
 
14.08.12
10:55
(6) кто "он"?

начнем сначала.
надо:
1. открыть окно выбора типа из списка тех, что доступны реквизиту
2. в зависимости от выбранного типа действовать дальше
9 neo1109
 
14.08.12
10:55
* (7) кто "он"?
10 anddro
 
14.08.12
10:55
(6) обработчики НачалоВыбора вызывается и при начале выбора типа, и при начале выбор значения.
обработчик ПриИзменении вызывается и после окончания выбора типа, и после окончания выбора значения.
11 anddro
 
14.08.12
10:57
(8) сделай эти 2 обработчика, и поставь в каждом точку останова. Потом сделай выбор вначале типа, потом значения, сразу все поймешь.
12 hhhh
 
14.08.12
10:58
(9) пользователь видит поле ввода и там есть буковка "Т". Он на нее нажимает и выбирает тип. Какого такого вы у него еще дополнительно собрались спрашивать? Он без вас спокойно может открыть окно выбора типа.
13 Godofsin
 
14.08.12
11:00
(12) +1.
(8)Если надо заполнение из другой формы, то впихай в СЗ все возможные значения, пусть из них пользователь выбирает.
14 anddro
 
14.08.12
11:05
(12) телепатирую: после выбора типа сразу начать выбор значения.
В штатном режиме вначале надо нажать на выбор типа [Т], потом на выбор значения [...]
15 anddro
 
14.08.12
11:08
Если в (14) правильное предположение, то вот такой вариант:

Процедура ПолеВвода1ПриИзменении(Элемент)
   Если НЕ ЗначениеЗаполнено(ЭтаФорма.ПолеВвода1) Тогда
       ЭтоДокумент = Ложь;
       Попытка
           ЭтоДокумент = Метаданные.Документы.Содержит(ЭтаФорма.ПолеВвода1.Метаданные());
       Исключение
       КонецПопытки;
       Если ЭтоДокумент Тогда
           ФормаВыбора = Документы[ЭтаФорма.ПолеВвода1.Метаданные().Имя].ПолучитьФормуВыбора(,Элемент,);
           ФормаВыбора.Открыть();
           СтандартнаяОбработка = Ложь;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры
16 ZloyProger
 
14.08.12
11:13
(15) По-моему проше так:

ТипРекв = ТипЗнч(Элемент.Значение
Если Не(ТипРекв) = Тип("Неопределено")) Тогда //пользователь уже выбрал тип и делаешь что тебе надо
   Если ТипЗнч(ТипРекв) = Тип("ДокументСсылка.КакойНадо") Тогда
       Форма = Документ.КакойНадо.ПолучитьФорму("КакуюНадо");
       Отбор = Форма.ДокументСписок.Отбор;
       //извращаещься с отбором как хочешь
       Форма.Открыть();
   КонецЕсли;
КонецЕсли;
17 ZloyProger
 
14.08.12
11:15
Это судя по моей телепатии из (0) "о форму списка открыть с нужным отбором."
18 neo1109
 
14.08.12
11:23
(16) это я так понимаю в НачалоВыбора надо вставить (?)

еще такой вопрос: чем заменить "Элемент.Значение" в случае управляемой формы?
19 ZloyProger
 
14.08.12
11:24
(18) Хм.. Это я так понял 8.2, в ней к сожалению не силен пока((
20 Ksandr
 
14.08.12
11:26
Хорошо бы сделать так:
начало выбора
стандартная обработка ложь

ВыбранноеЗначение = ВыбратьИзСписка(СписокТипов);
Если Тогда
Иначе
КонецЕсли
21 anddro
 
14.08.12
11:29
(16) и что ты будешь делать, когда в составном типе 10 видов документов? И не путай ПолучитьФорму и ПолучитьФормуВыбора.
Вариант (15) не зависит от того, какие типы ты указал, т.е. при расширении типов не надо менять код.
22 ZloyProger
 
14.08.12
11:38
(21) Во-первых, если 10 видов документов, то возможно и отборы нужны разные, в твоем варианте это тоже не учтено (и в моем и в твоем придется добавлять ИначеЕсли с обработками под разные типы отборов)
Во-вторых, ПолучитьФормуВыбора() = ПолучитьФорму("НазваниеОсновнойФормыВыбора")

Так что вот) Нет ничего абсолютного, я не претендую на истину в первой инстанции, имхо зачем писать трай-эксепт, если можно писать так, что исключительной ситуации в принципе не может возникнуть?
23 neo1109
 
14.08.12
11:40
(22) отбор нужен для всех документов один
24 neo1109
 
14.08.12
11:40
единственное тока возможно потребуется проверка на наличие в документе нужного реквизита...
25 ZloyProger
 
14.08.12
11:42
Ну тогда да, однозначно (15). Ну через метаданные проверишь есть или нет.
26 neo1109
 
14.08.12
11:52
а как теперь (15) реализовать для управляемого приложения?
27 neo1109
 
14.08.12
14:42
Вопрос сюда же...

Есть документ, есть ТЧ, в ней колонка составного типа.
Как получить список типов этой колонки?
Если что применительно к управляемому приложению...