1с скд как найти элемент отбора

Поиск по элементам коллекции набора данных СКД

Я
   Leksus

16.09.11 — 14:11

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

необходимо в настройках СКД программно найти и установить поле отбора.

Как это эффективно решать?

У элементов коллекции набора данных СКД нет метода Найти()

Есть возможность получить по индексу, но как получить индекс необходимого элемента?

   also

1 — 16.09.11 — 14:21

Перебор

   Leksus

2 — 16.09.11 — 14:37

(1) печально :(

   chingiz

3 — 16.09.11 — 15:24

КоллекцияЭлементовОтбораКомпоновкиДанных (DataCompositionFilterItemCollection)

Индекс (IndexOf)

Синтаксис:

Индекс(<Элемент>)

Параметры:

<Элемент> (обязательный)

Тип: ЭлементОтбораКомпоновкиДанных; ГруппаЭлементовОтбораКомпоновкиДанных. Элемент, индекс которого определяется.

Возвращаемое значение:

Тип: Число.

Описание:

Получает индекс элемента в коллекции.

   Axel2009

4 — 16.09.11 — 15:35

(3) особенно если надо найти по имени

   chingiz

5 — 16.09.11 — 15:36

   chingiz

6 — 16.09.11 — 15:37

Сам сейчас сижу над подобным. Только не с отбором, а с выбором 8)

   Axel2009

7 — 16.09.11 — 15:42

а с индексом как по имени?

   chingiz

8 — 16.09.11 — 15:48

Да я вот сам бьюсь. Мне нужно получить индекс ГруппыВыбранныхЭлементов и что-то не выходит.

КомпоновщикНастроек.Настройки.Выбор.Элементы[2].Элементы.Получить(ЭлементыФормы.ПолеСписка.ТекущаяСтрока.ПолучитьИдентификатор())

Вот с ПолемСписка все ясно, он берет Текущую Строку и получает индекс, и мы его благополучно пихаем в Получить. Но вот порнографию в виде «Элементы[2]» мне нужно убрать, а то пользователь ведь может передвинуть ГруппуПолей в настройках…

   Axel2009

9 — 16.09.11 — 15:53

а что во 2ом элементе находится?

   Axel2009

10 — 16.09.11 — 15:53

что делать если пользователь «может удалить»?

   chingiz

11 — 16.09.11 — 16:05

Первый это ГруппаВыбранныхПолей, а второй сами поля. Ну дак если удалит, то и поля не будет…значит ошибка :) Мне то не грозит, эта Группа всегда включена и используется….а вот то что ее могут подвинуть, это нужно решить :

   Axel2009

12 — 16.09.11 — 16:08

ну сделай имя группировки. и проверяй по имени

   Робинзон Крузо

13 — 16.09.11 — 16:19

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

   chingiz

14 — 16.09.11 — 16:27

Мда, что же я на (1) не посмотрел :) Вот и решение в коде:

   Для каждого Элемент из КомпоновщикНастроек.Настройки.Выбор.Элементы Цикл

       Если Элемент.Заголовок = «Характер поездок» Тогда

           Индекс = КомпоновщикНастроек.Настройки.Выбор.Элементы.Индекс(Элемент);

       КонецЕсли;

   КонецЦикла;

  

chingiz

15 — 16.09.11 — 16:28

Респект (1) и (13), я уже как только не извращаюсь 2 часа по незнанию 8))

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

Но на практике часто встречаются задачи, когда схему компоновки нужно программно создать с нуля или доработать существующую схему при помощи кода на встроенном языке, настроить вариант отчета – добавить отбор, установить условное оформление, добавить группировку и т.д. Такие задачи решаются на внедрениях при адаптации типовых конфигураций фирмы “1С” под требования конкретного заказчика.

В курсе Профессиональная разработка отчетов в 1С 8.3 на Системе Компоновки Данных (СКД) подробно рассматривается программная работа со схемой компоновки данных.

Задача действительно очень актуальная, участники Мастер-группы по СКД задают много вопросов на эту тему :)

Также традиционно много вопросов возникает при программной работе с пользовательскими настройками отчетов:

  • Почему отличаются значения параметра в настройках компоновщика и в пользовательских настройках? Которое из этих значений используется для формирования отчета?
  • Как связываются между собой настройки компоновщика и пользовательские настройки?
  • Как установить значение отбора или параметра, если они вынесены в пользовательские настройки?
  • И многие другие…

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

Общая длительность всех видеоуроков – 1 час 5 минут.

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

Полезного просмотра :)

Видео 1 – Программное создание варианта отчета

00:37 – В каком обработчике можно расположить код для создания настроек компоновки
01:00 – Где в Синтакс-помощнике можно “подсмотреть” свойства, которые потребуются при написании кода
01:58 – Как настроить группировки отчета
02:28 – Какое свойство позволяет создавать вложенные группировки
03:11 – Как включить/выключить отдельные элементы настроек.

video

Видео 2 – Программное создание группировки

00:22 – Как создать структуру отчета
02:00 – Как указать поля, по которым выполняется группировка
04:10 – Как настроить выбранные поля
06:30 – Как создать автополе.

video

Видео 3 – Программное создание вложенной группировки

00:22 – Как создать подчиненную группировку
02:05 – Почему в отчете группировки могут выводиться несколько раз
02:40 – Как проверить наличие группировок в структуре отчета.

video

Видео 4 – Программное добавление отбора

00:18 – Где в Синтакс-помощнике найти типы данных, необходимые для создания отборов
00:55 – Какие свойства объекта типа ЭлементОтбораКомпоновкиДанных нужно использовать для создания отбора
01:20 – Как создать отбор при помощи программного кода.

video

Видео 5 – Программная установка сортировки

00:25– Где в Синтакс-помощнике найти типы данных, необходимые для включения сортировки
00:50 – Какие свойства объекта типа ЭлементПорядкаКомпоновкиДанных нужно использовать для включения сортировки
01:00 – Как установить сортировку при помощи программного кода.

video

Видео 6 – Программное добавление условного оформления

00:25 – Где в Синтакс-помощнике найти типы данных, необходимые для работы с условным оформлением
00:33 – Какие свойства объекта типа ЭлементУсловногоОформленияКомпоновкиДанных нужно использовать
02:08 – Как добавить условное оформление при помощи программного кода
02:31 – Как задать перечень полей, к которым будет применяться условное оформление
03:34 – Как отобрать оформляемые данные
04:15 – Как при помощи программного кода описать применяемое оформление.

video

Видео 7 – Программная работа с пользовательскими настройками

01:01 – Как программно установить значение параметра
02:00 – Почему значения параметров, выводимые на форму отчета, не совпадают со значениями в самом отчете
04:25 – Что делает метод ПолучитьНастройки
05:10 – Как нужно работать с пользовательскими настройками
06:17 – Для чего нужно свойство ИдентификаторПользовательскойНастройки
07:10 – Где в типовой конфигурации УТ 11 можно найти пример работы с пользовательскими настройками.

video

Видео 8 – Особенности использования метода ПолучитьНастройки

00:58 – Почему отличаются значения параметра в настройках компоновщика и в пользовательских настройках
01:23 – Как связываются между собой настройки компоновщика и пользовательские настройки
03:06 – Как работает метод ПолучитьНастройки и значение какого типа он возвращает

video

Видео 9 – Программное создание отборов в пользовательских настройках

00:34 – Чем отличается отбор в настройках компоновщика и отбор в пользовательских настройках
02:34 – Как используется свойство ИдентификаторПользовательскойНастройки
03:08 – Какой алгоритм должен использоваться для установки значения отбора в пользовательских настройках
03:42 – Как реализовать процедуру для установки значения отбора в пользовательских настройках.

video

Видео 10 – Программное создание схемы компоновки

00:40 – Как при компоновке отчета программно создать схему, по которой будет формироваться отчет
02:15 – Какой алгоритм должен использоваться для программного создания с нуля схемы компоновки
02:50 – Как программно создать источник данных схемы компоновки
04:00 – Как программно добавить в схему набор данных – объект
06:25 – Как программно добавить поля набора данных.

video

Хотите научиться грамотно создавать отчеты на СКД и дорабатывать отчеты в типовых конфигурациях?

Чтобы подробнее изучить возможности системы компоновки данных и уверенно применять механизм на практике, рекомендуем пройти курс Профессиональная разработка отчетов в 1С 8.3 на Системе Компоновки Данных (СКД)

Найти отбор в компоновщике настроек

Автор magnifico61, 27 июн 2017, 12:49

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

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

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


искать и анализировать/модифицировать состав отбора, довольно таки муторное дело.
гораздо проще добавить всего одну команду:

КомпоновщикНастроек.Настройки.Отбор.Элементы.Очистить();

и дальше формируете Отбор так как надо.

если помогло нажмите: Спасибо!


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


Contents

  • 1 Предисловие
  • 2 Фиксированный отбор
  • 3 Исключение определенных группировок из отчета
  • 4 Добавить отбор для пользователя
  • 5 Отборы на форме и в динамических списках
  • 6 Материалы для подготовки

Предисловие

Редко какой отчет в 1С не использует отборы, разве что печатные формы и какие-то специальные отчеты. В большинстве отчетов в 1С требуется возможность выборочного анализа. Поэтому в этой статье мы поговорим про настройку отборов в отчетах, построенных с помощью 1С СКД.

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

Новый элемент в список отбора можно добавить несколькими способами – двойной клик по доступному полю, перетаскивание, клавиша в меню:

При этом только через клавишу в меню можно добавить группу в отбор, которая объединяет элементы внутри этой группы по заданному условию (И, ИЛИ).

По умолчанию если элементы отбора не включены ни в какую группу и объединяются с помощью оператора «И».

Вид сравнения в элементе отбора зависит от типа поля (левого значения):

Операции доступные для числа:

Операции доступные для строки:

Для строки добавлены операции – «содержит», «начинается с», «соответствует шаблону» и те же операции с оператором «Не» (Не содержит и т.д.).

Операции доступные для ссылки:

Далее разберем типовые ситуации при использовании отбора

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

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

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

Исключение определенных группировок из отчета

Иногда в отчете на 1С СКД возникает необходимость исключить в отчете значения некоторых группировок (колонок или строк). Причем сделать это в запросе не представляется возможным, потому что исключать такие строки возможно только после компоновки.

В этом случае используется возможность СКД накладывать отборы на заданную группировку. Рассмотрим, например, такой отчет:

Допустим нам нужно исключить из отчета все строки, в которых итоговое количество по номенклатуре меньше 15. В запросе мы такое условие применить не можем. Установим для этого отбора для группировки «Номенклатура»:

Получим такой отчет:

Отборы на группировках часто используются в отчетах вида «Ведомость по остаткам»:

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

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

Добавить отбор для пользователя

Обычно мы редко используем фиксированные отборы. Чаще нам нужны отборы, которые может изменять пользователь. Можно, чтобы пользователь изменял отборы через функционал 1С СКД «Изменить вариант», но это не совсем верный путь – вариант отчета это скорее постоянный «скелет», который настраивается один раз и потом используется многократно. Отборы же это что-то часто изменяемое, поэтому правильнее редактировать их через механизм пользовательских настроек.

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

Добавим для этого отбор на уровне отчета. Вид сравнения по умолчанию сделаем «В группе», отключим по умолчанию использование отбора и в диалоге редактирования пользовательских настроек включим наш отбор в пользовательские настройки.

Перейдем теперь в режим предприятия.

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

Если вам необходимо установить фиксированный отбор (вид сравнения и правое значение константы), но пользователь должен управлять включением / отключением отбора, тогда вам необходимо заполнить представление отбора в пользовательской настройке:

В этом случае в настройки добавляется только флаг использования отбора, которым может управлять пользователь:

Если вам в отборе нужно изменить представления поля, по которому делается отбор, то для этого есть еще одно представление:

Получается вот так:

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

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

Отборы на форме и в динамических списках

Как известно, в 1С СКД используется не только в отчетах, но и в формах, содержащих динамические списки. У динамического списка есть несколько свойств, которые относятся к СКД. Среди этих свойств имеется свойство «Отбор» с типом «ОтборКомпоновкиДанных». Чтобы установить отбор в динамическом списке есть два способа. Первый способ – передать отборы через параметр формы с одноименным названием – «Отбор». Этот параметр является структурой, в которой ключ ссылается на поле, для которого устанавливается отбор. Значение же содержит данные, с которыми производится сравнение. Можно также передать в качестве правого значения – массив, фиксированный массив, список значений. В этом случае вид сравнения равняется «ВСписке», для одиночного элемента вид сравнения устанавливается как «Равно». Этот способ ограничен в возможностях – с его помощью нельзя накладывать сложные условия с операторами «И» и «ИЛИ», нельзя использовать виды сравнения кроме двух указанных.

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

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

Например, вызов основного метода для установки отбора выглядит так:

ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, «Ссылка», Параметры.ДобавитьДля, ВидСравненияКомпоновкиДанных.НеРавно);

Данная функция производит поиск существующего элемента отбора, изменяет его если нашла, а если не нашла, то добавляет с помощью такой процедуры:

Функция ДобавитьЭлементКомпоновки(ОбластьДобавления,

                                    Знач ИмяПоля,

                                    Знач ВидСравнения,

                                    Знач ПравоеЗначение = Неопределено,

                                    Знач Представление = Неопределено,

                                    Знач Использование = Неопределено,

                                    знач РежимОтображения = Неопределено,

                                    знач ИдентификаторПользовательскойНастройки = Неопределено) Экспорт

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

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

    Элемент.ВидСравнения = ВидСравнения;

    Если РежимОтображения = Неопределено Тогда

        Элемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;

    Иначе

        Элемент.РежимОтображения = РежимОтображения;

    КонецЕсли;

    Если ПравоеЗначение <> Неопределено Тогда

        Элемент.ПравоеЗначение = ПравоеЗначение;

    КонецЕсли;

    Если Представление <> Неопределено Тогда

        Элемент.Представление = Представление;

    КонецЕсли;

    Если Использование <> Неопределено Тогда

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

    КонецЕсли;

    Если ИдентификаторПользовательскойНастройки <> Неопределено Тогда

        Элемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки;

    ИначеЕсли Элемент.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда

        Элемент.ИдентификаторПользовательскойНастройки = ИмяПоля;

    КонецЕсли;

    Возврат Элемент;

КонецФункции

В форме содержащей динамический список также как в отчете на СКД, возможно настроить пользовательский отбор. Как это можно сделать показано на рисунке:

Также у элемента формы, с которым связан список нужно установить группу пользовательских настроек, в которой будут отображаться настройки для пользователя:

В режиме предприятия это будет выглядеть следующим образом:

Материалы для подготовки

Отборы в отчётах. Нюансы работы компоновщика настроек

Особенности использования отборов в системе компоновки данных

Курс по СКД

IKSparrow
25.10.2012 13:44 Прочитано: 47525

Код следующий:Код 1C v 8.х

 
ОтборКомпоновщика = КомпоновщикНастроек.Настройки.Отбор;

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

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, Компоновщик.Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(МакетКомпоновки);

ТаблицаВерсий = Новый ТаблицаЗначений;

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаВерсий);
ПроцессорВывода.Вывести(Процессор, Ложь);

Мой отбор ни фига не учитывается. Что не так делаю?

Yandex
Возможно, вас также заинтересует

Реклама на портале

Mokey
25.10.2012 13:58 Ответ № 1

ВидОбъекта.ПравоеЗначение = «Справочник.ИсторияПользователей»;
вот это вот что такое? тут должно быть значение вида объекта, т.е. ссылка на элемент справочника.

IKSparrow
25.10.2012 14:01 Ответ № 2

(1) Нееет, там тип строка. Т.ё. не сам элемент какого-то справочника, а наименование справочника. Вернее наименование его типа, как оно записано в определённом регистре.

Gnost
25.10.2012 16:00 Ответ № 3

Пользователь @Monkey правильно вам говорит

ЭлементОтбораКомпоновкиДанных.ПравоеЗначение (DataCompositionFilterItem.RightValue)
ЭлементОтбораКомпоновкиДанных (DataCompositionFilterItem)
ПравоеЗначение (RightValue)
Использование:

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

Содержит правое значение элемента отбора.

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

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Примечание:

Тип правого значения может быть полем, остальные варианты зависят от левого значения. Это может быть его тип левого значения, либо, если слева выбрано поле, может использоваться тип поля.

Где вы увидели что тип строка?

Код 1C v 8.2 УП

 ВидОбъекта.ПравоеЗначение = Ссылка   
Mokey
25.10.2012 16:18 Ответ № 4

а в настройках после выполнения кода появляется этот отбор?

Mokey
25.10.2012 16:23 Ответ № 5

Код 1C v 8.х

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

Настройки = КомпоновщикНастроек.Настройки;

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


Изменено 25.10.12 16:24:40

Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.

Понравилась статья? Поделить с друзьями:
  • Если шапка растянулась как это исправить
  • Как найти менеджера по рекламе в инстаграм
  • Как найти сервер half life
  • Как найти канал тесака
  • Как найти идеальное порно