Имя: Пароль:
1C
 
Распределение кредита по агентам
, , , ,
0 Sv4org
 
04.10.16
09:43
Добрый день! Есть отчёт ИнформацияОКлиентах, нужно добавить распеределение кредита по агентам, т.е есть Товарный кредит, Средний месячный оборот продаж, Агент и Котнрагент, нужно тавырный кредит распеределить пропорцианольно оборотам продаж
Вот формула которую скинули!
                           Товарный
                                кредит     Средний
                                         месячный
                                         оборот
                                         продаж
    Агент 1    Контрагент1    357    500
    Агент 2    Контрагент1    571    800
    Агент 3    Контрагент1    0    0
    Агент 4    Контрагент1    71    100
            1000    1400


Запрос из СКД.

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    КонтрагентыКонтактнаяИнформация.Ссылка КАК Контрагент,
    КонтрагентыКонтактнаяИнформация.Представление КАК ЮрАдресКонтрагента
ПОМЕСТИТЬ ЮрАдресКонтрагентов
ИЗ
    Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
ГДЕ
    КонтрагентыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресКонтрагента)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    КонтрагентыКонтактнаяИнформация.Ссылка КАК Контрагент,
    КонтрагентыКонтактнаяИнформация.Представление КАК ФактАдресКонтрагента
ПОМЕСТИТЬ ФактАдресКонтрагентов
ИЗ
    Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
ГДЕ
    КонтрагентыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресКонтрагента)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    КонтрагентыКонтактнаяИнформация.Ссылка КАК Контрагент,
    КонтрагентыКонтактнаяИнформация.Представление КАК Телефон
ПОМЕСТИТЬ ТелефоныКонтрагентов
ИЗ
    Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
ГДЕ
    КонтрагентыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонКонтрагента)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    РасчетыСПокупателямиОбороты.Организация,
    РасчетыСПокупателямиОбороты.Контрагент,
    РасчетыСПокупателямиОбороты.Договор,
    СУММА(РасчетыСПокупателямиОбороты.СуммаПриход) КАК СуммаПокупатель,
    РасчетыСПокупателямиОбороты.Период КАК Период,
    0 КАК СуммаПоставщик
ПОМЕСТИТЬ ОборотыКлиентов
ИЗ
    РегистрНакопления.РасчетыСПокупателями.Обороты(, , Месяц, ТипРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыРасчетов.Долг)) КАК РасчетыСПокупателямиОбороты
ГДЕ
    ВЫБОР
            КОГДА РасчетыСПокупателямиОбороты.Договор.ДатаДоговора <> ДАТАВРЕМЯ(1, 1, 1)
                ТОГДА НАЧАЛОПЕРИОДА(РасчетыСПокупателямиОбороты.Договор.ДатаДоговора, МЕСЯЦ) <= РасчетыСПокупателямиОбороты.Период
            ИНАЧЕ ИСТИНА
        КОНЕЦ

СГРУППИРОВАТЬ ПО
    РасчетыСПокупателямиОбороты.Организация,
    РасчетыСПокупателямиОбороты.Договор,
    РасчетыСПокупателямиОбороты.Контрагент,
    РасчетыСПокупателямиОбороты.Период

ИМЕЮЩИЕ
    СУММА(РасчетыСПокупателямиОбороты.СуммаПриход) <> 0

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

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

СГРУППИРОВАТЬ ПО
    РасчетыСПоставщикамиОбороты.Контрагент,
    РасчетыСПоставщикамиОбороты.Организация,
    РасчетыСПоставщикамиОбороты.Договор,
    РасчетыСПоставщикамиОбороты.Период

ИМЕЮЩИЕ
    СУММА(РасчетыСПоставщикамиОбороты.СуммаПриход) <> 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Контрагенты.Ссылка КАК Контрагент,
    ЮрАдресКонтрагентов.ЮрАдресКонтрагента,
    ТелефоныКонтрагентов.Телефон,
    ДоговорыКонтрагентов.Ссылка КАК Договор,
    ОборотыКлиентов.Период,
    ОборотыКлиентов.Договор.ДатаДоговора КАК ДатаДоговора,
    ЕСТЬNULL(ОборотыКлиентов.СуммаПокупатель, 0) КАК СреднемесячныйОборотПродажи,
    ЕСТЬNULL(ОборотыКлиентов.СуммаПоставщик, 0) КАК СреднемесячныйОборотЗакупки,
    ФактАдресКонтрагентов.ФактАдресКонтрагента,
    ДоговорыКонтрагентов.Агент КАК ДоговорАгент
ИЗ
    Справочник.Контрагенты КАК Контрагенты
        ЛЕВОЕ СОЕДИНЕНИЕ ЮрАдресКонтрагентов КАК ЮрАдресКонтрагентов
        ПО Контрагенты.Ссылка = ЮрАдресКонтрагентов.Контрагент
        ЛЕВОЕ СОЕДИНЕНИЕ ТелефоныКонтрагентов КАК ТелефоныКонтрагентов
        ПО Контрагенты.Ссылка = ТелефоныКонтрагентов.Контрагент
        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
            ЛЕВОЕ СОЕДИНЕНИЕ ОборотыКлиентов КАК ОборотыКлиентов
            ПО ДоговорыКонтрагентов.Ссылка = ОборотыКлиентов.Договор
        ПО Контрагенты.Ссылка = ДоговорыКонтрагентов.Владелец
        ЛЕВОЕ СОЕДИНЕНИЕ ФактАдресКонтрагентов КАК ФактАдресКонтрагентов
        ПО (ФактАдресКонтрагентов.Контрагент = Контрагенты.Ссылка)
ГДЕ
    НЕ Контрагенты.ЭтоГруппа

Подскажите где копать?
1 Sv4org
 
04.10.16
09:56
Please
2 Sv4org
 
04.10.16
10:34
Кто нибудь даст хоть какй-то совет?
3 Sv4org
 
06.10.16
15:46
*********
4 Garykom
 
гуру
06.10.16
16:07
5 Garykom
 
гуру
06.10.16
16:08
6 azernot
 
06.10.16
16:18
(4) Залажал всю подколку.. :)

(0) Полностью в запросе корректно не получится. Вылезет проблема округлений. Если проблема округлений не пугает, то копать нужно в сторону получения с помощью временных или вложенных таблиц показателя равному ОборотПродажПоАгентуКлиенту/ОбщийОборотПродажПоКлиенту * ТоварныйКредитПоКлиенту
7 DrShad
 
06.10.16
16:21
(6) от округлений тоже можно в пакете избавиться
8 azernot
 
06.10.16
16:25
(7) Просуммировать расчётный показатель в отдельной таблице по интересующим групировкам, сравнить с исходным показателем, высчитать разницу и  добавить эту разницу на элемент с максммальным расчётным показателем, для определения которого ещё раз соединить саму с собой таблицу расчётных показателей, с группировкой по максимуму расчётного показателя?
Это получится жесть, а не запрос!
Хотя да, признаю, можно.
9 DrShad
 
06.10.16
16:27
(8) но ведь работает - проверено годами, потому как постобработка результата запроса тоже жесть жестяная
10 azernot
 
06.10.16
16:36
(9) А вот интересно, то, что у вас работает годами обработает корректно такую ситуацию:

ТоварныйКредит = 1000 руб
Агент1 Оборот 1000 руб
Агент2 Оборот 1000 руб
Агент3 Оборот 1000 руб

Куда эта злосчастная копейка будет отнесена?
11 DrShad
 
06.10.16
16:38
(10) хороший вопрос

смотря что 1С посчитает максимумом
12 DrShad
 
06.10.16
16:38
ну и конечно ВЫБРАТЬ ПЕРВЫЕ 1
13 DrShad
 
06.10.16
16:39
скоррее всего на Агент1

но уппорядочиванием можно выбрать что нам будет угодно
14 azernot
 
06.10.16
16:45
(13) Если у вас N клиентов, у каждого свои агенты или агенты пересекаются, боюсь с "Выбрать первые 1" вы не сможете поиграться, нужно дополнительно выбирать макс/мин по агенту среди одинаковых максимальных значений расчётного показателя, если он не один.. Короче жесть жестянная-прежестянная :)
15 DrShad
 
06.10.16
16:47
(14) согласен, но не выгружать же потом результат запроса в ТЗ и там менять?
16 azernot
 
06.10.16
16:58
(15) От задачи зависит. Если чисто на "посмотреть в отчёте" то может быть допустимо и забить на округления. Или округлять всегда в "свою" сторону.
А если задача в "заполнить таблицу данных" то вполне приемлемо и покрутить результат в ТЗ.
17 Sv4org
 
07.10.16
12:45
Задача "посмотреть в отчёте"  Спасибо всем большое
Немного нашёл в инете но здесь более понятно разъяснили ещё раз спасибо
18 eric
 
12.10.16
10:10
Ребят ситуация следующая мне нужно ВсегоКредит/ВсегоПродажи*КонкретногоАгента
19 eric
 
12.10.16
10:11
Не знаю какие поля нужно
20 eric
 
12.10.16
10:14
Помогите пожалуйста