Имя: Пароль:
1C
1С v8
Срез "предпоследних"
,
0 Andrey1957
 
09.08.11
05:20
Уважаемые коллеги!
Встал перед проблемой поиска во вложенном запросе предпоследних значений в Регистре сведений. Умом понимаю, что во вложенном запросе для каждой записи нужно взять период на секунду меньший, чем период в Срезе последних. Но как все это скомпоновать в рамках одного запроса? Кто-нибудь решал подобную проблему или подскажет где она решена в рамках типовых отчетов? Заранее спасибо.
1 guitar_player
 
09.08.11
05:30
В СКД можно соединением с указанием параметров.
В запросе насколько я понял - нужно получить срез последних, потом найти период из этого регистра по измерениям, чтобы он был меньше периода из среза последних и был максимальным. потом по этим измерениям и найденному периоду получить запись
2 golden-pack
 
09.08.11
05:42
Книга знаний: Срез последних на каждую дату в запросе

Каждый одинэсник должен уметь написать срез последних запроссом
3 Andrey1957
 
09.08.11
06:09
(2) golden-pack, речь не о выборке среза ПОСЛЕДНИХ, а именно ПРЕДПОСЛЕДНИХ значений из периодического регистра сведений. Грубо говоря, в том же регистре КурсыВалют понадобилось бы выбрать последнее и ПРЕДПОСЛЕДНЕЕ значение по каждой валюте. Как это реализовать одним запросом? В (1) правильно порядок указан. ЧТО делать я понимаю, не понимаю только КАК? И пока нигде примеров не нашел.
4 golden-pack
 
09.08.11
06:26
(3) я ошибся
5 kuromanlich
 
09.08.11
06:28
(0) я в свое время плюнул и вне запроса ручками написал.
6 guitar_player
 
09.08.11
06:35
(3) сейчас накидаю что нить подобное на каком нибудь регистре
7 guitar_player
 
09.08.11
06:41
ВЫБРАТЬ
   РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
   МАКСИМУМ(РаботникиОрганизаций.Период) КАК Период
ПОМЕСТИТЬ ПериодПредпоследнегоИзменения
ИЗ
   РегистрСведений.РаботникиОрганизаций.СрезПоследних(, ) КАК РаботникиОрганизацийСрезПоследних
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
       ПО РаботникиОрганизацийСрезПоследних.Сотрудник = РаботникиОрганизаций.Сотрудник
           И РаботникиОрганизацийСрезПоследних.Период > РаботникиОрганизаций.Период

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

ИНДЕКСИРОВАТЬ ПО
   Период,
   Сотрудник
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ПериодПредпоследнегоИзменения.Сотрудник,
   ПредпоследнееЗначение.ПодразделениеОрганизации,
   ПредпоследнееЗначение.Должность
ИЗ
   ПериодПредпоследнегоИзменения КАК ПериодПредпоследнегоИзменения
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК ПредпоследнееЗначение
       ПО ПериодПредпоследнегоИзменения.Сотрудник = ПредпоследнееЗначение.Сотрудник
           И ПериодПредпоследнегоИзменения.Период = ПредпоследнееЗначение.Период
8 SeraFim
 
09.08.11
06:42
(0) "нужно взять период на секунду меньший, чем период в Срезе последних" - это уже будет не СрезПредпоследних, а неизвестно что.
я бы сделал, как в (1)
9 guitar_player
 
09.08.11
06:42
Если регистры большие в начале советую максимально урезать их (чтобы в них были только нужные значения), поместить их в какую нибудь временную и дальше с ними работать
10 guitar_player
 
09.08.11
06:45
(5) у нас есть регистры в которых по несколько милионов записей, пока это сработает юзер может чай заварить и выпить... а так да... тоже решение, только зависит от обстоятелься
11 Andrey1957
 
09.08.11
06:59
(7) guitar_player, Спасибо! Уразумел, КАК делать. Тема закрыта!