Доброго дня... Шановні знатоки 1С кода, допоможіть вирішити наступну проблему...
Ситуація наступна
Є запрос, який формує таблицю по працівникам, і їхнім датам прийому та звільнення.
ПРАЦІВНИК | Дата прийому | Дата звільнення
Іванов.О.О. | 01.02.2020 | 15.10.2024..............................................
Як зробити так щоб цей запрос виводив інформацію в розрізі років? По типу,
ПРАЦІВНИК | Рік | Дата початок | Дата кінець
Іванов.О.О. | 2020 | 01.02.2020 | 31.12.2020
Іванов.О.О. | 2021 | 01.01.2021 | 31.12.2021
Іванов.О.О. | 2022 | 01.01.2022 | 31.12.2022
Іванов.О.О. | 2023 | 01.01.2023 | 31.12.2023
Іванов.О.О. | 2024 | 01.01.2024 | 15.10.2023
аж до дати звільнення......
Додайте в запит РікПрийому = Год(ДатаПрийому) і зробіть підсумки по Рік
Мабуть, шось типу такого:
ИТОГИ ПО
Рік,
ОБЩИЕ
Vofka @ Сегодня, 11:25
,
Дякую, але не зовсім підходить.По факту потрібно 1 рядок (з періодом) розбити на 5 (по рокам цього періоду)
Якщо у вас в БД зберігається умовно 2 строки виду:
Іванов, 01.01.2020, Прийнятий
Іванов, 15.11.2024, Звільнений
То на швидкоруч я не знаю, чи взагалі це можна зробити запитом. Я би робив це кодом.
Vofka @ Сегодня, 16:22
,
Извините,что вмешиваюсь,а может результат запроса выгрузить в Таблицу Значений ?
Таблицу Значений отсортировать в нужном порядке по датам.И далее- вывод данных из ТЗ.
Доброго дня! Є такий варіант:
в мене вийшло те що потрібно
ВЫБРАТЬ
0 КАК n
ПОМЕСТИТЬ Т_Цифри
ОБЪЕДИНИТЬ
ВЫБРАТЬ
1
ОБЪЕДИНИТЬ
ВЫБРАТЬ
2
ОБЪЕДИНИТЬ
ВЫБРАТЬ
3
ОБЪЕДИНИТЬ
ВЫБРАТЬ
4
ОБЪЕДИНИТЬ
ВЫБРАТЬ
5
ОБЪЕДИНИТЬ
ВЫБРАТЬ
6
ОБЪЕДИНИТЬ
ВЫБРАТЬ
7
ОБЪЕДИНИТЬ
ВЫБРАТЬ
8
ОБЪЕДИНИТЬ
ВЫБРАТЬ
9
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&Дата1, ГОД, а_Одиниці.n + б_Десятки.n * 10 + в_Сотні.n * 100 + г_Тисячі.n * 1000) КАК Дата
ПОМЕСТИТЬ Т_Дат
ИЗ
Т_Цифри КАК а_Одиниці
ЛЕВОЕ СОЕДИНЕНИЕ Т_Цифри КАК б_Десятки
ПО (ИСТИНА)
ЛЕВОЕ СОЕДИНЕНИЕ Т_Цифри КАК в_Сотні
ПО (ИСТИНА)
ЛЕВОЕ СОЕДИНЕНИЕ Т_Цифри КАК г_Тисячі
ПО (ИСТИНА)
ГДЕ
а_Одиниці.n + б_Десятки.n * 10 + в_Сотні.n * 100 + г_Тисячі.n * 1000 <= РАЗНОСТЬДАТ(&Дата1, &Дата2, ГОД)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВложенныйЗапрос.Сотрудник КАК Робітник,
МАКСИМУМ(ВложенныйЗапрос.ДатаПрийому) КАК ДатаПрийому,
МАКСИМУМ(ВложенныйЗапрос.ДатаЗвільнення) КАК ДатаЗвільнення
ПОМЕСТИТЬ Т_Робітників
ИЗ
(ВЫБРАТЬ
РаботникиОрганизаций.Сотрудник КАК Сотрудник,
РаботникиОрганизаций.Период КАК ДатаПрийому,
NULL КАК ДатаЗвільнення
ИЗ
РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
РаботникиОрганизаций.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПриемНаРаботу)
И РаботникиОрганизаций.Сотрудник = &Сотрудник
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
РаботникиОрганизаций.Сотрудник,
NULL,
РаботникиОрганизаций.Период
ИЗ
РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
РаботникиОрганизаций.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
И РаботникиОрганизаций.Сотрудник = &Сотрудник) КАК ВложенныйЗапрос
СГРУППИРОВАТЬ ПО
ВложенныйЗапрос.Сотрудник
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Т_Робітників.Робітник,
ГОД(Т_Дат.Дата) КАК Рік,
ВЫБОР
КОГДА Т_Робітників.ДатаПрийому МЕЖДУ НАЧАЛОПЕРИОДА(Т_Дат.Дата, ГОД) И КОНЕЦПЕРИОДА(Т_Дат.Дата, ГОД)
ТОГДА Т_Робітників.ДатаПрийому
ИНАЧЕ Т_Дат.Дата
КОНЕЦ КАК ДатаПочаток,
ВЫБОР
КОГДА Т_Робітників.ДатаЗвільнення МЕЖДУ НАЧАЛОПЕРИОДА(Т_Дат.Дата, ГОД) И КОНЕЦПЕРИОДА(Т_Дат.Дата, ГОД)
ТОГДА Т_Робітників.ДатаЗвільнення
ИНАЧЕ КОНЕЦПЕРИОДА(Т_Дат.Дата, ГОД)
КОНЕЦ КАК ДатаКінець
ИЗ
Т_Робітників КАК Т_Робітників,
Т_Дат КАК Т_Дат
Vofka @ Сегодня, 20:21
,
Если нужен срочно этот отчет и сверху команды от руководящих -"Давай быстрее ! Когда будет готово ?!",
то проще мне кажется через ТЗ это решить.А если времени достаточно и без нервозности,то можно и запросами.
№ Робітник Рік ДатаПочаток ДатаКінець
1 Наташа 2 016 21.06.2016 0:00:00 31.12.2016 23:59:59
2 Наташа 2 017 01.01.2017 0:00:00 31.12.2017 23:59:59
3 Наташа 2 018 01.01.2018 0:00:00 31.12.2018 23:59:59
4 Наташа 2 019 01.01.2019 0:00:00 31.12.2019 23:59:59
5 Наташа 2 020 01.01.2020 0:00:00 31.12.2020 23:59:59
6 Наташа 2 021 01.01.2021 0:00:00 31.12.2021 23:59:59
7 Наташа 2 022 01.01.2022 0:00:00 31.12.2022 23:59:59
8 Наташа 2 023 01.01.2023 0:00:00 31.12.2023 23:59:59
9 Наташа 2 024 01.01.2024 0:00:00 10.08.2024 0:00:00
Це результат реальної бази, 10-15 хв. витратив на запит.
я просто показав, що можна і запитом
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua