Почему при проведении отчета комитенту о продажах задваивается количество в регистре Продажи?

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

При реализации комиссионных товаров пользователи конфигурации «Управление торговым предприятием» (УТП) нередко сталкиваются с ситуацией, когда данные отчетов по продажам и валовой прибыли искажаются: количество проданного товара оказывается в два раза больше фактического, а рассчитанная средняя цена и рентабельность продаж отображаются некорректно. Разберем механизм возникновения этой коллизии и рассмотрим способы её устранения.

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

Выясним причину некорректных движений

В отличие от родственных типовых конфигураций (например, УПП или УТ 10.3), где по документу комитента формируется строго одна строка с комиссионным вознаграждением по услуге, в модуле проведения документа ОтчетКомитентуОПродажах конфигурации УТП разработчики применили выгрузку строк из табличной части с товарами напрямую в таблицу движений регистра.

Посмотрим на фрагмент типового кода проведения:


Если СтруктураШапкиДокумента.ВедениеУчетаПоПроектам Тогда
    УправлениеПроектами.ОтразитьДвиженияПоПроектам(ТаблицаПоТоварам, ТаблицаДвижений, Проект, Дата, "Продажи");
Иначе
    ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаПоТоварам, ТаблицаДвижений);
КонецЕсли;

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

  1. Физическое количество реализованного товара записывается повторно.
  2. В ресурс суммы подставляется размер комиссионного вознаграждения, а не цена фактической продажи покупателю.

Из-за этого аналитические отчеты показывают двойной объем реализации в натуральном выражении, а также сильно заниженную выручку, рассчитанную на основе сумм вознаграждения.

Способ 1. Корректировка алгоритма проведения в модуле документа

Если конфигурация снята с поддержки или находится на частичной поддержке с возможностью редактирования, исправим логику формирования движений непосредственно в модуле объекта Документ.ОтчетКомитентуОПродажах.

Рассмотрим два варианта доработки кода:

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

Посмотрим на пример обнуления количественного ресурса перед заполнением набора движений:


Для Каждого Стр Из ТаблицаПоТоварам Цикл
    Стр.Количество = 0;
КонецЦикла;

Если СтруктураШапкиДокумента.ВедениеУчетаПоПроектам Тогда
    УправлениеПроектами.ОтразитьДвиженияПоПроектам(ТаблицаПоТоварам, ТаблицаДвижений, Проект, Дата, "Продажи");
Иначе
    ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаПоТоварам, ТаблицаДвижений);
КонецЕсли;

После применения этой корректировки сумма вознаграждения сохранится в разрезе товаров, но задвоения физического количества в отчетах больше не возникнет.

Способ 2. Исправление через подписку на событие без изменения конфигурации

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

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

  1. В общем модуле создадим процедуру-обработчик подписки.
  2. Обратимся к набору движений документа по регистру Продажи.
  3. Обойдем сформированные типовым кодом строки набора и очистим количество у товарных позиций комитента.

Посмотрим на пример реализации такого обработчика:


Процедура ИсправитьДвиженияОтчетаКомитенту(Источник, Отказ, РежимПроведения) Экспорт
    Если Отказ Тогда
        Возврат;
    КонецЕсли;
    
    ДвиженияПродажи = Источник.Движения.Продажи;
    Если Не ДвиженияПродажи.Выбран() Тогда
        ДвиженияПродажи.Прочитать();
    КонецЕсли;
    
    Модифицирован = Ложь;
    Для Каждого Движение Из ДвиженияПродажи Цикл
        // Исключаем строку служебной услуги вознаграждения, обнуляем только товары
        Если ЗначениеЗаполнено(Движение.Номенклатура) И Движение.Количество <> 0 Тогда
            Движение.Количество = 0;
            Модифицирован = Истина;
        КонецЕсли;
    КонецЦикла;
    
    Если Модифицирован Тогда
        ДвиженияПродажи.Записать();
    КонецЕсли;
КонецПроцедуры

Способ 3. Настройка фильтрации в отчетах

Если оперативное вмешательство в конфигуратор невозможно, временно обойдем проблему средствами пользовательского интерфейса. Поскольку в регистре Продажи нет реквизита, жестко отделяющего комиссионные продажи от собственных, настроим постоянные отборы в отчетах «Продажи» и «Валовая прибыль».

Выполним следующие настройки схемы компоновки данных или настроек отчета:

  1. Откроем панель настроек отчета.
  2. В разделе отборов добавим поле Регистратор со значением условия Не равно (или Не в списке).
  3. Укажем вид документа Отчет комитенту о продажах товаров.
  4. Либо установим отбор по реквизиту договора: Договор контрагента.Вид договора Не равно значению С комитентом.

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

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

← На главную