Имя: Пароль:
1C
1С v8
Как открыть форму списка с включенным отбором?
0 Sky69
 
05.03.13
11:20
Пытаюсь открыть форму списка спр. "КатегорииОбъектов", при этом нужно,чтобы список открывался отфильтрованным по полю "НазначениеКатегории". Значение беру из другого списка "ПланВидовХарактеристикСсылка.НазначенияСвойствКатегорийОбъектов", присваиваю его переменной ПолеВвода2.Ссылка. Процедура некорректно работает. Мелькает отфильтрованный список, потом появляется полный список значений. как это исправить?

Процедура ПолеВвода3НачалоВыбора(Элемент, СтандартнаяОбработка)
       СтандартнаяОбработка = Ложь;
       СсылкаНазначения = ПолеВвода2.Ссылка;
           Если Не СсылкаНазначения.Пустая() Тогда
               ФормаПодчиненныхДоговоров = Справочники.КатегорииОбъектов.ПолучитьФормуСписка();
               ФормаПодчиненныхДоговоров.СправочникСписок.Отбор.НазначениеКатегории.Установить(СсылкаНазначения, истина);
               
               ФормаПодчиненныхДоговоров.Открыть();
               
           КонецЕсли;
   КонецПроцедуры
1 ОбычныйЧеловек
 
05.03.13
11:21
Поменяй местами:
               ФормаПодчиненныхДоговоров = Справочники.КатегорииОбъектов.ПолучитьФормуСписка();
               ФормаПодчиненныхДоговоров.Открыть();                ФормаПодчиненныхДоговоров.СправочникСписок.Отбор.НазначениеКатегории.Установить(СсылкаНазначения, истина);
2 Sky69
 
05.03.13
11:25
(1) не сработало
3 Sky69
 
05.03.13
11:26
такое ощущение,что фильтр включается и сразу отключается
4 Тролль главный
 
05.03.13
11:26
думаю есть еще код в самой открываемой форме, надо его смотреть
5 ОбычныйЧеловек
 
05.03.13
11:26
(2) Не верю (с)
6 CepeLLlka
 
05.03.13
11:27
Пользователь = ПараметрыСеанса.ТекущийПользователь;
   //Уставка отбора по владельцу если Роль текущего пользователя = Бухгалтер.
   //Если РольДоступна("Бухгалтер") Тогда
   //    СвязьВыбораАвтор = Новый СвязьПараметраВыбора("Отбор.Владелец", "Пользователь");
   //    НовыйМассив = Новый Массив();
   //    НовыйМассив.Добавить(СвязьВыбораАвтор);
   //    ФиксМассивСвязьАвтор = Новый ФиксированныйМассив(НовыйМассив);
   //    Элементы.ОтборОрганизация.СвязиПараметровВыбора = ФиксМассивСвязьАвтор;
7 CepeLLlka
 
05.03.13
11:28
Первый раз плохо получилось.. повторю..


   Пользователь = ПараметрыСеанса.ТекущийПользователь;
   Уставка отбора по владельцу если Роль текущего пользователя = Бухгалтер.
   Если РольДоступна("Бухгалтер") Тогда
       СвязьВыбораАвтор = Новый СвязьПараметраВыбора("Отбор.Владелец", "Пользователь");
       НовыйМассив = Новый Массив();
       НовыйМассив.Добавить(СвязьВыбораАвтор);
       ФиксМассивСвязьАвтор = Новый ФиксированныйМассив(НовыйМассив);
       Элементы.ОтборОрганизация.СвязиПараметровВыбора = ФиксМассивСвязьАвтор;
8 ОбычныйЧеловек
 
05.03.13
11:33
Sky69 так отбор же у тебя должен идти по текущей строке формы списка...логично, что он у тебя отключается...
9 Sky69
 
05.03.13
11:34
(7) дело в том, что задача стоит открыть отфильтрованную форму, а не просто список значений получить.
10 Sky69
 
05.03.13
11:34
(8) как это?
11 ОбычныйЧеловек
 
