Имя: Пароль:
1C
1С v8
Отбор в выборе из списка
,
0 apprentice
 
09.09.17
20:13
Доброго времени суток!
Вопрос наверное банален, но все же: Есть документ, у него поле водитель типа СправочникСсылка.РабочийПерсонал; У рабочего персонала есть 2 должности - водитель и грузчик. Хочу чтобы при открытии списка "грузчики" не попадали в список. С формой выбора реализовал, а на список не выходит:
&НаСервере
Функция ВодителиПолучить()
    Возврат перечисления.Должности.Водитель;
КонецФункции

&НаКлиенте
Процедура ВодительНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ФормаВыбора= ПолучитьФорму("Справочник.РабочийПерсонал.ФормаВыбора");    
    ФормаВыбора.Список.Отбор.Элементы.очистить();
    
//Отбор по должности "Водитель"
    ЭлементОтбора = ФормаВыбора.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("Должность");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ПравоеЗначение = ВодителиПолучить();
    ЭлементОтбора.РежимОтображения =    РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;      
    
    ВыбранныйВодитель = ФормаВыбора.ОткрытьМодально();    
КонецПроцедуры
1 AlvlSpb
 
09.09.17
21:43
(0) В перечисления.Должности.Водитель,  Водитель предопределенное значение?
2 apprentice
 
09.09.17
22:53
(1) да
3 AlvlSpb
 
09.09.17
23:40
(2) А что не получается? Не выбирает или форму не открывает? Потому что странно смотрится "ВыбранныйВодитель = ФормаВыбора.ОткрытьМодально();"
Может просто
ФормаВыбора.ОткрытьМодально();?
4 AlvlSpb
 
09.09.17
23:41
Потому что до данного момента все вроде должно работать правильно
5 apprentice
 
10.09.17
00:23
Нет, вы не так поняли
Этот код работает верно, только в конце строчку забыл:
Объект.Водитель = ВыбранныйВодитель;
Это чтобы поле заполнить
Проблема в том, что этот код для формы выбора, а я хочу сделать аналогично в форме списка. Пытался как-то так, в результате ничего не меняется(отбор не происходит):
&НаКлиенте
Процедура ВодительНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ФормаСписка= ПолучитьФорму("Справочник.РабочийПерсонал.ФормаСписка");    
    ФормаСписка.Список.Отбор.Элементы.очистить();
    
//Отбор по должности "Водитель"
    ЭлементОтбора = ФормаСписка.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("Должность");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ПравоеЗначение = ВодителиПолучить();
    ЭлементОтбора.РежимОтображения =
    РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;      
    ВыбранныйВодитель = ФормаСписка.ОткрытьМодально();
    Объект.Водитель = ВыбранныйВодитель;
КонецПроцедуры
6 apprentice
 
10.09.17
00:24
Наверное какую-то базовую вещь не так делаю/понимаю
7 AlvlSpb
 
10.09.17
00:52
(5) Все-равно не понимаю
ВыбранныйВодитель = ФормаСписка.ОткрытьМодально();
Объект.Водитель = ВыбранныйВодитель;
Как полем выбора может быть модально открытая форма?
(6) Других ошибок не вижу (но я и не профи). Раз уж вам категорически не нужны грузчики, попробуйте настроить Список формы списка в свойствах списка (не программно, в форме), укажите в настройках явный фильтр по должности. Заработает?
8 apprentice
 
10.09.17
08:39
(6)Спасибо огромное! Изменил ПараметрыВыбора, поставил там отбор по должности - все работает
Насчет открыть модально - увидел в другой программе, оттуда перенял. Модально открытая форма, как я понимаю, не является полем выбора. Это просто открытие формы с возвратом выбранного значения.
Возвращаемое значение:
Тип: Произвольный.
Команда закрытия формы.
Если форма открывалась для выбора, возвращает выбранное значение (или массив значений, в случае разрешенного множественного выделения в открываемой форме). Если значение не выбрано, возвращается Неопределено.
А вы знаете как по другому не просто открыть форму, но еще и выбранное значение "отловить"? Я пытался, но не нашел(
9 Филиал-msk
 
10.09.17
08:59
(8) Передать владельца при открытии формы и обработать его событие обработки выбора.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший