Как в консоли запросов 1С установить параметр из конкретного реквизита документа?

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

При отладке сложных запросов в консоли часто возникает необходимость передать в параметр не весь объект (ссылку на документ), а лишь значение одного из его полей. Например, если запрос анализирует остатки по конкретному сотруднику, указанному в «Авансовом отчете», или фильтрует данные по организации из документа. Вместо того чтобы вручную искать нужное физическое лицо в справочнике, мы можем заставить консоль саму «достать» это значение из документа.

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

Способ 1: Использование типа параметра «Выражение»

Большинство современных консолей запросов (как для управляемых, так и для обычных форм) поддерживают специальный вид параметра — Выражение. Этот механизм позволяет написать произвольный фрагмент кода на языке 1С, результат которого и будет подставлен в запрос в качестве значения параметра.

Проанализируем ситуацию: нам нужно передать в параметр &Сотрудник значение реквизита ФизЛицо из конкретного документа. Для этого выполним следующие шаги:

  1. В списке параметров консоли найдем нужный нам параметр (например, &Сотрудник).
  2. В колонке «Тип» или «Вид параметра» выберем значение Выражение.
  3. В поле значения введем код для поиска документа и обращения к его реквизиту.

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


// Поиск документа по номеру и дате с последующим обращением к реквизиту
Документы.АвансовыйОтчет.НайтиПоНомеру("000000001", ТекущаяДатаСеанса()).ФизЛицо

Если у нас уже есть другой параметр, содержащий ссылку на документ (например, &ТекущийДокумент), мы можем обращаться к нему напрямую через коллекцию параметров консоли (зависит от конкретной реализации консоли):


// Обращение к реквизиту через ранее определенный параметр-ссылку
Параметры.ТекущийДокумент.Организация

Способ 2: Изменение текста запроса (Вложенный запрос)

Если используемая вами консоль не поддерживает выражения или вы хотите, чтобы логика извлечения данных была «зашита» в сам запрос, можно воспользоваться механизмом вложенных запросов. Рассмотрим этот метод на примере получения остатков по счету 71 («Расчеты с подотчетными лицами»).

Вместо того чтобы передавать &Сотрудник напрямую, мы передаем в запрос ссылку на &ТекущийДокумент и извлекаем из него ФизЛицо прямо в условии ГДЕ виртуальной таблицы.

Проанализируем пример такого запроса:


ВЫБРАТЬ
    ХозрасчетныйОстатки.Счет КАК Счет,
    ХозрасчетныйОстатки.СуммаОстатокДт КАК СуммаОстатокДт,
    ХозрасчетныйОстатки.СуммаОстатокКт КАК СуммаОстатокКт
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(
            &ДатаИтогов,
            Счет В ИЕРАРХИИ (&Счет71),
            ,
            Организация = &Организация
                И Субконто1 В
                    (ВЫБРАТЬ
                        АвансовыйОтчет.ФизЛицо
                    ИЗ
                        Документ.АвансовыйОтчет КАК АвансовыйОтчет
                    ГДЕ
                        АвансовыйОтчет.Ссылка = &ТекущийДокумент)) КАК ХозрасчетныйОстатки

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

Способ 3: Работа с предопределенными данными и типами

Часто в запросах требуется установить параметр, который является предопределенным элементом (например, основная валюта или специфический счет). В поле «Выражение» консоли мы можем использовать функцию ПредопределенноеЗначение. Это гарантирует точность данных без ручного выбора из списка.

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

ПредопределенноеЗначение("Справочник.Валюты.Руб")

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

Справочники.ФизическиеЛица.ПустаяСсылка()

Продвинутые приемы использования выражений

Рассмотрим более сложные сценарии, которые часто встречаются в практике программиста 1С при работе с консолью запросов:

  1. Работа с моментом времени. Для виртуальных таблиц остатков часто критично передать не просто дату, а момент времени конкретного документа, чтобы увидеть состояние учета «сразу после» или «до» его проведения. В выражении это пишется так: Документы.АвансовыйОтчет.НайтиПоНомеру("001").МоментВремени().
  2. Вызов экспортных функций. Если в вашей конфигурации есть общие модули с флагами «Вызов сервера», вы можете использовать их функции прямо в консоли. Например, для получения каких-то расчетных данных: ОбщийМодульУчета.ПолучитьАктуальныйГрафик(ОбъектСсылка).
  3. Приведение типов. Иногда консоль может ошибочно определить тип результата выражения. Чтобы этого избежать, используйте конструкцию ВЫРАЗИТЬ или явное преобразование типов в коде 1С, если консоль это позволяет.

Рекомендации по выбору метода

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

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

2. Если вы проектируете новый запрос и хотите сделать его максимально универсальным (например, для использования в отчете СКД) — Способ 2 (Вложенный запрос) будет более предпочтительным, так как он переносит логику получения параметров на сторону СУБД.

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

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

← На главную