как в запросе можно найти дату окончания действия элемента, как дату начала следующего элемента?

1. user1299321 09.04.24 15:02 Сейчас в теме
есть справочник, в котором есть поле "Действие с". как в запросе можно найти дату окончания действия, как дату начала следующего элемента?
Например:
Спр 1 - Действие с = 01.02.24
Спр 2 - Действие с= 12.02.24
Спр 3 - Действие с = 29.02.24

нужно запросом получить
Спр 1 - Действие с = 01.02.24 - Действие по = 11.02.24
Спр 2 - Действие с = 12.02.24 - Действие по= 28.02.24
Спр 3 - Действие с= 29.02.24 - Действие по = Пустая дата
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 81 09.04.24 15:07 Сейчас в теме
(1)в первом приближении, если не ошибаюсь:

ВЫБРАТЬ
      Т1.Период КАК периодС,
      Минимум(ДобавитьКДате(Т2.Период, День, -1)) КАК периодПо
ИЗ
      Таблица КАК Т1
            ЛЕВОЕ СОЕДИНЕНИЕ Таблица КАК Т2
            ПО Т1. Период > Т2.Период
Сгруппировать По
      Т1.Период
Показать
3. Said-We 09.04.24 15:39 Сейчас в теме
(1) Этот вопрос задаётся с поразительным постоянством в еженедельном режиме. Тестовое задание что ли?
https://forum.infostart.ru/forum9/topic308763/#message3045095
4. VmvLer 09.04.24 15:39 Сейчас в теме
ВЫБРАТЬ
	"Эл2" КАК Эл,
	ДАТАВРЕМЯ(2024, 2, 12) КАК Период
ПОМЕСТИТЬ ВТНабор

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Эл1",
	ДАТАВРЕМЯ(2024, 2, 1)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Эл3",
	ДАТАВРЕМЯ(2024, 2, 29)

ИНДЕКСИРОВАТЬ ПО
	Период
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	АВТОНОМЕРЗАПИСИ() КАК Порядок,
	ВТНабор.Эл КАК Эл,
	ВТНабор.Период КАК Период
ПОМЕСТИТЬ ВТНаборПоПорядкуДат
ИЗ
	ВТНабор КАК ВТНабор
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Т1.Эл КАК Эл,
	Т1.Период КАК ДатаНачала,
	ЕСТЬNULL(ДОБАВИТЬКДАТЕ(Т2.Период, СЕКУНДА, -1), ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаОкончания
ИЗ
	ВТНаборПоПорядкуДат КАК Т1
		ЛЕВОЕ СОЕДИНЕНИЕ ВТНаборПоПорядкуДат КАК Т2
		ПО (Т1.Порядок = Т2.Порядок - 1)
Показать
5. VmvLer 09.04.24 15:41 Сейчас в теме
ВТНабор (0 мс., строк: 3)
Эл Период
Эл1 01.02.2024
Эл2 12.02.2024
Эл3 29.02.2024

ВТНаборПоПорядкуДат (0 мс., строк: 3)
Порядок Эл Период
1 Эл1 01.02.2024
2 Эл2 12.02.2024
3 Эл3 29.02.2024

Результат1 (0,016 мс., строк: 3)
Эл ДатаНачала ДатаОкончания
Эл1 01.02.2024 11.02.2024 23:59:59
Эл2 12.02.2024 28.02.2024 23:59:59
Эл3 29.02.2024 <Пустая дата>
Показать
6. Vlan 36 09.04.24 16:05 Сейчас в теме
У меня вот так получилось через временные таблицы:
	ТабЗнач=Новый ТаблицаЗначений;
	КвалификаторыСтроки=Новый КвалификаторыСтроки(120);
	ТабЗнач.Колонки.Добавить("Спр",Новый ОписаниеТипов("Строка",,КвалификаторыСтроки));
	ТабЗнач.Колонки.Добавить("ДатаНач",Новый ОписаниеТипов("Дата"));
	Стр=ТабЗнач.Добавить();
	Стр.Спр="Спр1";
	Стр.ДатаНач=Дата(2024,2,1);
	Стр=ТабЗнач.Добавить();
	Стр.Спр="Спр2";
	Стр.ДатаНач=Дата(2024,2,12);
	Стр=ТабЗнач.Добавить();
	Стр.Спр="Спр3";
	Стр.ДатаНач=Дата(2024,2,29);
	Запрос=Новый Запрос;
	Запрос.Текст="
		|ВЫБРАТЬ
		|	ТЗ.Спр КАК Спр,
		|	ТЗ.ДатаНач КАК ДатаНач
		|ПОМЕСТИТЬ ВТ_ТЗ
		|ИЗ
		|	&ТабЗнач КАК ТЗ
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ДобавитьКДате(Даты.ДатаНач,День,-1) КАК ДатаКон
		|ПОМЕСТИТЬ ВТ_Даты
		|ИЗ
		|	ВТ_ТЗ КАК Даты
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ТЗ.Спр КАК Спр,
		|	ТЗ.ДатаНач КАК ДатаНач,
		|	ЕСТЬNULL(МИНИМУМ(Даты.ДатаКон),&ПустаяДата) КАК ДатаКон
		|ИЗ
		|	ВТ_ТЗ КАК ТЗ
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Даты КАК Даты
		|		ПО (ТЗ.ДатаНач < Даты.ДатаКон)
		|
		|СГРУППИРОВАТЬ ПО
		|	ТЗ.Спр,
		|	ТЗ.ДатаНач
		|";
	Запрос.Параметры.Вставить("ТабЗнач",ТабЗнач);
	Запрос.Параметры.Вставить("ПустаяДата",Дата(1,1,1));
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Сообщить(ВыборкаДетальныеЗаписи.Спр+" "+ВыборкаДетальныеЗаписи.ДатаНач+" "+ВыборкаДетальныеЗаписи.ДатаКон);
	КонецЦикла;
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот