К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как указать счёт в запросе 1С

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

Отбор по счёту — одна из самых частых задач при работе с регистрами бухгалтерии в 1С. Обороты, остатки и движения почти всегда нужны не по всему плану счетов, а по конкретному счёту или группе: 10 «Материалы», 41 «Товары», 62 «Расчёты с покупателями». При этом способ указать счёт зависит от того, какую таблицу вы используете — виртуальную таблицу остатков и оборотов или физическую таблицу движений.

Ключевой принцип: для виртуальных таблиц регистра бухгалтерии (Остатки, Обороты, ОстаткиИОбороты) счёт передаётся через параметр виртуальной таблицы УсловиеСчета, а не через секцию ГДЕ основного запроса. Это не просто рекомендация по стилю — такой подход напрямую влияет на скорость выполнения, потому что отбор применяется на уровне формирования виртуальной таблицы, до основной выборки.

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

Где именно указывается счёт: виртуальные и физические таблицы

Регистр бухгалтерии в 1С имеет физическую таблицу движений и набор виртуальных таблиц: Остатки, Обороты, ОстаткиИОбороты, ДвиженияССубконто. От того, какая таблица выбрана, зависит синтаксис указания счёта.

Виртуальные таблицы принимают параметры в круглых скобках сразу после имени таблицы. Среди этих параметров есть УсловиеСчета — строка условия, в которой доступно поле Счет. Именно сюда и нужно помещать отбор по счёту. Если же вы работаете с физической таблицей движений (например, РегистрБухгалтерии.Хозрасчетный без указания виртуальной таблицы), счёт фильтруется обычным условием в секции ГДЕ.

Важно понимать разницу в полях: в таблице ОстаткиИОбороты поле называется Счет, а в физической таблице движений и в ДвиженияССубконто есть два поля — СчетДт и СчетКт, потому что каждая проводка содержит дебетовую и кредитовую части.

Отбор по одному счёту в виртуальной таблице

Базовый пример — получить остатки по счёту 41 «Товары». Счёт задаётся в параметрах виртуальной таблицы, а само значение передаётся в запрос как параметр.

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Остатки.Субконто1 КАК Номенклатура,

| Остатки.СуммаОстаток КАК Сумма

|ИЗ

| РегистрБухгалтерии.Хозрасчетный.Остатки(

| &Период,

| Счет = &Счет,

| ,

| ) КАК Остатки";

Запрос.УстановитьПараметр("Период", КонецДня(ТекущаяДатаСеанса()));

Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.Товары);

Результат = Запрос.Выполнить().Выгрузить();

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

Ссылку на счёт получают через менеджер плана счетов: ПланыСчетов.Хозрасчетный.Товары — если у счёта есть предопределённое имя, либо через НайтиПоКоду("41"), если счёт создан вручную и предопределённого имени нет.

Отбор по счёту с субсчетами и по списку счетов

Часто нужны данные не по одному счёту, а по всей группе: например, по 10 «Материалы» со всеми субсчетами (10.01, 10.05 и так далее). Для этого в условии счёта используется оператор В ИЕРАРХИИ.

Запрос.Текст =

"ВЫБРАТЬ

| Обороты.Счет КАК Счет,

| Обороты.СуммаОборотДт КАК ОборотДт,

| Обороты.СуммаОборотКт КАК ОборотКт

|ИЗ

| РегистрБухгалтерии.Хозрасчетный.Обороты(

| &НачалоПериода,

| &КонецПериода,

| ,

| Счет В ИЕРАРХИИ (&Счет),

| ,

| ,

| ) КАК Обороты";

Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.Материалы);

Если нужны несколько несвязанных счетов — например, 60 и 62 — используйте оператор В со списком параметров или передайте массив счетов одним параметром:

СписокСчетов = Новый Массив;

СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПоставщикамиИПодрядчиками);

СписокСчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПокупателямиИЗаказчиками);

Запрос.УстановитьПараметр("СписокСчетов", СписокСчетов);

// В условии счёта: Счет В (&СписокСчетов)

Сравнение вариантов отбора

Счет = &Счет

Точное совпадение с одним счётом. Субсчета не попадут в выборку — если у счёта есть субсчета, остаток по самому счёту-группе обычно пуст.

Счет В ИЕРАРХИИ (&Счет)

Сам счёт и все его субсчета любого уровня. Подходит для группировочных счетов вроде 10, 41, 62.

Счет В (&СписокСчетов)

Произвольный набор счетов через массив. Удобно, когда счета не связаны иерархией.

Отбор по счёту в физической таблице движений

Когда нужны сами проводки, а не агрегированные остатки, запрос строится по таблице движений. Здесь у проводки есть дебетовый и кредитовый счёт, поэтому условие пишется в секции ГДЕ с учётом обеих сторон.

Запрос.Текст =

"ВЫБРАТЬ

| Движения.Регистратор КАК Документ,

| Движения.СчетДт КАК СчетДт,

| Движения.СчетКт КАК СчетКт,

| Движения.Сумма КАК Сумма

|ИЗ

| РегистрБухгалтерии.Хозрасчетный КАК Движения

|ГДЕ

| Движения.Период МЕЖДУ &НачалоПериода И &КонецПериода

| И (Движения.СчетДт = &Счет ИЛИ Движения.СчетКт = &Счет)

| И Движения.Активность";

Условие Активность отсекает помеченные на удаление и отключённые движения — без него в выборку могут попасть «мёртвые» записи. Если нужны только проводки, где счёт стоит строго по дебету, оставьте одно условие СчетДт = &Счет.

Совмещение отбора по счёту с субконто и организацией

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

Запрос.Текст =

"ВЫБРАТЬ

| Остатки.Субконто1 КАК Контрагент,

| Остатки.СуммаОстатокДт КАК Долг

|ИЗ

| РегистрБухгалтерии.Хозрасчетный.Остатки(

| &Период,

| Счет = &Счет,

| &ВидыСубконто,

| Организация = &Организация

| И Субконто1 = &Контрагент) КАК Остатки";

ВидыСубконто = Новый Массив;

ВидыСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);

Запрос.УстановитьПараметр("ВидыСубконто", ВидыСубконто);

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

Порядок действий при написании запроса
  1. 1
    Определите, какая таблица нужна: остатки, обороты или сами проводки
  2. 2
    Выберите вид условия счёта: равенство, В ИЕРАРХИИ или список В
  3. 3
    Напишите текст запроса, соблюдая позиции параметров виртуальной таблицы
  4. 4
    Передайте ссылку на счёт через УстановитьПараметр
  5. 5
    Выполните запрос в консоли запросов и сверьте итог с оборотно-сальдовой ведомостью

Как проверить, что отбор по счёту сработал правильно

Самый надёжный способ проверки — сверка с типовым отчётом. Сформируйте оборотно-сальдовую ведомость по тому же счёту за тот же период и сравните итоговые суммы с результатом запроса. Расхождение почти всегда означает одну из типовых ошибок: не тот вид условия, неверный период или пропущенные субсчета.

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

Контрольные точки

Как проверить результат

Совпадение итога с ОСВ по счёту
Норма

Суммы остатков и оборотов совпадают до копейки

Тревожный признак

Расхождение — проверьте В ИЕРАРХИИ, период и активность записей

Наличие субсчетов в выборке
Норма

Видны строки по всем нужным субсчетам

Тревожный признак

Есть только счёт-группа или часть субсчетов отсутствует

Количество строк
Норма

Число строк соответствует числу субконто с ненулевыми остатками

Тревожный признак

Пустой результат при заведомо существующих остатках — вероятно, не та позиция параметра

Типичные ошибки при указании счёта

Большинство проблем с отбором по счёту сводится к нескольким повторяющимся причинам. Ниже — те, которые встречаются чаще всего.

Типичные ошибки
01
Отбор по счёту в секции ГДЕ вместо УсловиеСчета — запрос работает, но сначала выбирает все счета, а потом фильтрует, что резко замедляет выполнение на больших базах
02
Условие Счет = &Счет для счёта-группы — субсчета не попадают в выборку, и результат оказывается пустым или заниженным
03
Передача кода счёта строкой "41" вместо ссылки — сравнение ссылки со строкой не срабатывает, результат пустой
04
Сбитые позиции параметров виртуальной таблицы — условие по организации попадает в позицию условия счёта, запрос падает с ошибкой или возвращает неверные данные
05
Отсутствие отбора по активности в таблице движений — в выборку попадают движения помеченных на удаление документов

Отдельно стоит сказать о получении ссылки на счёт. Конструкция ПланыСчетов.Хозрасчетный.НайтиПоКоду("41") вернёт пустую ссылку, если счёта с таким кодом нет или код хранится с другим форматом. Перед использованием результата поиска полезно проверять его на пустоту, иначе запрос молча вернёт пустую выборку.

Если запрос с отбором по счёту используется в отчёте на СКД, задайте условие счёта через фигурные скобки в тексте запроса — тогда пользователь сможет менять счёт в настройках отчёта без изменения кода.
ПЗ
Практическое замечание

Когда обращаться за помощью

Описанные приёмы безопасны: запросы на выборку не изменяют данные базы. Однако есть ситуации, где лучше привлечь специалиста по 1С: если запрос используется в процедуре, которая на его основе записывает данные (например, формирует проводки или корректирует остатки), если нужно строить сложные сводные отчёты по нескольким регистрам с корреспонденциями счетов, или если производительность запроса критична и требуется анализ плана запроса на уровне СУБД.

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

Итог

Что важно запомнить

Счёт в запросе 1С указывают через параметр УсловиеСчета виртуальной таблицы регистра бухгалтерии или в секции ГДЕ для таблицы движений. Значение передают параметром как ссылку на план счетов. Для групп счетов используйте В ИЕРАРХИИ, для нескольких счетов — список В. Результат всегда сверяйте с оборотно-сальдовой ведомостью.

Частые вопросы

Можно ли передать код счёта строкой вместо ссылки?

Нет, сравнение поля Счет со строкой не сработает — типы не совпадают, и выборка будет пустой. Сначала получите ссылку: через предопределённое имя (ПланыСчетов.Хозрасчетный.Товары) или через НайтиПоКоду("41"). Второй способ требует проверки результата на пустую ссылку.

Почему запрос по счёту-группе возвращает пустой результат?

Чаще всего используется условие Счет = &Счет, а остатки физически хранятся на субсчетах. Замените условие на Счет В ИЕРАРХИИ (&Счет) — тогда в выборку попадут все субсчета указанной группы.

Как отобрать проводки, где счёт встречается и по дебету, и по кредиту?

В запросе по таблице движений напишите составное условие: (СчетДт = &Счет ИЛИ СчетКт = &Счет). Если нужны только обороты между двумя конкретными счетами, используйте виртуальную таблицу ОборотыДтКт с условиями на оба счёта.

Чем отличается отбор в УсловиеСчета от отбора в секции ГДЕ?

УсловиеСчета применяется при формировании виртуальной таблицы — выбираются только нужные счета. Отбор в ГДЕ фильтрует уже сформированную полную выборку. Результат тот же, но на больших базах разница в скорости может быть многократной.

Как указать счёт в запросе для отчёта на СКД?

В тексте запроса СКД условие счёта можно заключить в фигурные скобки внутри параметров виртуальной таблицы — тогда отбор станет доступен в настройках отчёта. Либо задайте параметр с типом «ПланСчетовСсылка» и заполняйте его программно или в настройках.

Что делать, если НайтиПоКоду не находит счёт?

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