При реализации комиссионных товаров пользователи конфигурации «Управление торговым предприятием» (УТП) нередко сталкиваются с ситуацией, когда данные отчетов по продажам и валовой прибыли искажаются: количество проданного товара оказывается в два раза больше фактического, а рассчитанная средняя цена и рентабельность продаж отображаются некорректно. Разберем механизм возникновения этой коллизии и рассмотрим способы её устранения.
Проанализируем стандартную цепочку документооборота комиссионной торговли. Сначала оформляется документ Реализация товаров и услуг конечному покупателю. В этот момент система делает законные движения в регистре накопления Продажи: фиксируется факт реализации номенклатуры комитента, списывается количество и отражается отпускная стоимость. Далее наступает этап отчета перед комитентом с помощью документа Отчет комитенту о продажах товаров. При его проведении в регистр Продажи неожиданно снова записываются те же позиции номенклатуры с тем же количеством.
В отличие от родственных типовых конфигураций (например, УПП или УТ 10.3), где по документу комитента формируется строго одна строка с комиссионным вознаграждением по услуге, в модуле проведения документа ОтчетКомитентуОПродажах конфигурации УТП разработчики применили выгрузку строк из табличной части с товарами напрямую в таблицу движений регистра.
Посмотрим на фрагмент типового кода проведения:
Если СтруктураШапкиДокумента.ВедениеУчетаПоПроектам Тогда
УправлениеПроектами.ОтразитьДвиженияПоПроектам(ТаблицаПоТоварам, ТаблицаДвижений, Проект, Дата, "Продажи");
Иначе
ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаПоТоварам, ТаблицаДвижений);
КонецЕсли;
Разберем подробнее, что происходит при таком алгоритме. Таблица ТаблицаПоТоварам формируется для отражения вознаграждения в разрезе каждой реализованной позиции, однако ресурс Количество при этом не обнуляется. В результате в регистр Продажи попадают следующие данные:
Из-за этого аналитические отчеты показывают двойной объем реализации в натуральном выражении, а также сильно заниженную выручку, рассчитанную на основе сумм вознаграждения.
Если конфигурация снята с поддержки или находится на частичной поддержке с возможностью редактирования, исправим логику формирования движений непосредственно в модуле объекта Документ.ОтчетКомитентуОПродажах.
Рассмотрим два варианта доработки кода:
Продажи, оставив формирование записи только по услуге комиссионного вознаграждения. Реализация товаров уже зафиксирована первичным документом реализации покупателю, поэтому повторные записи не требуются.Посмотрим на пример обнуления количественного ресурса перед заполнением набора движений:
Для Каждого Стр Из ТаблицаПоТоварам Цикл
Стр.Количество = 0;
КонецЦикла;
Если СтруктураШапкиДокумента.ВедениеУчетаПоПроектам Тогда
УправлениеПроектами.ОтразитьДвиженияПоПроектам(ТаблицаПоТоварам, ТаблицаДвижений, Проект, Дата, "Продажи");
Иначе
ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаПоТоварам, ТаблицаДвижений);
КонецЕсли;
После применения этой корректировки сумма вознаграждения сохранится в разрезе товаров, но задвоения физического количества в отчетах больше не возникнет.
Если конфигурацию необходимо оставить на полной поддержке поставщика, используем механизм подписок на события. Создадим отдельную подписку на событие ОбработкаПроведения для документа ОтчетКомитентуОПродажах.
Разберем по шагам алгоритм обработчика:
Продажи.Посмотрим на пример реализации такого обработчика:
Процедура ИсправитьДвиженияОтчетаКомитенту(Источник, Отказ, РежимПроведения) Экспорт
Если Отказ Тогда
Возврат;
КонецЕсли;
ДвиженияПродажи = Источник.Движения.Продажи;
Если Не ДвиженияПродажи.Выбран() Тогда
ДвиженияПродажи.Прочитать();
КонецЕсли;
Модифицирован = Ложь;
Для Каждого Движение Из ДвиженияПродажи Цикл
// Исключаем строку служебной услуги вознаграждения, обнуляем только товары
Если ЗначениеЗаполнено(Движение.Номенклатура) И Движение.Количество <> 0 Тогда
Движение.Количество = 0;
Модифицирован = Истина;
КонецЕсли;
КонецЦикла;
Если Модифицирован Тогда
ДвиженияПродажи.Записать();
КонецЕсли;
КонецПроцедуры
Если оперативное вмешательство в конфигуратор невозможно, временно обойдем проблему средствами пользовательского интерфейса. Поскольку в регистре Продажи нет реквизита, жестко отделяющего комиссионные продажи от собственных, настроим постоянные отборы в отчетах «Продажи» и «Валовая прибыль».
Выполним следующие настройки схемы компоновки данных или настроек отчета:
Не равно (или Не в списке).Отчет комитенту о продажах товаров.Договор контрагента.Вид договора Не равно значению С комитентом.После сохранения этой настройки в отчет попадут только движения исходных документов реализации конечному покупателю, а некорректные строки отчета комитенту отображаться не будут.
Важное замечание: после внесения программных изменений в конфигурацию потребуется выполнить групповое перепроведение документов Отчет комитенту о продажах товаров за нужный период, чтобы обновить записи в регистре накопления Продажи.