Имя: Пароль:
1C
1С v8
Разные результаты - консоль и СКД
,
0 Масянька
 
06.02.24
08:36
Доброе утро!
Запрос:
ВЫБРАТЬ
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.Период КАК Период,
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.Сотрудник КАК Сотрудник,
    КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение,
    КадроваяИсторияСотрудниковСрезПоследних.Должность КАК Должность,
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.ВидУчетаВремени КАК ВидУчетаВремени,
    ВЫБОР
        КОГДА ДанныеТабельногоУчетаРабочегоВремениСотрудников.ВидУчетаВремени В (&СписокЧасовогоВремени)
            ТОГДА 0
        ИНАЧЕ ДанныеТабельногоУчетаРабочегоВремениСотрудников.Дни
    КОНЕЦ КАК Дни,
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.Часы КАК Часы
ИЗ
    РегистрНакопления.ДанныеТабельногоУчетаРабочегоВремениСотрудников КАК ДанныеТабельногоУчетаРабочегоВремениСотрудников
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&ДатаНачала, ДействуетДо = ДАТАВРЕМЯ(1, 1, 1)) КАК КадроваяИсторияСотрудниковСрезПоследних
        ПО (ДанныеТабельногоУчетаРабочегоВремениСотрудников.Сотрудник = КадроваяИсторияСотрудниковСрезПоследних.Сотрудник)
ГДЕ
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
    И НЕ ДанныеТабельногоУчетаРабочегоВремениСотрудников.ВидУчетаВремени В (&ЯвкиИВыходные)
    И ДанныеТабельногоУчетаРабочегоВремениСотрудников.Сотрудник = &Сотрудник

УПОРЯДОЧИТЬ ПО
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.Сотрудник

В РС кадровая история по сотруднику 4 записи: 2 начальная штатная расстановка и 2 перемещения (временных), 2 временных более поздние.
В консоли возвращает правильную должность (постоянную). В СКД возвращает временную должность.
Изначально отчет СКД был без условия на пустую дату (ДействуетДо). После добавления условия - все равно возвращает не ту должность.
Что не так в СКД?
Спасибо.
1 Волшебник
 
06.02.24
08:38
условие ДействуетДо вытащите из параметров в ГДЕ
2 Волшебник
 
06.02.24
08:38
в параметрах добавьте условие на сотрудника
3 Масянька
 
06.02.24
08:42
(1)
ВЫБРАТЬ
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.Период КАК Период,
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.Сотрудник КАК Сотрудник,
    КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение,
    КадроваяИсторияСотрудниковСрезПоследних.Должность КАК Должность,
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.ВидУчетаВремени КАК ВидУчетаВремени,
    ВЫБОР
        КОГДА ДанныеТабельногоУчетаРабочегоВремениСотрудников.ВидУчетаВремени В (&СписокЧасовогоВремени)
            ТОГДА 0
        ИНАЧЕ ДанныеТабельногоУчетаРабочегоВремениСотрудников.Дни
    КОНЕЦ КАК Дни,
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.Часы КАК Часы
ИЗ
    РегистрНакопления.ДанныеТабельногоУчетаРабочегоВремениСотрудников КАК ДанныеТабельногоУчетаРабочегоВремениСотрудников
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&ДатаНачала, ) КАК КадроваяИсторияСотрудниковСрезПоследних
        ПО ДанныеТабельногоУчетаРабочегоВремениСотрудников.Сотрудник = КадроваяИсторияСотрудниковСрезПоследних.Сотрудник
ГДЕ
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
    И НЕ ДанныеТабельногоУчетаРабочегоВремениСотрудников.ВидУчетаВремени В (&ЯвкиИВыходные)
    И (КадроваяИсторияСотрудниковСрезПоследних.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1))
            //ИЛИ КадроваяИсторияСотрудниковСрезПоследних.ДействуетДо ЕСТЬ NULL)

УПОРЯДОЧИТЬ ПО
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.Сотрудник

Не арбайтен (не та должность).
4 Гена
 
гуру
06.02.24
08:45
Попробуйте соединяться не с КадроваяИсторияСотрудников
а с
КадроваяИсторияСотрудниковИнтервальный

Там уже чётко будут должности по датам.
5 Масянька
 
06.02.24
08:48
(4) Там тоже самое (4 записи, с теми же должностями).
Почему разные результаты в консоли и СКД?
6 Гена
 
гуру
06.02.24
08:50
(5) И всё-таки попробуйте.
7 Масянька
 
06.02.24
08:55
(6)
ВЫБРАТЬ
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.Период КАК Период,
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.Сотрудник КАК Сотрудник,
    КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение,
    КадроваяИсторияСотрудниковСрезПоследних.Должность КАК Должность,
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.ВидУчетаВремени КАК ВидУчетаВремени,
    ВЫБОР
        КОГДА ДанныеТабельногоУчетаРабочегоВремениСотрудников.ВидУчетаВремени В (&СписокЧасовогоВремени)
            ТОГДА 0
        ИНАЧЕ ДанныеТабельногоУчетаРабочегоВремениСотрудников.Дни
    КОНЕЦ КАК Дни,
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.Часы КАК Часы
ИЗ
    РегистрНакопления.ДанныеТабельногоУчетаРабочегоВремениСотрудников КАК ДанныеТабельногоУчетаРабочегоВремениСотрудников
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК КадроваяИсторияСотрудниковСрезПоследних
        ПО ДанныеТабельногоУчетаРабочегоВремениСотрудников.Сотрудник = КадроваяИсторияСотрудниковСрезПоследних.Сотрудник
