Зачастую перед разработчиками 1С встает задача создания аналитического отчета, позволяющего сопоставить цены на одну и ту же номенклатуру, полученные из различных источников: филиалов, складов или поставщиков. В этой статье мы разберем, как спроектировать такой запрос и настроить систему компоновки данных (СКД), чтобы избежать дублирования или пустых значений при выводе информации.
Основная ошибка при решении этой задачи заключается в попытке получить данные обоих филиалов одним запросом с использованием одного условия ГДЕ Филиал = &Филиал. Поскольку в базе данных цена для каждого филиала — это отдельная запись в регистре, попытка фильтрации по двум значениям одновременно в одной строке приводит к тому, что запрос не находит данных. Чтобы получить цены в одной строке для сравнения, нам необходимо использовать пакетные запросы.
Разберем алгоритм построения пакетного запроса по шагам:
Номенклатура и ТипЦен.Давайте посмотрим, как может выглядеть структура такого запроса:
ВЫБРАТЬ
Цены.Номенклатура КАК Номенклатура,
Цены.ТипЦен КАК ТипЦен,
Цены.ДействующаяЦена КАК ЦенаФилиал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С — это чистота данных и правильное использование механизмов платформы. Используйте консоль запросов для отладки каждого пакета отдельно, и тогда создание сложных аналитических отчетов станет для вас простой и понятной задачей.