Как правильно использовать сложные условия в параметрах виртуальных таблиц 1С?

Программист 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

При изучении языка запросов 1С часто встречаются конструкции, которые на первый взгляд кажутся запутанными из-за обилия скобок и вложенных операторов. Рассмотрим подробнее, как устроены фильтры в параметрах виртуальных таблиц и как логика ВЫБОР КОГДА сочетается с передачей параметров.

Разбор структуры запроса

Когда мы обращаемся к виртуальной таблице, например РегистрНакопления.РасчетыСКлиентамиПоДокументам.Остатки, мы передаем параметры в скобках. Эти параметры позволяют серверу базы данных выполнить фильтрацию до того, как данные будут выгружены в память приложения. Это критически важно для производительности.

Рассмотрим конструкцию из вашего примера:


НЕ ЕСТЬNULL(
    ВЫБОР 
        КОГДА РасчетныйДокумент ССЫЛКА Документ.ВзаимозачетЗадолженности 
            ТОГДА ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВзаимозачетЗадолженности) 
        КОГДА РасчетныйДокумент ССЫЛКА Документ.СписаниеЗадолженности 
            ТОГДА ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.СписаниеКредиторскойЗадолженности) 
        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПустаяСсылка) 
    КОНЕЦ, 
    Перечисление.ХозяйственныеОперации.ПустаяСсылка
) В (&ОперацииИсключенияПоРасчетам)

Пошаговый анализ логики

  1. Конструкция ВЫБОР КОГДА: Она работает как цепочка условий. Система проверяет тип документа, к которому относится расчет. Если документ соответствует заданному типу, возвращается нужное значение перечисления. Если ни одно условие не подошло, возвращается ПустаяСсылка.
  2. Функция ЕСТЬNULL: В запросах 1С результат NULL может привести к непредсказуемым ошибкам. Функция ЕСТЬNULL проверяет результат выполнения блока ВЫБОР. Если он оказался пустым, система принудительно подставляет Перечисление.ХозяйственныеОперации.ПустаяСсылка, обеспечивая стабильность сравнения.
  3. Оператор В: Этот оператор сравнивает полученное значение с массивом или списком, переданным в параметр &ОперацииИсключенияПоРасчетам. Если результат вычисления попадает в этот список, условие возвращает Истина.
  4. Оператор НЕ: Применяется для инверсии. Мы исключаем из выборки все записи, чьи хозяйственные операции присутствуют в массиве исключений.

Передача параметров в код 1С

Помните, что параметры, начинающиеся с амперсанда (&), должны быть установлены в коде 1С перед выполнением запроса. Рассмотрим, как подготовить такой массив:


СписокИсключений = Новый Массив;
СписокИсключений.Добавить(ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ВзаимозачетЗадолженности"));
СписокИсключений.Добавить(ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.СписаниеКредиторскойЗадолженности"));

Запрос = Новый Запрос;
Запрос.Текст = "ВАШ_ТЕКСТ_ЗАПРОСА";
Запрос.УстановитьПараметр("ОперацииИсключенияПоРасчетам", СписокИсключений);
Результат = Запрос.Выполнить();

Практические советы по освоению запросов

Чтобы лучше понять, как объединяются эти конструкции, рекомендуем придерживаться следующих правил:

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

← На главную