Имя: Пароль:
1C
1С v8
Как предварительно заполнить список выбора, зависящий от документа?
0 FrostBite101
 
02.05.20
08:13
Нужно давать выбор пользователю только тех студентов, которые существуют в таб части документа.
Сделал отбор,а вот как это все организовать... не знаю
&НаСервере
Функция ПоискСтудена();
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПосещениеСтуденты.Студент КАК Студент
        |ИЗ
        |    Документ.Посещение.Студенты КАК ПосещениеСтуденты
        |ГДЕ
        |    ПосещениеСтуденты.Ссылка = &Ссылка
        |    И ПосещениеСтуденты.Студент = &Студент
        |    И ПосещениеСтуденты.Студент ЕСТЬ НЕ NULL
        |
        |СГРУППИРОВАТЬ ПО
        |    ПосещениеСтуденты.Студент";
    
    Запрос.УстановитьПараметр("Ссылка", Объект.Документ);
    Запрос.УстановитьПараметр("Студент", Объект.Студент);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    МассивСтудентов = Новый Массив();
    
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    
    МассивСтудентов.Добавить(ВыборкаДетальныеЗаписи.Студент);
    
    КонецЦикла;
    
    Возврат МассивСтудентов;

    
    
КонецФункции


&НаСервере
Процедура СтудентСоздание(Элемент, СтандартнаяОбработка) // при создании или при редактировании реквизита студент ?
    
    
СтандартнаяОбработка = Ложь;
НовыеСвязи = Новый ФиксированныйМассив(ПоискСтудена());
Элементы.Студент.ПараметрыВыбора = НовыеСвязи;

    
КонецПроцедуры
1 FrostBite101
 
02.05.20
09:08
Поправил, но ничего не работает(

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


    
    
КонецФункции


&НаКлиенте
Процедура СтудентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    
    СписокСтудентов = ПоискСтудена();
    ДанныеВыбора.ЗагрузитьЗначения(СписокСтудентов);
    
    
КонецПроцедуры
2 Волшебник
 
модератор
02.05.20
09:27
Запросов к документам быть не должно
3 FrostBite101
 
02.05.20
09:30
Исправил
&НаСервере
Функция ПоискСтудена();
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПосещениеСтуденты.Студент КАК Студент
        |ИЗ
        |    Документ.Посещение.Студенты КАК ПосещениеСтуденты
        |ГДЕ
        |    ПосещениеСтуденты.Ссылка = &Ссылка
        |    И ПосещениеСтуденты.Студент ЕСТЬ НЕ NULL
        |
        |СГРУППИРОВАТЬ ПО
        |    ПосещениеСтуденты.Студент";
    
    Запрос.УстановитьПараметр("Ссылка", Объект.Документ);
    
    
    РезультатЗапроса = Запрос.Выполнить();
    Тз = РезультатЗапроса.Выгрузить();
    
    
    СписокСтудентов = Новый СписокЗначений;
    СписокСтудентов.ЗагрузитьЗначения(РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Студент"));
    
    Возврат СписокСтудентов;
    


    
    
КонецФункции


&НаКлиенте
Процедура СтудентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    
    СписокСтудентов = ПоискСтудена();
    ДанныеВыбора=СписокСтудентов;
    
    
КонецПроцедуры
4 FrostBite101
 
02.05.20
09:31
(2) Это правило среди разработчиков? Как же брать данные из документа?
5 Волшебник
 
модератор
02.05.20
09:32
Условие некорректное:
ПосещениеСтуденты.Студент ЕСТЬ НЕ NULL

Должно быть сравнение с пустой ссылкой
6 Волшебник
 
модератор
02.05.20
09:32
(4) Из документа не надо брать данные. Документ должен класть данные в регистр при проведении.
7 FrostBite101
 
02.05.20
09:39
(6) Хорошо, спасибо. Хотелось бы спросить, как избавиться от старых выбранных значений. У меня все работает, но изначально выводятся все значения в поле студент, а когда я нажимаю "показать все" появляются нужные, а старые удаляются из выбора.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший