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

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

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

Почему виртуальная таблица не возвращает нули?

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

Решение через левое соединение со справочником

Чтобы получить полный список номенклатуры, включая «нулевые» позиции, мы должны изменить логику формирования выборки. Вместо обращения только к регистру, мы сделаем справочник Номенклатура «ведущей» таблицей, к которой «присоединим» данные регистра.

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

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


ВЫБРАТЬ
    СправочникНоменклатура.Ссылка КАК Номенклатура,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Количество
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК ТоварыНаСкладахОстатки
        ПО СправочникНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура

Использование таблицы ОстаткиИОбороты

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

Важное примечание: при работе с ОстаткиИОбороты будьте внимательны к параметру периодичности. Использование периодичности Авто на больших объемах данных может существенно замедлить выполнение запроса. Если данных очень много, эффективнее будет сначала выбрать список номенклатуры во временную таблицу, а затем соединить её с регистром.

Советы по оптимизации

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

← На главную