Как правильно получить остатки товаров на складах в 1С:Бухгалтерии с помощью запроса

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

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

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

Причины расхождений данных запроса с ОСВ

Проанализируем основные факторы, из-за которых цифры в пользовательском запросе могут отличаться от отчетов программы:

  1. Отбор по организации. В типовой ОСВ почти всегда установлен отбор по конкретной организации. Если в запросе не передать фильтр по измерению Организация, виртуальная таблица вернет суммарные остатки по всей информационной базе, включающей все юридические лица.
  2. Точка актуальности и момент времени. Если в параметрах виртуальной таблицы не указана дата, остатки рассчитываются на текущий момент времени. Если же ОСВ строится на конец определенного периода (например, конец месяца), то любые последующие документы изменят картину. Для точного совпадения необходимо явно передавать дату расчета остатка через функцию КонецДня() или Граница.
  3. Выбор ресурса остатка. Использование поля КоличествоОстатокДт может приводить к искажению картины при наличии отрицательных остатков (кредитового сальдо при списании в минус). В этом случае поле дебетового остатка возвращает NULL или 0, тогда как ОСВ наглядно демонстрирует отрицательное значение. Необходимо использовать общее ресурсное поле КоличествоОстаток.
  4. Непереданный список видов субконто. Если не ограничить состав субконто в третьем параметре виртуальной таблицы, расчет остатков будет происходить по всем видам субконто счета (Номенклатура, Склады, Партии). Это приводит к дублированию строк в результате и требует избыточной группировки.

Оптимальная структура запроса к виртуальной таблице остатков

Рассмотрим, как правильно сконструировать запрос к виртуальной таблице РегистрБухгалтерии.Хозрасчетный.Остатки. Обратите внимание, что все отборы по счетам, измерениям и составу субконто следует задавать непосредственно в параметрах виртуальной таблицы, а не в секции ГДЕ. Это позволяет платформе 1С обращаться напрямую к таблицам итогов СУБД.

Разберем по шагам создание массива видов субконто и установку параметров:


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

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

// 2. Устанавливаем параметры запроса
Запрос.УстановитьПараметр("Период", Новый Граница(КонецДня(ТекущаяДата()), ВидГраницы.Включая));
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.Товары); // Счет 41 со всеми субсчетами
Запрос.УстановитьПараметр("ВидыСубконто", МассивСубконто);
Запрос.УстановитьПараметр("Организация", СсылкаНаОрганизацию);

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

Разбор ключевых параметров запроса

Рассмотрим подробнее каждый элемент представленного решения:

  1. Параметр «Счет»: Использование предопределенного счета ПланыСчетов.Хозрасчетный.Товары с условием В ИЕРАРХИИ позволяет учесть все субсчета учета товаров: 41.01 («Товары на складах»), 41.02 («Товары в розничной торговле»), 41.04 («Покупные изделия») и другие.
  2. Параметр «ВидыСубконто»: Передача массива с единственным элементом Номенклатура указывает виртуальной таблице сгруппировать остатки по товарам на уровне базы данных, игнорируя склады и партии. Это исключает необходимость использования конструкции СГРУППИРОВАТЬ ПО в самом тексте запроса.
  3. Параметр «Условие»: Передача условия Организация = &Организация в четвертый параметр виртуальной таблицы обеспечивает быстрое извлечение данных без сканирования записей по другим организациям.
  4. Поле «КоличествоОстаток»: Выбор поля КоличествоОстаток гарантирует получение корректного сальдо с учетом возможных пересортиц и отрицательных остатков.

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

← На главную