1с сгруппировать условия отбора

Обновлено: 07.07.2024

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

//Процедура устанавливает значения параметров в запросе.

Процедура УстановитьПараметрКомпоновк и ( Имя , Значение )

КомпоновщикНастроек . Настройки . ПараметрыДанных . Элементы . Найти ( Имя ) ;

Если НЕ ( КомпоновкаДанныхПараметр = Неопределено ) Тогда

Процедура УстановтьОтборПоПолюКомпоновки ( Имя , Значение , ВидСравнения )

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

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

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

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

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

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

// Схема - СхемаКомпоновкиДанных, схема, в которой нужно добавить(удалить) набор данных

// СхемаИсточник - СхемаКомпоновкиДанных, схема из которой копируется набор данных

// НаборДанныхРодитель - НаборДанныхОбъединениеСхемыКомпоновкиДанных

Процедура ДобавитьУдалитьНаборДанных ( Схема , СхемаИсточник , ИмяНабора , Добавить , НаборДанныхРодитель )

НаборДанных = НайтиНаборДанных ( Схема . НаборыДанных , ИмяНабора ) ;

НаборДанныхИсточник = НайтиНаборДанных ( СхемаИсточник . НаборыДанных , ИмяНабора ) ;

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

НаборДанных . ИсточникДанных = НаборДанныхИсточник . ИсточникДанных ;

НаборДанныхРодитель . Элементы . Удалить ( НаборДанных ) ;

Если ТипЗнч ( НаборДанных ) = Тип ( "НаборДанныхОбъединениеСхемыКомпоновкиДанных" ) Тогда

Результат = НайтиНаборДанных ( НаборДанных . Элементы , Имя ) ;

Функция НайтиГруппировку ( Структура , Имя , ВидГруппировк и = "Поле" )

Если ТипЗнч ( Элемент ) = Тип ( "ТаблицаКомпоновкиДанных" ) Тогда

Результат = НайтиГруппировку ( Элемент . Колонки , Имя ) ;

ИначеЕсли ТипЗнч ( Элемент ) = Тип ( "ГруппировкаТаблицыКомпоновкиДанных" ) Тогда

Для Каждого Поле Из Элемент . ПоляГруппировки . Элементы Цикл

Если Поле . Поле = Новый ПолеКомпоновкиДанных ( Имя ) Тогда

Результат = НайтиГруппировку ( Элемент . Структура , Имя ) ;

// Процедура добавляет в каждую группировку отчета отбор по непустому значению

// ДоступныеПоляГруппировок - КомпоновщикНастроек.ДоступныеПоляГруппировок

Если ТипЗнч ( Элемент ) = Тип ( "ТаблицаКомпоновкиДанных" ) Тогда

ИначеЕсли ТипЗнч ( Элемент ) = Тип ( "ГруппировкаТаблицыКомпоновкиДанных" ) Тогда

Для Каждого Поле Из Элемент . ПоляГруппировки . Элементы Цикл

Для Каждого ЭлементОтбора 1 Из Элемент . Отбор . Элементы Цикл

Если ЭлементОтбора 1 . Представление = "Отбор по непустому" Тогда

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

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

Параметр = Элемент . ПараметрыВывода . НайтиЗначениеПараметра ( Новый ПараметрКомпоновкиДанных ( "FilterOutput" ) ) ;

Параметр . Значение = ТипВыводаТекстаКомпоновкиДанных . НеВыводить ;

// Процедура добавляет значения интервалов в пользовательское поле

// ПолеИнтервалы - ПользовательскоеПолеВыборКомпоновкиДанных

// Интервал - Строка содержащия границы интервалов: 30,60,90

Процедура УстановитьПользовательскоеПолеИнтервал ( ПолеИнтервалы , Интервал )

ТекИнтервал = СокрЛП ( СтрПолучитьСтроку ( Стр , Счетчик ) ) ;

Вариант = ПолеИнтервалы . Варианты . Элементы . Добавить ( ) ;

Вариант . Значение = "От " + ПредИнтервал + " до " + ТекИнтервал ;

Вариант . Представление = "От " + ПредИнтервал + " до " + ТекИнтервал ;

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

Группа . ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных . Группа И;

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

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

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

ЭлементОтбора . ПравоеЗначение = Число ( ПредИнтервал ) ;

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

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

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

Вариант = ПолеИнтервалы . Варианты . Элементы . Добавить ( ) ;

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

Группа . ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных . Группа И;

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

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

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

ЭлементОтбора . ПравоеЗначение = Число ( ПредИнтервал ) ;

Похожее

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

Мы используем файлы cookie и подобные технологии, чтобы обеспечить пользователям максимальное удобство при использовании нашего веб-сайта (посредством персонализации, средств аналитики и повышения производительности). ПринимаюОтказазаться Подробнее

Privacy Overview

Выполним отбор по дате в форме списка документа.
Код 1C v 8.2 УП
Группировка. Сгруппируем список документов по полю Клиент.
Код 1C v 8.2 УП
Порядок. Отсортируем список документов по полю ПлановаяДатаПоставки.
Код 1C v 8.2 УП
Условное оформление. Покрасим в красный цвет строки списка документов с незаполненной датой согласования счета.
Код 1C v 8.2 УП

