|   |   | 
| 
 | Выбрать запросом состояния менеджеров из РС. | ☑ | ||
|---|---|---|---|---|
| 0
    
        nodrama 08.08.23✎ 13:18 | 
        Добрый день. серия глупых вопросов номер 2-а и последняя на сегодня...
 Есть не типовой РС в базе. ДоговораМенеджеров. Переодичность в пределах секунды, режим записи независимый. Выглядит он так. ФиоМенеджера, ДоговорМенеджера, Дата (когда менеджер взял в работу данный договор). Иванов, Договор1, 01.01.2022 Иванов, Договор2, 15.02.2022 Иванов, Договор3, 01.03.2022 Иванов, Договор1, 10.03.2022 (значит опять взял его в работу) Теперь эти гении хотят отчет на основании этого регистра простенький. Который покажет С и ПО Иванов, Договор1, 01.01.2022 - 14.02.2022 (так как 15 он взял уже другой договор) Иванов, Договор2, 15.02.2022 - 28.02.2022 Иванов, Договор3, 01.03.2022 - 09.03.2022 Иванов, Договор1, 10.03.2022 - "" Мозг себе сломал как это запросом написать. что бы было именно так как выше, без дублей из серии Иванов, договор1, 01.01.2022-31.01.2022 Иванов, договор1, 01.02.2022-14.02.2022 | |||
| 1
    
        Волшебник 08.08.23✎ 13:25 | 
        У гениев идиотский регистр, а нам разбираться?     | |||
| 2
    
        nodrama 08.08.23✎ 13:27 | 
        (1) помочь коллеги, народу то много. больше чем уверен, что кто-то делал из подобных регистров, что-то подобное. за свою жизнь ;)     | |||
| 3
    
        DJ Anthon 08.08.23✎ 13:28 | 
        посмотри, как реализован в ЗУПе регистр КадроваяИсторияСотрудниковИнтервальный, может, поможет.
 А так, помню, недавно подобная задача была, нашёл способ через две внутренние таблицы в запросе, одна из которых смещена относительно другой на 1 строку | |||
| 4
    
        Волшебник 08.08.23✎ 13:29 | 
        (2) Вы безграмотно пишете и вставляете случайные знаки препинания. Может Вы бот?     | |||
| 5
    
        nodrama 08.08.23✎ 13:36 | 
        (4) не издевайся, я так то у тебя рекламу покупал в разделе Job когда мы программиста искали нового в компанию)     | |||
| 6
    
        Волшебник 08.08.23✎ 13:41 | 
        Сделайте другой регистр     | |||
| 7
    
        nodrama 08.08.23✎ 13:46 | 
        (6) Я бы с радостью. но мне это не оплатят. одно дело, сделать отчет какой просят, по факту не особо и сложный просто надо думать лучше мне видимо.
 а другое дело, делать другие регистры, данные переносить/заполнять и потом еще и отчет делать) | |||
| 8
    
        nodrama 08.08.23✎ 13:48 | 
        Последний результат запроса почти верный...
 только с датами проблема у меня вышло Иванов, договор1, 01.01.2022 - 15.02.2022 Иванов, договор2, 15.02.2022- 28.02.2022 А в первой строке окончание должно быть не 15, а 14, так как с 15 новый договор... надо еще подумать)).. Монолог..... | |||
| 9
    
        yopQua 08.08.23✎ 14:21 | 
        (8) если он взял 16-го, что должно быть?     | |||
| 10
    
        yopQua 08.08.23✎ 14:22 | 
        и потом, может он одновременно вести два договора?     | |||
| 11
    
        RomanYS 08.08.23✎ 14:28 | 
        (8) ДобавитьКДате(...)     | |||
| 12
    
        nodrama 08.08.23✎ 14:46 | 
        (11) это я уже поправил     | |||
| 13
    
        nodrama 08.08.23✎ 14:48 | 
        (9) ни чего. следующий взятый договор, значит предыдущий окончания. если следующий не взял. значит до сих пор тот что последний по дате     | |||
| 14
    
        yopQua 08.08.23✎ 14:51 | 
        (13) а, ну значит просто -1 день     | |||
| 15
    
        Garykom 08.08.23✎ 14:52 | 
        (0) А как в РС фиксируется что менеджер "отпустил" договор?     | |||
| 16
    
        nodrama 08.08.23✎ 14:52 | 
        после моих шаманств все более менее ровно.
 проблема осталась только в дублями одинх и тех же договоров. если человек взял 3 раза один и тот же договор в разное время.. то получается Иванов, договор1, 15.02.2022-06.05.2022 Иванов, договор1, 20.03.2022-06.05.2022 Иванов, договор1, 15.04.2022.-06.06.2022 То есть конечная дата последняя а начальная дата тогда когда он реально его брал.. но если человек берет договор один и тот же снова и снова... то начальная дата должна быть самая первая 15.02.2022 грубо говоря.. а последняя самая последняя 06.06.2022 грубо говоря.. без дублей.. его проблема что он по 10 раз брал один и тот же договор остальное все я поправил ровно | |||
| 17
    
        yopQua 08.08.23✎ 14:53 | 
        (15) видимо фактом взятия следующего, и получается что в один момент времени активный только один договор     | |||
| 18
    
        nodrama 08.08.23✎ 14:53 | 
        (15) не спрашивай.... если менеджер взял Другой договор, отличный от последнего (срезпоследних). значит в РС добавляется запись. новая
 если ее нету значит он работает над последним взятым | |||
| 19
    
        nodrama 08.08.23✎ 14:55 | 
        (15) конца нет. в том то и дело... у менеджера нет случаев когда договоров вообще нету... вот такие идиоты.... отпустить нельзя )))     | |||
| 20
    
        yopQua 08.08.23✎ 14:56 | 
        обычно такие вопросы делаются через срез последних на каждую дату     | |||
| 21
    
        nodrama 08.08.23✎ 14:56 | 
        там есть статус менеджер "уволен". и следовательно все. такие просто не вываливаются в отчет     | |||
| 22
    
        nodrama 08.08.23✎ 14:58 | 
        (20) ну может и делаются но я пока хз как я сделал без срезапоследних     | |||
| 23
    
        nodrama 08.08.23✎ 14:58 | 
        осталось понять как дубли убрать когда человек берет 10 раз один и тот же договор     | |||
| 24
    
        nodrama 08.08.23✎ 14:58 | 
        либо забить )     | |||
| 25
    
        yopQua 08.08.23✎ 14:59 | 
        (24) нормальный подход че     | |||
| 26
    
        yopQua 08.08.23✎ 15:00 | 
        или это вопрос)     | |||
| 27
    
        Ногаминебить 08.08.23✎ 15:05 | 
        (23) Сгруппировать по менеджер договор минимальная дата. Или он может взять первый договор, потом второй, потом снова первый и такие штуки надо выводить?     | |||
| 28
    
        Ногаминебить 08.08.23✎ 15:08 | 
        Хотя не. Таблицу из 16 сгруппировать по менеджер договор дата окончания минимальная дата начала.     | |||
| 29
    
        Garykom 08.08.23✎ 15:25 | 
        (18) Ну так и сделай вторую виртуальную табличку когда менеджер отпустил договор
 И затем соединяешь еще раз по условию и получаешь требуемый отчет | |||
| 30
    
        nodrama 08.08.23✎ 15:42 | 
        Вот так вот получается все нормально. только попадаются строки где идут дубли
 Договор1 Дововор1 с датой начало разной, а дата конца одинаковой (правильной) он брал несколько раз один и тот же договор. но при таком раскладе дублей не должно быть. должна быть первая дата начала и последняя дата конца. ВЫБРАТЬ ДоговораМенеджеров.Период, ДоговораМенеджеров.ФизическоеЛицо, МИНИМУМ(ДоговораМенеджеров1.Период) КАК Период1 ПОМЕСТИТЬ ВТ ИЗ РегистрСведений.ДоговораМенеджеров КАК ДоговораМенеджеров ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДоговораМенеджеров КАК ДоговораМенеджеров1 ПО ДоговораМенеджеров.ФизическоеЛицо = ДоговораМенеджеров1.ФизическоеЛицо И ДоговораМенеджеров.Период < ДоговораМенеджеров1.Период СГРУППИРОВАТЬ ПО ДоговораМенеджеров.ФизическоеЛицо, ДоговораМенеджеров.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДоговораМенеджеров.ФизическоеЛицо КАК ФизическоеЛицо, ДоговораМенеджеров.Договор КАК Договор , ДоговораМенеджеров.Период КАК ПериодНачало, ВТ.Период1 КАК ПериодОкончание ПОМЕСТИТЬ ВТ1 ИЗ РегистрСведений.ДоговораМенеджеров КАК ДоговораМенеджеров ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ ПО (ВТ.ФизическоеЛицо = ДоговораМенеджеров.ФизическоеЛицо) И (ВТ.Период = ДоговораМенеджеров.Период) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДоговораМенеджеров КАК ДоговораМенеджеров1 ПО (ВТ.ФизическоеЛицо = ДоговораМенеджеров1.ФизическоеЛицо) И (ВТ.Период1 = ДоговораМенеджеров1.Период) ГДЕ (НЕ ДоговораМенеджеров1.Договор = ДоговораМенеджеров.Договор ИЛИ ВТ.Период1 ЕСТЬ NULL) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДоговораМенеджеров.ФизическоеЛицо КАК ФизическоеЛицо, ДоговораМенеджеров.Договор КАК Договор, ДоговораМенеджеров.Период КАК ПериодНачало, ВТ.Период1 КАК ПериодОкончание ПОМЕСТИТЬ ВТ12 ИЗ РегистрСведений.ДоговораМенеджеров КАК ДоговораМенеджеров ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ ПО (ВТ.ФизическоеЛицо = ДоговораМенеджеров.ФизическоеЛицо) И (ВТ.Период = ДоговораМенеджеров.Период) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ1.ФизическоеЛицо, МИНИМУМ(ВТ11.ПериодНачало) КАК ПериодНачало1, ВТ1.ПериодОкончание ПОМЕСТИТЬ ВТ3 ИЗ ВТ1 КАК ВТ1 ЛЕВОЕ СОЕДИНЕНИЕ ВТ1 КАК ВТ11 ПО ВТ1.ФизическоеЛицо = ВТ11.ФизическоеЛицо И ВТ1.ПериодОкончание < ВТ11.ПериодНачало ГДЕ НЕ ВТ11.ПериодНачало ЕСТЬ NULL СГРУППИРОВАТЬ ПО ВТ1.ФизическоеЛицо, ВТ1.ПериодОкончание ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ1.ФизическоеЛицо, ВТ1. Договор, ВЫБОР КОГДА ВТ1.ПериодОкончание ЕСТЬ NULL ТОГДА ВТ1.ПериодНачало ИНАЧЕ ВЫБОР КОГДА ВТ3.ПериодОкончание ЕСТЬ NULL ТОГДА ВТ1.ПериодНачало ИНАЧЕ ВТ3.ПериодОкончание КОНЕЦ КОНЕЦ КАК ПериодНачало, КонецПериода(ДобавитьКДате(ВТ1.ПериодОкончание,День,-1)) КАК ПериодОкончание ИЗ ВТ1 КАК ВТ1 ЛЕВОЕ СОЕДИНЕНИЕ ВТ3 КАК ВТ3 ПО ВТ1.ФизическоеЛицо = ВТ3.ФизическоеЛицо И ВТ1.ПериодНачало = ВТ3.ПериодНачало1 УПОРЯДОЧИТЬ ПО ПериодНачало | |||
| 31
    
        nodrama 08.08.23✎ 15:42 | 
        но таких дублей единицы людей которые брали один и тот же договор пару тройку раз в разные периоды буквально 1-2-3     | |||
| 32
    
        nodrama 08.08.23✎ 15:45 | 
        запрос можно сократить но тогда место 
 договор 1, 01.01.2022 -10.05.2022 договор 1, 03.01.2022 - 10.05.2022 другие дубли получаются когда и дата начала и дата конца разные а договор один) тут хотя бы дата конца одинаковая) | |||
| 33
    
        nodrama 08.08.23✎ 15:46 | 
        забейте глупый регистр и глупый отчет. эти штучные дубли из 100+ из за корявых менеджеров ручками поправят я надеюсь)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |