Имя: Пароль:
1C
1С v8
Открыть форму выбора групп справочника с отбором
0 Zoommer
 
12.06.12
03:21
Подскажите, пожалуйста, как в 8.1 сделать открытие формы выбора групп справочника с отбором по реквизиту? ВидТовара это реквизит на форме обработки. Надо открывать только те группы в справочнике Номенклатура, у которых такой реквизит

       Форма=Справочники.Номенклатура.ПолучитьФормуВыбораГруппы();
       Форма.Отбор.Ссылка.ВидНоменклатуры=ВидТовара;
       Форма.Отбор.Ссылка.Использование =  Истина;
       ВыбГруппа=Форма.ОткрытьМодально();

Почему вот так не работает?
Ошибка Поле объекта не обнаружено (ВидНоменклатуры)
1 Zoommer
 
12.06.12
03:30
Ссылка это что такое?
Надо программно открыть форму выбора
2 Zoommer
 
12.06.12
05:18
в формеВыбораГруппы нет реквизита ВидНоменклатуры

Если сделать вот так

Форма=Справочники.Номенклатура.ПолучитьФормуВыбора();
Форма.Отбор.ВидНоменклатуры.Установить(ВидТовара);
ВыбГруппа=Форма.ОткрытьМодально();

То открываются группы справочника все и отбор все равно не устанавливается
3 Zoommer
 
12.06.12
05:27
Форма=Справочники.Номенклатура.ПолучитьФормуВыбора();
Форма.Отбор.ВидНоменклатуры.Установить(ВидТовара);
Форма.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = ложь;
Форма.ЭлементыФормы.СправочникСписок.ИзменятьИерархическийПросмотр = ложь;

Вот так открывается форма выбора и отбор дейстует.

А как сделать, если наоброт надо чтобы только группы отображались и чтобы тоже действовал отбор? Для группы справочника тоже задан реквизит ВидНоменклатуры
4 rphosts
 
12.06.12
05:45
а если что-то типа как так:
 ПараметрыФормы = Новая Cтруктура;
  ПараметрыФормы.Добавить("Отбор", Новый Структура("ЭтоГруппа",Истина));
 ОткрытьФорму("Спарвочник.Номенклатура.ФормаСписка",ПараметрыФормы);
5 Zoommer
 
12.06.12
05:50
Форма=Справочники.Номенклатура.ПолучитьФормуВыбора();
       Форма.Отбор.ЭтоГруппа.Установить (Истина);
       Форма.Отбор.ВидНоменклатуры.Установить(ВидТовара);
       Форма.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = ложь;
       Форма.ЭлементыФормы.СправочникСписок.ИзменятьИерархическийПросмотр = ложь;

Вот так получилось все
6 Zoommer
 
12.06.12
05:50
может как-то красивее можно конечно
7 rphosts
 
12.06.12
05:56
точно! ещё и установить нужно!
8 Zoommer
 
12.06.12
20:15
Подскажите еще, пожалуйста, как установить отбор в списке? Для одного значения работает, а как сделать, если надо чтобы несколько значений было?
Не отбирает, показывает все

Процедура ДоговорНачалоВыбора(Элемент, СтандартнаяОбработка)
     СтандартнаяОбработка = Ложь;
     Список1=Новый СписокЗначений;
     Список1.Добавить(Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком);
     Список1.Добавить(Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером);
     ФормаВыбора= Справочники.ДоговорыКонтрагентов.ПолучитьФормуВыбора(,Элемент);
   
     ФормаВыбора.Отбор.ВидДоговора.ВидСравнения = ВидСравнения.ВСписке;
     ФормаВыбора.Отбор.ВидДоговора.Значение = Список1;

      ФормаВыбора.Отбор.Владелец.Установить (Поставщик);
     ФормаВыбора.ОткрытьМодально();
 КонецПроцедуры
9 Zoommer
 
13.06.12
00:47
Все получилось.

А еще вопрос. Если надо сделать отбор по рекзиту тип Дата - показывать только если дата больше или равна текущей или пустая, т.е. не заполнена, то какой вид сравнения делать? Если вСписке, то как список сделать?
10 rphosts
 
13.06.12
03:18
в 8.2 что-бы наложить 2 условия - нужно добаввить группу И а потом условия. Но это в 8.2, в 8.1. возможно этого и нет, проверить можно и по СП, для 8.2:

КоллекцияЭлементовОтбораКомпоновкиДанных (DataCompositionFilterItemCollection)
Добавить (Add)
Синтаксис:
Добавить(<Тип>)
Параметры:
<Тип> (обязательный)
Тип: Тип.
Тип добавляемого элемента. Элементами коллекции могут быть ЭлементОтбораКомпоновкиДанных, ГруппаЭлементовОтбораКомпоновкиДанных.

и т.д. обращаю внимание на тип - там есть группа!