При изучении языка запросов 1С часто встречаются конструкции, которые на первый взгляд кажутся запутанными из-за обилия скобок и вложенных операторов. Рассмотрим подробнее, как устроены фильтры в параметрах виртуальных таблиц и как логика ВЫБОР КОГДА сочетается с передачей параметров.
Когда мы обращаемся к виртуальной таблице, например РегистрНакопления.РасчетыСКлиентамиПоДокументам.Остатки, мы передаем параметры в скобках. Эти параметры позволяют серверу базы данных выполнить фильтрацию до того, как данные будут выгружены в память приложения. Это критически важно для производительности.
Рассмотрим конструкцию из вашего примера:
НЕ ЕСТЬNULL(
ВЫБОР
КОГДА РасчетныйДокумент ССЫЛКА Документ.ВзаимозачетЗадолженности
ТОГДА ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВзаимозачетЗадолженности)
КОГДА РасчетныйДокумент ССЫЛКА Документ.СписаниеЗадолженности
ТОГДА ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.СписаниеКредиторскойЗадолженности)
ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПустаяСсылка)
КОНЕЦ,
Перечисление.ХозяйственныеОперации.ПустаяСсылка
) В (&ОперацииИсключенияПоРасчетам)
ВЫБОР КОГДА: Она работает как цепочка условий. Система проверяет тип документа, к которому относится расчет. Если документ соответствует заданному типу, возвращается нужное значение перечисления. Если ни одно условие не подошло, возвращается ПустаяСсылка.ЕСТЬNULL: В запросах 1С результат NULL может привести к непредсказуемым ошибкам. Функция ЕСТЬNULL проверяет результат выполнения блока ВЫБОР. Если он оказался пустым, система принудительно подставляет Перечисление.ХозяйственныеОперации.ПустаяСсылка, обеспечивая стабильность сравнения.В: Этот оператор сравнивает полученное значение с массивом или списком, переданным в параметр &ОперацииИсключенияПоРасчетам. Если результат вычисления попадает в этот список, условие возвращает Истина.НЕ: Применяется для инверсии. Мы исключаем из выборки все записи, чьи хозяйственные операции присутствуют в массиве исключений.Помните, что параметры, начинающиеся с амперсанда (&), должны быть установлены в коде 1С перед выполнением запроса. Рассмотрим, как подготовить такой массив:
СписокИсключений = Новый Массив;
СписокИсключений.Добавить(ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ВзаимозачетЗадолженности"));
СписокИсключений.Добавить(ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.СписаниеКредиторскойЗадолженности"));
Запрос = Новый Запрос;
Запрос.Текст = "ВАШ_ТЕКСТ_ЗАПРОСА";
Запрос.УстановитьПараметр("ОперацииИсключенияПоРасчетам", СписокИсключений);
Результат = Запрос.Выполнить();
Чтобы лучше понять, как объединяются эти конструкции, рекомендуем придерживаться следующих правил:
ВЫБОР...КОНЕЦ как колонку. Так вы увидите, что именно возвращает ваша формула для разных документов.Понимание работы виртуальных таблиц и параметров — это фундаментальный навык для любого разработчика 1С. Чем больше вы тренируетесь на реальных данных, тем проще становится чтение даже самого громоздкого кода.