Имя: Пароль:
1C
1С v8
Выбор группы из списка
0 21stas
 
14.01.18
08:49
Требуется сделать в обработке таблицу с номенклатурой - чтобы пользователи могли для каждой позиции номенклатуры выбрать другую группу.
Группы для скорости выбора хочется выбирать из выпадающего списка, а не из формы.
В обработку добавил табличную часть "Номенклатура", там два реквизита с типом НоменклатураСсылка - Нома и Родик. Эту табличную часть вынес на форму.
Поставил галочку "РежимВыбораИзСписка" у Родик.
Как теперь заполнить этот список?

Что-то в этом роде?
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Объект.Номенклатура["Родик"].СписокВыбора.Добавить...
1 Мимохожий Однако
 
14.01.18
09:31
Покажи запрос, как получаешь список.
2 21stas
 
14.01.18
09:42
Вот так я заполняю таблицу на форме:
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка КАК Нома,
        |    Номенклатура.Родитель КАК Родик
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура";
    
    РезультатЗапроса = Запрос.Выполнить();
    ТЗ=РезультатЗапроса.Выгрузить();
    Объект.Номенклатура.Загрузить(ТЗ);

Примерно так хочу заполнять список для выбора:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПриОткрытииНаСервере();
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка КАК НоменклатураСсылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.ЭтоГруппа";
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Объект.Номенклатура["Папочка"].СписокВыбора.Добавить(ВыборкаДетальныеЗаписи.НоменклатураСсылка);
    КонецЦикла;
КонецПроцедуры
3 patya
 
14.01.18
09:48
А почему не Шнурок?
4 21stas
 
14.01.18
09:59
(3) Имеется в виду 1С-Быстрый старт?
Да, проходил, но пишу мало, подзабывается. Где примерно там посмотреть?
5 patya
 
14.01.18
10:04
Нет. Имеется в виду Родик и Папочка. В современных курсах так и рекомендуется?
6 mistеr
 
14.01.18
10:36
(0) >Как теперь заполнить этот список?

В обработчике события НачалоВыбора для поля в ТЧ.
7 breezee
 
14.01.18
16:40
(2) У вас на клиенте запрос не отработает
  РезультатЗапроса = Запрос.Выполнить();
    ТЗ=РезультатЗапроса.Выгрузить();
    Объект.Номенклатура.Загрузить(ТЗ);
Это вообще ад, что будет, если у вас список реквизитов измениться в таблице?
>Процедура ПриОткрытии(Отказ)
    ПриОткрытииНаСервере();
АААААА

А по задаче - смотрите свойства элемента формы, кодить тут не надо.
8 21stas
 
14.01.18
19:31
Хорошо, сделал функцию для заполнения списка групп номенклатуры- как теперь его использовать в виде списка выбора?

&НаСервере
Функция ЗаполнитьСписок()
    СписокГруппНоменклатуры=Новый СписокЗначений;
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка КАК НоменклатураСсылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.ЭтоГруппа";
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        СписокГруппНоменклатуры.Добавить(ВыборкаДетальныеЗаписи.НоменклатураСсылка);
    КонецЦикла;
    Возврат СписокГруппНоменклатуры;
КонецФункции
9 21stas
 
14.01.18
19:37
Попробовал вот такое. Список групп выдаётся для выбора (при этом ругается на использование модальных окон), но выбор ничего не меняет:

&НаКлиенте
Процедура НоменклатураРодикНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;
    Элемент = ЭтаФорма.ВыбратьИзСписка(ЗаполнитьСписокГруппНоменклатуры(), Элемент);
КонецПроцедуры

&НаСервере
Функция ЗаполнитьСписокГруппНоменклатуры()
    СписокГруппНоменклатуры=Новый СписокЗначений;
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка КАК НоменклатураСсылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.ЭтоГруппа";
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        СписокГруппНоменклатуры.Добавить(ВыборкаДетальныеЗаписи.НоменклатураСсылка);
    КонецЦикла;
    Возврат СписокГруппНоменклатуры;
КонецФункции
10 PiotrLoginov
 
14.01.18
20:31
ТС, перечитайте (7)
11 21stas
 
15.01.18
06:12
(10) В (7) несколько рекомендаций, речь идёт про "смотрите свойства элемента формы, кодить тут не надо"?
Да, при очередном просмотре нашёл - действительно, кодить не надо.
Спасибо.