Имя: Пароль:
1C
 
Выбрать запросом состояния менеджеров из РС.
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+ из за корявых менеджеров ручками поправят я надеюсь)