Параметры в запросе 1с 7

Обновлено: 15.05.2024

Работа класса тестировалась с релизами 1С:Предприятия 7.70.18, 7.70.21 и 7.70.25 под управлением ОС Windows XP с версиями компоненты 1cpp.dll – от 1.8.1.4 и выше; версиями MS SQL Server – MS SQL 2000 (без сервис-паков) и MS SQL 2000 sp3a.

Данный текст предполагает, что вы досконально знаете достоинства и недостатки стандартных бухгалтерских запросов 1С:Предприятия, и что вы по крайней мере в общих чертах знакомы с методикой оптимального программирования для 1С:Предприятия SQL-версии. Также, данный текст не является заменителем синтаксис-помощника и не содержит полных сведений о каждой функции или процедуре класса. В тексте на различных примерах показывается, в каких случаях какие методы класса помогут достичь наилучших результатов с точки зрения скорости выполнения запросов и трудозатрат программиста.

Класс изначально не предназначен для тупой имитации методов объекта «БухгалтерскиеИтоги» (далее по тексту – «БИ»). Несмотря на то, что большинство стандартных методов объекта «БИ» или уже реализовано (с набором параметров, наиболее часто используемых при построении запросов), или планируется реализовать в следующих версиях класса, функционал класса не исчерпывается такой имитацией. Напротив, при построении и анализе запросов рекомендуется отойти от стандартных методов и пользоваться методами класса, отсутствующими в типовом объекте «БИ» – в особенности методами групповой обработки данных. Именно за счет групповой обработки данных на сервере и будет достигаться основной выигрыш в производительности.

В отличие от методов групповой обработки, перекладывающих основную работу на SQL-сервер, методы перебора выборок сымитированы на языке 1С‑Предприятия и работают на локальной рабочей станции, поэтому такие переборы (ВыбратьСубконто()/ПолучитьСубконто() и пр.) практически всегда работают медленнее методов типового объекта «БИ». Для больших запросов (от 500-1000 строк в таблице запроса) проигрыш в скорости можно значительно снизить, проиндексировав таблицу выборок (см. метод СоздатьИндекс()); но в любом случае, настоятельно рекомендуется как можно меньше использовать методы простого перебора итогов – иначе класс просто не оправдает своего названия.

Ограничения

  • Временно отсутствует поддержка запросов по корсчетам и корсубконто;
  • Временно отсутствует позиционирование итогов на счета-группы (метод ПолучитьСчет() всегда позиционируется на счете-элементе);
  • Отсутствует поддержка запросов по произвольному (нефиксированному) набору видов субконто – иными словами, нельзя вызвать метод ИспользоватьСубконто(), не указав вид субконто;
  • Поддерживаются только разделители учета типа «Справочник»;
  • При построении выборок к результатам запроса, детализированного по периодам, выборка по периодам должна быть последней (самой глубокой) выборкой – т.е. в теле цикла ПолучитьПериод() нельзя строить никакие другие выборки к данному запросу.

Нюансы, которые выглядят как ограничения, но на самом деле не являются ограничениями:

  • При получении результатов запроса в таблицу значений не выполняется проверка на активно-пассивность текущих счетов – сальдо всегда интерпретируется как дебетовое;
  • В запросах, детализированных по периодам, суммы начального и конечного сальдо периодов зависят от контекста выборки. При получении результатов такого запроса в таблицу значений суммы начального и конечного сальдо периодов не заполняются автоматически и должны быть рассчитаны программно в соответствии с требуемым контекстом (нужным набором группировок). Суммы начального и конечного сальдо остальных группировок в таблице такого запроса определяются как итог по соответствующим колонкам по всем строкам, соответствующим требуемому набору группировок.

Виды запросов 1С 7.7

Класс поддерживает два вида запросов: т.н. «краткие» запросы (аналог методов получения остатков и оборотов по счетам) и «полные», или сложные запросы (аналог режима запросов).

Краткие запросы 1С 7.7

Краткие запросы не могут получать итоги по группам субконто, списку значений со значениями субконто, группам или списку валют, списку счетов, группе или списку разделителей учета. При выполнении краткого запроса к не-текущей ИБ не проверяется флаг «только обороты» для используемых субконто.

Собственно запрос посылается на сервер одним из методов СНД(), СНК(), ДО(), КО(), СКД(), СКК() с указанием счета запроса или его кода, типа необходимого результата («С», «В» или «К»), валюты (если тип результата – «В») и необходимых субконто. Перед вызовом этих методов должен быть установлен период запроса (например, методом ПериодМ()).

Параметры запроса и работа с ними. Типы равенствнеравенств равно, В, В ИЕРАРХИИ и др.

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

Что такое параметры запроса 1С и как они используются?

Параметры запроса необходимы для того, чтобы можно было придать конструкции требуемую гибкость и быстродействие. Для объявления нужного параметра в языке запроса используется символ «&». Расшифровывается это следующим образом: &ТаблицаЦен (в данном случае именем параметра является значение «ТаблицаЦен»). Чтобы запрос «понял» присваиваемый ему параметр, необходима следующая конструкция:

image001

Рассмотрим на примере присвоения Запросу 1С параметра Текущая дата – выглядеть на языке запросов это будет следующим образом:

image002

Это примитивный тип конструкции, есть и более интересные.

Списочные параметры – работаем с операторами В/В ИЕРАРХИИ

Массив данных и список значений могут быть переданы в качестве параметров языка запроса 1С. К примеру, конструкция может выглядеть следующим образом:

image003

Рассмотрим подробнее значимые отличия операторов «В» и «В ИЕРАРХИИ» и другие функции языка запросов 1С v 8.

Функции языка запросов 1С v 8
«ССЫЛКА»

Ссылочный тип логического оператора «ССЫЛКА» даёт возможность проверить поле составного вида на наличие в нём конкретного типа. Задаётся следующей конструкцией:

image004

«МЕЖДУ»

Функция, которая позволяет конструкции проверить поле по параметру «вхождение значения в указанный диапазон». Синтаксическое выражение:

image005

«В», «В ИЕРАРХИИ»

Конструкция служит для того, чтобы выявлять наличие определённых значений в передаваемых списках. Поиск производится также в подчинённых значениях после разворачивания иерархии элементов вниз. На практике это выглядит следующим образом:

image006

«ПОДРОБНО»

Функция языка запросов 1С даёт возможность провести сравнение выбранной строки с шаблонным вариантом. Параметр применяется в том случае, если строка, по которой производится поиск, чётко не закреплена. Шаблонное решение выстраивается по следующим правилам:

image007

«ЕСТЬ NULL »

Данный параметр работает следующим образом: в том случае, если значение поля не определено, то оно равно указанному выражению. С учётом синтаксиса языка запросов 1С получаем:

image008

  • В результате применения конструкции для соединения данных таблиц, если это не тип внутреннего соединения таблиц;
  • Если произошёл выбор реквизитов, значения которых предопределены исключительно для групп справочников;
  • По итогам выбора графы, находящейся в журнале документа, если у конкретного используемого документа отсутствуют реквизиты, являющиеся составной частью данной графы.

Все эти параметры – лишь краткий перечень эффективных функций языка Запросов 1С. Для грамотной работы в конфигураторе программы необходимо тщательно изучить все параметры языка запросов. Это не просто позволит получать нужные отчёты из базы данных 1С, но и увеличит быстродействие их обработки.

Заголовок текста запроса включает в себя дополнительные системные фильтры, которые влияют на выборку данных:

  1. Период с … по … — уточняют период, за который выбирать объекты, привязанные к дате;
  2. Обрабатывать — уточняют, как поступать с объектами, помеченными на удаление;
  3. ОбрабатыватьДокументы — уточняют, как поступать с непроведенными документами;
  4. ОбрабатыватьОперации — уточняют, как поступать с операциями с выключенными проводками;

Ограничение периода выборки данных

Для документов, регистров и журнала расчетов можно ограничить период выборки данных. Это делается с помощью конструкции вида:

[Период] с НачальныйМоментВремени [По КонечныйМоментВремени];

В качестве параметров НачальныйМоментВремени и КонечныйМоментВремени можно указывать: дату, документ или позицию документа.

Либо объявить и инициализировать переменные модуля, а в тексте запроса просто указать их имена:

Транслятор сам подставит значения переменных в текст запроса.

Ограничение выборки помеченных на удаление объектов

Для справочников, документов, счетов и операций доступна ограничение на выборку помеченных на удаление данных. Это делается с помощью конструкции вида:

Оператор описывает, какими объектами должен манипулировать запрос:

  • всеми объектами (по умолчанию);
  • объектами, помеченными на удаление;
  • объектами, не помеченными на удаление;

Если конструкция опущена, в запросе обрабатываются все объекты.

Ограничение выборки документов

Для документов имеется возможность ограничения выборки по признаку проведения. Это делается с помощью конструкции вида:

Оператор описывает, какими документами должен манипулировать запрос:

  • всеми документами;
  • проведенными документами (пол умолчанию);
  • непроведенными документами;

Если конструкция опущена, в запросе будут обрабатываться только проведенные документы.

Ограничение выборки операций

Для операций имеется возможность ограничения выборки по признаку включения проводок. Это делается с помощью конструкции вида:

Оператор описывает, какими документами должен манипулировать запрос:

  • операциями со всеми проводками;
  • операциями с включенными проводками (по умолчанию);
  • операциями с выключенными проводками;

Если конструкция опущена, в запросе будут обрабатываться только операциями с включенными проводками.

На платформе 1С 7.7 есть возможность получения данных ИБ в табличном виде, готовом для использования в отчетах или обработках. Такая возможность реализована с помощью программного объекта агрегатного типа Запрос.
Передавая ранее созданному объекту текст запроса, на выходе вы получаете необходимую выборку данных.
В тексте запроса Вы можете использовать простейшие агрегатные функции (вроде Количество, Сумма и т.п.), а также собственные функции, описанные в глобальном модуле. Эти функции обязательно должны быть экспортными.

С помощью запросов можно извлекать информацию из таблиц объектов следующего типа:

  • Справочник
  • Документ
  • Операция
  • Счет
  • Регистр
  • ЖурналРасчетов

В общем случае синтаксис запроса включает следующие блоки (приведены в рекомендованной последовательности):

Особенность языка запросов на платформе 1С 7.7. заключается в том, что вы можете использовать эти области в любой последовательности. Однако, область переменных должна располагаться всегда в начале, т.к. транслятор запроса однопроходный и выдаст ошибку при попытке использования переменной до ее описания. Я же рекомендую придерживаться одной общепринятой схемы построения текстов запросов. Так будет удобнее читать запросы Вам и вашим последователям.

Заголовок

Заголовок является необязательной частью запроса и включает в себя дополнительные системные фильтры, которые влияют на выборку данных:

Область переменных

В обязательной области переменных описываются внутренние переменные запроса. Описание переменной запроса включает в себя имя переменной и путь к данным:

Кроме того, переменные могут использоваться в других местах запроса: группировках, условиях и агрегатных функциях. В качестве имен переменных нельзя использовать зарезервированные ключевые слова языка запросов:

Без Год Групп
Группировка День Документ
И Или Квартал
Когда Месяц Неделя
НомерСтроки Обрабатывать ОбрабатыватьДокументы
Период ПериодЖурнала ОбрабатыватьОперации
По С СтрокаДокумента
Упорядочить Условие Функция

Область группировок

Необязательная область группировок на языке запросов выполняют несколько важных ролей:

  • построение иерархической последовательности обхода выборки данных;
  • рассчет промежуточных итогов агрегатных функций;
  • упорядочивание данных;

Область условий

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

Область функций

Используется для описания агрегатных функций рассчета итогов по группировкам запроса

Войдите как ученик, чтобы получить доступ к материалам школы

Язык запросов 1С 8.3 для начинающих программистов: операторы МЕЖДУ и В

Автор уроков и преподаватель школы: Владимир Милькин

Логический оператор МЕЖДУ

Оператор МЕЖДУ позволяет проверить, входит ли значение выражения, указанного слева от него, в диапазон , указанный справа ( вместе с границами диапазона , то есть включительно).

Таким образом, вместо

можно написать более лаконичное

А результат будет один и тот же:

01

Если же необходимо наоборот выбрать всю еду, калорийность которой не входит в диапазон [200;300], то подойдёт следующая форма отрицания (появилась частица НЕ):

02

Оператор МЕЖДУ можно применять не только к числовым диапазонам. С датами он также хорошо работает:

19

Логический оператор В

Проверка совпадения с одним из перечисленных

Оператор В позволяет проверить, совпадает ли значение выражения, указанного слева от него, с одним из значений , описанных справа .

Таким образом, вместо

можно написать более лаконичное

А результат будет один и тот же:

03

Если же необходимо наоборот выбрать всю еду, цвет которой не совпадает ни с одним значением из списка, то подойдёт следующая форма отрицания (появилась частица НЕ):

Проверка совпадения значения с одним из результата запроса

Пусть нам требуется выбрать из базы только те цвета, которые присутствуют в описании еды. Таким образом, в отобранном списке не должен присутствовать, например, чёрный цвет, так как еды чёрного цвета в нашей базе нет. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Один из вариантов как это можно сделать - использовать логический оператор В, справа от которого будет находиться подзапрос, выбирающий названия цветов из всех записей справочника Еда:

В качестве отступления упомяну, что из внутреннего запроса есть возможность обращаться к полям внешнего запроса.

Опять же, для этой формы оператора В, также доступно использование частицы НЕ перед ним.

Проверка принадлежности по иерархии для справочников

Для справочников проверка может осуществляться и на принадлежность по иерархии.

Для начала давайте рассмотрим пример иерархического справочника. Откройте справочник "Города" в нашей базе:

06

07

Обратите внимание, что его элементы отличаются от других справочников (Еда, Цвета, Вкусы) наличием жёлтых папок. Это группы справочника .

Группы отличаются от обычных элементов тем, что могут включать в себя другие группы и элементы. Подобно тому как папки включают в себя другие папки и файлы.

Чтобы просмотреть содержимое группы, сделайте на ней двойной щелчок мышкой:

08

Чтобы выйти на уровень выше, снова сделайте двойной щелчок по группе:

Таким образом иерархический справочник может содержать как обычные элементы (например, Рио-де-Жанейро, Салвадор), так и группы (например, Бразилия, Индия). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

У каждого элемента (будь то группа или обычный элемент) может быть родитель. Например, родителем элемента Рио-де-Жанейро является группа Бразилия:

10

И это верно, потому что Рио-де-Жанейро входит в состав группы Бразилия в иерархии справочника:

11

Теперь давайте напишем такой запрос, который будет запрашивать выбранную группу-страну и все элементы-города, входящие в неё.

Обратите внимание на то, что в тексте запроса перед именем ГруппаСтрана стоит амперсанд (&). Имена с амперсандом автоматически распознаются системой как параметры , значение которых должно быть задано перед выполнением запроса.

После того, как мы вставим этот запрос в консоль и нажмем кнопку "Выполнить" для обновления, у нас появится возможность задать этот параметр:

12

Выберите в качестве его значения группу "Россия" (кнопка Выбрать):

13

Если теперь мы нажмём кнопку "Выполнить", то результат запроса будет следующим:

В результат запроса попала сама группа (Россия) и все элементы, которые входят в её состав (Пермь, Красноярск и Воронеж).

Если вместо России, выбрать "Бразилия", то результат будет таким:

Таким образом результатом оператора В ИЕРАРХИИ будет ИСТИНА, если значение выражения слева является ссылкой на элемент справочника и входит во множество значений справа (Бразилия) или иерархически принадлежит какой-нибудь группе, содержащейся в этом множестве (Сан-Паулу, Рио-де-Жанейро, Салвадор).

В качестве множества значений, на совпадение с которыми выполняется проверка, может фигурировать и результат запроса. В этом случае справа от оператора В необходимо указать описание запроса:


Для оператора В ИЕРАРХИИ также доступно использование частицы НЕ перед ним.

Читайте также: