как в запросе можно найти дату окончания действия элемента, как дату начала следующего элемента?
есть справочник, в котором есть поле "Действие с". как в запросе можно найти дату окончания действия, как дату начала следующего элемента?
Например:
Спр 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 - Действие по = Пустая дата
Например:
Спр 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 - Действие по = Пустая дата
По теме из базы знаний
- Методология i3 как основа новой экономики. Индустрия 5.0. Концепция Интеллекта
- Как сдать экзамен 1С:Специалист по платформе?
- Что нам стоит бота построить? Нарисуем - будет жить! Графический конструктор телеграм-ботов/Telegram
- Как избавиться от большого количества комментариев в коде с использованием EDT + Git
- Интеграция 1С и Sentry для мониторинга ошибок и расчета Apdex
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Этот вопрос задаётся с поразительным постоянством в еженедельном режиме. Тестовое задание что ли?
https://forum.infostart.ru/forum9/topic308763/#message3045095
ВЫБРАТЬ
"Эл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)
ПоказатьВТНабор (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 <Пустая дата>
ПоказатьЭл Период
Эл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 <Пустая дата>
У меня вот так получилось через временные таблицы:
ТабЗнач=Новый ТаблицаЗначений;
КвалификаторыСтроки=Новый КвалификаторыСтроки(120);
ТабЗнач.Колонки.Добавить("Спр",Новый ОписаниеТипов("Строка",,КвалификаторыСтроки));
ТабЗнач.Колонки.Добавить("ДатаНач",Новый ОписаниеТипов("Дата"));
Стр=ТабЗнач.Добавить();
Стр.Спр="Спр1";
Стр.ДатаНач=Дата(2024,2,1);
Стр=ТабЗнач.Добавить();
Стр.Спр="Спр2";
Стр.ДатаНач=Дата(2024,2,12);
Стр=ТабЗнач.Добавить();
Стр.Спр="Спр3";
Стр.ДатаНач=Дата(2024,2,29);
Запрос=Новый Запрос;
Запрос.Текст="
|ВЫБРАТЬ
| ТЗ.Спр КАК Спр,
| ТЗ.ДатаНач КАК ДатаНач
|ПОМЕСТИТЬ ВТ_ТЗ
|ИЗ
| &ТабЗнач КАК ТЗ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДобавитьКДате(Даты.ДатаНач,День,-1) КАК ДатаКон
|ПОМЕСТИТЬ ВТ_Даты
|ИЗ
| ВТ_ТЗ КАК Даты
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТЗ.Спр КАК Спр,
| ТЗ.ДатаНач КАК ДатаНач,
| ЕСТЬNULL(МИНИМУМ(Даты.ДатаКон),&ПустаяДата) КАК ДатаКон
|ИЗ
| ВТ_ТЗ КАК ТЗ
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Даты КАК Даты
| ПО (ТЗ.ДатаНач < Даты.ДатаКон)
|
|СГРУППИРОВАТЬ ПО
| ТЗ.Спр,
| ТЗ.ДатаНач
|";
Запрос.Параметры.Вставить("ТабЗнач",ТабЗнач);
Запрос.Параметры.Вставить("ПустаяДата",Дата(1,1,1));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Спр+" "+ВыборкаДетальныеЗаписи.ДатаНач+" "+ВыборкаДетальныеЗаписи.ДатаКон);
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот