Имя: Пароль:
1C
1С v8
Как установить фильтр при открытии формы списка справочника из документа
,
0 Sharmon
 
06.12.13
16:40
Есть документ. В нем реквизит, который является справочником.
Мне нужно при открытии формы списка этого справочника установить программно фильтры (в зависимости от свойств документа). В какую сторону копать? Т.е. на какое событие повесить установку данных фильтров?
1 Господин ПЖ
 
06.12.13
16:41
надо начать с понимания что за форма... УФ или обычная
2 Sharmon
 
06.12.13
16:41
Раньше использовал "Связь по владельцу". Но сейчас добавились еще реквизиты. А связь по владельцу, так понимаю, работает только с 1 реквизитом
3 Sharmon
 
06.12.13
16:41
(1) Обычная
4 mr_K
 
06.12.13
16:42
(0) в обычной - событие началовыбора. в нем стандартную обработку отключать и открывать форму списка программно
5 Sharmon
 
06.12.13
16:42
(4) спасибо за ответ.
6 Господин ПЖ
 
06.12.13
16:44
ЭтаФорма = Сравочники.Блабла.ПолучитьФорму();
ЭтаФорма.Отбор.ТвойЭлемент.Использование = ИСТИНА;
ЭтаФорма.Отбор.ТвойЭлемент.Значение = ТвоёЗначение;

+ (4)
7 Господин ПЖ
 
06.12.13
16:44
.ПолучитьФорму();

в смысле .ПолучитьФормуСписка(); или там .ПолучитьФормуВыбора();
8 Sharmon
 
06.12.13
16:45
Сделал так:

Процедура СМ_СчетНаОплатуНачалоВыбора(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = ложь;
    ФормаСпр = Справочники.СМ_СчетНаОплатуПоставщика.ПолучитьФормуСписка();
    ФормаСпр.СправочникСписок.Отбор.Владелец.Использование = Истина;
    ФормаСпр.СправочникСписок.Отбор.Владелец.ВидСравнения = ВидСравнения.Равно;
    ФормаСпр.СправочникСписок.Отбор.Владелец.Значение = Контрагент;
    ФормаСпр.ОткрытьМодально();
КонецПроцедуры
9 Михаил Козлов
 
06.12.13
16:52
(8) А модально зачем? Желательно еще в настройках отбора справочника установить недоступность для контрагента.
В типовых можно посмотреть, как договор выбирается по организации и контрагенту.
10 Sharmon
 
06.12.13
16:53
Согласен, можно немодально. Здесь привел текст для примера (вдруг поможет кому). На самом деле у меня разные условия, более сложные.
11 patapum
 
06.12.13
16:54
(8) а еще я думаю, выбрать ничего не получится. владелец формы-то не задан
12 Господин ПЖ
 
06.12.13
16:55
(11) +1
13 Господин ПЖ
 
06.12.13
16:56
ФормаСпр = Справочники.СМ_СчетНаОплатуПоставщика.ПолучитьФормуСписка(, Элемент);
14 Sharmon
 
06.12.13
17:06
(11), (12) - все работает по моему коду, т.е. просто ПолучитьФормуСписка();
15 Sharmon
 
06.12.13
17:07
Вот полный рабочий код:

Процедура СМ_СчетНаОплатуНачалоВыбора(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = ложь;
    ФормаСпр = Справочники.СМ_СчетНаОплатуПоставщика.ПолучитьФормуСписка();
    ФормаСпр.СправочникСписок.Отбор.Владелец.Использование = Истина;
    ФормаСпр.СправочникСписок.Отбор.Владелец.ВидСравнения = ВидСравнения.Равно;
    Если (ВидОперации = Перечисления.ВидыОперацийЗаявкиНаРасходование.ВыдачаДенежныхСредствПодотчетнику) или
         (ВидОперации = Перечисления.ВидыОперацийЗаявкиНаРасходование.РасчетыПоКредитамИЗаймамСРаботниками) тогда
        ФормаСпр.СправочникСписок.Отбор.Владелец.Значение = Получатель;
    иначе
        ФормаСпр.СправочникСписок.Отбор.Владелец.Значение = Контрагент;
    КонецЕсли;    
    
    Если (ВидОперации = Перечисления.ВидыОперацийЗаявкиНаРасходование.ВыдачаДенежныхСредствКассеККМ) или
         (ВидОперации = Перечисления.ВидыОперацийЗаявкиНаРасходование.ПеречислениеНалога) или
         (ВидОперации = Перечисления.ВидыОперацийЗаявкиНаРасходование.ПеречислениеЗП) или
         (ВидОперации = Перечисления.ВидыОперацийЗаявкиНаРасходование.ПрочийРасходДенежныхСредств) тогда
        ФормаСпр.СправочникСписок.Отбор.Владелец.Использование = ложь;
    КонецЕсли;
    ФормаСпр.Открыть();
КонецПроцедуры
16 samozvanec
 
06.12.13
17:23
есть еще СвязиПараметровВыбора