Имя: Пароль:
1C
1С v8
Как соединить в запросе по максимальной дате?
0 Juliette_
Juliette
 
04.08.23
09:44
Есть таблица1 с начислениями
Иванов 15.01.23 1000,00

Есть таблица2 кадровая история
Иванов 10.01.22 Должность1
Иванов 10.08.22 Должность2
Иванов 20.02.23 Должность3

Подскажите как из связать, эти таблицы, чтобы на выходе получить
Иванов 15.01.23 1000,00 Должность2
т.е надо получить максимальную дату из второй таблицы, когда дата из таблицы1 >= дате из Таблицы2
1 vicof
 
04.08.23
09:45
"Срез последних на каждую дату"
2 Juliette_
Juliette
 
04.08.23
09:48
(1) спасибо за наводку, погуглю
3 arsik
 
04.08.23
09:58
(1) Да нафига так сложно?
(2) Сначала из Т2 сделай вт с группировкой "Сотрудник, Дата Максимум"
Потом Полученную ВТ соедини с Т2, а потом полученную соедини с Т1
4 Garykom
 
04.08.23
10:00
(3) В (1) все правильно
5 Fram
 
04.08.23
10:00
Вообще то ответ уже в вопросе в последнем предложении
6 Garykom
 
04.08.23
10:01
(3) ибо ему нужна Должность2 а не Должность3
7 arsik
 
04.08.23
10:02
(4) Сорян. Я стал рассеян, последняя строчка как то мимо мозга прошла.
8 Juliette_
Juliette
 
04.08.23
10:03
(5) логику понимаю, как в код обернуть не соображу
9 Fram
 
04.08.23
10:06
(8) соединение с указанным самой же условием - получишь нужную дату, потом еще одним соединением с таблицей 2 должность на эту дату
10 Homer
 
04.08.23
10:14
11 Fram
 
04.08.23
10:19
(10) да перестаньте вы человеку херню советовать. Все решается 2 обычными соединениями
12 RomanYS
 
04.08.23
10:27
(11) если нужно получить одну запись, то достаточно одного соединения. Если сотрудников несколько, то есть варианты)
13 Garykom
 
04.08.23
10:27
(7) хотя ты прав, только придется через ВТ и еще надо условие добавить в
>Сначала из Т2 сделай вт с группировкой "Сотрудник, Дата Максимум"
для отсечения должностей после даты начисления
14 Homer
 
04.08.23
10:34
(11) говнокод в почете теперь на Мисти?
Надо делать сразу правильно, а вы предлагать не масштабируемые решения.
15 Juliette_
Juliette
 
04.08.23
12:41
не пойму де ошибка, почему-то по несколько записей появляется
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТаблицаКадровойИстории.Период КАК Период,
        |    ТаблицаКадровойИстории.Сотрудник КАК Сотрудник,
        |    ТаблицаКадровойИстории.Подразделение КАК Подразделение,
        |    ТаблицаКадровойИстории.Должность КАК Должность
        |ПОМЕСТИТЬ ВТКадроваяИстория
        |ИЗ
        |    &ТаблицаКадровойИстории КАК ТаблицаКадровойИстории
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    СведенияОДоходахСтраховыеВзносы.Сотрудник КАК Сотрудник,
        |    СведенияОДоходахСтраховыеВзносы.Начисление КАК Начисление,
        |    СведенияОДоходахСтраховыеВзносы.Сумма КАК Сумма,
        |    СведенияОДоходахСтраховыеВзносы.Регистратор КАК Регистратор,
        |    СведенияОДоходахСтраховыеВзносы.ДатаНачала КАК ДатаНачала
        |ПОМЕСТИТЬ ВТДоходы
        |ИЗ
        |    РегистрНакопления.СведенияОДоходахСтраховыеВзносы КАК СведенияОДоходахСтраховыеВзносы
        |ГДЕ
        |    СведенияОДоходахСтраховыеВзносы.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
        |    И СведенияОДоходахСтраховыеВзносы.ФизическоеЛицо В(&МассивФизическихЛиц)
        |    И СведенияОДоходахСтраховыеВзносы.Организация = &Организация
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ТабДоходы.Сотрудник КАК Сотрудник,
        |    ТабДоходы.Начисление КАК Начисление,
        |    ТабКадроваяИстория.Подразделение КАК Подразделение,
        |    ТабКадроваяИстория.Должность КАК Должность
        |ИЗ
        |    (ВЫБРАТЬ
        |        ВТДоходы.Сотрудник КАК Сотрудник,
        |        ВТДоходы.Начисление КАК Начисление,
        |        СУММА(ВТДоходы.Сумма) КАК Сумма,
        |        ВТДоходы.Регистратор КАК Регистратор,
        |        ВТДоходы.ДатаНачала КАК ДатаНачала,
        |        ВТКадроваяИстория.Подразделение КАК Подразделение,
        |        ВТКадроваяИстория.Должность КАК Должность,
        |        МАКСИМУМ(ВТКадроваяИстория.Период) КАК КадровыйПериод
        |    ИЗ
        |        ВТДоходы КАК ВТДоходы
        |            ЛЕВОЕ СОЕДИНЕНИЕ ВТКадроваяИстория КАК ВТКадроваяИстория
        |            ПО (ВТКадроваяИстория.Период <= ВТДоходы.ДатаНачала)
        |                И (ВТКадроваяИстория.Сотрудник = ВТДоходы.Сотрудник)
        |    
        |    СГРУППИРОВАТЬ ПО
        |        ВТДоходы.Сотрудник,
        |        ВТДоходы.Начисление,
        |        ВТДоходы.ДатаНачала,
        |        ВТДоходы.Регистратор,
        |        ВТКадроваяИстория.Подразделение,
        |        ВТКадроваяИстория.Должность) КАК ТабДоходы
        |        ЛЕВОЕ СОЕДИНЕНИЕ ВТКадроваяИстория КАК ТабКадроваяИстория
        |        ПО ТабДоходы.КадровыйПериод = ТабКадроваяИстория.Период
        |            И ТабДоходы.Сотрудник = ТабКадроваяИстория.Сотрудник";
16 vicof
 
04.08.23
13:04
Зачем тебе начисления и регистраторы?
17 Juliette_
Juliette
 
04.08.23
13:06
(16) потом надо записи корректировать, для наборазаписей нужен регистратор и отборы в виде сотрудника и начисления
18 RomanYS
 
04.08.23
13:09
(15) "ВЫБРАТЬ
|    ТаблицаКадровойИстории.Период КАК Период,
|    ТаблицаКадровойИстории.Сотрудник КАК Сотрудник,
|    ТаблицаКадровойИстории.Подразделение КАК Подразделение,
|    ТаблицаКадровойИстории.Должность КАК Должность
|ПОМЕСТИТЬ ВТКадроваяИстория
|ИЗ
|    &ТаблицаКадровойИстории КАК ТаблицаКадровойИстории
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Тек.Период,
|    Тек.Сотрудник,
|    Тек.Подразделение,
|    Тек.Должность,
|    МИНИМУМ(ЕСТЬNULL(ДОБАВИТЬКДАТЕ(След.Период, СЕКУНДА, -1), ДАТАВРЕМЯ(3999, 12, 31))) КАК ПериодПо
|ПОМЕСТИТЬ ИсторияПериодами
|ИЗ
|    ВТКадроваяИстория КАК Тек
|        ЛЕВОЕ СОЕДИНЕНИЕ ВТКадроваяИстория КАК След
|        ПО Тек.Сотрудник = След.Сотрудник
|            И Тек.Период < След.Период
|
|СГРУППИРОВАТЬ ПО
|    Тек.Подразделение,
|    Тек.Сотрудник,
|    Тек.Период,
|    Тек.Должность
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Доходы.Сотрудник,
|    Доходы.ВидРасчета,
|    Доходы.Результат,
|    Доходы.Период,
|    ИсторияПериодами.Подразделение,
|    ИсторияПериодами.Должность
|ИЗ
|    ВТДоходы КАК Доходы
|        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИсторияПериодами КАК ИсторияПериодами
|        ПО Доходы.Сотрудник = ИсторияПериодами.Сотрудник
|            И Доходы.Период между ИсторияПериодами.Период
|            И  ИсторияПериодами.ПериодПо"
19 Juliette_
Juliette
 
04.08.23
13:13
в общем, пришлось разбить крайний запрос. Сначала ВТ по максимальной дате и потом только соединять. Когда вставляешь подразделение и должность, несколько одинаковых строк появляется
20 Juliette_
Juliette
 
04.08.23
13:31
(18) работает и так, спасибо
Основная теорема систематики: Новые системы плодят новые проблемы.