Сделать оптимальный запрос: левое соединение только одного значения ближайшее к дате
12.12.2012
10:52
#11
"У него данные находятся в разных таблицах. Это примерно как получать курс валюты на дату документа. Что-то типа такого (по таблицам УТ 10.3):
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК РТУ,
| МАКСИМУМ(КурсыВалют.Период) КАК ДатаКурса
|ПОМЕСТИТЬ ВТ_МаксДатаКурса
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
| ПО РеализацияТоваровУслуг.Дата >= КурсыВалют.Период
| И (КурсыВалют.Валюта = &ВыбВалюта)
|ГДЕ
| РеализацияТоваровУслуг.Ссылка = &ВыбДокумент
|
|СГРУППИРОВАТЬ ПО
| РеализацияТоваровУслуг.Ссылка
|;||//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ВТ_МаксДатаКурса.РТУ,
| КурсыВалют.Курс
|ИЗ
| ВТ_МаксДатаКурса КАК ВТ_МаксДатаКурса
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
| ПО ВТ_МаксДатаКурса.ДатаКурса = КурсыВалют.Период
| И (КурсыВалют.Валюта = &ВыбВалюта)""
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК РТУ,
| МАКСИМУМ(КурсыВалют.Период) КАК ДатаКурса
|ПОМЕСТИТЬ ВТ_МаксДатаКурса
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
| ПО РеализацияТоваровУслуг.Дата >= КурсыВалют.Период
| И (КурсыВалют.Валюта = &ВыбВалюта)
|ГДЕ
| РеализацияТоваровУслуг.Ссылка = &ВыбДокумент
|
|СГРУППИРОВАТЬ ПО
| РеализацияТоваровУслуг.Ссылка
|;||////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_МаксДатаКурса.РТУ,
| КурсыВалют.Курс
|ИЗ
| ВТ_МаксДатаКурса КАК ВТ_МаксДатаКурса
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
| ПО ВТ_МаксДатаКурса.ДатаКурса = КурсыВалют.Период
| И (КурсыВалют.Валюта = &ВыбВалюта)""
12.12.2012
11:55
#12
Спасибо за внимание к моей проблеме.
У меня конфа ЗУП, поэтому в конструкторе посмотреть не смогу выложенный пример (( Можно было бы мой скопировать в консоль
Попробую так разобраться.
У меня конфа ЗУП, поэтому в конструкторе посмотреть не смогу выложенный пример (( Можно было бы мой скопировать в консоль
Попробую так разобраться.
12.12.2012
11:58
#13
Денис, у вас по одному документу, а как по всем документам сделать?
Ну я типа сделал, но не знаю насколько оптимально.
Ну я типа сделал, но не знаю насколько оптимально.
12.12.2012
12:01
#14
По все документам делается так же, только условие не ставишь на документ.
Сохрани файл консоли запросов и кинь его сюда.
Сохрани файл консоли запросов и кинь его сюда.
12.12.2012
12:09
#15
"Типа того у меня получилось:
ВЫБРАТЬ
Регистр.ПериодДействияКонец,
Регистр.ФизЛицо,
МАКСИМУМ(ФИОФизЛиц.Период) КАК Период
ПОМЕСТИТЬ ВТ_СрезНаДату
ИЗ
РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Регистр
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц КАК ФИОФизЛиц
ПО Регистр.ФизЛицо = ФИОФизЛиц.ФизЛицо
И Регистр.ПериодДействияКонец >= ФИОФизЛиц.Период
СГРУППИРОВАТЬ ПО
Регистр.ФизЛицо,
Регистр.ПериодДействияКонец
;
//////////////////////////////////////////////////// ////////////////////////////
ВЫБРАТЬ
ВТ_СрезНаДату.ФизЛицо,
ФИОФизЛиц.Фамилия,
ФИОФизЛиц.Имя,
ФИОФизЛиц.Отчество,
ФИОФизЛиц.Период,
ВТ_СрезНаДату.ПериодДействияКонец
ИЗ
ВТ_СрезНаДату КАК ВТ_СрезНаДату
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц КАК ФИОФизЛиц
ПО ВТ_СрезНаДату.ФизЛицо = ФИОФизЛиц.ФизЛицо
И ВТ_СрезНаДату.Период = ФИОФизЛиц.Период"
ВЫБРАТЬ
Регистр.ПериодДействияКонец,
Регистр.ФизЛицо,
МАКСИМУМ(ФИОФизЛиц.Период) КАК Период
ПОМЕСТИТЬ ВТ_СрезНаДату
ИЗ
РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Регистр
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц КАК ФИОФизЛиц
ПО Регистр.ФизЛицо = ФИОФизЛиц.ФизЛицо
И Регистр.ПериодДействияКонец >= ФИОФизЛиц.Период
СГРУППИРОВАТЬ ПО
Регистр.ФизЛицо,
Регистр.ПериодДействияКонец
;
////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_СрезНаДату.ФизЛицо,
ФИОФизЛиц.Фамилия,
ФИОФизЛиц.Имя,
ФИОФизЛиц.Отчество,
ФИОФизЛиц.Период,
ВТ_СрезНаДату.ПериодДействияКонец
ИЗ
ВТ_СрезНаДату КАК ВТ_СрезНаДату
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц КАК ФИОФизЛиц
ПО ВТ_СрезНаДату.ФизЛицо = ФИОФизЛиц.ФизЛицо
И ВТ_СрезНаДату.Период = ФИОФизЛиц.Период"
Читают тему
(гостей: 1)