При формировании товарного отчета ТОРГ-29 в конфигурации «1С:Розница 2.2» (включая отраслевые решения, такие как «Розница 8. Аптека») пользователи иногда сталкиваются с некорректным расчетом суммовых показателей. Поле «Сумма по цене продажи» выводится правильно, однако колонка «Розничная сумма» показывается ровно вдвое больше реального значения.
Рассмотрим подробнее причины возникновения этой ошибки и разберем по шагам алгоритм её диагностики и устранения.
В отчете ТОРГ-29 вычисление розничной суммы прихода обычно выполняется прямо в тексте запроса путем перемножения цены из регистра сведений на количество поступившего товара из регистра накопления или табличной части документа:
ЕСТЬNULL(ЦеныНоменклатуры.Цена * ТаблицаТоварыОрганизацийМаксимальныйПериод.КоличествоПриход, 0) КАК СуммаПриход
Проанализируем ситуацию: если установленная розничная цена составляет 542 рубля, а приход по регистру равен 1 штуке, но отчет выводит 1084 рубля, проблема заключается не в математических вычислениях платформы, а в повторении строк при формировании выборки или компоновке отчета.
Выделим основные технические причины такого поведения:
СрезПоследних регистра сведений ЦеныНоменклатуры соединяется с таблицей движений товаров без учета всех ключевых измерений (таких как Характеристика, ВидЦены, Упаковка или ОбъектЦенообразования), то на одну запись движения товара приходятся две записи цен. В результате итоговая строка дублируется.Чтобы определить, на каком именно этапе происходит задвоение показателей, выполним отладку:
ЦеныНоменклатуры.Цена КАК ВыбраннаяЦена,
ТаблицаТоварыОрганизацийМаксимальныйПериод.КоличествоПриход КАК ВыбранноеКоличество,
ЕСТЬNULL(ЦеныНоменклатуры.Цена * ТаблицаТоварыОрганизацийМаксимальныйПериод.КоличествоПриход, 0) КАК СуммаПриход
СуммаПриход задана корректная формула агрегации Сумма(СуммаПриход).В тексте запроса при связи с виртуальной таблицей СрезПоследних регистра сведений ЦеныНоменклатуры необходимо явно передавать условие по учетному виду цены и совпадению всех измерений (характеристик и упаковок):
ПО ТаблицаТовары.Номенклатура = ЦеныНоменклатуры.Номенклатура
И ТаблицаТовары.Характеристика = ЦеныНоменклатуры.Характеристика
И ЦеныНоменклатуры.ВидЦены = &УчетныйВидЦены
Для гарантированного исключения двойных записей из регистра цен сгруппируем срез последних во временную таблицу до соединения с основной таблицей товаров:
ВЫБРАТЬ
Цены.Номенклатура КАК Номенклатура,
Цены.Характеристика КАК Характеристика,
МАКСИМУМ(Цены.Цена) КАК Цена
ПОМЕСТИТЬ ВТ_АктуальныеЦены
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ВидЦены = &УчетныйВидЦены) КАК Цены
СГРУППИРОВАТЬ ПО
Цены.Номенклатура,
Цены.Характеристика
;
Если удваивание вызвано наличием несегментированных дублей в регистрах после сбоя синхронизации РИБ, выполним процедуру Тестирование и исправление в режиме «Конфигуратор» с включенными опциями Проверка логической целостности и Пересчет итогов.