Почему запрос к виртуальной таблице ОстаткиИОбороты не выдает остатки при фильтрации по оборотному субконто?

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

При работе с регистром бухгалтерии в среде 1С:Предприятие часто возникают ситуации, когда разработчики пытаются получить данные через виртуальную таблицу ОстаткиИОбороты и сталкиваются с «пустым» результатом. Особенно часто это происходит, когда накладываются условия отбора на субконто, имеющие признак «Только обороты». Давайте разберемся, почему так происходит и как правильно проектировать запросы в подобных случаях.

Природа оборотного субконто

Первым делом выясним, что такое «оборотное субконто». В конфигураторе для видов субконто предусмотрен специальный признак — Только обороты. Он устанавливается для тех видов аналитики, по которым не требуется хранить сальдо на начало или конец периода, а важны только движения (обороты) за конкретный промежуток времени. Классическим примером являются «Статьи затрат» на 20-м счете: бухгалтерии важно знать, сколько средств списано на конкретную статью, но понятие «остаток затрат на счете в разрезе статьи» математически не является остатком в чистом виде.

Поскольку остатки по таким субконто физически не хранятся в таблице итогов регистра, система не может их «вычислить» при наложении условия в секции ГДЕ или в параметрах виртуальной таблицы. В момент выполнения запроса 1С пытается сопоставить параметры отбора с данными остатков, не находит их и возвращает пустой набор.

Разбор типичной ошибки в запросе

Рассмотрим код, который вызывает данную проблему:


ВЫБРАТЬ
    ХозрасчетныйОстаткиИОбороты.Субконто1,
    ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт,
    ХозрасчетныйОстаткиИОбороты.СуммаОборотДт
ПОМЕСТИТЬ ВТ_Обороты
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&Начало, &Конец, , , , , Субконто2 В (&МассивИсключаемых)) КАК ХозрасчетныйОстаткиИОбороты

Когда вы добавляете условие НЕ Субконто2 В (&МассивИсключаемых), вы фактически приказываете системе отфильтровать остатки по полю, которое не содержит информации об остатках. В результате виртуальная таблица ОстаткиИОбороты возвращает пустой результат, так как условие фильтрации «не бьется» с имеющейся структурой данных.

Как решить данную проблему?

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

Метод 1: Разделение запросов (Остатки и Обороты отдельно)

Это самый надежный способ, если вам нужны данные в разрезе оборотного субконто. Вы получаете остатки без учета этого субконто, а обороты — отдельно, и объединяете их в итоговом запросе с помощью ЛЕВОЕ СОЕДИНЕНИЕ.

  1. Создаем запрос к виртуальной таблице Остатки (без указания оборотного субконто в разрезах).
  2. Создаем запрос к виртуальной таблице Обороты (здесь уже можно применять отбор по Субконто2).
  3. Соединяем результаты по счету и остальным (не оборотным) субконто.

Метод 2: Изменение структуры учета

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

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

Метод 3: Использование таблицы Обороты

Если вам на самом деле не нужны остатки на начало и конец периода, а важны только движения, просто замените виртуальную таблицу ОстаткиИОбороты на Обороты. Это решит проблему «пустого результата» мгновенно, так как таблица Обороты предназначена именно для анализа движений и прекрасно работает с оборотными субконто.

Подведем итоги

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

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

← На главную