Отбор строк в 1С
-

Отбор строк в 1С

2
89358
18.11.2022 Марина Анапольская

Содержание:

1.      Способы отбора строк в 1С

2.      Варианты применения программного наложения отбора строк в 1С  

   

1. Способы отбора строк в 1С


В данной статье обратимся к вопросу программного отбора строк по условию в таблице формы (управляемое приложение). Рассмотрим несколько способов выполнения подобной задачи:


1 способ:

Элемент управления формы «Таблица формы» связан с данными табличной части формы какого-либо объекта метаданных (например, Документа Заказ покупателя табличная часть – «Услуги»). Благодаря этому, при обращении на встроенном языке программирования к таблице формы (Элементы.<ИмяТаблицы>) становятся доступны методы расширения таблицы формы для табличных частей.


Если требуется выполнить отбор над строками табличной части формы которые видимы в таблице формы можно обратиться к методу расширения таблицы - «ОтборСтрок».


Для управляемых форм свойство «ОтборСтрок» может принимать значения – Фиксированная Структура или Неопределено.


Рассмотрим пример подобного действия:


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

Элементы.Услуги.ОтборСтрок = Новый ФиксированнаяСтруктура("Номенклатура", ПеремУслуга);

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

Для отмены отбора, свойству «ОтборСтрок» присваивается один из двух вариантов: значение Неопределено, либо ФиксированнаяСтруктура.

 

Дополнительно:

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


Отбор для строковых значений выполняется по условию вхождения значения. Например, если в колонке есть ячейки со значением «Партия 1», «Партия 2», ..., «Партия 10», «Партия 11», ... и устанавливается отбор по значению «Партия 1», то в таблицу будут отобраны строки со значениями «Партия 1», «Партия 10», «Партия 11» и т.д.


2 способ:

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


3 способ:

Если таблица формы является динамическим списком (например, в форме списка справочника для вывода элементов справочника используется таблица формы с типом «Динамический список»), то используется свойство списка «Отбор». Динамический список — это интерфейсный объект и строится он на основе СКД. Поэтому тип значения, возвращаемого свойством «Отбор» будет – Отбор Компоновки Данных и заполняться он должен как в компоновке данных.


(в приведенном ниже примере переменная Список – реквизит формы)

//Элементы – коллекция элементов отбора

//метод Добавить() – добавляет новый элемент отбора и возвращает его значение.

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

 

//ИмяПоляКомпоновки в данном случае должно совпадать с именем колонки (реквизита) по //которой мы осуществляем отбор списка.

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

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

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

 

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

 

//Значение отбора

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


2. Варианты применения программного наложения отбора строк в 1С


Варианты применения:

Программное наложение отбора на табличную часть требуется, в основном, в двух случаях:

● Для предоставления пользователю дополнительных интерфейсных возможностей наложения отбора. Например, кнопка (команда), отбирающая строки с незаполненными важными реквизитами.

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


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


//При позиционировании на строке ТЧ "Сотрудники": отображать только технику по текущему сотруднику

&НаКлиенте

Процедура СотрудникиПриАктивизацииСтроки(Элемент)

    ТекДанные = Элементы.Сотрудники.ТекущиеДанные;

    Если ТекДанные = Неопределено Тогда

        //При активизации строки ТекДанные не заполонены, значит ТЧ «Сотрудники» - пустая

        Элементы.Техника.ОтборСтрок = Неопределено;

    Иначе

        // Для ТЧ «Техника» устанавливаем отбор по текущему сотруднику

        ТекСотрудник = ТекДанные.Сотрудник;

        Элементы.Техника.ОтборСтрок = Новый ФиксированнаяСтруктура("Сотрудник", ТекСотрудник);

   КонецЕсли;

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


    Специалист компании "Кодерлайн"

 Марина Анапольская

Задать вопрос автору статьи
Тема вопроса*
Ваше имя*
E-mail или телефон*
Ваш вопрос*
 

0
Guest
Спасибо
Имя Цитировать 0
0
adani_22
Для динамического списка

Чтобы отбор отрабатывал корректно при изменении условий, напишите также перед его установкой

Список.Отбор.Элементы.Очистить();
Имя Цитировать 0
Добавить комментарий
Текст сообщения*
Защита от автоматических сообщений
 
Услуги программиста 1С
Получите специалиста
для решения всех задач
в области 1С
Программы 1С
Цены и подробное описание программ 1С:Предприятие 8.