1С отключить отбор программно

Часто возникают ситуации, когда в 1С 8.3 нужно произвести отбор в таблице определенных строк по определенным критериям. Рассмотрим, как это сделать в динамическом списке и в таблице значений.

Отборы в динамическом списке 1С 8.3

Тут мы имеем два пути: создать отбор на форме списка и установить отбор программно.

Отбор в настройка формы

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

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

Установка отбора в динамическом списке 1С программно

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

Чтобы отбор заработал, нужно прописать параметры «ЛевоеЗначение», «ВидСравнения» и «ПравоеЗначение». Кроме того необходимо свойство «Использование» установить в «Истина».

Получите 267 видеоуроков по 1С бесплатно:

Таким образом, мы создаем простой отбор. Кроме простого, можно задать условия по нескольким полям. Для этого используем тип данных «ГруппаЭлементовОтбораКомпоновкиДанных»:

Отборы в таблице значений 1С

Тут у нас также имеется несколько вариантов.

  • Можно просто перебрать таблицу в цикле и выбрать нужные строки либо скрыть ненужные. Считаю этот способ самым неоптимальным, но для новичков пойдет.
  • Второй способ – использовать метод таблицы «НайтиСтроки». Иногда очень хороший способ, но есть серьезный недостаток. Это единственный тип для сравнения – «Равно».
  • Третий вариант отбора – мой любимый, так как лишен в итоге всех недостатков. В этом варианте я использую «ПостроительЗапроса». Вот пример:

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

Читайте также:  Виртуальное общение в сети

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Примеры по программированию в 1с 7.7, 8.1, 8.2

понедельник, 31 марта 2014 г.

1С Установка и сброс отбора динамического списка

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

// Процедура устанавливает значения параметров в запросе.
// Имя — Имя параметра
// Значение — Значение для отбора
Процедура УстановитьПараметрКомпоновки ( Имя , Значение )
КомпоновкаДанныхПараметр =
КомпоновщикНастроек . Настройки . ПараметрыДанных . Элементы . Найти ( Имя );
Если НЕ( КомпоновкаДанныхПараметр = Неопределено) Тогда
КомпоновкаДанныхПараметр.Значение = Значение ;
КомпоновкаДанныхПараметр.Использование = Истина ;
Иначе Сообщить( "Параметр " + Имя + " не найден " );
КонецЕсли;
КонецПроцедуры

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

ниже приведенный материал взят отсюда //expert.chistov.pro/public/19793/

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

Читайте также:  Logitech setpoint windows 7 x64

Функция НайтиНаборДанных ( НаборыДанных , Имя )
Если НаборыДанных = Неопределено Тогда
Возврат Неопределено ;
КонецЕсли;

Для каждого НаборДанных Из НаборыДанных Цикл
Если НаборДанных . Имя = Имя Тогда
Возврат НаборДанных ;
КонецЕсли;

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

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

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

Возврат Результат ;
КонецФункции

// Процедура добавляет в каждую группировку отчета отбор по непустому значению
// Структура — КомпоновщикНастроек.Настройки.Структура
// ДоступныеПоляГруппировок — КомпоновщикНастроек.ДоступныеПоляГруппировок
Процедура ОтборПоНепустым ( Структура )
Для Каждого Элемент Из Структура Цикл
Если ТипЗнч ( Элемент ) = Тип ( "ТаблицаКомпоновкиДанных" ) Тогда
ОтборПоНепустым ( Элемент.Строки );
ОтборПоНепустым ( Элемент.Колонки );
ИначеЕсли ТипЗнч ( Элемент ) = Тип ( "ГруппировкаТаблицыКомпоновкиДанных" ) Тогда
Для Каждого Поле Из Элемент . ПоляГруппировки . Элементы Цикл
ЭлементОтбора = Неопределено;
Для Каждого ЭлементОтбора1 Из Элемент . Отбор.Элементы Цикл
Если ЭлементОтбора1 . Представление = "Отбор по непустому" Тогда
ЭлементОтбора = ЭлементОтбора1 ;
КонецЕсли;
КонецЦикла;

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

Читайте также:  После обновления драйвера видеокарты синий экран

// Процедура добавляет значения интервалов в пользовательское поле
// ПолеИнтервалы — ПользовательскоеПолеВыборКомпоновкиДанных
// Интервал — Строка содержащия границы интервалов: 30,60,90
Процедура УстановитьПользовательскоеПолеИнтервал ( ПолеИнтервалы , Интервал )
Если ПустаяСтрока ( Интервал ) Тогда
Возврат;
КонецЕсли;

Стр = Интервал ;
Стр = СтрЗаменить ( Стр , "," , Символы . ПС );
ПредИнтервал = "0" ;

Для Счетчик = 1 По СтрЧислоСтрок ( Стр ) Цикл
ТекИнтервал = СокрЛП ( СтрПолучитьСтроку ( Стр , Счетчик ));
Вариант = ПолеИнтервалы . Варианты . Элементы . Добавить ();
Вариант . Использование = Истина;
Если Счетчик = 1 Тогда
Вариант . Значение = "До " + ТекИнтервал ;
Вариант . Представление = "До " + ТекИнтервал ;
Иначе
Вариант . Значение = "От " + ПредИнтервал + " до " + ТекИнтервал ;
Вариант . Представление = "От " + ПредИнтервал + " до " + ТекИнтервал ;
КонецЕсли;

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

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

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

Вариант = ПолеИнтервалы . Варианты.Элементы . Добавить ();
Вариант . Значение = "Более " + ПредИнтервал ;
Вариант . Представление = "Более " + ПредИнтервал ;

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

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