Непериодические регистры с датами в запросе

1. abc4987 13.04.24 14:41 Сейчас в теме
Здравствуйте!
Подскажите, пожалуйста, у кого есть опыт.
Есть два непериодических регистра, где:
Регистр1 = с одним измерением и одним ресурсом, где дата как ресурс.
Регистр2 = с двумя измерениями, где оба (в т.ч дата) как измерение.

Допустим
в Регистре1 указана дата 27.02.2024
в Регистре2 указаны даты 05.03.2021 и 15.10.2022

Возможно ли создать запрос с условием, допустим Регистре1 >= Регистре2 (или по-другому), чтобы для 27.02.2024 подтягивалась дата именно 15.10.2022 ?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Vinzor 107 13.04.24 20:49 Сейчас в теме
(1) Ну то есть по условию подтягивалась максимальная дата?
Это же классическая задача, даже "каноническая".

Виртуалка 1
К первой таблице (Регистр 1) левым присоединяете нужные поля Регистра 2 с условием соединения, что
Дата в Регистре 1 >= Даты(х) в Регистре 2
И обязательно в т.ч. та самая Дата(х)

Виртуалка 2
Из виртуалки 1 выбираете данные, которые будут уникальными в отдельно строке выборки, в т.ч. Дата(х).
Группируете данные по всем полям, а Дата(х) по функции "Максимум".

Виртуалка 3.
В ней внутренним соединяете Виртуалку 1 и Виртуалку 2 по уникальным полям, включая Датат(х).

Всё
3. abc4987 13.04.24 22:23 Сейчас в теме
(2)Спасибо за ответ. Просто недавно изучаю.

Виртуалка имеется ввиду временные таблицы?
Если правильно всё сделал то опять загружается все что есть а не самая ближайшая дата

Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Платформа.Название КАК Название,
		|	ОтветственныеЛица.ФИО КАК ФИО
		|ПОМЕСТИТЬ Вт1
		|ИЗ
		|	РегистрСведений.Платформа КАК Платформа
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛица КАК ОтветственныеЛица
		|		ПО Платформа.ДатаРелиза >= ОтветственныеЛица.ДатаПриема
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	Вт1.Название КАК Название,
		|	Вт1.ФИО КАК ФИО,
		|	МАКСИМУМ(ОтветственныеЛица.ДатаПриема) КАК ДатаПриема
		|ПОМЕСТИТЬ Вт2
		|ИЗ
		|	Вт1 КАК Вт1,
		|	РегистрСведений.ОтветственныеЛица КАК ОтветственныеЛица
		|
		|СГРУППИРОВАТЬ ПО
		|	Вт1.Название,
		|	Вт1.ФИО
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	Вт2.Название КАК Название,
		|	Вт2.ФИО КАК ФИО,
		|	Вт2.ДатаПриема КАК ДатаПриема
		|ИЗ
		|	Вт1 КАК Вт1
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Вт2 КАК Вт2
		|		ПО Вт1.Название = Вт2.Название
		|			И Вт1.ФИО = Вт2.ФИО";
Показать
4. Vinzor 107 14.04.24 12:03 Сейчас в теме
(3) Да, временные.
Лучше опишите ваши регистры и что вы хотите выбрать и как?

А пока догадываюсь, что должно быть так (писал вслепую, может и ругнуться, но главное - показываю принцип, уловите его)

ВЫБРАТЬ
        |    Платформа.Название КАК Название,
        |    Платформа.ЧтоНибудьЕщеНужное КАК ЕщеНужное,
        |    ОтветственныеЛица.ФИО КАК ФИО,
        |    ОтветственныеЛица.ДатаПриема КАК ДатаПриема,
        |ПОМЕСТИТЬ Вт1
        |ИЗ
        |    РегистрСведений.Платформа КАК Платформа
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛица КАК ОтветственныеЛица
        |        ПО Платформа.ДатаРелиза >= ОтветственныеЛица.ДатаПриема
        |;
        |
        |////////////////////////////////////////////////////////////­­////////////////////
        |ВЫБРАТЬ
        |    Вт1.Название КАК Название,
        |    Вт1.ФИО КАК ФИО,
        |    МАКСИМУМ(Вт1.ДатаПриема) КАК ДатаПриема
        |ПОМЕСТИТЬ Вт2
        |ИЗ
        |    Вт1 КАК Вт1
        |
        |СГРУППИРОВАТЬ ПО
        |    Вт1.Название,
        |    Вт1.ФИО
        |;
        |
        |////////////////////////////////////////////////////////////­­////////////////////
        |ВЫБРАТЬ
        |    Вт1.Название КАК Название,
        |    Вт1.ФИО КАК ФИО,
        |    Вт1.ЕщеНужное КАК ЕщёНужное,
        |    Вт1.ДатаПриема КАК ДатаПриема
        |ИЗ
        |    Вт1 КАК Вт1
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Вт2 КАК Вт2
        |        ПО Вт1.Название = Вт2.Название
        |            И Вт1.ФИО = Вт2.ФИО
        |            И Вт1.ДатаПриема= Вт2.ДатаПриема
Показать
6. abc4987 14.04.24 21:19 Сейчас в теме
(4) как на скриншоте.
То есть даты платформ как ресурс и есть даты приема сотрудников как измерение. Вся задача в том, что необходимо определить согласно дате платформы, кто из сотрудников работал по самой близкой дате относительно даты платформы и вывести на список с двумя колонками название платформы и ФИО сотрудника. Понимаю, что задача простая, но, к сожалению, пока не очень хорошо представляю суть временных таблиц.
Прикрепленные файлы:
5. spacecraft 14.04.24 13:38 Сейчас в теме
(1) это называется "срез последних для непериодических регистров"
(3)
        "ВЫБРАТЬ
        |    Платформа.Название КАК Название,
        |    МАКСИМУМ(ОтветственныеЛица.ДатаПриема) КАК ДатаПриема
        |ПОМЕСТИТЬ ВтСрез
        |ИЗ
        |    РегистрСведений.Платформа КАК Платформа
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛица КАК ОтветственныеЛица
        |        ПО Платформа.ДатаРелиза >= ОтветственныеЛица.ДатаПриема
        |
        |СГРУППИРОВАТЬ ПО
        |    Платформа.Название
        |;
        |
        |////////////////////////////////////////////////////////////­////////////////////
        |ВЫБРАТЬ
        |    ВтСрез.Название КАК Название,
        |    ОтветственныеЛица.ФИО КАК ФИО,
        |    ОтветственныеЛица.ДатаПриема КАК ДатаПриема
        |ИЗ
        |    ВтСрез КАК ВтСрез
        |    	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛица КАК ОтветственныеЛица
        |		ПО ВтСрез.ДатаПриема = ОтветственныеЛица.ДатаПриема"
Показать
romuldks; 1c-programm; +2 Ответить
9. romuldks 09.08.24 17:20 Сейчас в теме
10. romuldks 09.08.24 17:21 Сейчас в теме
(5) ты мне очень помог спасибо!!!!
7. abc4987 14.04.24 21:19 Сейчас в теме
(4) как на скриншоте.
То есть даты платформ как ресурс и есть даты приема сотрудников как измерение. Вся задача в том, что необходимо определить согласно дате платформы, кто из сотрудников работал по самой близкой дате относительно даты платформы и вывести на список с двумя колонками название платформы и ФИО сотрудника. Понимаю, что задача простая, но, к сожалению, пока не очень хорошо представляю суть временных таблиц.
Прикрепленные файлы:
8. romuldks 09.08.24 09:39 Сейчас в теме
Получилось решить в итоге?
11. user1899408 12.08.24 11:30 Сейчас в теме
(8) у меня получилось!)
Оставьте свое сообщение

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