Как правильно создать отчет в 1С для сравнения цен нескольких филиалов или поставщиков?

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

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

Понимание архитектуры запроса: пакетный подход

Основная ошибка при решении этой задачи заключается в попытке получить данные обоих филиалов одним запросом с использованием одного условия ГДЕ Филиал = &Филиал. Поскольку в базе данных цена для каждого филиала — это отдельная запись в регистре, попытка фильтрации по двум значениям одновременно в одной строке приводит к тому, что запрос не находит данных. Чтобы получить цены в одной строке для сравнения, нам необходимо использовать пакетные запросы.

Разберем алгоритм построения пакетного запроса по шагам:

  1. Создаем временную таблицу для первого филиала.
  2. Создаем временную таблицу для второго филиала.
  3. Выполняем соединение этих таблиц по ключевым полям: Номенклатура и ТипЦен.

Давайте посмотрим, как может выглядеть структура такого запроса:


ВЫБРАТЬ
    Цены.Номенклатура КАК Номенклатура,
    Цены.ТипЦен КАК ТипЦен,
    Цены.ДействующаяЦена КАК ЦенаФилиал1
ПОМЕСТИТЬ ВТ_Филиал1
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК Цены
ГДЕ
    Цены.Филиал = &Филиал1
;
ВЫБРАТЬ
    Цены.Номенклатура КАК Номенклатура,
    Цены.ТипЦен КАК ТипЦен,
    Цены.ДействующаяЦена КАК ЦенаФилиал2
ПОМЕСТИТЬ ВТ_Филиал2
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК Цены
ГДЕ
    Цены.Филиал = &Филиал2
;
ВЫБРАТЬ
    ЕСТЬNULL(Т1.Номенклатура, Т2.Номенклатура) КАК Номенклатура,
    Т1.ЦенаФилиал1 КАК Цена1,
    Т2.ЦенаФилиал2 КАК Цена2
ИЗ
    ВТ_Филиал1 КАК Т1
    ПОЛНОЕ СОЕДИНЕНИЕ ВТ_Филиал2 КАК Т2 
    ПО Т1.Номенклатура = Т2.Номенклатура 
    И Т1.ТипЦен = Т2.ТипЦен

Настройка СКД для гибкого анализа

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

При использовании перекрестной таблицы в настройках СКД, вы можете настроить структуру так, чтобы филиалы автоматически выводились в колонки, а номенклатура — в строки. В этом случае СКД самостоятельно «развернет» данные, что значительно упрощает разработку.

Почему данные выводятся некорректно?

Частые проблемы, с которыми сталкиваются разработчики при попытке создать отчет сравнения:

Аналитика и дополнительные возможности

Сравнение цен «глазами» — это лишь первый этап. Для профессионального отчета добавьте в СКД вычисляемые поля. Например, можно добавить поле с расчетом отклонения:

Цена1 - Цена2 (абсолютное отклонение)

(Цена1 - Цена2) / Цена2 * 100 (относительное отклонение в процентах)

Для улучшения читаемости используйте условное оформление. Вы можете настроить систему так, чтобы ячейки с ценами, имеющими отклонение более 5%, подсвечивались красным цветом. Это позволит пользователю моментально находить проблемные позиции, не вчитываясь в каждую строку таблицы.

Помните, что ключ к успеху в 1С — это чистота данных и правильное использование механизмов платформы. Используйте консоль запросов для отладки каждого пакета отдельно, и тогда создание сложных аналитических отчетов станет для вас простой и понятной задачей.

← На главную