05.03.13
11:36
(10) найди в форме открываемого справочнике код:
Отбор.НазначениеКатегории.Установить(....

и посмотри из какой процедуры он вызывается - скорее всего и процедуры .....ПриАктивизацииСтроки(
12 ОбычныйЧеловек
 
05.03.13
11:36
+11 скорее всего ИЗ процедуры
13 Sky69
 
05.03.13
11:38
(12) есть такая процедура.
Процедура СписокНазначенияСвойствКатегорийОбъектовПриАктивизацииСтроки(Элемент)

   СправочникСписок.Отбор.НазначениеКатегории.Установить(Элемент.ТекущаяСтрока);

КонецПроцедуры
14 Sky69
 
05.03.13
11:39
(12) ее надо как то обойти или отключить?
15 ОбычныйЧеловек
 
05.03.13
11:40
(14)спозиционируйся на том элементе по которую ставишь отбор
16 Sky69
 
05.03.13
11:40
я почему то думала, если поставить  СтандартнаяОбработка = Ложь; тогда она отключается.
17 Odavid
 
05.03.13
11:41
Вообще - фильтр на форму ставится в ПриОткрытии (ПередОткрытием).
Но вы продолжайте, продолжайте :)
18 notebug
 
05.03.13
11:45
(16) стандартнаяобработка = Ложь будет еще подразумевать, что вам нужно будет в поле ввода вернуть выбранное значение.

Вот эти три строчки кода успешно отрабатывают:
   Если НЕ ЗначениеЗаполнено(Назначение) Тогда
       Возврат;
   КонецЕсли;
   
   СтандартнаяОбработка = Ложь;
   
   ФормаВыбора = Справочники.КатегорииОбъектов.ПолучитьФормуВыбора();
   Отбор = ФормаВыбора.СправочникСписок.Отбор;
   Отбор.НазначениеКатегории.Установить(Назначение, Истина);
   
   ФормаВыбора.Открыть();

Мое мнение - открывать форму модально и возвращать результат :
Категории = ФормаВыбора.ОткрытьМодально();
19 ОбычныйЧеловек
 
05.03.13
11:48
(16) как-то так:
   ФормаПодчиненныхДоговоров=Справочники.КатегорииОбъектов.ПолучитьФормуСписка();
   ФормаПодчиненныхДоговоров.Открыть();
   ФормаПодчиненныхДоговоров.ЭлементыФормы.СписокНазначенияСвойствКатегорийОбъектов.ТекущаяСтрока=СсылкаНазначения;
20 Odavid
 
05.03.13
11:52
(19) это вы так в 1С на строчку "спозиционировались"? :)
21 ОбычныйЧеловек
 
05.03.13
11:57
(20) ага спозиционировался :) какая задача - такое и решение.
22 notebug
 
05.03.13
12:02
нет ничего проще, чем
ОткрываемаяФорма.ЭлементыФормы.СправочникСписок.ВосстанавливатьТекущуюСтроку = Истина;

ОткрываемаяФорма.ОткрытьМодально();
23 notebug
 
05.03.13
12:03
(0) в чем проблема вообще? открыть отфильтрованный список? спозиционироваться при повторном открытии? так и запутать недолго...
24 Sky69
 
05.03.13
13:17
(18) спасибо
25 Sky69
 
05.03.13
13:29
я оставила только эту часть, но из формы выбора не выбираются значения.
СсылкаНазначения = ПолеВвода2.Ссылка;
   Если НЕ ЗначениеЗаполнено(СсылкаНазначения) Тогда
       Возврат;
   КонецЕсли;
   СтандартнаяОбработка = Ложь;
   ФормаВыбора = Справочники.КатегорииОбъектов.ПолучитьФормуВыбора();
   Отбор = ФормаВыбора.СправочникСписок.Отбор;
   Отбор.НазначениеКатегории.Установить(СсылкаНазначения, Истина);
   ФормаВыбора.Открыть();
26 Sky69
 
05.03.13
13:32
все сделала
27 Sky69
 
05.03.13
16:10
что то косяк вылезает. не дает он все таки выбрать элемент списка, видимо из-за того,что СтандартнаяОбработка = Ложь;
28 notebug
 
06.03.13
11:08
(27) открывайте форму модально и возвращайте выбранный вариант
Например:
НазваниеВашегоРеквизитаКатегория = ФормаВыбора.ОткрытьМодально();
Программист всегда исправляет последнюю ошибку.