Добрый день! Есть Запрос по РегиструСведений.СостояниеРаботниковОрганизаций
Результат получаю такой:
ДатаНачала ДатаЗавершения Состояние
27.12.2016 23.01.2017 В ежегодном отпуске
01.02.2017 Отсутствует по невыясненной причине
27.02.2017 Работает
03.03.2017 09.03.2017 В отпуске без сохранения зарплаты
Каким образом Для второй строки в колонке "ДатаЗавершения" получить дату "ДатаНачала" из следующей строки?
Результат получаю такой:
ДатаНачала ДатаЗавершения Состояние
27.12.2016 23.01.2017 В ежегодном отпуске
01.02.2017 Отсутствует по невыясненной причине
27.02.2017 Работает
03.03.2017 09.03.2017 В отпуске без сохранения зарплаты
Каким образом Для второй строки в колонке "ДатаЗавершения" получить дату "ДатаНачала" из следующей строки?
По теме из базы знаний
Найденные решения
Добавьте в запрос еще такую же таблицу, сделайте левое соединение этих таблиц с условием Таблица1.ДатаНачала < Таблица2.ДатаНачала и далее по примеру (Первые два запроса просто строят две одинаковые таблицы. У вас они будут браться из регистров). Числа нудно заменить на даты и в условии проверка не на "0", а на пустую дату:
ВЫБРАТЬ
1 КАК ДатаНачала,
2 КАК ДатаОкончания,
"Событие1" КАК Событие
ПОМЕСТИТЬ ВременнаяТаблица1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
3,
0,
"Событие2"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
4,
0,
"Событие3"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
1 КАК ДатаНачала,
2 КАК ДатаОкончания,
"Событие1" КАК Событие
ПОМЕСТИТЬ ВременнаяТаблица2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
3,
0,
"Событие2"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
4,
0,
"Событие3"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВременнаяТаблица1.ДатаНачала КАК ДатаНачала,
МИНИМУМ(ВременнаяТаблица1.ДатаОкончания) КАК ДатаОкончания,
ВременнаяТаблица1.Событие КАК Событие,
МИНИМУМ(ВременнаяТаблица2.ДатаНачала) КАК ДатаНачала2
ПОМЕСТИТЬ ВременнаяТаблица3
ИЗ
ВременнаяТаблица1 КАК ВременнаяТаблица1
ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблица2 КАК ВременнаяТаблица2
ПО (ВременнаяТаблица1.ДатаНачала < ВременнаяТаблица2.ДатаНачала)
СГРУППИРОВАТЬ ПО
ВременнаяТаблица1.ДатаНачала,
ВременнаяТаблица1.Событие
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВременнаяТаблица3.ДатаНачала КАК ДатаНачала,
ВЫБОР
КОГДА ВременнаяТаблица3.ДатаОкончания = 0
ТОГДА ВременнаяТаблица3.ДатаНачала2
ИНАЧЕ ВременнаяТаблица3.ДатаОкончания
КОНЕЦ КАК ДатаОкончания,
ВременнаяТаблица3.Событие
ИЗ
ВременнаяТаблица3 КАК ВременнаяТаблица3
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Через вычисляемое поле с выражением ВЫЧИСЛИТЬВЫРАЖЕНИЕ(...) - см. помощь/примеры по СКД.
Там только нюанс вроде такой будет. Для последней строки Дата завершения возьмется, как Дата начала из первой строки.
Там только нюанс вроде такой будет. Для последней строки Дата завершения возьмется, как Дата начала из первой строки.
Добавьте в запрос еще такую же таблицу, сделайте левое соединение этих таблиц с условием Таблица1.ДатаНачала < Таблица2.ДатаНачала и далее по примеру (Первые два запроса просто строят две одинаковые таблицы. У вас они будут браться из регистров). Числа нудно заменить на даты и в условии проверка не на "0", а на пустую дату:
ВЫБРАТЬ
1 КАК ДатаНачала,
2 КАК ДатаОкончания,
"Событие1" КАК Событие
ПОМЕСТИТЬ ВременнаяТаблица1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
3,
0,
"Событие2"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
4,
0,
"Событие3"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
1 КАК ДатаНачала,
2 КАК ДатаОкончания,
"Событие1" КАК Событие
ПОМЕСТИТЬ ВременнаяТаблица2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
3,
0,
"Событие2"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
4,
0,
"Событие3"
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВременнаяТаблица1.ДатаНачала КАК ДатаНачала,
МИНИМУМ(ВременнаяТаблица1.ДатаОкончания) КАК ДатаОкончания,
ВременнаяТаблица1.Событие КАК Событие,
МИНИМУМ(ВременнаяТаблица2.ДатаНачала) КАК ДатаНачала2
ПОМЕСТИТЬ ВременнаяТаблица3
ИЗ
ВременнаяТаблица1 КАК ВременнаяТаблица1
ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблица2 КАК ВременнаяТаблица2
ПО (ВременнаяТаблица1.ДатаНачала < ВременнаяТаблица2.ДатаНачала)
СГРУППИРОВАТЬ ПО
ВременнаяТаблица1.ДатаНачала,
ВременнаяТаблица1.Событие
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВременнаяТаблица3.ДатаНачала КАК ДатаНачала,
ВЫБОР
КОГДА ВременнаяТаблица3.ДатаОкончания = 0
ТОГДА ВременнаяТаблица3.ДатаНачала2
ИНАЧЕ ВременнаяТаблица3.ДатаОкончания
КОНЕЦ КАК ДатаОкончания,
ВременнаяТаблица3.Событие
ИЗ
ВременнаяТаблица3 КАК ВременнаяТаблица3
Показать
Я пошла более простым путем: добавила еще регистр сведений по срезу последних и прописала условие для поля "ДатаЗавершения":
ВЫБОР
КОГДА СостояниеРаботниковОрганизаций.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
И НЕ СостояниеРаботниковОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.Работает)
ТОГДА ДОБАВИТЬКДАТЕ(СостояниеРаботниковОрганизацийСрезПоследних.Период, СЕКУНДА, -1)
ИНАЧЕ ДОБАВИТЬКДАТЕ(СостояниеРаботниковОрганизаций.ПериодЗавершения, СЕКУНДА, -1)
КОНЕЦ
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот