Почему запрос по регистру бухгалтерии не показывает субконто и как это исправить

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

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

Анализ параметров виртуальных таблиц в запросе

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

Разберем, как работает механизм определения субконто. В конфигурации для каждого счета задается список видов субконто (например, "Контрагенты" и "Договоры"). В запросе поля называются абстрактно: Субконто1, Субконто2. Если мы не укажем в параметрах виртуальной таблицы массив &ВидыСубконто, система может не заполнить эти поля, так как на разных счетах порядок субконто может отличаться.

Рассмотрим пример правильного построения запроса с передачей массива видов субконто:


// Создаем массив с видами субконто в нужном нам порядке
ВидыСубконто = Новый Массив;
ВидыСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты);
ВидыСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры);

Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|   ХозрасчетныйОстатки.Счет,
|   ХозрасчетныйОстатки.Субконто1 КАК Контрагент,
|   ХозрасчетныйОстатки.Субконто2 КАК Договор,
|   ХозрасчетныйОстатки.СуммаОстаток
|ИЗ
|   РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = &Счет, &ВидыСубконто) КАК ХозрасчетныйОстатки";

Запрос.УстановитьПараметр("Период", КонецДня(Объект.Дата));
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.РасчетыСПокупателями);
Запрос.УстановитьПараметр("ВидыСубконто", ВидыСубконто);

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

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

Особенности "Оборотных" субконто

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

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

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

Выясним причину, если даже правильный запрос с параметрами не выдает результат. Если не только в вашем запросе, но и в стандартном отчете "Оборотно-сальдовая ведомость по счету" (ОСВ) отсутствует детализация по субконто, проблема кроется в настройках учета или самих данных.

Проанализируем План счетов в режиме "1С:Предприятие" или в Конфигураторе:

  1. Откроем нужный счет (например, 62.01).
  2. Проверим список субконто. Они должны быть добавлены.
  3. Критически важно: проверьте признаки учета субконто. Напротив каждого вида субконто стоят галочки (учет по субконто). Если галочка "Учет по субконто" снята, то данные в разрезе этой аналитики просто не записываются в регистр при проведении документов.

Если вы обнаружили, что учет по субконто был выключен, а затем его включили — старые движения документов не обновятся автоматически. Потребуется перепроведение документов, чтобы аналитика "села" в регистр.

Актуальность итогов и тестирование базы

Рассмотрим ситуацию, когда в проводках документа субконто заполнено, но в запросе по остаткам его нет. Это часто свидетельствует о проблемах с итогами регистра бухгалтерии.

Посмотрим на шаги по исправлению:

  1. Перейдем в меню "Операции" — "Управление итогами".
  2. Проверим, по какую дату рассчитаны итоги. Если дата запроса значительно превышает дату актуальности итогов, виртуальные таблицы могут работать некорректно.
  3. Попробуем выполнить "Пересчет итогов" за нужный период.

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

Влияние RLS (Row Level Security)

Проанализируем права доступа. Если у текущего пользователя настроены ограничения на уровне записей (RLS), он может видеть общие суммы движений по регистру, но не иметь прав на чтение объектов, которые выступают в качестве субконто (например, справочник "Контрагенты").

В этом случае при выполнении запроса платформа вернет данные, но вместо ссылок на контрагентов в полях субконто будет пустота или значение "Объект не найден". Попробуйте запустить тот же самый запрос под пользователем с полными правами. Если под полными правами субконто появились — значит, проблему нужно искать в настройках ролей и доступа к справочникам-аналитикам.

Прямое обращение к физической таблице движений

Чтобы окончательно понять, где "теряются" данные, выполним диагностический запрос к основной физической таблице регистра (РегистрБухгалтерии.Хозрасчетный), а не к виртуальной.


ВЫБРАТЬ
    Хозрасчетный.Период,
    Хозрасчетный.Регистратор,
    Хозрасчетный.СчетДт,
    Хозрасчетный.СубконтоДт1,
    Хозрасчетный.Сумма
ИЗ
    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
ГДЕ
    Хозрасчетный.СчетДт = &Счет

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

Заключение

Подведем итог. Проблема "пустых субконто" обычно решается проверкой трех уровней:

  1. Программный уровень: передача массива ВидыСубконто в параметры виртуальной таблицы запроса.
  2. Метаданные: проверка флагов "Учет по субконто" и "Только обороты" в Плане счетов.
  3. Системный уровень: актуальность итогов регистра бухгалтерии и наличие прав (RLS) на чтение объектов аналитики.
← На главную