Управляемые формы отбор по реквизиту на форме

Отбор в управляемой форме по реквизиту

Я
   AZLK-TEAM

21.11.13 — 08:08

Привет всем! Возник вопрос по отбору в управляемой форме.

Имеется реквизит. Тип реквизита ПеречислениеСсылка.СтатусыЧековККМ. Нужно чтобы при открытии формыв табличной части не было строк со статусом архивный. Как это сделать? Посоветуйте что нибудь пожалуйста!)

  

Партнерская программа EFSOL Oblako

   Wobland

1 — 21.11.13 — 08:10

   banco

2 — 21.11.13 — 08:15

Расширение таблицы формы для табличных частей.ОтборСтрок (Form table extension for tabular sections.RowFilter)

Расширение таблицы формы для табличных частей (Form table extension for tabular sections)

ОтборСтрок (RowFilter)

Использование:

Чтение и запись.

Описание:

Тип: Неопределено; ФиксированнаяСтруктура.

Позволяет установить отбор по значению колонки.

В качестве ключа используется имя реквизита табличной части, а в качестве значения — значение, по которому осуществляется отбор.

Чтобы снять отбор нужно присвоить свойству либо значение Неопределено, либо пустую ФиксированнаяСтруктура.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.

Изменение свойства на клиенте требует обращения к серверу.

Примечание:

При программном изменении табличной части отбор нужно переустанавливать, чтобы для измененных строк отбор отработал.

   AZLK-TEAM

3 — 21.11.13 — 08:26

&НаКлиенте

Процедура Команда1(Команда)

    ЭО=Документы.ЧекККМ.Форма.ФормаСписка.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;

    ЭО.ЛевоеЗначение=Новый ПолеКомпоновкиДанных(«Архивный»);

    ЭО.ПравоеЗначение=Объект.Организация;

    ЭО.Использование=Истина;

    
    
    ПараметрыФормы = Новый Структура(«ДатаНач»,    НачалоДня(ТекущаяДата()));

    ОткрытьФормуМодально(«Документ.ЧекККМ.Форма.ФормаСписка»,ПараметрыФормы);    

    ОбновитьФорму();

КонецПроцедуры

У меня выдает ошибку. Жалуется на документы, т. к. процедура проходит на клиенте, а к документам то можно обращаться на сервере. А форма у меня находится в документах. Что делать?

   Wobland

4 — 21.11.13 — 08:29

(3) немного сравнить с (0) из (1)

   AZLK-TEAM

5 — 21.11.13 — 08:33

(4) не понимаю(

   Wobland

6 — 21.11.13 — 08:37

вот это: ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

сравнить с этим: ЭО=Документы.ЧекККМ.Форма.ФормаСписка.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

   AZLK-TEAM

7 — 21.11.13 — 08:58

Сравнил. У меня форма то в Документах находится. А в первом случае — сразу форма пишется. В остальном тоже самое.

   Wobland

8 — 21.11.13 — 09:00

   AZLK-TEAM

9 — 21.11.13 — 09:03

Ну я знаю что Документы клиент не знает, поэтому и ошибк пишет. А что делать то? Причем тут открыть формумодально? Открываю то я её позже. Или её сначала открыть надо?

   Wobland

10 — 21.11.13 — 09:04

можно получить, наколдовать отбор, открыть. или тебе в (1) это не видно?

   AZLK-TEAM

11 — 21.11.13 — 09:08

&НаКлиенте

Процедура Команда1(Команда)

    Форма=ПолучитьФорму(«Документ.ЧекККМ.Форма.ФормаСписка»);

    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;

    ЭО.ЛевоеЗначение=Новый ПолеКомпоновкиДанных(«Архивный»);

    ЭО.ПравоеЗначение=Объект.Организация;

    ЭО.Использование=Истина;

    
    
    ПараметрыФормы = Новый Структура(«ДатаНач»,    НачалоДня(ТекущаяДата()));

    ОткрытьФормуМодально(«Документ.ЧекККМ.Форма.ФормаСписка»,ПараметрыФормы);    

    ОбновитьФорму();

КонецПроцедуры

Запускается без ошибок, но отбор не идет. Строки с реквизитом архивный, в табличной части сё равно присутствуют, а их не должно быть.

   Wobland

12 — 21.11.13 — 09:14

а как ты так архивный с организацией сравниваешь?

   AZLK-TEAM

13 — 21.11.13 — 09:21

&НаКлиенте

Процедура Команда1(Команда)

    Форма=ПолучитьФорму(«Документ.ЧекККМ.Форма.ФормаСписка»);

    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;

    ЭО.ЛевоеЗначение=Новый ПолеКомпоновкиДанных(«Архивный»);

    ЭО.ПравоеЗначение=Объект.СтатусЧекаККМ;

    ЭО.Использование=Истина;

    
    
    ПараметрыФормы = Новый Структура(«ДатаНач»,    НачалоДня(ТекущаяДата()));

    ОткрытьФормуМодально(«Документ.ЧекККМ.Форма.ФормаСписка»,ПараметрыФормы);    

    ОбновитьФорму();

КонецПроцедуры

Вот так надо?

   Wobland

14 — 21.11.13 — 09:23

хм.. в прошлый подход хоть запустил проверить..

   AZLK-TEAM

15 — 21.11.13 — 09:28

Выдает ошибку поле объекта не обнаружено (СтатусЧекаККМ)

Нажимаю подробно пишет вот что

{Обработка.РМКУправляемыйРежим.Форма.Форма.Форма(7715)}: Поле объекта не обнаружено (СтатусЧекаККМ)

    ЭО.ПравоеЗначение=Объект.СтатусЧекаККМ;

Почему так?

   AZLK-TEAM

16 — 21.11.13 — 09:36

&НаКлиенте

Процедура Команда1(Команда)

    Форма=ПолучитьФорму(«Документ.ЧекККМ.Форма.ФормаСписка»);

    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;

    ЭО.ЛевоеЗначение=Перечисления.СтатусыЧековККМ.Архивный;

    ЭО.ПравоеЗначение=Перечисления.СтатусыЧековККМ.Архивный;

    ЭО.Использование=Истина;

    
    
    ПараметрыФормы = Новый Структура(«ДатаНач»,    НачалоДня(ТекущаяДата()));

    ОткрытьФормуМодально(«Документ.ЧекККМ.Форма.ФормаСписка»,ПараметрыФормы);    

    ОбновитьФорму();

КонецПроцедуры

Вот! Но теперь ругается на перечисления

   Wobland

17 — 21.11.13 — 09:38

а прикольно А с А сравнивать?

ПредопределенноеЗначение в помощь

   AZLK-TEAM

18 — 21.11.13 — 09:44

&НаСервере

функция перечислил()

Возврат(Перечисления.СтатусыЧековККМ.Архивный);    

    
конецфункции

&НаКлиенте

Процедура Команда1(Команда)

    Форма=ПолучитьФорму(«Документ.ЧекККМ.Форма.ФормаСписка»);

    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

    Архивный=Перечислил();

    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;

    ЭО.ЛевоеЗначение=Архивный;

    ЭО.ПравоеЗначение=Архивный;

    ЭО.Использование=Истина;

    
    ПараметрыФормы = Новый Структура(«ДатаНач»,    НачалоДня(ТекущаяДата()));

    ОткрытьФормуМодально(«Документ.ЧекККМ.Форма.ФормаСписка»,ПараметрыФормы);    

    ОбновитьФорму();

КонецПроцедуры

Что не правильно щас?

   Wobland

19 — 21.11.13 — 09:45

да всё нормально. отбор настроен на всегда истину

   AZLK-TEAM

20 — 21.11.13 — 09:47

Мне надо чтобы Архивный НЕВЫВОДИЛОСЬ. А оно всё равно выводится. Что не правильно?

   ЭО.ЛевоеЗначение=Архивный;

    ЭО.ПравоеЗначение=Архивный;

Это не правильно?

   Wobland

21 — 21.11.13 — 09:48

2=2 всегда?

   Wobland

22 — 21.11.13 — 09:49

Архивный=Ложь

правильно?

   AZLK-TEAM

23 — 21.11.13 — 09:51

Не понимаю. Объясни поконкретнее пожалуйста.

   AZLK-TEAM

24 — 21.11.13 — 10:17

ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;

    ЭО.ЛевоеЗначение=Архивный;

    ЭО.ПравоеЗначение=Архивный;

    ЭО.Использование=Истина;

Что обозначают эти четыре строчки?

особенно вот эти две?

    ЭО.ЛевоеЗначение=Архивный;

    ЭО.ПравоеЗначение=Архивный;

Это интервал какой то или что? Я не могу понять…в хелпе про это не написано. В интернете тоже инфы нету. помогите разобраться плиз.

   Trucker

25 — 21.11.13 — 10:35

(24) Ты сам то, что с чем хочешь сравнить, что бы получился нужный тебе результат?

   Wobland

26 — 21.11.13 — 10:35

сравнение — это бинарная операция. операнды как-то традиционно называют левый и правый. у тебя оба операнда одинаковы. следовательно сравнение всегда даёт истинный результат

   Wobland

27 — 21.11.13 — 10:36

(26) *бинарная функция

   AZLK-TEAM

28 — 21.11.13 — 10:36

Мне надо чтобы не весь список выходил в табличной части, а только те, у которых Статус не равен Архивный. Что с чем сравнить надо для этого?

   AZLK-TEAM

29 — 21.11.13 — 10:37

То есть там где статус Архивный — их выводить не надо вообще. Я не могу понять что с чем сранить надо…

   Trucker

30 — 21.11.13 — 10:39

(28) > у которых Статус не равен Архивный.

Вот это напиши в виде равенства, прям здесь словами.

   Wobland

31 — 21.11.13 — 10:40

разрешаю подглядеть в (22)

   AZLK-TEAM

32 — 21.11.13 — 10:40

Скажу словами. Надо сравнить Статус и Статус.Архивный

То есть если грубо говоря СТатус=Статус.Архивный — не выводить. Правильно мысли идут?

   Wobland

33 — 21.11.13 — 10:41

(32) выводить только те, у которых статус<>архивный

   olegves

34 — 21.11.13 — 10:45

(0) если это всегда так, то лучше не отбором, а произвольным запросом ДС решить, только подзапрос к ТЧ надо будет свернуть до 1 строки, иначе ДС с ума сойдет

   Trucker

35 — 21.11.13 — 10:46

(34) Иш какой шустрый. Погоди, мы тут еще с видами сравнения не разобрались.

   AZLK-TEAM

36 — 21.11.13 — 10:48

&НаСервере

функция перечислил()

Возврат(Перечисления.СтатусыЧековККМ.Архивный);    

    
конецфункции

  &НаСервере

функция перечислил2()

Возврат(Перечисления.СтатусыЧековККМ);    

    
конецфункции

&НаКлиенте

Процедура Команда1(Команда)

    Форма=ПолучитьФорму(«Документ.ЧекККМ.Форма.ФормаСписка»);

    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

    Архивный=Перечислил();

    Архивный2=перечислил2();

    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.НеРавно;

    ЭО.ЛевоеЗначение=Архивный;

    ЭО.ПравоеЗначение=Архивный;

    ЭО.Использование=Истина;

    
    ПараметрыФормы = Новый Структура(«ДатаНач»,    НачалоДня(ТекущаяДата()));

    ОткрытьФормуМодально(«Документ.ЧекККМ.Форма.ФормаСписка»,ПараметрыФормы);    

    ОбновитьФорму();

КонецПроцедуры

Так ведь надо? Запускается без ошибок, но когда нажимаю кнопку открытия формы — выдает ошибку

Обработка.РМКУправляемыйРежим.Форма.Форма.Форма(7722)}: Ошибка при вызове метода контекста (перечислил2)

    Архивный2=перечислил2();

по причине:

Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.

по причине:

Ошибка преобразования данных XDTO:

Запись значения свойства ‘ret’:

    форма: Элемент

    имя: {http://v8.1c.ru/8.2/managed-application/modules}ret

по причине:

Ошибка отображения типов:

Отсутствует отображение для типа ‘ПеречислениеМенеджер.СтатусыЧековККМ’

Что не так опять?

   Wobland

37 — 21.11.13 — 10:50

передаёшь с сервера какую-то хню

   Wobland

38 — 21.11.13 — 10:51

сейчас ты спросишь, как надо, а я буду мерзко хихикать и ждать, когда ты сам найдёшь ответ в этой ветке ;)

   AZLK-TEAM

39 — 21.11.13 — 10:54

ЭО.ПравоеЗначение=Перечисления.СтатусыЧековККМ;

Ну так тоже нельзя. Перечисления на клиенте не работают же. Я попробовал на сервере, тоже не получилось.

   Wobland

40 — 21.11.13 — 10:58

какое следующее простое число после 13? вот там и читай

   Trucker

41 — 21.11.13 — 10:59

(39) ЭО.ПравоеЗначение=Перечисления.СтатусыЧековККМ

и какое значение будет содержать ПравоеЗначение?

Выше уже подсказали как обращаться к перечислению на клиенте.

   AZLK-TEAM

42 — 21.11.13 — 11:01

Какой пост? 17?

ПредопределенноеЗначение в помощь

Это?

   AZLK-TEAM

43 — 21.11.13 — 11:05

&НаКлиенте

Процедура Команда1(Команда)

    Форма=ПолучитьФорму(«Документ.ЧекККМ.Форма.ФормаСписка»);

    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

    Архивный=Перечислил();

    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.НеРавно;

    ЭО.ЛевоеЗначение=Архивный;

    ЭО.ПравоеЗначение=ПредопределенноеЗначение(«Перечисления.СтатусыЧековККМ»);

    ЭО.Использование=Истина;

    
    ПараметрыФормы = Новый Структура(«ДатаНач»,    НачалоДня(ТекущаяДата()));

    ОткрытьФормуМодально(«Документ.ЧекККМ.Форма.ФормаСписка»,ПараметрыФормы);    

    ОбновитьФорму();

КонецПроцедуры

   AZLK-TEAM

44 — 21.11.13 — 11:05

Так? Ну тоже ошибку выдает. Не работает

орма.Форма.Форма(7719)}: Ошибка при вызове метода контекста (ПредопределенноеЗначение)

    ЭО.ПравоеЗначение=ПредопределенноеЗначение(«Перечисления.СтатусыЧековККМ»);

по причине:

Предопределенное значение «Перечисления.СтатусыЧековККМ» не найдено.

   Wobland

45 — 21.11.13 — 11:06

(44) надо боьше читать. там в единственном числе

   Trucker

46 — 21.11.13 — 11:12

(44) Что вас заставило открыть конфигуратор?

   AZLK-TEAM

47 — 21.11.13 — 11:14

{Обработка.РМКУправляемыйРежим.Форма.Форма.Форма(7719)}: Ошибка при вызове метода контекста (ПредопределенноеЗначение)

    ЭО.ПравоеЗначение=ПредопределенноеЗначение(«Перечисление.СтатусыЧековККМ»);

по причине:

Предопределенное значение «Перечисление.СтатусыЧековККМ» не найдено.

Предопределенное значение «Перечисление.СтатусыЧековККМ» не найдено.

Написал в единственном — тоже самое.

   Wobland

48 — 21.11.13 — 11:16

а дай скрин из пофигуратора с таким перечислением

   Wobland

49 — 21.11.13 — 11:16

тьху, плин. какой статус имеется в виду?

   AZLK-TEAM

50 — 21.11.13 — 11:16

&НаКлиенте

Процедура Команда1(Команда)

    Форма=ПолучитьФорму(«Документ.ЧекККМ.Форма.ФормаСписка»);

    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

    Архивный=Перечислил();

    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.НеРавно;

    ЭО.ЛевоеЗначение=Архивный;

    ЭО.ПравоеЗначение=ПредопределенноеЗначение(«Перечисление.СтатусыЧековККМ»);

    ЭО.Использование=Истина;

    
    ПараметрыФормы = Новый Структура(«ДатаНач»,    НачалоДня(ТекущаяДата()));

    ОткрытьФормуМодально(«Документ.ЧекККМ.Форма.ФормаСписка»,ПараметрыФормы);    

    ОбновитьФорму();

КонецПроцедуры

   AZLK-TEAM

51 — 21.11.13 — 11:17

Не работает этот код. Хотя ПеречислениЕ написал. В ед. значении

   AZLK-TEAM

52 — 21.11.13 — 11:18

