Почему не заполняется колонка «Оценка» в отчете «Ведомость по товарам в ценах номенклатуры» в УТ 11?

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

В конфигурациях 1С:Управление торговлей 11, ERP 2 или Комплексная автоматизация 2 пользователи часто сталкиваются с ситуацией, когда в отчете Ведомость по товарам в ценах номенклатуры колонка Оценка остается пустой. При этом количество товара на складе отображается корректно, вид цен в настройках выбран, и цены на товар установлены документами Установка цен номенклатуры. Рассмотрим подробнее, почему это происходит и как исправить эту проблему, особенно если вы используете характеристики номенклатуры.

Анализируем причину возникновения проблемы

Основная причина отсутствия данных в колонке Оценка (которая рассчитывается как Цена * Количество) кроется в логике соединения таблиц в запросе системы компоновки данных (СКД). В типовом отчете происходит левое соединение остатков товаров из регистра накопления Товары на складах с данными из регистра сведений Цены номенклатуры (или Цены номенклатуры 25 в новых версиях).

Проанализируем ситуацию, когда в системе ведется учет по Характеристикам. В Виде номенклатуры может быть настроено, что цена устанавливается:

  1. На номенклатуру в целом (общая цена для всех характеристик).
  2. Индивидуально для каждой характеристики.

Если цена установлена «на номенклатуру в целом», то в регистре сведений Цены номенклатуры измерение Характеристика будет пустым. Однако в регистре Товары на складах остатки хранятся в разрезе конкретных характеристик. Типовой запрос отчета пытается соединить эти таблицы по условию: ТоварыНаСкладах.Характеристика = ЦеныНоменклатуры.Характеристика. Так как в одной таблице характеристика заполнена, а в другой — нет, условие не выполняется, цена не подтягивается, и Оценка получается нулевой.

Разбираем структуру запроса и настройки Вида номенклатуры

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

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

Способ 1: Изменение условий связи в запросе

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

В тексте запроса или в окне редактирования связей наборов данных СКД условие может выглядеть следующим образом:


ВЫБОР 
    КОГДА НЕ ТоварыНаСкладах.Номенклатура.ВидНоменклатуры.НастройкиКлючаЦенПоХарактеристики = Значение(Перечисление.ВариантОтбораДляКлючаЦен.НеИспользовать) 
    ТОГДА ТоварыНаСкладах.Характеристика = ЦеныНоменклатуры.Характеристика 
    ИНАЧЕ ИСТИНА 
КОНЕЦ

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

Способ 2: Иерархический поиск цены (Универсальный)

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

Проанализируем алгоритм:

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

Пример реализации в тексте запроса:


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

В этом случае поле Оценка будет рассчитываться как АктуальнаяЦена * Количество, и оно заполнится даже для тех товаров, у которых цена задана только одна на всю карточку номенклатуры.

Дополнительные факторы, влияющие на результат

Если после правки запроса колонка Оценка все равно остается пустой, проанализируем следующие параметры:

Использование расширений для исправления

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

Выясним, какой именно набор данных в СКД отвечает за получение цен. Обычно это набор данных с именем ЦеныНоменклатуры или виртуальная таблица в основном запросе. Добавление условия на проверку НастройкиКлючаЦенПоХарактеристики позволит сделать отчет гибким: он будет учитывать индивидуальные цены там, где это необходимо, и общие цены для всех остальных случаев.

Таким образом, мы выяснили, что корень проблемы — в жестком сопоставлении характеристик склада и цен. Гибкая настройка связей в СКД позволяет полностью устранить пустые строки в колонке Оценка и обеспечить корректную финансовую оценку складских остатков.

← На главную