ГДЕ
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
    И НЕ ДанныеТабельногоУчетаРабочегоВремениСотрудников.ВидУчетаВремени В (&ЯвкиИВыходные)
    И КадроваяИсторияСотрудниковСрезПоследних.ДатаОкончания > &ДатаНачала

УПОРЯДОЧИТЬ ПО
    ДанныеТабельногоУчетаРабочегоВремениСотрудников.Сотрудник

То же самое - не та должность.
8 Масянька
 
06.02.24
08:56
+(7) В консоли - правильная должность.
9 АгентБезопасной Нацио
 
06.02.24
09:00
как вариант, перехвати ПриКомпоновкеРезультата, посмотри в подготовленный МакетКомпоновки.НаборыДанных соотвествующий НаборДанных и его  запрос (т.е. тот текст запроса, в который СКД првратила твой начальный запрос).
10 toypaul
 
гуру
06.02.24
09:32
(0) когда в СКД результат другой, надо под рукой иметь другую консоль. не запросов, а консоль компоновки данных
11 Буковка
 
06.02.24
09:42
(0) попробуй переименовать параметры ДатаНачала и ДатаОкончания. Есть предположение, что в скд пересекается со стандартными параметрами РС.
12 Масянька
 
06.02.24
10:03
Ребята!
Спасибо за наводки - буду пробовать (только вечером).
Отпишусь.
13 Web00001
 
06.02.24
10:03
>Почему разные результаты в консоли и СКД?
Очень старый анекдот. СКД оптимизирует запрос. Может изменить условие или выкинуть поле, если не увидит. что оно тебе нужно(а у тебя по нему группировка). Нужна консоль которая покажет реальный запрос который СКД отправляет к БД.
14 Гена
 
гуру
06.02.24
10:36
Коллеги, у меня два теоретических вопроса.

1. Это нормально в (3):
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&ДатаНачала, )
?
Не надо разве здесь ставить &ДатаОкончания
?

2. Это нормально в (7):
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудниковИнтервальный
?
Разве не надо добавить
.СрезПоследних(&ДатаОкончания, )
?
15 VladZ
 
06.02.24
15:00
(0) СКД - это некая "магическая шляпа", для которой текст запроса всего лишь "часть фокуса".  Нужно смотреть остальные настройки. Это во-первых.

Во-вторых, СКД думает, что он умнее всех и пытается что-то там оптимизировать. Не всегда корректно. Попробуй разбить запрос.
16 gul_Sayan
 
06.02.24
16:06
(0) Если ЗУП 3 то лучше пользоваться РС КадроваяИсторияСотрудниковИнтервальный. При наличии временного перемещения срез последних не верный результат выдаст.
17 Web00001
 
06.02.24
16:35
(15)>Во-вторых, СКД думает, что он умнее всех
И надо сказать, что в 99% случаев он прав
18 Масянька
 
06.02.24
20:42
(14) 1. В данном случае, не принципиально.
2. Нету в КадроваяИсторияСотрудниковИнтервальный среза последних... Нету!
19 Волшебник
 
06.02.24
20:54
(14) Не создавайте нам теорию сверх платформы.
20 Волшебник
 
06.02.24
21:08
Платформа предоставляет РегистрыСведений и СрезПоследних по измерениям с полем Период

Всё остальное гибкое и настраиваемое.

специально делают дубли данных, чтобы быстрее доставать.
21 Гена
 
гуру
06.02.24
21:34
(20) Возьмём обычный неинтервальный РС.
Пусть есть бессрочный Приём на работу:
01.01.2024 ... бухгалтер ...
И есть временный кадровый перевод:
15.01.2024 ... программист ... действует до 01.02.2024

Срез последних на сегодня 06 февраля по какому периоду сработает?
Не выдаст ли он по периоду регистрации записей ошибочно, что сегодня программист, а не правильное бухгалтер?
22 Гена
 
гуру
06.02.24
21:39
Я к чему. Не есть ли разница между СКД и консолью, что в одном случае СрезПоследних работает по периоду регистрации, а в другом - по периоду действия?
23 Волшебник
 
06.02.24
21:40
(22) Если есть различия в параметрах, то возможна разница в результате. А к чему вопрос-то?
24 Гена
 
гуру
06.02.24
21:43
(23) Да это я для себя. Для понимания )
25 Волшебник
 
06.02.24
21:49
(24) 👍 Я вам больше скажу. Нормальная система иногда специально отвечает по-другому на один и тот же запрос, иначе кажется идиотом.
26 Масянька
 
07.02.24
15:05
Я продолжу...
Сделала новый отчет СКД с тем же (!!!!) запросом.
Правильная должность выводиться!
Где эти настройки и как их грохнуть?!
27 Буковка
 
07.02.24
15:10
(26) а заменить отчет на новый нельзя? возможно, дело было в кэше
28 kir-g
 
07.02.24
15:24
(27) Скорее всего отчет есть в Дополнительных, а новый отчет открывают как внешний отчет и если названия совпадают такая дичь может творится
29 gul_Sayan
 
07.02.24
15:29
(26) Есть такая штука если внешний отчет уже подключен к базе то запрос берётся из него, нужно либо заменять подключенный на новый или называть его по новому.
30 Масянька
 
07.02.24
15:45
(28) (29) Непереводимая игра слов с использованием местных идиоматических выражений ©
Спасибо!