При разработке отчетов или обработок в 1С часто возникает задача вывода полного списка номенклатуры, включая те позиции, по которым на текущий момент отсутствуют остатки. Многие начинающие разработчики сталкиваются с тем, что стандартная виртуальная таблица Остатки просто «не видит» записи, если количество по ним равно нулю. Давайте разберем, почему это происходит и как правильно решить эту задачу.
Виртуальная таблица Остатки в 1С по своей архитектуре предназначена для отображения актуального состояния итогов. Если записи в регистре нет или накопленное значение равно нулю, платформа исключает эту строку из выборки на уровне формирования данных. Использование функции ЕСТЬNULL непосредственно в запросе к виртуальной таблице Остатки не даст ожидаемого результата, так как самой записи в выборке просто не существует.
Чтобы получить полный список номенклатуры, включая «нулевые» позиции, мы должны изменить логику формирования выборки. Вместо обращения только к регистру, мы сделаем справочник Номенклатура «ведущей» таблицей, к которой «присоединим» данные регистра.
Номенклатура.ЛЕВОЕ СОЕДИНЕНИЕ с виртуальной таблицей Остатки (или ОстаткиИОбороты).Номенклатура.ЕСТЬNULL.Рассмотрим, как это выглядит на практике. Ниже представлен пример кода, который поможет вам реализовать такой запрос:
ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК Номенклатура,
ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Количество
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК ТоварыНаСкладахОстатки
ПО СправочникНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
Если ваша задача чуть сложнее — например, нужно выявить номенклатуру, по которой были движения (обороты), но итоговый остаток на конец периода стал равен нулю — рекомендуем использовать виртуальную таблицу ОстаткиИОбороты. Это позволит проанализировать динамику изменений.
Важное примечание: при работе с ОстаткиИОбороты будьте внимательны к параметру периодичности. Использование периодичности Авто на больших объемах данных может существенно замедлить выполнение запроса. Если данных очень много, эффективнее будет сначала выбрать список номенклатуры во временную таблицу, а затем соединить её с регистром.
ГДЕ) на справочник, если вам не нужен полный перечень всей номенклатуры компании.ЕСТЬNULL при левых соединениях, чтобы отчеты выглядели чисто и понятно для конечного пользователя.Анализируя текущую ситуацию, мы видим, что ключ к решению лежит в правильной архитектуре запроса. Не пытайтесь заставить виртуальную таблицу Остатки вернуть то, чего в ней нет физически. Используйте мощь левых соединений, и тогда вы сможете получить детальный отчет по остаткам, который будет включать абсолютно все позиции вашего справочника.