Разместил: E_Migachev  Версии: | 8.x | 8.2 УП |  Дата: 08.08.2012   Прочитано: 26987

Распечатать

Похожие FAQ

Еще в этой же категории

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

Как на управляемой форме разместить список регистра сведений с отбором?  18
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Как установить параметр динамического списка?  14
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма

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

Заполнение списка значений в элементе поле выбора на форме  10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Посмотреть все в категории Работа с Формой (Диалог) и её элементами

Выполним отбор по дате в форме списка документа.
Код 1C v 8.2 УП
Группировка. Сгруппируем список документов по полю Клиент.
Код 1C v 8.2 УП
Порядок. Отсортируем список документов по полю ПлановаяДатаПоставки.
Код 1C v 8.2 УП
Условное оформление. Покрасим в красный цвет строки списка документов с незаполненной датой согласования счета.
Код 1C v 8.2 УП

Разместил: E_Migachev  Версии: | 8.x | 8.2 УП |  Дата: 08.08.2012   Прочитано: 26988

Распечатать

Похожие FAQ

Еще в этой же категории

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

Как на управляемой форме разместить список регистра сведений с отбором?  18
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Как установить параметр динамического списка?  14
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма

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

Заполнение списка значений в элементе поле выбора на форме  10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Посмотреть все в категории Работа с Формой (Диалог) и её элементами

Условия в запросах применяются, когда необходимо выбрать не все записи из таблицы информационной базы 1С, а только соответствующие одному или нескольким критериям отбора.

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

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

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

Условия в запросах 1С

Если необходимо отобрать выплаты на сумму не менее 10 000, то запрос будет выглядеть следующим образом

Запрос . Текст = "ВЫБРАТЬ
| Выплаты.Сотрудник,
| Выплаты.Зарплата
|ИЗ
| Выплаты
|ГДЕ
| Выплаты.Зарплата >=10000"

Результатом выполнения запроса будет следующая таблица.

Условия в запросах 1С

Ключевое слово ИМЕЮЩИЕ в запросах 1С применяется, когда необходимо произвести отбор среди уже выбранных записей. Напрмиер, это ключевое слово применяется, когда нужно произвести фильтрацию сгруппированных записей в результате запроса.

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

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

Запрос . Текст = "ВЫБРАТЬ
| Выплаты.Сотрудник,
| СУММА(Выплаты.Зарплата) КАК Зарплата
|ИЗ
| Выплаты
|СГРУППИРОВАТЬ ПО
| Выплаты.Сотрудник
|ИМЕЮЩИЕ
| СУММА(Выплаты.Зарплата) > 20000"

Результат выполнения этого запроса будет таким.

Условия в запросах 1С

На этом примере наглядно видна разница между ключевыми словами ГДЕ и ИМЕЮЩИЕ. Если бы мы использовали слово ГДЕ вместо ИМЕЮЩИЕ, то сначала был бы произведен отбор записей с зарплатой больше 20000, а потом по ним подсчитана сумма по каждому сотруднику. В результате мы получили бы пустой результат запроса, т.к. ни один сотрудник не получал больше 20000 за одну выплату.

Условия отбора в вирутальных таблицах регистров

Виртуальные таблицы есть у всех регистров в системе 1С:Предприятие: регистров накопления, регистров сведений, регистров бухгалтерии. Задать условия к виртуальным таблицам можно двумя способами:

  1. через параметры виртуальной таблица;
  2. через секции запроса ГДЕ или ИМЕЮЩИЕ.

Различия между секциями ГДЕ и ИМЕЮЩИЕ мы уже рассматривали. Чтобы было понятно, чем условия в этих секциях запроса отличаются от условий в параметрах виртуальной таблицы, нужно понять, что же такое виртуальные таблицы регистров в 1С. Важной их особенностью является то, что они не существуют в информационной базе. Это инструмент, предоставляемый нам платформой 1С:предприятие для оптимизации работы конфигурации.

Рассмотрим пример. Дана таблица периодического регистра сведений КурсыВалют.

Условия в запросах 1С

Требуется выбрать на наименьшую дату валюты, курс которых меньше 30 р.

Запрос с условием в параметрах виртуальной таблицы будет выглядет так:

Запрос . Текст = "ВЫБРАТЬ
| КурсыВалютСрезПервых.Период,
| КурсыВалютСрезПервых.Валюта,
| КурсыВалютСрезПервых.Курс,
|ИЗ
| РегистрСведений.КурсыВалют.СрезПервых (, Курс < 30) КАК КурсыВалютСрезПервых"

В этом случае мы получим одну запись: Доллар 28,3 от 01.02.2007. Это будет верное решение задачи.

Если же мы поместим условие в секцию ГДЕ, то результат запроса будет пустым, поскольку сначала будет сделан срез первых по каждой валюте (в результате получим две записи от 01.01.2007 Доллар 30,25 и Евро 40,5), а потом из них будут выбраны записи, удовлетворяющие условию. Но обе полученные записи условию Курс < 30 не удовлетворяют.

Читайте также: