| 
    
            
         
         | 
    
    
  | 
История менеджеров: как соединить запросы? | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        BlackJack    
     07.12.22 
            ✎
    22:30 
 | 
         
        Стандартная задача - сделать отчёт по продажам по менеджерам с учётом истории передачи клиентов между менеджерами. Брать данные из документов в данном случае нельзя. Есть периодический регистр сведений.
 
        Не соображу, как оптимально в запросе соединить таблицы самих продаж и истории менеджеров?  | 
|||
| 
    1
    
        НафНаф    
     07.12.22 
            ✎
    22:36 
 | 
         
        Сначала построй таблицу периодов менеджеров по клиентам     
         | 
|||
| 
    2
    
        BlackJack    
     07.12.22 
            ✎
    22:45 
 | 
         
        (1) А как оптимально соединить?     
         | 
|||
| 
    3
    
        Asmody    
     07.12.22 
            ✎
    22:45 
 | 
         
        и чем это отличается от типовой задачи "получить курсы валюты на любую дату в запросе"?     
         | 
|||
| 
    4
    
        BlackJack    
     07.12.22 
            ✎
    22:48 
 | 
         
        (3) Наверное тем, что курс есть на каждый день, а менеджеры меняются не так часто?     
         | 
|||
| 
    5
    
        BlackJack    
     07.12.22 
            ✎
    22:49 
 | 
         
        В соединении "=" не поставить на период. Дата продажи д.б. >= даты смены менеджера. Но если менеджер до даты продажи менялся несколько раз, то подтянутся все более ранние записи, а нужна последняя.     
         | 
|||
| 
    6
    
        BlackJack    
     07.12.22 
            ✎
    23:31 
 | 
         
        (3) А не, подходит. Спасибо. Где тут класс?
 
        ВЫБРАТЬ РАЗРЕШЕННЫЕ Продажи.АналитикаУчетаПоПартнерам.Партнер КАК Партнер, СУММА(Продажи.СуммаВыручкиРеглОборот - Продажи.СтоимостьРеглОборот - Продажи.ДопРасходыРеглОборот - Продажи.ТрудозатратыРеглОборот - Продажи.ПостатейныеПостоянныеРеглОборот - Продажи.ПостатейныеПеременныеРеглОборот) КАК Прибыль ПОМЕСТИТЬ Партнеры ИЗ РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоОтчета, &КонецОтчета, , АналитикаУчетаПоПартнерам.Партнер <> ЗНАЧЕНИЕ(Справочник.Партнеры.НашеПредприятие) {(АналитикаУчетаПоПартнерам.Партнер.ОсновнойМенеджер = &Менеджер), (АналитикаУчетаПоПартнерам.Партнер.ОсновнойМенеджер.Подразделение = &Подразделение)}) КАК Продажи СГРУППИРОВАТЬ ПО Продажи.АналитикаУчетаПоПартнерам.Партнер ИНДЕКСИРОВАТЬ ПО Партнер ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ Продажи.Период КАК Период, Продажи.АналитикаУчетаПоПартнерам.Партнер КАК Партнер, СУММА(Продажи.СуммаВыручкиРеглОборот - Продажи.СтоимостьРеглОборот - Продажи.ДопРасходыРеглОборот - Продажи.ТрудозатратыРеглОборот - Продажи.ПостатейныеПостоянныеРеглОборот - Продажи.ПостатейныеПеременныеРеглОборот) КАК Прибыль ПОМЕСТИТЬ ДниПродаж ИЗ РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоОтчета, &КонецОтчета, День, АналитикаУчетаПоПартнерам.Партнер <> ЗНАЧЕНИЕ(Справочник.Партнеры.НашеПредприятие) {(АналитикаУчетаПоПартнерам.Партнер.ОсновнойМенеджер = &Менеджер), (АналитикаУчетаПоПартнерам.Партнер.ОсновнойМенеджер.Подразделение = &Подразделение)}) КАК Продажи СГРУППИРОВАТЬ ПО Продажи.Период, Продажи.АналитикаУчетаПоПартнерам.Партнер ИНДЕКСИРОВАТЬ ПО Партнер ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ НАЧАЛОПЕРИОДА(&НачалоОтчета, ДЕНЬ) КАК Период, ИсторияМенеджеровСрезПервых.Партнер КАК Партнер, ИсторияМенеджеровСрезПервых.Менеджер КАК Менеджер ПОМЕСТИТЬ МенеджерыПоДням ИЗ РегистрСведений.ИсторияМенеджеров.СрезПервых( &НачалоОтчета, Партнер В (ВЫБРАТЬ Партнеры.Партнер ИЗ Партнеры)) КАК ИсторияМенеджеровСрезПервых ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ИсторияМенеджеров.Период, ИсторияМенеджеров.Партнер, ИсторияМенеджеров.Менеджер ИЗ РегистрСведений.ИсторияМенеджеров КАК ИсторияМенеджеров ГДЕ ИсторияМенеджеров.Период МЕЖДУ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&НачалоОтчета, ДЕНЬ, 1), ДЕНЬ) И &КонецОтчета И ИсторияМенеджеров.Партнер В (ВЫБРАТЬ Партнеры.Партнер ИЗ Партнеры) ИНДЕКСИРОВАТЬ ПО Партнер ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДниПродаж.Период КАК Период, ДниПродаж.Партнер КАК Партнер, МАКСИМУМ(МенеджерыПоДням.Период) КАК ДатаМена ПОМЕСТИТЬ ХешМен ИЗ ДниПродаж КАК ДниПродаж ЛЕВОЕ СОЕДИНЕНИЕ МенеджерыПоДням КАК МенеджерыПоДням ПО ДниПродаж.Период >= МенеджерыПоДням.Период И ДниПродаж.Партнер = МенеджерыПоДням.Партнер СГРУППИРОВАТЬ ПО ДниПродаж.Период, ДниПродаж.Партнер ИНДЕКСИРОВАТЬ ПО Партнер ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ МенеджерыПоДням.Менеджер КАК Менеджер, СУММА(Продажи.СуммаВыручкиРеглОборот - Продажи.СтоимостьРеглОборот - Продажи.ДопРасходыРеглОборот - Продажи.ТрудозатратыРеглОборот - Продажи.ПостатейныеПостоянныеРеглОборот - Продажи.ПостатейныеПеременныеРеглОборот) КАК Прибыль ПОМЕСТИТЬ Продажи ИЗ РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&НачалоОтчета, &КонецОтчета, День, АналитикаУчетаПоПартнерам.Партнер <> ЗНАЧЕНИЕ(Справочник.Партнеры.НашеПредприятие) {(АналитикаУчетаПоПартнерам.Партнер.ОсновнойМенеджер = &Менеджер), (АналитикаУчетаПоПартнерам.Партнер.ОсновнойМенеджер.Подразделение = &Подразделение)}) КАК Продажи ЛЕВОЕ СОЕДИНЕНИЕ ХешМен КАК ХешМен ЛЕВОЕ СОЕДИНЕНИЕ МенеджерыПоДням КАК МенеджерыПоДням ПО ХешМен.Партнер = МенеджерыПоДням.Партнер И ХешМен.ДатаМена = МенеджерыПоДням.Период ПО Продажи.Период = ХешМен.Период И Продажи.АналитикаУчетаПоПартнерам.Партнер = ХешМен.Партнер СГРУППИРОВАТЬ ПО МенеджерыПоДням.Менеджер  | 
|||
| 
    7
    
        BlackJack    
     08.12.22 
            ✎
    15:56 
 | 
         
        Ошибка: СрезПоследних, а не СрезПервых     
         | 
|||
| 
    8
    
        Said_We    
     08.12.22 
            ✎
    16:25 
 | 
         
        (4) "Наверное тем, что курс есть на каждый день, а менеджеры меняются не так часто?" - ничем не отличается. Курсы валют в выходные тоже не меняются. :-)     
         | 
|||
| 
    9
    
        Said_We    
     08.12.22 
            ✎
    16:28 
 | 
         
        (0) Так же получаешь таблицу с периодами изменения менеджера для каждого клиента и потом продажи цепляешь продажи по равенству контрагента и вхождение в период.     
         | 
|||
| 
    10
    
        mikecool    
     08.12.22 
            ✎
    18:16 
 | 
         
        странно, что из документа брать нельзя - в документе и должна быть актуальная информация     
         | 
|||
| 
    11
    
        Said_We    
     08.12.22 
            ✎
    18:41 
 | 
         
        (10) Может он ещё и что-то из регистра тянет, чего в документе нет. Себестоимость какую-нибудь. Правда не понятно зачем, но системы мотивации бывают разные. :-)     
         | 
|||
| 
    12
    
        BlackJack    
     08.12.22 
            ✎
    23:04 
 | 
         
        (10) Документы делают другие пользователи.     
         | 
|||
| 
    13
    
        НафНаф    
     09.12.22 
            ✎
    07:37 
 | 
         
        (12) Менеджер в документе мог бы подставляться из значения текущий менеджер у клиента     
         | 
|||
| 
    14
    
        Kigo_Kigo    
     09.12.22 
            ✎
    08:51 
 | 
         
        Что то мне кажется на СКД этот отчет взлетит без особых усилий, а в жоках продаж есть менеджер?     
         | 
|||
| 
    15
    
        Kigo_Kigo    
     09.12.22 
            ✎
    10:05 
 | 
         
        жоках =*доках     
         | 
|||
| 
    16
    
        Said_We    
     09.12.22 
            ✎
    10:21 
 | 
         
        (14) А что есть какая-то принципиальная разница где запрос писать в СКД или в консоли?
 
        Запрос как источник данных для СКД всё равно должен сделать всё что описано в (9).  | 
|||
| 
    17
    
        Kigo_Kigo    
     09.12.22 
            ✎
    10:27 
 | 
         
        (16) СКД или консол, без разница, скд сама группировки наложит     
         | 
|||
| 
    18
    
        Said_We    
     09.12.22 
            ✎
    11:17 
 | 
         
        (17) При чём тут группировки?     
         | 
|||
| 
    19
    
        Said_We    
     09.12.22 
            ✎
    11:58 
 | 
         
        (6) "ПОМЕСТИТЬ Партнеры" и "ПОМЕСТИТЬ ДниПродаж" - данные берутся из одной таблицы. Не понятно зачем брать практически одни и те же данные два раза.
 
        Тем более, что "Партнеры" используется только как фильтр на партнеров и сумма выручки не используется. Можно и так "(выбрать различные Партнер из ДниПродаж)". Из регистра "ИсторияМенеджеров" необходимо построить таблицу изменений: Партнер, Менеджер, ДатаН, ДатаК. И к ней уже обороты цеплять.  | 
|||
| 
    20
    
        Said_We    
     09.12.22 
            ✎
    12:01 
 | 
         
        К (19) Но я бы обороты по дням не создавал и не использовал. Брал бы из движений. Нет смысла разбивать по дням, что бы потом разбитое по дням цеплять к разбитому на периоды. Я бы цеплял к разбитому на периоды непосредственно движения.     
         | 
|||
| 
    21
    
        BlackJack    
     09.12.22 
            ✎
    13:41 
 | 
         
        (19) Это был первый набросок, я потом всё переделал. Вообще убрал этот отбор по партнёру и из виртуальной таблицы убрал отбор по менеджеру/подразделению, т.к. он не соблюдает историю менеджеров.     
         | 
|||
| 
    22
    
        Said_We    
     09.12.22 
            ✎
    13:48 
 | 
         
        (21) "ИсторияМенеджеров" у тебя нет фильтра по менеджерам и не должно быть. А виртуальную таблицу можно вообще не использовать. Она не нужна.
 
        Лучше один раз результат свернуть, чем свернуть в виртуальной таблице, а потом ещё раз до свернуть.  | 
|||
| 
    23
    
        BlackJack    
     09.12.22 
            ✎
    13:48 
 | 
         
        (13) Вариант, но тогда:
 
        1. нет информации, кто создал документ (если не лезть в лог) 2. поле доступно для произвольного изменения 3. в отчёте нужна будет детализация до регистратора 4. это сложнее, чем докрутить запрос (но это не точно)  | 
|||
| 
    24
    
        BlackJack    
     09.12.22 
            ✎
    13:51 
 | 
         
        (20) Таблица дней нужна, чтобы подготовить таблицу соответствия - по какому дню продажи какую дату менеджера брать. Изначально мой вопрос об этом и был - можно ли как-то соединить "на лету" без предварительной подготовки доп.таблицы.     
         | 
|||
| 
    25
    
        Kesim    
     09.12.22 
            ✎
    14:04 
 | 
         
        (24) первый вариант таблица дней = график работы в связке с таблицей менеджеров
 
        второй вариант Получаешь всех менеджеров с датой начала работы меньше даты продажи(или с датой окончания работы больше даты продажи), потом берешь максимум по дате менеджера, потом по этому максимуму соединяешься с таблицей менеджеров с любом случае без доб таблиц не обойдешься. а чтобы было красиво в момент проведения надо получать тек менеджера и записывать его в регистр по документу, тогда будет налету  | 
|||
| 
    26
    
        Said_We    
     09.12.22 
            ✎
    15:10 
 | 
         
        (24) В 1С запросах нет. Только соединение таблицы сама с собой. SQL в 1С сильно обрезан. Можно сказать по самые не хочу.
 
        В MS SQL, Oracle, PostgreSQL, My SQL, SQLlite и т.д. можно "на лету" без предварительной подготовки доп.таблицы.  | 
|||
| 
    27
    
        Мультук    
     гуру 
    09.12.22 
            ✎
    16:23 
 | 
         
        (0) 
 
        1) Добавляем в нужный документ реквизит "ТотСамыйПравильныйМенеджер" 2) Пишем алгоритм заполнения, чтобы дальше автоматом 3) Пишем обработку, которая заполнит в старых документах этот реквизит Тут можно писать любой говнокод (запросы в цикле и прочее) --всё равно это один раз заполнить. P.S. Но что-то мне подсказывает, что вы (ваше предприятия) всё-равно будете всё это считать в отчёте  | 
|||
| 
    28
    
        Said_We    
     09.12.22 
            ✎
    18:13 
 | 
         
        (27) Скорее всего не важно кто продал, а важно за кем числится данный клиент.
 
        Запрос в отчете, который всё это разобьет будет быстро выполняться. Поэтому совать в данные и заставлять каждый раз заполнять не имеет смысла. Тем более что тот кто оформляет документы, может быть совсем не тем менеджером и документы могут приходить с В2В, т.е. оформляться автоматически, а менеджера менять задним числом.  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |