1с сгруппировать условия отбора
Работа с программным отбором, группировкой, набором данных, пользовательскими полями.
//Процедура устанавливает значения параметров в запросе.
Процедура УстановитьПараметрКомпоновк и ( Имя , Значение )
КомпоновщикНастроек . Настройки . ПараметрыДанных . Элементы . Найти ( Имя ) ;
Если НЕ ( КомпоновкаДанныхПараметр = Неопределено ) Тогда
Процедура УстановтьОтборПоПолюКомпоновки ( Имя , Значение , ВидСравнения )
Для Каждого ЭлементОтбора Из КомпоновщикНастроек . Настройки . Отбор . Элементы Цикл
Если ЭлементОтбора . ЛевоеЗначение = Новый ПолеКомпоновкиДанных ( Имя ) И ЭлементОтбора . ВидСравнения = ВидСравнения Тогда
КомпоновщикНастроек . Настройки . Отбор . Элементы . Удалить ( ЭлементОтбора ) ;
ЭлементОтбора = КомпоновщикНастроек . Настройки . Отбор . Элементы . Добавить ( Тип ( "ЭлементОтбораКомпоновкиДанных" ) ) ;
ЭлементОтбора . ЛевоеЗначение = Новый ПолеКомпоновкиДанных ( Имя ) ;
// Процедура добавляет или удаляет набор данных из схемы компоновки данных
// Схема - СхемаКомпоновкиДанных, схема, в которой нужно добавить(удалить) набор данных
// СхемаИсточник - СхемаКомпоновкиДанных, схема из которой копируется набор данных
// НаборДанныхРодитель - НаборДанныхОбъединениеСхемыКомпоновкиДанных
Процедура ДобавитьУдалитьНаборДанных ( Схема , СхемаИсточник , ИмяНабора , Добавить , НаборДанныхРодитель )
НаборДанных = НайтиНаборДанных ( Схема . НаборыДанных , ИмяНабора ) ;
НаборДанныхИсточник = НайтиНаборДанных ( СхемаИсточник . НаборыДанных , ИмяНабора ) ;
НаборДанных = НаборДанныхРодитель . Элементы . Добавить ( Тип ( "НаборДанныхЗапросСхемыКомпоновкиДанных" ) ) ;
НаборДанных . ИсточникДанных = НаборДанныхИсточник . ИсточникДанных ;
НаборДанныхРодитель . Элементы . Удалить ( НаборДанных ) ;
Если ТипЗнч ( НаборДанных ) = Тип ( "НаборДанныхОбъединениеСхемыКомпоновкиДанных" ) Тогда
Результат = НайтиНаборДанных ( НаборДанных . Элементы , Имя ) ;
Функция НайтиГруппировку ( Структура , Имя , ВидГруппировк и = "Поле" )
Если ТипЗнч ( Элемент ) = Тип ( "ТаблицаКомпоновкиДанных" ) Тогда
Результат = НайтиГруппировку ( Элемент . Колонки , Имя ) ;
ИначеЕсли ТипЗнч ( Элемент ) = Тип ( "ГруппировкаТаблицыКомпоновкиДанных" ) Тогда
Для Каждого Поле Из Элемент . ПоляГруппировки . Элементы Цикл
Если Поле . Поле = Новый ПолеКомпоновкиДанных ( Имя ) Тогда
Результат = НайтиГруппировку ( Элемент . Структура , Имя ) ;
// Процедура добавляет в каждую группировку отчета отбор по непустому значению
// ДоступныеПоляГруппировок - КомпоновщикНастроек.ДоступныеПоляГруппировок
Если ТипЗнч ( Элемент ) = Тип ( "ТаблицаКомпоновкиДанных" ) Тогда
ИначеЕсли ТипЗнч ( Элемент ) = Тип ( "ГруппировкаТаблицыКомпоновкиДанных" ) Тогда
Для Каждого Поле Из Элемент . ПоляГруппировки . Элементы Цикл
Для Каждого ЭлементОтбора 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 УП
Похожие FAQ
Еще в этой же категории
Как обновить динамический список или реквизит на форме клиента? 19Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Динамический список
Как на управляемой форме разместить список регистра сведений с отбором? 18
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Как установить параметр динамического списка? 14
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма
Программное создание таблицы значений с условным оформлением 12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора
Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Посмотреть все в категории Работа с Формой (Диалог) и её элементами
Выполним отбор по дате в форме списка документа.
Код 1C v 8.2 УП
Группировка. Сгруппируем список документов по полю Клиент.
Код 1C v 8.2 УП
Порядок. Отсортируем список документов по полю ПлановаяДатаПоставки.
Код 1C v 8.2 УП
Условное оформление. Покрасим в красный цвет строки списка документов с незаполненной датой согласования счета.
Код 1C v 8.2 УП
Похожие FAQ
Еще в этой же категории
Как обновить динамический список или реквизит на форме клиента? 19Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Динамический список
Как на управляемой форме разместить список регистра сведений с отбором? 18
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Как установить параметр динамического списка? 14
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма
Программное создание таблицы значений с условным оформлением 12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора
Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Посмотреть все в категории Работа с Формой (Диалог) и её элементами
Условия в запросах применяются, когда необходимо выбрать не все записи из таблицы информационной базы 1С, а только соответствующие одному или нескольким критериям отбора.
Условия в запросах 1С могут задаваться различными способами в зависимости от особенностей самого запроса и источника данных.
Ключевое слово ГДЕ используется в запросах 1С, когда условие применяется к записям, отбираемым из информационной базы. При этом фильтрация записей происходит на этапе их выбора из таблицы информационной базы.
Например, есть таблица Выплаты, содержащая перечень сотрудников и произведенные им выплаты.
Если необходимо отобрать выплаты на сумму не менее 10 000, то запрос будет выглядеть следующим образом
Запрос . Текст = "ВЫБРАТЬ| Выплаты.Сотрудник,
| Выплаты.Зарплата
|ИЗ
| Выплаты
|ГДЕ
| Выплаты.Зарплата >=10000"
Результатом выполнения запроса будет следующая таблица.
Ключевое слово ИМЕЮЩИЕ в запросах 1С применяется, когда необходимо произвести отбор среди уже выбранных записей. Напрмиер, это ключевое слово применяется, когда нужно произвести фильтрацию сгруппированных записей в результате запроса.
Вернемся к примеру, рассмотренному выше. Допустим, необходимо выбрать из таблицы Выплаты сотрудников, которые в сумме получили больше 20 000. Для этого, сначала нужно ввести группировку по полю Сотрудник, подсчитать сумму по полю Зарплата для каждого сотрудника, а потом из полученных записей отобрать те, которые удовлетворяют условию.
Текст запроса будет выглядеть следующим образом.
Запрос . Текст = "ВЫБРАТЬ| Выплаты.Сотрудник,
| СУММА(Выплаты.Зарплата) КАК Зарплата
|ИЗ
| Выплаты
|СГРУППИРОВАТЬ ПО
| Выплаты.Сотрудник
|ИМЕЮЩИЕ
| СУММА(Выплаты.Зарплата) > 20000"
Результат выполнения этого запроса будет таким.
На этом примере наглядно видна разница между ключевыми словами ГДЕ и ИМЕЮЩИЕ. Если бы мы использовали слово ГДЕ вместо ИМЕЮЩИЕ, то сначала был бы произведен отбор записей с зарплатой больше 20000, а потом по ним подсчитана сумма по каждому сотруднику. В результате мы получили бы пустой результат запроса, т.к. ни один сотрудник не получал больше 20000 за одну выплату.
Условия отбора в вирутальных таблицах регистров
Виртуальные таблицы есть у всех регистров в системе 1С:Предприятие: регистров накопления, регистров сведений, регистров бухгалтерии. Задать условия к виртуальным таблицам можно двумя способами:
- через параметры виртуальной таблица;
- через секции запроса ГДЕ или ИМЕЮЩИЕ.
Различия между секциями ГДЕ и ИМЕЮЩИЕ мы уже рассматривали. Чтобы было понятно, чем условия в этих секциях запроса отличаются от условий в параметрах виртуальной таблицы, нужно понять, что же такое виртуальные таблицы регистров в 1С. Важной их особенностью является то, что они не существуют в информационной базе. Это инструмент, предоставляемый нам платформой 1С:предприятие для оптимизации работы конфигурации.
Рассмотрим пример. Дана таблица периодического регистра сведений КурсыВалют.
Требуется выбрать на наименьшую дату валюты, курс которых меньше 30 р.
Запрос с условием в параметрах виртуальной таблицы будет выглядет так:
Запрос . Текст = "ВЫБРАТЬ| КурсыВалютСрезПервых.Период,
| КурсыВалютСрезПервых.Валюта,
| КурсыВалютСрезПервых.Курс,
|ИЗ
| РегистрСведений.КурсыВалют.СрезПервых (, Курс < 30) КАК КурсыВалютСрезПервых"
В этом случае мы получим одну запись: Доллар 28,3 от 01.02.2007. Это будет верное решение задачи.
Если же мы поместим условие в секцию ГДЕ, то результат запроса будет пустым, поскольку сначала будет сделан срез первых по каждой валюте (в результате получим две записи от 01.01.2007 Доллар 30,25 и Евро 40,5), а потом из них будут выбраны записи, удовлетворяющие условию. Но обе полученные записи условию Курс < 30 не удовлетворяют.
Читайте также: