|
Выбрать запросом состояния менеджеров из РС. | ☑ | ||
---|---|---|---|---|
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+ из за корявых менеджеров ручками поправят я надеюсь)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |