Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут! (в рабочие часы)

Доработка УТ 11 для учета агентов

1. Определяем предопределенные значения «Торговый агент» в ПВХ «ДополнительныеРеквизитыИСведения» тип Справочники.Партнер.
2. Назначаем его как доп. реквизит в документах «Заказ клиента»  и «Реализация товаров и услуг».
3. Создаем независимый непериодический регистр сведений РазмерКомиссииАгента. Измерение ведущее — Партнер, Ресурс — Процент.
4. Создаем регистр накопления РасчетыСАгентами. Измерение — Партнер, Ресурс — Сумма. Регистраторы: РеализацияТоваровУслуг и РКО.
5. Создаем подписку на событие проведения документов РеализацияТоваровУслуг

Запрос = Новый Запрос;

Запрос.Текст =

«ВЫБРАТЬ ПЕРВЫЕ 1

| РеализацияТоваровУслугДополнительныеРеквизиты.Значение КАК Агент,

| &ЗаказКлиента

|ПОМЕСТИТЬ ДокРеализации

|ИЗ

| &ТЧДополнительныеРеквизиты КАК РеализацияТоваровУслугДополнительныеРеквизиты

|ГДЕ

| РеализацияТоваровУслугДополнительныеРеквизиты.Свойство = &СвойствоТорговыйАгент

|;

|

|////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ ПЕРВЫЕ 1

| ЗаказКлиентаДополнительныеРеквизиты.Значение КАК Агент,

| ЗаказКлиентаДополнительныеРеквизиты.Ссылка

|ПОМЕСТИТЬ ДокЗаказ

|ИЗ

| Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты

|ГДЕ

| ЗаказКлиентаДополнительныеРеквизиты.Свойство = &СвойствоТорговыйАгент

| И ЗаказКлиентаДополнительныеРеквизиты.Ссылка = &ЗаказКлиента

|;

|

|////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ

| ЕСТЬNULL(ДокРеализации.Агент, ДокЗаказ.Агент) КАК Агент

|ПОМЕСТИТЬ ДанныеПоПродажам

|ИЗ

| ДокРеализации КАК ДокРеализации

|  ПОЛНОЕ СОЕДИНЕНИЕ ДокЗаказ КАК ДокЗаказ

|  ПО ДокРеализации.ЗаказКлиента = ДокЗаказ.Ссылка

|;

|

|////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ

| ДанныеПоПродажам.Агент,

| ЕСТЬNULL(РазмерКомиссииАгента.Процент, 0) КАК Процент

|ИЗ

| ДанныеПоПродажам КАК ДанныеПоПродажам

|  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерКомиссииАгента КАК РазмерКомиссииАгента

|  ПО ДанныеПоПродажам.Агент = РазмерКомиссииАгента.Партнер»;

 

Запрос.УстановитьПараметр(«СвойствоТорговыйАгент», ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ТорговыйАгент);

Запрос.УстановитьПараметр(«РеализацияТоваров», Ссылка);

Запрос.УстановитьПараметр(«ЗаказКлиента», ЗаказКлиента);

Запрос.УстановитьПараметр(«ТЧДополнительныеРеквизиты», ДополнительныеРеквизиты.Выгрузить());

 

Результат = Запрос.Выполнить();

 

ВыборкаДетальныеЗаписи = Результат.Выбрать();

 

Если ВыборкаДетальныеЗаписи.Следующий() Тогда

 

СуммаВознаграждения = ВыборкаДетальныеЗаписи.Процент * СуммаДокумента/100;

 

Если СуммаВознаграждения > 0 Тогда

// регистр РасчетыСТорговымиАгентами Приход

Движения.РасчетыСТорговымиАгентами.Записывать = Истина;

Движения.РасчетыСТорговымиАгентами.БлокироватьДляИзменения = Истина;

Движение =  Движения.РасчетыСТорговымиАгентами.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

Движение.Период = Дата;

Движение.Партнер = ВыборкаДетальныеЗаписи.Агент;

Движение.Сумма = СуммаВознаграждения;

КонецЕсли;

 

КонецЕсли;

 

и РасходныйКассовыйОрдер

Если ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПрочиеРасходы Тогда

 

ТаблЗн = РасшифровкаПлатежа.Выгрузить(,»Сумма, СтатьяРасходов, АналитикаРасходов»);