Ну Помогите пожалуйста, что не так?((((

   Wobland

53 — 21.11.13 — 11:20

(52) какой статус?

   AZLK-TEAM

54 — 21.11.13 — 11:23

Статус — реквизит  в табличной части.

Имеется реквизит. Тип реквизита ПеречислениеСсылка.СтатусыЧековККМ.

Вот какой статус.

   Wobland

55 — 21.11.13 — 11:28

(54) который из статусов?

   AZLK-TEAM

56 — 21.11.13 — 11:31

Я не понимаю вашего вопроса. Можете задать полный вопрос.

я же объяснил:

Статус — реквизит  в табличной части.

Имеется реквизит. Тип реквизита ПеречислениеСсылка.СтатусыЧековККМ.

Статус одни он может быть : архивный, пробитый, отложенный анулированный.

Мне нужно чтобы там где архивный — не выводилось в табличную часть, а выводилось только робитый, отложенный анулированный.

   Trucker

57 — 21.11.13 — 11:35

(56) У ПеречислениеСсылка.СтатусыЧековККМ есть несколько значений, архивный, пробитый, отложенный анулированный.

Какое значение перечисления хранится в  ЭО.ПравоеЗначение= ?

   AZLK-TEAM

58 — 21.11.13 — 11:37

никакого. Там в общем идет. Мы же должны сравнить архивный, со всеми статусами, поэтому я не указал значение. Не правильно что ли?

   bazvan

59 — 21.11.13 — 11:38

Выбрать ВСЕ кроме архивный

   Trucker

60 — 21.11.13 — 11:40

(58) Ну раз никакого, то и результат никакой.

   Wobland

61 — 21.11.13 — 11:41

(58) ты должен сравнить поле в своём списке с каким-то конкретным значением

   AZLK-TEAM

62 — 21.11.13 — 11:54

Я понял. Но как выбрать всё кроме архивный?

Перечисление.СтатусыЧековККМ.ВыбратьВсеКромеАрхивный

Так что ли?

   Wobland

63 — 21.11.13 — 12:01

(62) не равные архивному штоль?

   olegves

64 — 21.11.13 — 12:04

(62) тебе лучше другое занятие подискать — пофигуратор, похоже, не твое

   George Wheels

65 — 21.11.13 — 12:10

Господа, ну хоть по кусочкам подскажите ему.

В (3) ЛевоеЗначение правильное.

   AZLK-TEAM

66 — 21.11.13 — 12:12

&НаСервере

функция перечислил()

Возврат(Перечисления.СтатусыЧековККМ.Архивный);    

    
конецфункции

&НаКлиенте

Процедура Команда1(Команда)

    Форма=ПолучитьФорму(«Документ.ЧекККМ.Форма.ФормаСписка»);

    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

    Архивный=Перечислил();

    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.НеРавно;

    ЭО.ЛевоеЗначение=Новый ПолеКомпоновкиДанных(«СтатусЧекаККМ»);

    ЭО.ПравоеЗначение=Архивный;

    ЭО.Использование=Истина;

    
    ПараметрыФормы = Новый Структура(«ДатаНач»,    НачалоДня(ТекущаяДата()));

    ОткрытьФормуМодально(«Документ.ЧекККМ.Форма.ФормаСписка»,ПараметрыФормы);    

    ОбновитьФорму();

КонецПроцедуры

Вот так сделал. Работает без ошибок, но не отбирает(((

   Wobland

67 — 21.11.13 — 12:16

это всё потому, что отбор ставишь на одной форме, а открываешь другую

   George Wheels

68 — 21.11.13 — 12:16

(66) Подумай, какую форму открываешь? И где же у неё отбор?

   George Wheels

69 — 21.11.13 — 12:24

СП -> Интерфейс (управляемый) -> Управляемая форма -> УправляемаяФорма

   AZLK-TEAM

70 — 21.11.13 — 12:39

&НаСервере

функция перечислил()

Возврат(Перечисления.СтатусыЧековККМ.Архивный);    

    
конецфункции

функция перечислил1()

Возврат(НачалоДня(ТекущаяДата()));    

    
конецфункции

&НаКлиенте

Процедура Команда1(Команда)

    Форма=ПолучитьФорму(«Документ.ЧекККМ.Форма.ФормаСписка»);

    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

    Архивный=Перечислил();

    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.НеРавно;

    ЭО.ЛевоеЗначение=Новый ПолеКомпоновкиДанных(«СтатусЧекаККМ»);

    ЭО.ПравоеЗначение=Архивный;

    ЭО.Использование=Истина;

    
    Дата=перечислил1();

    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.БольшеИлиРавно;

    ЭО.ЛевоеЗначение=Новый ПолеКомпоновкиДанных(«Дата»);

    ЭО.ПравоеЗначение=Дата;

    ЭО.Использование=Истина;

    Форма.ОткрытьМодально();

    
    //ПараметрыФормы = Новый Структура(«ДатаНач»,    НачалоДня(ТекущаяДата()));

    ////ОткрытьФормуМодально(«Документ.ЧекККМ.Форма.ФормаСписка»,ПараметрыФормы);    

    ////ОбновитьФорму();

КонецПроцедуры

Вот как должно быть! Вот так работает. А вы мне голову морочите!)))

Но всё равно спасибо! Без вас бы не справился.

  

Wobland

71 — 21.11.13 — 15:28

воспитание а-ля Шао-Линь работает всё-таки..

В статье будут рассмотрены варианты установки отбора в управляемых формах 1С 8.3. Отбор для динамического списка может быть установлен статически или динамически, в пользовательском интерфейсе или конфигураторе. Все варианты отборов мы рассмотрим ниже.

  • Установка отбора в пользовательском режиме
  • Установка отбора в конфигураторе

    • Фиксированный отбор
    • Динамический (программный) отбор

Установка отбора в пользовательском режиме

Динамический список в отличие от таблицы или дерева значений – более подходящее решение для реализации форм содержащих какие-либо списки, т.к. динамический список предоставляет наиболее широкий набор инструментов для работы с отбором, группировкой полей, сортировкой. Данный отбор можно установить при работе в пользовательском режиме или конфигураторе, принцип одинаков.

Для установки отбора в режиме предприятия необходимо вызвать команду «Настроить список».

Рис.1 Настроить список
Рис.1 Настроить список

 

Откроется окно.

Рис.2 Окно настройки
Рис.2 Окно настройки

 

На вкладке «отбор» представлен список полей, который есть в текущем списке. Выбираем поля списка, по которым будем фильтровать. Сделать это можно двойным кликом или используя drag and drop.

Рис.3 На вкладке «Отбор»
Рис.3 На вкладке «Отбор»

 

Задаем вид сравнения и значение, жмем «Завершить редактирование», отбор установлен.

Отбор также можно группировать по логическим условиям «И», «ИЛИ».

Рис.4 Отбор также можно группировать по логическим условиям «И», «ИЛИ»
Рис.4 Отбор также можно группировать по логическим условиям «И», «ИЛИ»

 

При установке отбора в режиме предприятия на форме списка автоматически создаются поля так называемых быстрых отборов.

Рис.5 Поля быстрых отборов
Рис.5 Поля быстрых отборов

 

Чтобы платформа 1С автоматически создавала поля быстрых отборов, при разработке формы в конфигураторе необходимо указать группу пользовательских настроек.

Рис.6 Группа пользовательских настроек
Рис.6 Группа пользовательских настроек

 

Данный отбор будет сохранен только для текущего пользователя, что позволяет гибко производить кастомизированные настройки динамического списка. Однако если стоит задача сделать фиксированный отбор для определенного списка для всех пользователей системы, ее мы сможем решить только через конфигуратор.

Установка отбора в конфигураторе

Работая в конфигураторе, мы можем устанавливать отбор динамического списка двух видов – фиксированный и динамический. Фиксированный отбор настраивается один раз, динамический или программный – можно устанавливать в зависимости от каких-либо данных в системе.

Фиксированный отбор

Принцип установки фиксированного отбора в конфигураторе не отличается от установки в пользовательском режиме описанном выше. Чтобы установить отбор, мы должны открыть настройки динамического списка.

Рис.7 Фиксированный отбор
Рис.7 Фиксированный отбор

 

Откроется окно.

Рис.8 Окно динамического списка
Рис.8 Окно динамического списка

 

Отбор задается так же, как в пользовательском режиме.

Опция «Включать в пользовательские настройки» определяет, будет ли установленный в конфигураторе отбор доступен в пользовательском режиме через пункт меню «Настроить список».

Рис.9 Настроить список
Рис.9 Настроить список

 

Динамический (программный) отбор

Зачастую возникает необходимость устанавливать отбор программно, например, при открытии формы выбора, когда нам необходимо открыть управляемую форму с отбором. В форму передается параметр и по этому параметру устанавливается отбор. Частый пример этого – отбор элементов справочника по владельцу.

Методы

Если в разрабатываемой конфигурации присутствует подсистема БСП «БазоваяФункциональность», программный отбор в динамическом списке можно установить используя типовой метод:


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

Сигнатура данного метода:

ДинамическийСписок Тип: ДинамическийСписок – Список, в котором требуется установить отбор.

ИмяПоля Тип: Строка – Поле, по которому необходимо установить отбор.

ПравоеЗначение Тип: Произвольный – Значение отбора (Необязательный. Значение по умолчанию: Неопределено. Внимание! Если передать Неопределено, то значение не будет изменено).

ВидСравнения Тип: ВидСравненияКомпоновкиДанных – Условие отбора.

Представление Тип: Строка – Представление элемента компоновки данных (Необязательный. Значение по умолчанию: Неопределено. Если указано, то выводится только флажок использования с указанным представлением (значение не выводится). Для очистки, чтобы значение снова выводилось, следует передать пустую строку).

Использование Тип: Булево – Флажок использования этого отбора (Необязательный. Значение по умолчанию: Неопределено).

РежимОтображения Тип: РежимОтображенияЭлементаНастройкиКомпоновкиДанных – Способ отображения этого отбора пользователю. Возможные значения:

  • РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ – В группе быстрых настроек над списком.
  • РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный – В настройка списка (в подменю Еще).
  • РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный – Запретить пользователю менять этот отбор.

ИдентификаторПользовательскойНастройки Тип: Строка – Уникальный идентификатор этого отбора (Используется для связи с пользовательскими настройками).

Для удаления какого-то значения отбора необходимо воспользоваться типовым методом:


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

Сигнатура данного метода:

ДинамическийСписок Тип: ДинамическийСписок – реквизит формы, для которого требуется установить отбор.

ИмяПоля Тип: Строка – имя поля компоновки (не используется для групп).

Представление Тип: Строка – представление поля компоновки.

В случае отсутствие в системе БСП отбор можно установить самостоятельно, используя объект ПолеКомпоновкиДанных.


	 ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	 ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФИО");
	 ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; 
	 ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ; // Опционально
     ЭлементОтбора.ПравоеЗначение = "Иванов";

Данный отбор отберет строки, в которых значение «ФИО» = «Иванов».

Для использования логических «И», «ИЛИ», «НЕ» предназначен тип данных ГруппаЭлементовОтбораКомпоновкиДанных


	ГруппаОтбора = Список.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
 
	ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФИО");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = "Иванов";
 
	ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФИО");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = "Петров";

Данный отбор отберет строки, в которых значение «ФИО» = «Иванов» или «Петров».

Отбор в динамическом списке также можно производить через изменение текста запроса динамического списка. Этот вариант работает, когда динамический список сделан через «произвольный запрос».

Рис.10 Отбор в динамическом списке
Рис.10 Отбор в динамическом списке

 

Для этого к тексту запроса добавляем условие «ГДЕ Истина»…

Рис.11 Условие «ГДЕ Истина»
Рис.11 Условие «ГДЕ Истина»

 

…в коде:


	Список.ТекстЗапроса = Список.ТекстЗапроса + " И СправочникПользователи.ФИО В(""Иванов"",""Петров"")";

Как видно, такой подход более компактный с точки зрения написания кода. Чем сложнее условия отбора в табличной части мы хотим установить, тем более громоздким будет вариант с использованием отбора через ЭлементОтбораКомпоновкиДанных. Однако у примера с изменением текста запроса есть свои недостатки – эта реализация не устойчива к изменениям кода. Например, вы сделали такую реализацию и забыли, но если в будущем вы захотите модифицировать текст запроса, добавив в него какой-либо оператор после ГДЕ (УПОРЯДОЧИТЬ, СГРУППИРОВАТЬ), вам нужно не забыть про то, что в программном коде есть:


	Список.ТекстЗапроса = Список.ТекстЗапроса + " И СправочникПользователи.ФИО В(""Иванов"",""Петров"")";

Если этого не учесть будет ошибка, но чтобы этого избежать, можно переделать на другую реализацию. В текс запроса добавляем такое условие:

ГДЕ (НЕ &ОтборУстановлен ИЛИ СправочникПользователи.ФИО В (&РазрешенныеФИО))

…в коде:


	Список.Параметры.УстановитьЗначениеПараметра("ОтборУстановлен", ФИО.Количество() > 0);
	Список.Параметры.УстановитьЗначениеПараметра("РазрешенныеФИО", ФИО);

Тут ФИО – массив.

Ка видно, 2 строчки кода против 10. Какой из способов выбрать, зависит от конкретной прикладной задачи.

Как установить отбор в открываемой форме

Содержание[Убрать]

    • Установка отбора в форме при открытии
      • Установка отбора в 8.1 обычное приложение
      • Установка отбора в 8.2, 8.3 тонкий клиент (управляемая форма)
        • Фильтр по одному элементу
        • Как открыть форму выбора с отбором в списке? Как установить выбор групп и элементов?
        • Ещё один вариант открытия формы с отбором в списке для 8.3

Как программно установить отбор в открываемой форме?

Установка отбора в форме при открытии

Установка отбора в 8.1 обычное приложение

Для установки отбора используется свойство «Отбор» у менеджеров списков объектов, например, для открытия списка договоров определенного контрагента можно написать следующий код:

ФормаВыбора = Справочники.ДоговорыКонтрагентов.ПолучитьФормуВыбора("ФормаВыбора", ЭтаФорма, "ФормаВыбораДоговора");
ФормаВыбора.Отбор.Владелец.Значение = КонтрагентСсылка;
ФормаВыбора.Отбор.Владелец.Использование = ИСТИНА;
ФормаВыбора.ОткрытьМодально();

В данном случае мы применили вид сравнения «Равно«, но не указывали его т.к. оно стоит по умолчанию. Используя разные значения вида сравнения мы значительно расширяем возможности.

Например, у нас в базе контрагент является и продавцом и покупателем, при этом договоры находятся в соответствующей группе внутри справочника. Поэтому мы сделаем отбор не только на самого контрагента, но и на группу «Группа Покупатели» в которой находится договор:


ФормаВыбора = Справочники.ДоговорыКонтрагентов.ПолучитьФормуВыбора("ФормаВыбора", ЭтаФорма, "ФормаВыбораДоговора");
ФормаВыбора.Отбор.Владелец.Значение = КонтрагентСсылка;
ФормаВыбора.Отбор.Владелец.Использование = ИСТИНА;

ГруппаПокупатели = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Группа Покупатели");
ФормаВыбора.Отбор.Родитель.ВидСравнения = ВидСравнения.ВИерархии;
ФормаВыбора.Отбор.Родитель.Значение = ГруппаПокупатели;
ФормаВыбора.Отбор.Родитель.Использование = ИСТИНА;
ФормаВыбора.ОткрытьМодально();

Установка отбора в 8.2, 8.3 тонкий клиент (управляемая форма)

Фильтр по одному элементу

&НаКлиенте
Процедура СписокДоговорНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

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

    ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаВыбора",ПараметрыВыбора, Элемент); // здесь передан Элемент, чтобы выбранное значение попало в поле

КонецПроцедуры

Как открыть форму выбора с отбором в списке? Как установить выбор групп и элементов?

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

    НастройкиКомп = Новый НастройкиКомпоновкиДанных;
	
    ОтборСписка = НастройкиКомп.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборСписка.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
    ОтборСписка.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    ОтборСписка.ПравоеЗначение = СЗДоговоров;
    ОтборСписка.Использование = Истина;
	
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ФиксированныеНастройки", НастройкиКомп);
    ПараметрыФормы.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы); // Здесь устанавливается возможность выбора не только элементов, но групп
	
    ОткрытьФорму("Справочник.ДоговорыКонтрагентов.Форма.ФормаВыбора", ПараметрыФормы, Элемент);

КонецПроцедуры

Ещё один вариант открытия формы с отбором в списке для 8.3

Ниже текст процедуры открытия формы для команды объекта 

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
СписокПокупателей = ПолучитьСписокПокупателей(); 
Отбор = Новый Структура;
Отбор.Вставить("Ссылка", СписокПокупателей );
ПараметрыФормы.Вставить("Отбор", Отбор);
ОткрытьФорму("Справочник.Контрагенты.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедуры

Недостаточно прав для комментирования

Содержание:

1.      Элементарные способы установления отбора управляемой формы 1С 8.3

2.      Настройка списка 1С

3.      Автоматическое формирование отборов управляемой формы 1С по заданным критериям (Группы сотрудников)

4.      Нетривиальный пример из практики (отбор с использованием дополнительных реквизитов в 1С 8.3) 

1.       Элементарные способы установления отбора управляемой формы 1С 8.3

Во всех конфигурациях 1С для упрощения поиска информации в списках существует механизм установления отбора управляемой формы 1С 8.3. Речь идет о списках таких объектов как справочники (форма списка справочника), табличные части документов (например, в табличной части Накладной на отгрузку товара для облегчения поиска мы можем для начала ограничить список, установив отбор на управляемых формах по конкретной номенклатуре), форме выбора справочника. 

            Самым примитивным способом установления отбора является такой. Устанавливаем курсор на поле, по которому хотим отобрать значения и начинаем набирать необходимое наименование.

Рисунок 1

Либо по кнопке «Еще» находим поле «Найти» или «Расширенный отбор» и вводим в это поле искомое значение отбора.

Рисунок 2

Рисунок 3  

2.       Настройка списка 1С

            Более сложным и более эффективным способом отбора является «Настройка списка» 1С.

Вызывается так же по кнопке «Еще» — Настроить список

Рисунок 4

            В открывшейся форме «Настройка списка» 1С переходим на закладку «Отборы». Теперь при помощи доступных для отбора полей, расположенных слева, перенеся их вправо и установив значения отбора, сможем изменить вид нашего списка, для облегчения поиска нужных значений среди меньшего количества строк

Рисунок 5

В данной форме можно задавать от одного до бесконечности (ограниченного только количеством доступных полей) критериев отбора. Так же можно группировать условия. Например, отбор по сотрудникам, не являющимся договорниками и дата увольнения которых не заполнена (Группа И)

Рисунок 6

После нажатия на кнопку «Завершить редактирование» отбор вступает в силу и изменяет список значений табличной части. Одновременно критерии отбора автоматически помещаются в шапку списка (устанавливаются так называемые «быстрые отборы»), которыми можно пользоваться далее, не обращаясь вновь к Настройке списка.

Рисунок 7

            Поля в отборе можно переименовать. Для этого нужно правой кнопкой мыши в форме настройки отбора кликнуть по нужному полю, выбрать «Свойства элемента пользовательских настроек» 1С

Рисунок 8

Изменить наименование поля отбора, а так же определить порядок при изменения отбора – в быстром доступе (в шапке формы списка), либо только в настройке – обычный режим редактирования, либо сделать изменение значения отбора недоступным для пользователя – недоступный.

Рисунок 9

По завершении редактирования получим в быстрых отборах такую картину

Рисунок 10  

3.       Автоматическое формирование отборов управляемой формы 1С по заданным критериям (Группы сотрудников)

Особое место в настройке отборов управляемой формы 1С занимает автоматическая настройка критериев отбора в справочнике «Группы сотрудников». Здесь заданные однажды критерии отбора будут работать постоянно. То есть при изменении состава справочника «Сотрудники» группы отбора будут формироваться автоматически и поддерживать списки отобранных в группе сотрудников в актуальном состоянии.

Например, разобьем сотрудников на возрастные группы. Для этого изменим отображение списка сотрудников, выбрав вид списка «по группам»

Рисунок 11

Перейдем к справочнику Группы сотрудников в разделе Настройка – Предприятие- Группы сотрудников. Создадим новую группу. Зададим ей наименование «Младше 30 лет» и установим критерии отбора соответствующей кнопкой открыв настройку и перенеся поле возраст вправо, зададим ему значение «меньше или равно 30»

Рисунок 12

Аналогично добавим группы «Меньше 40 лет», сгруппировав два условия «меньше или равно 40 лет» и «больше 30 лет»

Рисунок 13

«Меньше 50 лет» (больше 40 лет) и «Больше 50 лет»

Рисунок 14  

4.      Нетривиальный пример из практики (отбор с использованием дополнительных реквизитов в 1С 8.3)

Рассмотрим еще один не тривиальный пример установки отбора из реальной практики. Хотя и не совсем обычный, но он ярко демонстрирует возможности системы в части настроек автоматического отбора.

От клиента поступил запрос. При заполнении Табеля учета рабочего времени сотрудников, необходимо отбирать сотрудников по подчиненности руководителю проекта, который номинально может не являться руководителем подразделения. Одним из предложенных вариантов был следующим.

Настроить список сотрудников таким образом, чтобы нужные для отбора в табель сотрудники находились в одной группе.

Первое, что мы сделаем – настроим список сотрудников таким образом, чтобы он разделялся по группам.

Для этого перейдем к справочнику Сотрудники 1С. Откроем его форму списка и выберем вид списка «По группам»

Рисунок 15

Пока список групп в нашей базе пуст.

Так как руководители проектов не обязательно являются ответственными лицами Организации, воспользуемся механизмом дополнительных свойств и категорий, для того, чтобы прикрепить каждого сотрудника к его руководителю.

Для этого изначально перейдем в раздел Администрирование – Общие настройки – Дополнительные реквизиты и сведения

Рисунок 16

Установим галочку «Дополнительные реквизиты и сведения» и перейдем к Дополнительным реквизитам.

Рисунок 17

Для справочника «Сотрудники» добавим новое значение «Руководитель проекта» типа «Сотрудники». В качестве объекта выбираем слева справочник «Сотрудники» и кнопкой «Создать» добавляем новый вид дополнительного реквизита

Рисунок 18

В качестве Наименования заполняем «Руководитель проекта», тип значения выбираем «Сотрудник», ставим галочку «Выводить в виде гиперссылки»

Рисунок 19

Для более полной информативности можно заполнить поля «Всплывающая подсказка» и «Комментарий». Можем поставить галку «Заполнять обязательно» при необходимости.

Рисунок 20

Запишем вновь созданный дополнительный реквизит.

Теперь нам необходимо каждому сотруднику в карточке сотрудника прописать руководителя проекта в котором он работает.

Открываем справочник «Сотрудники» , и в появившемся в карточке поле «Руководитель проекта» выбираем необходимого сотрудника, записываем карточку.

Рисунок 21

Пусть у части сотрудников руководителем является Габровская Светлана Марковна, у остальных Мартынюк Олег Егорович.

Теперь создадим группы сотрудников в одноименном справочнике. Для этого в разделе Настройки – Предприятие находим справочник Группы сотрудников и создаем столько новых элементов, сколько руководителей проектов существует в Организации.

Рисунок 22

По кнопке «Создать» добавляем новый элемент справочника, в наименовании которого прописываем ФИО руководителя проекта, ставим галочку «Формировать автоматически» и переходим по кнопке «Настроить критерии отбора» к настройке правил формирования групп сотрудников.

Рисунок 23

В критериях отбора в подразделе Работа находим поле Сотрудник – Дополнительные реквизиты – Значение и переносим это поле в правую часть таблицы, выбираем значением этого поля поле Сотрудник.

Рисунок 24

И выбираем соответствующего названию группы руководителя

Рисунок 25

После нажатия на кнопку «ОК» табличная часть заполняется нужными сотрудниками

Рисунок 26

Аналогично создаем группу Мартынюк О.Е.

Рисунок 27

Теперь, если мы вернемся к справочнику «Сотрудники», мы увидим слева наши группы, справа сотрудников, принадлежащих соответствующей группе.

Рисунок 28

И на последнем этапе нашей настройки создадим документ «Табель учета рабочего времени» и попробуем подобрать в него сотрудников.

Рисунок 29

В открывшемся списке сотрудников так же изменим его вид, выбрав отображение списка «по группам»

Рисунок 30

Наш список примет вид:

Рисунок 31

То есть мы видим только необходимых нам сотрудников. Комбинацией клавиш «Ctrl+A» можно выбрать всех сотрудников данной группы и заполнить ими табличную часть табеля.

Рисунок 32

Специалист компании ООО «Кодерлайн»
Елена Бурханова

Как сделать отбор по реквизиту формы в управляемой форме???

Автор Viktorka, 06 апр 2012, 10:32

0 Пользователей и 1 гость просматривают эту тему.

У меня есть журнал документов (в него входят 3 документа), создана управляемая форма списка, с реквизитом Ответственный (тип СправочникСсылка.Пользователи), как сделать фильтр по реквизиту Ответственный.


Поиск в форме списка работает как отбор.

Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.


Можно динамический список сделать.


Я сделала динамический список.
Когда нажимаю отбор — открывается форма редактирования отбора, и слева выводится список Доступных полей. Как мне сделать его невидимым. Моей целью является отбор только по реквизиту «ответственный», и ещё как при нажатии на кнопку «Отбор» (который выводит форму редактирования отбора) данные о старом отборе очищались?????


Динамический список запросом я имел ввиду. И по нажатию кнопки устанавливать параметры. Как-то так. Хотя мож че подзабыл.


Цитата: Viktorka от 06 апр 2012, 14:07
Я сделала динамический список.
Когда нажимаю отбор — открывается форма редактирования отбора, и слева выводится список Доступных полей. Как мне сделать его невидимым. Моей целью является отбор только по реквизиту «ответственный», и ещё как при нажатии на кнопку «Отбор» (который выводит форму редактирования отбора) данные о старом отборе очищались?????

кинуть на форму сверху списка поле для выбора Ответственного и обрабатывать отбор программно, а вышеупомянутую кнопку — спрятать…

Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.


Цитата: cska-fanat-kz от 06 апр 2012, 14:21

Цитата: Viktorka от 06 апр 2012, 14:07
Я сделала динамический список.
Когда нажимаю отбор — открывается форма редактирования отбора, и слева выводится список Доступных полей. Как мне сделать его невидимым. Моей целью является отбор только по реквизиту «ответственный», и ещё как при нажатии на кнопку «Отбор» (который выводит форму редактирования отбора) данные о старом отборе очищались?????

кинуть на форму сверху списка поле для выбора Ответственного и обрабатывать отбор программно, а вышеупомянутую кнопку — спрятать…

Не получается,  Это Форма журнала документов, и если «путь к данным» реквизита ответственный выбрать «Элементы.Список.ТекущиеДанные.Ответственный», то в поле отображается ФИО ответственного для выбранной строки табличной части, а выбрать не получается. Свойства тип для реквизитов нет, только путь к данным.
Я поставила «путь к данным» — список.отбор. и всё бы хорошо, только вот убрать бы доступные поля


Получилось!!!
Из-за маленького опыта сразу не сообразила. Когда добавляла реквизит «Ответственный» на форму, выбирала из списка, а следовала просто добавить новый реквизит с типом «СправочникСсылка.Пользователи», кинуть на форму. В молуле формы написать:

&НаКлиенте
Процедура Ответственный2ПриИзменении(Элемент)
   ТекОтбор = Список.Отбор.Элементы;

   ТекОтбор.Очистить();
   УсловиеОтбора = ТекОтбор.Добавить(тип(«ЭлементОтбораКомпоновкиДанных»));
   УсловиеОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«Ответственный»);
   УсловиеОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
   УсловиеОтбора.ПравоеЗначение = Ответственный2;
КонецПроцедуры


Форма выбора открывается при нажатии на кнопку выбора у элемента формы. Если требуется наложить отборы на выбираемые значения или открыть другую форму, то необходимо использовать событие элемента формы НачалоВыбора.

Процедура для обычного приложения

Процедура СобытиеНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка

= Ложь;

ФормаВыбора

= Документы.Документ1.ПолучитьФормуВыбора(, Элемент);
ФормаВыбора.Отбор.Реквизит1.ВидСравнения = ВидСравнения.Равно;
ФормаВыбора.Отбор.Реквизит1.Значение = "Значение";
ФормаВыбора.Отбор.Реквизит1.Использование = Истина;//Чтобы этот отбор был доступен для изменения
ФормаВыбора.ЭлементыФормы.ДокументСписок.НастройкаОтбора.Реквизит1.Доступность = Истина;

ФормаВыбора

.Открыть();КонецПроцедуры

Процедуры для управляемого приложения

Настройка отборов с использованием объекта НастройкиКомпоновкиДанных. Есть возможность задать вид сравнения, доступность элементов отбора для редактирования и т.д.

&НаКлиенте
Процедура СобытиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

СтандартнаяОбработка

= Ложь;

Настройки

= Новый НастройкиКомпоновкиДанных;

Элемент

= Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.Использование = Истина;
Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Реквизит1");
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = "Значение";
Элемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;

ПараметрыФормы

= Новый Структура;
ПараметрыФормы.Вставить("ФиксированныеНастройки", Настройки);

ОткрытьФорму

("Документ.Документ1.ФормаВыбора", ПараметрыФормы, Элементы.Реквизит1);КонецПроцедуры

Настройка отборов с использованием структуры. Это более простой вариант открытия формы выбора с установленными отборами. В этом варианте некоторые настройки недоступны.

&НаКлиенте
Процедура СобытиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

СтандартнаяОбработка

= Ложь;

ПараметрыФормы

= Новый Структура;

Отборы

= Новый Структура;
Отборы.Вставить("Реквизит1", "Значение");
Отборы.Вставить("Реквизит2", "Значение");
Отборы.Вставить("Реквизит3", "Значение");

ПараметрыФормы

.Вставить("Отбор", Отборы);

ОткрытьФорму

("Документ.Документ1.ФормаВыбора", ПараметрыФормы, Элементы.Реквизит1);КонецПроцедуры

Рассмотрим различные варианты установки отбора при выборе объекта на документе ДокументОтборПриемаТовара. У документа имеются следующие реквизиты (см. рисунок 1):

  • ПоставщикОтбор (тип СправочникСсылка.Поставщики);
  • ТоварОтбор (тип СправочникСсылка.Товары);
  • ОтветственныйОтбор (тип СправочникСсылка.Ответственный);
  • ПриемТовара (тип ДокументСсылка.ПриемТовара).
Рисунок 1. Структура документа ДокументОтборПриемаТовара

Выбирать будем документ ПриемТовара, а отбор в форме выбора будет устанавливаться по реквизитам с постфиксом Отбор.

Документ ПриемТовара имеет реквизиты (см. рисунок 2):

  • Поставщик (тип СправочникСсылка.Поставщики);
  • Ответственный (тип СправочникСсылка.Ответственный);
  • Комментарий (Тип Строка).

А так же табличную часть Товары, состоящую из реквизитов Товар (тип СправочникСсылка.Товары) и Количество (тип Число).

Рисунок 2. Структура документа ПриемТовара

1. Установка отбора в свойствах реквизита объекта метаданных

Самый простой вариант отбора. Нужно всего лишь в свойствах реквизита «Связи параметров выбора»  и «Параметры выбора» задать параметры выбора. Допустим, при выборе документа ПриемТовара, нужно в форме выбора показывать документы отобранные по поставщику и только проведенные. Для этого в связях параметров выбора задаем отбор по поставщику, а в параметрах выбора отбор только проведенных документов (см. рисунок 3).

Рисунок 3. Отбор в свойствах реквизита объекта метаданных

Больше ничего делать не нужно, платформа сама завернет указанные параметры выбора в структуру (см. рисунок 4) и поместит её в параметр Отбор формы выбора, далее, анализируя данный параметр формы, платформа устанавливает отборы для динамического списка.

Рисунок 6. Значение параметра формы выбора Отбор

2. Установка отбора в свойствах элемента формы

Такой же простой вариант как и первый, только те же самые свойства задаются для элемента формы (см. рисунок 5).

Рисунок 5. Отбор в свойствах элемента формы

Свойства элемента формы имеют приоритет над свойствами реквизита объекта.

3. Установка собственного отбора при создании формы выбора на сервере

Усложним задачу и будем производить отбор документов по табличной части, а конкретно по товару в ней. Для этого в связях параметров выбора зададим связь, где параметр будет Товар (прям ручками пишем), а реквизит ТоварОтбор (см. рисунок 6).

Рисунок 6. Связь параметра Товар с реквизитом ТоварОтбор

Именно такую задаем связь, так как более одной точки(.) в колонке Имя при написании параметра мы не можем использовать (платформенное ограничение), то есть написать «Отбор.Товары.Товар» мы не сможем.
Так как имя параметра мы задали вручную, то платформа его не поместит в параметр Отбор формы выбора, поэтому в форме выбора документа ПриемТовара в обработчике события ПриСозданииНаСервере напишем программный код, который будет обрабатывать наш параметр Товар и устанавливать отбор по реквизиту табличной части:

  
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Товар = Неопределено;
ЭтотОбъект.Параметры.Свойство("Товар", Товар);
Если Товар <> Неопределено Тогда
ФиксОтбор = ЭтотОбъект.Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор;
ЭлементОтбора = ФиксОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Товары.Товар");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Товар;
ЭлементОтбора.Использование = Истина;
КонецЕсли;

КонецПроцедуры

4. Программная установка параметров выбора

Так как у элемента формы есть свойства СвязиПараметровВыбора и ПараметрыВыбора, и они доступны не только для чтения, но и на запись, то все что описано выше можно выполнить с помощью программного кода. Для этого в форме документа ДокументОтборПриемаТовара в событии ПриСозданииНаСервере напишем код, который будет формировать массив связей параметров и параметров выбора, и устанавливать их в соответствующие свойства элемента формы ПриемТовара, который связан с реквизитом объекта ПриемТовара:

  
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

// Создаем связи параметров выбора.
МассивСвязей = Новый Массив;
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Поставщик", "Объект.ПоставщикОтбор");
МассивСвязей.Добавить(НоваяСвязь);
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Ответственный", "Объект.ОтветственныйОтбор");
МассивСвязей.Добавить(НоваяСвязь);
НоваяСвязь = Новый СвязьПараметраВыбора("Товар", "Объект.ТоварОтбор");
МассивСвязей.Добавить(НоваяСвязь);

// Создаем параметры выбора.
МассивПараметров = Новый Массив;
НовыйПараметр = Новый ПараметрВыбора("Отбор.Проведен", Истина);
МассивПараметров.Добавить(НовыйПараметр);

// Устанавливаем связи параметров и параметры выбора для элемента формы.
Элементы.ПриемТовара.СвязиПараметровВыбора = Новый ФиксированныйМассив(МассивСвязей);
Элементы.ПриемТовара.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);

КонецПроцедуры

Для корректной работы отборов необходимо создать событие ПриСозданииНаСервере с таким же программным кодом как в варианте №3 у формы выбора документа ПриемТовара.

5. Установка параметров выбора в момент начала выбора

Этот вариант позволяет «на лету» устанавливать параметры выбора. Усложним задачу и будем устанавливать отбор только по заполненным реквизитам отбора.
В модуле формы документа ДокументОтборПриемаТовара в событии НачалоВыбора для элемента ПриемТовара, который связан с реквизитом объекта ПриемТовара, напишем код, который будет устанавливать параметры выбора в зависимости от заполненности реквизитов отбора:

  
&НаКлиенте
Процедура ПриемТовараНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

МассивПараметров = Новый Массив;
Если ЗначениеЗаполнено(Объект.ПоставщикОтбор) Тогда
НовыйПараметр = Новый ПараметрВыбора("Отбор.Поставщик", Объект.ПоставщикОтбор);
МассивПараметров.Добавить(НовыйПараметр);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ОтветственныйОтбор) Тогда
НовыйПараметр = Новый ПараметрВыбора("Отбор.Ответственный", Объект.ОтветственныйОтбор);
МассивПараметров.Добавить(НовыйПараметр);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ТоварОтбор) Тогда
НовыйПараметр = Новый ПараметрВыбора("Товар", Объект.ТоварОтбор);
МассивПараметров.Добавить(НовыйПараметр);
КонецЕсли;
НовыйПараметр = Новый ПараметрВыбора("Отбор.Проведен", Истина);
МассивПараметров.Добавить(НовыйПараметр);
Элементы.ПриемТовара.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);

КонецПроцедуры

Для корректной работы отборов необходимо создать событие ПриСозданииНаСервере с таким же программным кодом как в варианте №3 у формы выбора документа ПриемТовара.

6. Открытие формы выбора с установленным параметром формы Отбор в момент начала выбора

Данный способ отличается от предыдущего тем, что мы отменяем стандартную обработку события НачалоВыбора, сами формируем параметр формы Отбор, передаем его в открываемую форму выбора с указанием владельца формы, то есть все делаем за платформу. Обратите внимание, что в данном случае нам не нужно обходить ограничение платформы (больше одной точки в имени параметра), что бы установить отбор по товару в табличной части, достаточно указать параметр отбора Товары типа Структура, в котором ключом будет имя колонки «Товар», а значение ссылка на товар.

  
&НаКлиенте
Процедура ПриемТовараНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;

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

КонецПроцедуры

Отборы на динамический список платформа наложит сама, писать дополнительно код больше не нужно, как в варианте №3.

А что будет, если отбор в связях параметров выбора и параметры выбора пересекаются?

Как показал мой эксперимент, страшного ничего не случится, платформа установит отбор по связям параметров выбора.

Понравилась статья? Поделить с друзьями:
  • Управляющая компания а101 комфорт скандинавия
  • Управляющая компания а101 скандинавия телефон
  • Управляющая компания адмирала черокова 18 к 1
  • Управляющая компания азбука уюта химки отзывы
  • Управляющая компания альянс петергоф парковая