Имя: Пароль:
1C
 
Свой список выбора у реквизита
,
0 Альбатрос
 
24.05.21
15:03
Привет, задача: есть реквизит подразделение составного типа, нужно при нажатии на кнопку выбора выбрать тип и исходя из выбранного типа определить доступный список выбора, анализируя определенный РС.
Пытаюсь сделать через ПоказатьВыборИзСписка, но ессесно завершение процедуры выбора срабатывает раньше, чем обрабатывается Оповещение. А как сделать правильно?

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

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

КонецПроцедуры
1 Альбатрос
 
24.05.21
15:04
(0) Опечатка:  ПоказатьВыборИзСписка(новый ОписаниеОповещения("ВыборПодразделенияОкончание",ЭтотОбъект, ДанныеВыбора), ВыборТипа);
2 Альбатрос
 
24.05.21
15:11
По сути нужно заставить обработку события "НачалоВыбора" дождаться окончания работы процедуры оповещения. Или может по-другому можно сделать без модальных окон?
3 H A D G E H O G s
 
24.05.21
18:29
(0) Ну пусть пользователь 2 раза выбирает, один раз Тип, а второй раз - значение.

А ты проверяй, если текущее значение реквизита = Неопределено - предлагай ему выбрать Тип, и СтандартнаяОбработка=Ложь
Если в реквизите что-то есть - просто выходи из процедуры и пусть стандарт работает
4 Альбатрос
 
24.05.21
21:09
(3) Не получается) Кнопки "Т" нету, ибо тип реквизита Определяемый тип. Выбор типа при стандартной обработке происходит при каждом нажатии на кнопку выбора, но при этом окно выбора типа появляется после обработки события "НачалоВыбора". то есть я в обработчике не могу выяснить, какой тип выбрал пользователь.
5 H A D G E H O G s
 
24.05.21
21:18
(4) когда обрабатываешь выбор типа - записывай пустую ссылку в реквизит.
6 Альбатрос
 
24.05.21
21:22
(5) Тэкс, не пойму, а зачем?
7 Альбатрос
 
24.05.21
21:29
Есть рабочий вариант:

    СтандартнаяОбработка = Ложь;
    ВыборТипа = Новый СписокЗначений;
    ВыборТипа.Добавить("Склад");
    ВыборТипа.Добавить("Подразделение организации");
    ВыбранныйТип = ВыборТипа.ВыбратьЭлемент("Выберете тип подразделения");
    Если ВыбранныйТип = Неопределено Тогда
        Возврат;
    КонецЕсли;
    ДанныеВыбора = Новый СписокЗначений;
    ДанныеВыбора.ЗагрузитьЗначения(РаботаСПретензиямиВызовСервера.ПолучитьСписокДоступныхПодразделенийДляЗадачи(ВыбранныйТип.Значение));

В этом варианте я знаю, что за тип выбрал пользователь и формирую свой список значений для выбора. Но при ВыборТипа.ВыбратьЭлемент() получаю сообщение про модальные окна: "Использование модальных окон в этом режиме запрещено". При этом все работает, но не красиво)
8 H A D G E H O G s
 
24.05.21
21:37
9 H A D G E H O G s
 
24.05.21
21:38
Не забудь обратить внимание на
https://prnt.sc/13d01tk
10 Альбатрос
 
24.05.21
21:58
(8) Вкурил) Спасибо огромное!