Имя: Пароль:
1C
1С v8
ЗУП 3 Получить кадровую историю за период с учетом границ
,
0 егаис
 
04.06.18
22:20
Не подскажете, какой функций ОМ получить кадровую историю сотрудника по выбранным полям с учетом значений на границе поиска
Т.е. значение на начало, обороты, значение на конец
1 егаис
 
04.06.18
22:31
Или нет такой функции и писать запрос с объединением срезов и оборотов?
2 егаис
 
04.06.18
22:51
так, вопрос закрыт, нашел несколько другое решение.
Другая задача
есть ТЗ
09.01.18  1
12.01.18  1
14.01.18  0
15.01.18  1
18.01.18  0
21.01.18  0

как бы красиво его собрать в таблицу периодов, а не тупым перебором
09.01.18  13.01.18   1
14.01.18             0
15.01.18             1
18.01.18  21.01.18   0
3 mmmarat
 
04.06.18
23:03
(0) ЗарплатаКадрыПериодическиеРегистры.СоздатьВТИмяРегистраПериоды(...

по таблице КадроваяИсторияСотрудников.

На входе ВТ с фильтром, на выходе интервалы изменений.
4 catena
 
05.06.18
05:04
" нашел несколько другое решение. "

В приличном обществе принято делиться решениями, чтобы неофиты, умеющие пользоваться поиском, не разочаровывались в данном умении.
5 catena
 
05.06.18
05:05
(2)а почему период с 9 по 13, но 15-е отдельной датой?
6 егаис
 
05.06.18
08:07
(4)решение не связано с запросами. Выходная таблица берется из модуля табеля.
(5) потому что у 14 значение 0, а у 15 - 1 . Получаем таблицу с границами периодов по значению.
7 catena
 
05.06.18
08:26
(6)Все равно не вижу логики.
почему

09.01.18  1
12.01.18  1
14.01.18  0

Преобразуется в
09.01.18  13.01.18   1

А
15.01.18  1
18.01.18  0

Не преобразуется в
15.01.18  17.01.18   1
8 SleepyHead
 
гуру
05.06.18
08:29
(0) Потому что записи действуют "до", а не "по". До 14 числа - значит по 13-е.
9 Optan
 
05.06.18
08:31
(8) Ну так 17.01 значение продолжает оставаться = 1
10 SleepyHead
 
гуру
05.06.18
08:32
(9) Это уже к автору, возможно, просто опечатался.
11 егаис
 
05.06.18
08:37
(9)да, пардон, опечатка
в принципе возвращается таблица учета рабочего времени за каждый день. Поэтому...простым перебором конечно можно получить данную таблицу, но мы не ищем легких путей, хочется красиво извратиться.
12 SleepyHead
 
гуру
05.06.18
08:44
(11) В предложенном в (3) варианте есть обращение к таблице значений в качестве источника данных. К стыду своему, не знал..
13 catena
 
05.06.18
09:02
(11)
Выбрать Минимум(А),Б,Признак из
(Выбрать тзГраничныеДни.Дата как А, ДобавитьКДАте(Минимум(СледПериод.Дата),День,-1) как Б, тзГраничныеДни.Признак
из ВТ как тзГраничныеДни
Левое Соединение ВТ как СледПериод по
тзГраничныеДни.Дата<СледПериод.Дата
и тзГраничныеДни.Признак<>СледПериод.Признак
Сгруппировать по тзГраничныеДни.Дата,тзГраничныеДни.Признак) как Данные
Сгруппировать по Б,Признак
14 егаис
 
05.06.18
11:15
(13) спасибо, красиво
15 егаис
 
05.06.18
12:58
блин, каша получается
на этапе формирование ВТ получилось отсечь ненужные строки
на выходе имеем
Иванов 09.01
Иванов 10.01
Иванов 11.01
Иванов 14.01
Иванов 15.01
Петров 09.01
Петров 12.01
Петров 13.01

Туплю, как привести к интервалу
Иванов 09.01  11.01
Иванов 14.01  15.01
Петров 09.01  09.01
Петров 12.01  13.01
16 catena
 
05.06.18
13:30
Выбрать ДатаКалендаря как Дата, Д.Физлицо, Выбор когда ВТ.Дата Есть NULL тогда 0 иначе 1 конец как признак
Поместить ВТ2
Из РегистрСведений.РегламентированныйПроизводственныйКалендарь Кал
Левое соединение (Выбрать различные Физлицо из ВТ)как Д по Истина
Левое Соединение ВТ как ВТ по ВТ.Дата = Кал.ДатаКалендаря и ВТ.Физлицо=Д.Физлицо
Где Кал.ДатаКалендаря между &Д1 и &Д2
;
Выбрать Минимум(А) как А,Б,Признак, Физлицо из
(Выбрать тзГраничныеДни.Дата как А, ДобавитьКДАте(Минимум(СледПериод.Дата),День,-1) как Б, тзГраничныеДни.Физлицо, тзГраничныеДни.Признак
из ВТ2 как тзГраничныеДни
Левое Соединение ВТ2 как СледПериод по
тзГраничныеДни.Физлицо=СледПериод.Физлицо и
тзГраничныеДни.Дата<СледПериод.Дата
и тзГраничныеДни.Признак<>СледПериод.Признак
Сгруппировать по тзГраничныеДни.Дата,тзГраничныеДни.Признак,тзГраничныеДни.Физлицо) как Данные
Где Признак=1
Сгруппировать по Б,Признак,Физлицо
Упорядочить по Физлицо,А
17 егаис
 
05.06.18
13:40
"ВЫБРАТЬ
    |    Таблица.Дата КАК Дата,
    |    Таблица.Сотрудник КАК Сотрудник
    |ПОМЕСТИТЬ ВТ
    |ИЗ
    |    &ДанныеПроведения КАК Таблица
    |ГДЕ
    |    Таблица.ПрерываниеСтажа
    |    И Таблица.СпособРаботы = ЗНАЧЕНИЕ(Перечисление.Способы.Вахтовый)
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    МИНИМУМ(Данные.А) КАК А,
    |    Данные.Б КАК Б,
    |    Данные.Сотрудник КАК Сотрудник
    |ИЗ
    |    (ВЫБРАТЬ
    |        тзГраничныеДни.Дата КАК А,
    |        ДОБАВИТЬКДАТЕ(МИНИМУМ(СледПериод.Дата), ДЕНЬ, -1) КАК Б,
    |        тзГраничныеДни.Сотрудник КАК Сотрудник
    |    ИЗ
    |        ВТ КАК тзГраничныеДни
    |            ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК СледПериод
    |            ПО тзГраничныеДни.Сотрудник = СледПериод.Сотрудник
    |                И тзГраничныеДни.Дата < СледПериод.Дата
    |    
    |    СГРУППИРОВАТЬ ПО
    |        тзГраничныеДни.Дата,
    |        тзГраничныеДни.Сотрудник) КАК Данные
    |
    |СГРУППИРОВАТЬ ПО
    |    Данные.Б,
    |    Данные.Сотрудник
    |
    |УПОРЯДОЧИТЬ ПО
    |    Данные.Сотрудник,
    |    А";
18 егаис
 
05.06.18
13:45
получается ерунда вроде
Иванов 09.01  09.01
Иванов 10.01  10.01
Иванов 11.01  13.01
Петров 14.01  14.01
Петров 15.01    -
19 егаис
 
05.06.18
14:43
ап
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn