Имя: Пароль:
1C
1С v8
1C 8.2 Обычное приложение. Не работает список выбора
0 KizerSoze
 
16.10.13
00:17
Здравствуйте,
Пытаюсь программно определить список выбора для реквизита табличной части. Почему - то не получается. В отладке посмотрел, "Элемент.СписокВыбора" в процедуре программно заполняется, но на форме почему - то выпадает пустая строка.

Процедура ТчКатегорииПерсоналаСсылкаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
    
    Элемент.СписокВыбора.Очистить();
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗначенияСвойствОбъектов.Значение
        |ПОМЕСТИТЬ Вт
        |ИЗ
        |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        |ГДЕ
        |    ЗначенияСвойствОбъектов.Свойство = &Свойство
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    Вт.Значение
        |ИЗ
        |    Вт КАК Вт
        |
        |СГРУППИРОВАТЬ ПО
        |    Вт.Значение";

    Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Категории персонала"));
    РезультатЗапроса = Запрос.Выполнить();
    Если не РезультатЗапроса.Пустой() тогда
        Выборка=РезультатЗапроса.Выбрать();
        Пока Выборка.Следующий() цикл
            Элемент.СписокВыбора.Добавить(Выборка.Значение);
        КонецЦикла;
    КонецЕсли;
    СтандартнаяОбработка=Ложь;
КонецПроцедуры
1 Apokalipsec
 
16.10.13
00:37
СтандартнаяОбработка=Ложь;
в начало перенеси.
и в элемент.СписокВыбора запихни готовый список значений.
2 Apokalipsec
 
16.10.13
00:41
а вообще смотри в типовой как сделан выбор, в куче форм есть.
3 mistеr
 
16.10.13
02:15
Без стандартной обработки список нужно и показывать самому, с помощью ВыбратьИзСписка().

А СписокВыбора для стандартной обработки.
4 KizerSoze
 
16.10.13
07:02
Вот так сработало нормально:

    СтандартнаяОбработка=Ложь;
    Элемент.СписокВыбора.Очистить();
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗначенияСвойствОбъектов.Значение
        |ПОМЕСТИТЬ Вт
        |ИЗ
        |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        |ГДЕ
        |    ЗначенияСвойствОбъектов.Свойство = &Свойство
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    Вт.Значение
        |ИЗ
        |    Вт КАК Вт
        |
        |СГРУППИРОВАТЬ ПО
        |    Вт.Значение";

    Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Категории персонала"));
    РезультатЗапроса = Запрос.Выполнить();
    Если не РезультатЗапроса.Пустой() тогда
        Выборка=РезультатЗапроса.Выбрать();
        Список=Новый СписокЗначений;
        Пока Выборка.Следующий() цикл
            Список.Добавить(Выборка.Значение);
        КонецЦикла;
    КонецЕсли;
    Элемент.Значение=ВыбратьИзСписка(Список, Элемент).Значение;

Mister,  Apokalipsec,  спасибо Вам.
5 PaulBC
 
16.10.13
07:16
(0) Убери вообще СтандартнаяОбработка=Ложь;
6 Повелитель
 
16.10.13
07:31
(0) Мне не понятно зачем тут изврат с временными таблицами?
Достаточно просто:
Запрос.Текст =
        "ВЫБРАТЬ Различные
        |    ЗначенияСвойствОбъектов.Значение
        |ИЗ
        |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        |ГДЕ
        |    ЗначенияСвойствОбъектов.Свойство = &Свойство
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший