powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Запрос с левым соединением
25 сообщений из 27, страница 1 из 2
Запрос с левым соединением
    #35771650
max_nl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Может кто подскажет с запросом?

Есть кадродые премещения сотрудников. Нужно узнать предыдущее подразделение сотрудника.
Если в запрос передавать параметр &Период , то он формируется нормально. А как можно обойтись без него, чтобы использовать СКД.

Как соединить таблицу последних движений с таблицей кадровых перемещений, где РаботникиОрганизаций.Период < КадровоеПеремещение.ДатаНачала?



ВЫБРАТЬ
КадровоеПеремещение.Ссылка,
КадровоеПеремещение.Сотрудник,
КадровоеПеремещение.ДатаНачала,
ВложенныйЗапрос.Период
ИЗ
Документ.КадровоеПеремещениеОрганизаций.РаботникиОрганизации КАК КадровоеПеремещение
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
РаботникиОрганизаций.Сотрудник КАК Сотрудник,
МАКСИМУМ(РаботникиОрганизаций.Период) КАК Период
ИЗ
РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
РаботникиОрганизаций.Период < &Период

СГРУППИРОВАТЬ ПО
РаботникиОрганизаций.Сотрудник) КАК ВложенныйЗапрос
ПО КадровоеПеремещение.Сотрудник = ВложенныйЗапрос.Сотрудник
ГДЕ
КадровоеПеремещение.ДатаНачала МЕЖДУ &НачалоПериода И &КонецПериода
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35772105
Фотография XenoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предпоследнее вообще за весь период или на определенную дату?
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35772259
max_nl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нужно предпоследнее за период
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35772284
Фотография XenoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда у вас немного не вяжется логически.
Вы накладываете ограничение на выборку документов, но при этом вам необходимо наложить ограничение на выборку из регистра и ограничение выборки из регистра = конечной дате ограничения выборки документов, иначе у вас выберется не совсем то что нужно...

Боюсь что одним запросом сделать это у вас в любом случае не получится. Придется кроме запроса написать небольшой код.
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35772299
max_nl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно код писать и передавать параметр &Период.

Но мне нужно получить выборку только запросом.
Может вложенный запрос по движениям как-то связать по периодам?
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35772315
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще есть вирт таблица срез последних
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35772330
Фотография XenoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leafеще есть вирт таблица срез последних
Тут записи нужны именно
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35772334
max_nl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в срезпоследних период тоже нельзя передать

Левое соединение РегистрСведений.РаботникиОрганизацийСрезПоследних(ДобавитьКДате(ДатаНачала, День, -1),)


как сделать не знаю
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35772345
Фотография XenoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max_nlМожно код писать и передавать параметр &Период.
Вы видимо меня не поняли
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
РаботникиОрганизаций.Сотрудник КАК Сотрудник,
МАКСИМУМ(РаботникиОрганизаций.Период) КАК Период
ИЗ
РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
РаботникиОрганизаций.Период < &КонецПериода

СГРУППИРОВАТЬ ПО
РаботникиОрганизаций.Сотрудник) КАК ВложенныйЗапрос

max_nlМожет вложенный запрос по движениям как-то связать по периодам?
У регистров сведений нет движений, вам необходимо выбрать предпоследнюю запись из регистра с ограничением по сотруднику и периоду, язык запросов в отличии от T-SQL не может в подзапросы в качестве параметров передавать значения строк основной выборки.

max_nlНо мне нужно получить выборку только запросом.
С чем связано такое требование.

Возможно получится сделать это через менеджер ВТ надо попробовать так на вскидку не скажу
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35772363
Фотография XenoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, есть опеделеного рода идея, я ее проверю!
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35772380
max_nl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
///Может вложенный запрос по движениям как-то связать по периодам?

имею ввиду движения работника (прием, перемещение, увольнение)
Эти движения хранятся в периоддическом регистре "Работники организаций"
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35772386
max_nl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А одним запросом нужно для схемы компоновки данных.
к этой выборке будет еще много других соединений. Но сейчас главная проблема с выбором даты предыдущего состояния работника
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35772412
Фотография XenoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max_nlА одним запросом нужно для схемы компоновки данных.
к этой выборке будет еще много других соединений. Но сейчас главная проблема с выбором даты предыдущего состояния работника

Да должно получиться одинм запросом и без менеджера вт.
Запрос сейчас написать не успею, да и ЗуПа под рукой нет.
Если до завтра подождете, то начеркаю запросец
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35772419
max_nl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
большое спасибо
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35773025
Фотография XenoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак вот сей запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
ВЫБРАТЬ
	ПРЕДСТАВЛЕНИЕ(ОсновнойЗапрос.Регистратор) КАК ДокументИзменения,
	МАКСИМУМ(ОсновнойЗапрос.Период) КАК МаксПериод,
	ПРЕДСТАВЛЕНИЕ(ОсновнойЗапрос.Организация) КАК Организация,
	ПРЕДСТАВЛЕНИЕ(ОсновнойЗапрос.Сотрудник) КАК ФИОСотрудника, 
	ПРЕДСТАВЛЕНИЕ(ОсновнойЗапрос.ПодразделениеОрганизации) КАК Подразделение,
	ПРЕДСТАВЛЕНИЕ(ОсновнойЗапрос.Должность) КАК Должность,
	ПРЕДСТАВЛЕНИЕ(ОсновнойЗапрос.ГрафикРаботы) КАК ГрафикРаботы,
	ПРЕДСТАВЛЕНИЕ(ОсновнойЗапрос.ПричинаИзмененияСостояния) КАК ПричинаИзмененияСостояния
ИЗ 
	РегистрСведений.РаботникиОрганизаций КАК ОсновнойЗапрос
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	(
		ВЫБРАТЬ
			Сотрудник,
			МАКСИМУМ(Период) КАК МаксПериод
		ИЗ
			РегистрСведений.РаботникиОрганизаций
		СГРУППИРОВАТЬ ПО
			Сотрудник
	) КАК ВложеныйЗапрос
	ПО ВложеныйЗапрос.Сотрудник = ОсновнойЗапрос.Сотрудник
	 И ОсновнойЗапрос.Период < ВложеныйЗапрос.МаксПериод

СГРУППИРОВАТЬ ПО 
	ОсновнойЗапрос.Регистратор,
	ОсновнойЗапрос.Организация,
	ОсновнойЗапрос.Сотрудник, 
	ОсновнойЗапрос.ПодразделениеОрганизации,
	ОсновнойЗапрос.Должность,
	ОсновнойЗапрос.ГрафикРаботы,
	ОсновнойЗапрос.ПричинаИзмененияСостояния
Этим запросом можно получить предпоследнне состояние работника из регистра. Но если по работнику есть только одна запись, то в результаты он не попадет.
Можно по вкусу ддобавить параметров для ограничения верхней границы выборки по периоду.
А так уже дело ваше, как вы это дело будете использовать.
С вас сосуд с булькающим :)
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35773430
max_nl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В том и дело, что нужно получить все перемещения сотрудника (ДатаТекущегоПеремещения и ДатаПредыдущегоПеремещения)
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35773441
Фотография XenoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max_nlВ том и дело, что нужно получить все перемещения сотрудника (ДатаТекущегоПеремещения и ДатаПредыдущегоПеремещения)
Ну так а в чем проблема то? :-)

Или вы ждете что за вас весь запрос напишут а потом копи паст и зарплату считать?
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35773648
max_nl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ваш запрос делает выборку перыдущих дат

А как таблицу перемещений связать с этим запросом, чтобы в результате были строки перемещений с датой предыдущего состояния.

Я пробовал вчера такой запрос



ВЫБРАТЬ
КадровоеПеремещение.Ссылка,
КадровоеПеремещение.Сотрудник,
КадровоеПеремещение.ДатаНачала КАК ДатаПеремещения,
ВложенныйЗапрос.Период КАК ПериодДо
ИЗ
Документ.КадровоеПеремещениеОрганизаций.РаботникиОрганизации КАК КадровоеПеремещение
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ДвиженияРаботника.Регистратор КАК Регистратор,
МАКСИМУМ(ДвиженияРаботника.Период) КАК Период,
ДвиженияРаботника.Сотрудник КАК Сотрудник
ИЗ
РегистрСведений.РаботникиОрганизаций КАК ДвиженияРаботника
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Работники.Сотрудник КАК Сотрудник,
МАКСИМУМ(Работники.Период) КАК Период
ИЗ
РегистрСведений.РаботникиОрганизаций КАК Работники

СГРУППИРОВАТЬ ПО
Работники.Сотрудник) КАК Периоды
ПО (Периоды.Сотрудник = ДвиженияРаботника.Сотрудник)
И (Периоды.Период > ДвиженияРаботника.Период)

СГРУППИРОВАТЬ ПО
ДвиженияРаботника.Регистратор,
ДвиженияРаботника.Сотрудник) КАК ВложенныйЗапрос
ПО КадровоеПеремещение.Сотрудник = ВложенныйЗапрос.Сотрудник
ГДЕ
КадровоеПеремещение.ДатаНачала МЕЖДУ &НачалоПериода И &КонецПериода
И КадровоеПеремещение.ДатаНачала > ВложенныйЗапрос.Период



Но он возвращает несколько предыдущих дат на одно перемещение
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35773817
Фотография XenoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы про "Регистратор" не в курсе в регистре РаботникиОрганизаций
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35773977
max_nl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что регистратор?
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35774449
Фотография XenoX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы видимо так и не поняли основную идею...
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35776925
max_nl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался с запросом.
Вот запрос, который получает предпоследнее место и дату сотрудника

ВЫБРАТЬ
Работники.Период,
Работники.Сотрудник,
МАКСИМУМ(РаботникиСрез.Период) КАК Период1
ИЗ
РегистрСведений.РаботникиОрганизаций КАК Работники
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиСрез
ПО Работники.Сотрудник = РаботникиСрез.Сотрудник
И Работники.Период > РаботникиСрез.Период
ГДЕ
Работники.Период МЕЖДУ &НачалоПериода И &КонецПериода

СГРУППИРОВАТЬ ПО
Работники.Период,
Работники.Сотрудник
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35777175
johnn06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XenoX,


язык запросов в отличии от T-SQL не может в подзапросы в качестве параметров передавать значения строк основной выборки.


Можете доказать?!
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35777432
RMih
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
johnn06XenoX,


язык запросов в отличии от T-SQL не может в подзапросы в качестве параметров передавать значения строк основной выборки.


Можете доказать?!

МОЖЕТ!!!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ВЫБРАТЬ
	Выписка.Дата,
	Выписка.Валюта,
	ВалютыКурс.Курс
ИЗ
	Документ.Выписка КАК Выписка
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВалютыКурс КАК ВалютыКурс
	ПО Выписка.Валюта = ВалютыКурс.Валюта
	И ВалютыКурс.Период В
		(ВЫБРАТЬ
			МАКСИМУМ(Период)
		ИЗ
			РегистрСведений.ВалютыКурс
		ГДЕ
			Валюта = Выписка.Валюта
			И Период <= Выписка.Дата
		)
...
Рейтинг: 0 / 0
Запрос с левым соединением
    #35777598
johnn06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RMihjohnn06XenoX,


язык запросов в отличии от T-SQL не может в подзапросы в качестве параметров передавать значения строк основной выборки.


Можете доказать?!

МОЖЕТ!!!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
ВЫБРАТЬ
	Выписка.Дата,
	Выписка.Валюта,
	ВалютыКурс.Курс
ИЗ
	Документ.Выписка КАК Выписка
	ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВалютыКурс КАК ВалютыКурс
	ПО Выписка.Валюта = ВалютыКурс.Валюта
	И ВалютыКурс.Период В
		(ВЫБРАТЬ
			МАКСИМУМ(Период)
		ИЗ
			РегистрСведений.ВалютыКурс
		ГДЕ
			Валюта = Выписка.Валюта
			И Период <= Выписка.Дата
		)


Все правильно! а теперь можете превести скрипт на T-SQL, где в подзапросе справа от inner join используется записи выборки, стоящей слева от inner join, по сути транслировать этот запрос в T-SQL, чтобы он работал. интерсено посмотреть просто...
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / [игнор отключен] [закрыт для гостей] / Запрос с левым соединением
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]