Как реализовать отчет по валовой прибыли в разрезе нескольких менеджеров для одного заказа покупателя

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

В типовых конфигурациях 1С, таких как «Управление торговлей 11», «ERP» или «Комплексная автоматизация», отчет по валовой прибыли строится на основании данных регистров накопления, где в качестве аналитики выступает «Менеджер» (ответственный), указанный в шапке документа. Однако в реальном бизнесе часто возникает ситуация, когда один крупный заказ клиента ведут сразу несколько сотрудников — например, каждый отвечает за свою группу товаров. В этом случае стандартный отчет покажет всю прибыль только на одного «ответственного», что делает систему мотивации несправедливой.

Рассмотрим подробнее, как можно обойти это ограничение и реализовать детальный расчет прибыли по каждой строке заказа.

Способ 1. Модификация табличной части и регистров накопления

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

  1. Добавление реквизита в расширение: Создадим расширение конфигурации и добавим в табличную часть Товары документов ЗаказКлиента и РеализацияТоваровУслуг новый реквизит МенеджерСтроки (тип: СправочникСсылка.Пользователи).
  2. Изменение регистра накопления: Главный регистр, отвечающий за прибыль — ВыручкаИСебестоимостьПродаж. Нам нужно через расширение добавить в его измерения новое поле Менеджер.
  3. Доработка проведения документа: Проанализируем процедуру проведения реализации. Нам нужно перехватить формирование движений, чтобы в регистр записывался менеджер из строки ТЧ, а если он там не заполнен — менеджер из шапки.

Пример кода, который можно использовать в модуле менеджера или через расширение в процедуре заполнения движений:


// В расширении для документа РеализацияТоваровУслуг
&После("ПодготовитьНаборыДанных")
Процедура ИмяРасширения_ПодготовитьНаборыДанных(СтруктураРегистрации)
    // Алгоритм подмены менеджера в таблице движений
    Для Каждого Движение Из ЭтотОбъект.Движения.ВыручкаИСебестоимостьПродаж Цикл
        // Находим строку ТЧ по номеру строки или идентификатору
        ТекущаяСтрока = ЭтотОбъект.Товары.Найти(Движение.НомерСтроки, "НомерСтроки");
        Если ТекущаяСтрока <> Неопределено И ЗначениеЗаполнено(ТекущаяСтрока.МенеджерСтроки) Тогда
            Движение.Менеджер = ТекущаяСтрока.МенеджерСтроки;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

После такой доработки типовой отчет «Валовая прибыль» начнет автоматически группировать данные по новому измерению регистра, так как СКД (система компоновки данных) подхватит измененную структуру регистра.

Способ 2. Организационное разделение документов

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

В системе 1С один ЗаказКлиента может быть основанием для нескольких документов РеализацияТоваровУслуг. Вы можете договориться, что каждый менеджер выписывает свою реализацию только на «свои» товары в рамках общего заказа. В каждой реализации в поле «Ответственный» указывается конкретный исполнитель.

Преимущества этого метода:

Недостатки: увеличивается количество печатных форм для клиента (вместо одной накладной он получит несколько), что может быть неудобно при приемке товара.

Способ 3. Использование механизма «Назначений» (Обособленный учет)

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

Чтобы этого избежать, можно использовать обособленное обеспечение. В строке заказа можно указать «Назначение». Если настроить систему так, чтобы назначение включало в себя менеджера, 1С будет резервировать и списывать себестоимость строго под конкретную аналитику. Это гарантирует, что менеджер получит прибыль именно от тех остатков, которые он сам закупил или зарезервировал.

Способ 4. Внешний отчет через СКД без изменения регистров

Если вы опытный пользователь или программист, можно создать внешний отчет, который будет виртуально соединять данные. Рассмотрим логику запроса:

  1. Выбираем данные из табличной части РеализацияТоваровУслуг.Товары (отсюда берем количество, сумму выручки и нашего «менеджера строки»).
  2. Присоединяем данные из регистра ВыручкаИСебестоимостьПродаж по связке Регистратор + Номенклатура.
  3. Рассчитываем валовую прибыль как Выручка - Себестоимость.

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

Психологический аспект и контроль

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

Рекомендации по внедрению:

Выбор метода зависит от масштаба вашей компании. Для малого бизнеса часто достаточно разделения на разные документы реализации. Для крупных торговых компаний наиболее жизнеспособным решением остается внедрение расширения с доработкой регистра ВыручкаИСебестоимостьПродаж.

← На главную