ТаблЗн.Свернуть(«СтатьяРасходов, АналитикаРасходов», «Сумма»);

 

Запрос = Новый Запрос;

Запрос.Текст =

«ВЫБРАТЬ

| РасходныйКассовыйОрдерРасшифровкаПлатежа.АналитикаРасходов КАК Агент,

| РасходныйКассовыйОрдерРасшифровкаПлатежа.Сумма

|ПОМЕСТИТЬ Оплата

|ИЗ

| &ТЧРасшифровкаПлатежа КАК РасходныйКассовыйОрдерРасшифровкаПлатежа

|где

| РасходныйКассовыйОрдерРасшифровкаПлатежа.СтатьяРасходов = &СтатьяРасходов

|;

|

|////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ

| РасчетыСТорговымиАгентамиОстатки.Партнер,

| РасчетыСТорговымиАгентамиОстатки.СуммаОстаток

|ПОМЕСТИТЬ Долг

|ИЗ

| РегистрНакопления.РасчетыСТорговымиАгентами.Остатки(

|   &ДатаОстатка,

|   Партнер В

|    (ВЫБРАТЬ

|     Оплата.Агент

|    ИЗ

|     Оплата КАК Оплата)) КАК РасчетыСТорговымиАгентамиОстатки

|;

|

|////////////////////////////////////////////////////////////////////////////////

|ВЫБРАТЬ

| Оплата.Агент,

| Оплата.Сумма КАК СуммаОплаты,

| ЕСТЬNULL(Долг.СуммаОстаток, 0) КАК СуммаДолга,

| ПРЕДСТАВЛЕНИЕ(Оплата.Агент) КАК АгентПредставление

|ИЗ

| Оплата КАК Оплата

|  ЛЕВОЕ СОЕДИНЕНИЕ Долг КАК Долг

|  ПО Оплата.Агент = Долг.Партнер»;

 

Запрос.УстановитьПараметр(«ДатаОстатка», МоментВремени());

Запрос.УстановитьПараметр(«ТЧРасшифровкаПлатежа», ТаблЗн);

Запрос.УстановитьПараметр(«СтатьяРасходов», ПланыВидовХарактеристик.СтатьиРасходов.ВознаграждениеТорговымАгентам);

 

Результат = Запрос.Выполнить();

 

Выборка = Результат.Выбрать();

 

Пока Выборка.Следующий() Цикл

 

Если Выборка.СуммаОплаты > Выборка.СуммаДолга Тогда

 

Сообщение = Новый СообщениеПользователю();

Сообщение.Текст = «Оплата агенту » + Выборка.АгентПредставление + » в сумме: » + Формат(Выборка.СуммаОплаты, «ЧДЦ=2″) + » превышает его долг: » + Формат(Выборка.СуммаДолга, «ЧДЦ=2»);

Сообщение.Сообщить();

Отказ = Истина;

Иначе

Если Не Отказ Тогда

// регистр РасчетыСТорговымиАгентами Расход

Движения.РасчетыСТорговымиАгентами.Записывать = Истина;

Движения.РасчетыСТорговымиАгентами.БлокироватьДляИзменения = Истина;

Движение =  Движения.РасчетыСТорговымиАгентами.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Партнер = Выборка.Агент;

Движение.Сумма =  Выборка.СуммаОплаты;

КонецЕсли;

КонецЕсли;

КонецЦикла;

КонецЕсли;

Где формируется движения по регистру РасчетыСТорговымиАгентами приход по документу РеализацияТоваровУслуг (сумма документа умноженная на соответствующий процент из регистра РазмерКомиссииАгента) и расход по РКО. Проверяем в момент расхода, Вид операции РКО должен быть «Прочие расходы». Статья расходов  «ВознаграждениеТорговымАгентам»(предопределенный-ПВХ_СтатьиРасходов) с вариантом распределения «На направления деятельности», аналитика расходов — Партнер. Сумма остатка в регистре по партнеру агенту должна быть больше или равна сумме в документе РКО.

5.1. Заполнение РКО по остаткам задолженности. Создаем предопределенную Справочник.СтатьюДвиженияДенежныхСредств – АгентскиеУслуги(после Указать в предприятии реквизит ХозОперации-СтатьяРасходов). Для отображение кнопки Подобрать по остаткам:

В модуле ДенежныеСредстваСервер.УстановитьВидимостьПодбораПоОстаткамРасчетов

Добавить строку МассивОпераций.Добавить(Перечисления.ХозяйственныеОперации.ПрочиеРасходы);

Затем в модуле формы документа

&НаКлиенте

Процедура ПодборПоОстаткам(Команда)   

Если Объект.ХозяйственнаяОперация = ПредопределенноеЗначение(«Перечисление.ХозяйственныеОперации.ПрочиеРасходы») тогда

                       Если Объект.СтатьяДвиженияДенежныхСредств = ПредопределенноеЗначение(«Справочник.СтатьиДвиженияДенежныхСредств.АгентскиеУслуги»)тогда

                                               ЗаполнитьПоОстаткамЗадолженностиТП();

                                               Объект.СуммаДокумента = Объект.РасшифровкаПлатежа.Итог(«Сумма»);

                       КонецЕсли;

                Иначе ….(код который был)

                КонецЕсли;

 

&НаСервере

Процедура ЗаполнитьПоОстаткамЗадолженностиТП()

                Запрос = Новый Запрос;

                Запрос.Текст =

                               «ВЫБРАТЬ

                               |             РасчетыСТорговымиАгентамиОстатки.Партнер КАК АналитикаРасходов,

                               |             РасчетыСТорговымиАгентамиОстатки.СуммаОстаток КАК Сумма,

                               |                ЗНАЧЕНИЕ(ПланВидовХарактеристик.СтатьиРасходов.ВознаграждениеТорговымАгентам) КАК СтатьяРасходов,

                               |                РасчетыСТорговымиАгентамиОстатки.Партнер.ОсновнойМенеджер.ТекущееПодразделение КАК Подразделение

                               |ИЗ

                               |             РегистрНакопления.РасчетыСТорговымиАгентами.Остатки КАК РасчетыСТорговымиАгентамиОстатки»;

                Результат = Запрос.Выполнить();

                Объект.РасшифровкаПлатежа.Загрузить(Результат.Выгрузить());

КонецПроцедуры

Получите понятные самоучители по 1С бесплатно:

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

Запрос = Новый Запрос;

Запрос.Текст =

«ВЫБРАТЬ

| ЗаказКлиентаДополнительныеРеквизиты.НомерСтроки,

| ЗаказКлиентаДополнительныеРеквизиты.Свойство,

| ЗаказКлиентаДополнительныеРеквизиты.Значение,

| ЗаказКлиентаДополнительныеРеквизиты.ТекстоваяСтрока

|ИЗ

| Документ.ЗаказКлиента.ДополнительныеРеквизиты КАК ЗаказКлиентаДополнительныеРеквизиты

|ГДЕ

| ЗаказКлиентаДополнительныеРеквизиты.Ссылка = &Ссылка

| И ЗаказКлиентаДополнительныеРеквизиты.Свойство = &Свойство»;

 

Запрос.УстановитьПараметр(«Ссылка», ДанныеЗаполнения.ДокументОснование);

Запрос.УстановитьПараметр(«Свойство», ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ТорговыйАгент);

 

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

 

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

НовСтрока = ДополнительныеРеквизиты.Добавить();

ЗаполнитьЗначенияСвойств(НовСтрока, ВыборкаДетальныеЗаписи);

КонецЦикла;

7. Создаем отчет в СКД «Расчеты с торговыми агентами» по регистру РасчетыСАгентами.

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Остались вопросы?

СПРОСИТЕ в комментариях!

Один комментарий на “Доработка УТ 11 для учета агентов
  1. я запрос для события «при проведении» написал такой:
    ВЫБРАТЬ
    ДополнительныеСведения.Объект,
    ДополнительныеСведения.Свойство,
    ДополнительныеСведения.Значение
    ПОМЕСТИТЬ вт_Сведенья
    ИЗ
    РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    ГДЕ
    ДополнительныеСведения.Свойство = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ТорговыйАгент)
    И ВЫБОР
    КОГДА &Ссылка В
    (ВЫБРАТЬ
    ДополнительныеСведения.Объект
    ИЗ
    РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
    ГДЕ
    ДополнительныеСведения.Свойство = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ТорговыйАгент))
    ТОГДА ДополнительныеСведения.Объект = &Ссылка
    ИНАЧЕ ИСТИНА
    КОНЕЦ
    ;

    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ЕСТЬNULL(РеализацияТоваровУслуг.Ссылка.СуммаДокумента, 0) / ЕСТЬNULL(РазмерКомиссииАгента.Процент, 0) * 100 КАК Сумма,
    РазмерКомиссииАгента.Партнер,
    ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК ВидДвижения,
    ВЫБОР
    КОГДА ЕСТЬNULL(РеализацияТоваровУслуг.Ссылка.СуммаДокумента, 0) / ЕСТЬNULL(РазмерКомиссииАгента.Процент, 0) * 100 > 0
    ТОГДА ЛОЖЬ
    ИНАЧЕ ИСТИНА
    КОНЕЦ КАК Отказ,
    &Период,
    0 КАК Вознаграждение
    ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ вт_Сведенья КАК вт_Сведенья
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РазмерКомиссииАгента КАК РазмерКомиссииАгента
    ПО вт_Сведенья.Значение = РазмерКомиссииАгента.Партнер
    ПО (вт_Сведенья.Объект В (РеализацияТоваровУслуг.Ссылка, РеализацияТоваровУслуг.ЗаказКлиента))
    ГДЕ
    ВЫБОР
    КОГДА ТИПЗНАЧЕНИЯ(&Ссылка) = ТИП(Документ.РеализацияТоваровУслуг)
    ТОГДА РеализацияТоваровУслуг.Ссылка = &Ссылка
    ИНАЧЕ ЛОЖЬ
    КОНЕЦ

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    СУММА(ЕСТЬNULL(РасходныйКассовыйОрдерРасшифровкаПлатежа.Сумма, 0)),
    РасходныйКассовыйОрдерРасшифровкаПлатежа.АналитикаРасходов,
    ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход),
    ВЫБОР
    КОГДА ЕСТЬNULL(РасходныйКассовыйОрдерРасшифровкаПлатежа.Сумма, 0) <= ЕСТЬNULL(РасчетыСАгентамиОстатки.СуммаОстаток, 0)
    ТОГДА ЛОЖЬ
    ИНАЧЕ ИСТИНА
    КОНЕЦ,
    &Период,
    РасчетыСАгентамиОстатки.СуммаОстаток
    ИЗ
    Документ.РасходныйКассовыйОрдер.РасшифровкаПлатежа КАК РасходныйКассовыйОрдерРасшифровкаПлатежа
    ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.РасчетыСАгентами.Остатки(&Период, ) КАК РасчетыСАгентамиОстатки
    ПО РасходныйКассовыйОрдерРасшифровкаПлатежа.АналитикаРасходов = РасчетыСАгентамиОстатки.Партнер
    ГДЕ
    РасходныйКассовыйОрдерРасшифровкаПлатежа.СтатьяРасходов = ЗНАЧЕНИЕ(ПланВидовХарактеристик.СтатьиРасходов.ВознаграждениеТорговымПредставителям)
    И ВЫБОР
    КОГДА ТИПЗНАЧЕНИЯ(&Ссылка) = ТИП(Документ.РасходныйКассовыйОрдер)
    ТОГДА ВЫБОР
    КОГДА РасходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПрочиеРасходы)
    ТОГДА РасходныйКассовыйОрдерРасшифровкаПлатежа.Ссылка = &Ссылка
    ИНАЧЕ ЛОЖЬ
    КОНЕЦ
    КОНЕЦ

    СГРУППИРОВАТЬ ПО
    РасходныйКассовыйОрдерРасшифровкаПлатежа.АналитикаРасходов,
    РасчетыСАгентамиОстатки.СуммаОстаток,
    ВЫБОР
    КОГДА ЕСТЬNULL(РасходныйКассовыйОрдерРасшифровкаПлатежа.Сумма, 0) <= ЕСТЬNULL(РасчетыСАгентамиОстатки.СуммаОстаток, 0)
    ТОГДА ЛОЖЬ
    ИНАЧЕ ИСТИНА
    КОНЕЦ

    Тоесть из 2-х запросов и 20 строк кода сделал 1 запрос.

    Как считаете? Есть смысл так делать?

    Ответить

Добавить комментарий:

Ваш адрес email не будет опубликован.