1С 8.3 Отбор построителя с параметрами - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Отбор построителя с параметрами

Данные > Примеры кода 1С > 1С 8.3 Запросы
Перейти в раздел примеры кода 1С 8.3:
Пример №1: Добавление отбора с параметрам в построитель в 1С 8.3:
Функция ОтборПостроителяСПараметрами(ПостроительЗапросаИлиОтчета, ИмяПоляОтбораП, ЗначениеОтбораП,
   
ВидСравненияП = Неопределено, ИспользованиеП = Истина)

   
// Можно сделать общей процедурой
    // Параметры: ИмяПоляОтбораП (строка), ЗначениеОтбораП (произвольный)
    // ВидСравненияП (строка "Равно", неопределено "ВСписке"),
    // ИспользованиеП (булево "включено использование отбора")

   
ЭлементОтбораП   = ПостроительЗапросаИлиОтчета.Отбор.Добавить(ИмяПоляОтбораП);
   
ЭлементОтбораП.Использование = ИспользованиеП;

   
ТипЗначенияОтбораП   = ТипЗнч(ЗначениеОтбораП);
   
ФиксированныйМассив  = ТипЗначенияОтбораП = Тип("ФиксированныйМассив");
   
ЗначениеМассивомП    = ФиксированныйМассив ИЛИ ТипЗначенияОтбораП = Тип("Массив");

    Если
ЗначениеМассивомП И ЗначениеОтбораП.Количество() = 1 Тогда
       
УстанавливаемоеЗначениеОтбораП = ЗначениеОтбораП.Получить(0);
       
ЗначениеМассивомП = Ложь;
    ИначеЕсли
ФиксированныйМассив Тогда
       
УстанавливаемоеЗначениеОтбораП = Новый Массив(ЗначениеОтбораП);
    Иначе
       
УстанавливаемоеЗначениеОтбораП = ЗначениеОтбораП;
    КонецЕсли;

   
ВидСравненияОтбораП = ?(ВидСравненияП = Неопределено,
    ?(
ЗначениеМассивомП, "ВСписке", "Равно"), ВидСравненияП);

   
ЭлементОтбораП.ВидСравнения  = ВидСравнения[ВидСравненияОтбораП];

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

    Возврат
ЭлементОтбораП; // Добавленный элемент отбора

КонецФункции
Пример №2: Добавить отбор в построитель запроса или отчета в 1С 8.3:
// Возвращает новый элемент отбора построителя
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/17
//
// Параметры:
//  Построитель    - ПостроительЗапроса, ПостроительОтчета - Построитель, в которой необходимо добавить элемент отбора
//  ПолеОтбора     - Строка - Имя поля отбора
//  ЗначениеОтбора - Произвольный
//                 - Массив из Произвольный
//                 - ФиксированныйМассив из Произвольный
//  ВидОтбора      - Строка, ВидСравнения - Вид сравнения отбор в виде строки
//                 Если Неопределено, то для списков будет ВСписке, а для остальных Равно
//
// Возвращаемое значение:
//   ЭлементОтбора
//
// Пример:
//     ЭлементОтбора = Построитель_ДобавитьОтбор(Построитель, "Код", "123");
//     ЭлементОтбора = Построитель_ДобавитьОтбор(Построитель, "Номер", 1, "Больше");
//     ЭлементОтбора = Построитель_ДобавитьОтбор(Построитель, "Ссылка", МассивСсылок);
//
Функция Построитель_ДобавитьОтбор(Знач Построитель, Знач ПолеОтбора, Знач ЗначениеОтбора, Знач ВидОтбора = Неопределено) Экспорт

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

   Если ТипЗнч(ЗначениеОтбора) = Тип("Массив")
       Или ТипЗнч(ЗначениеОтбора) = Тип("ФиксированныйМассив") Тогда
       УстанавливаемоеЗначение = Новый СписокЗначений; //СписокЗначений из Неопределено
       Для Каждого Значение Из ЗначениеОтбора Цикл
           УстанавливаемоеЗначение.Добавить(Значение);
       КонецЦикла;
       ЭтоСписок = Истина;
   Иначе
       УстанавливаемоеЗначение = ЗначениеОтбора; //@skip-check statement-type-change
       ЭтоСписок = (ТипЗнч(ЗначениеОтбора) = Тип("СписокЗначений"));
   КонецЕсли;

   Если ВидОтбора = Неопределено Тогда
       ЭлементОтбора.ВидСравнения = ?(ЭтоСписок, ВидСравнения.ВСписке, ВидСравнения.Равно);
   ИначеЕсли ТипЗнч(ВидОтбора) = Тип("ВидСравнения") Тогда
       ЭлементОтбора.ВидСравнения = ВидОтбора;
   Иначе
       ЭлементОтбора.ВидСравнения = ВидСравнения[Строка(ВидОтбора)]; //@skip-check statement-type-change
   КонецЕсли;

   ЭлементОтбора.Значение = УстанавливаемоеЗначение;

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

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

// MIT License
// Copyright (c) 2024 SeiOkami
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
// (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
// merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:

// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 16.04.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому