Имя: Пароль:
1C
1С v8
Вложенный запрос к регистру сведений
,
0 Gsoom2010
 
23.01.12
19:36
Добрый вечер господа.
Своим умом осилить не выходит, нужна помощь.

Есть регистр сведений, переодический по регистратору, зависимый.
Имеет структуру из трёх измерений:

Документ
Статус
ПунктНахождения

// и стандартные реквизиты
Регистратор
Дата


Разные документы (регистраторы) создают движения в этом регистре, каждое движение отражает изменение Статуса по Документу, и его Местонахождение на момент изменения.

Я хочу получить список всех Документов с последним "актуальным" статусом и местонахождением на дату в запросе.

Судя по тому что я читал это делается вложенными запросами, но я не понял ( Книга знаний: Срез последних на каждую дату в запросе ). Могу ошибаться и тупить.

Пример строк в регистре:
- Накладная № 3;  Оформлена; Москва; 19.01.01
- Накладная № 3;  Выехала;   Москва; 20.01.01
- Накладная № 3;  Прибыла;   Китай;  21.01.01
- Накладная № 3;  Выдана;    Китай;  22.01.01

- Накладная № 4;  Оформлена; Москва; 17.01.01
- Накладная № 4;  Выехала;   Москва; 18.01.01
- Накладная № 4;  Прибыла;   Китай;  19.01.01
- Накладная № 4;  Выдана;    Китай;  23.01.01

Вот запрос на дату 20.01.01 должен мне вернуть:
- Накладная № 3;  Выехала;   Москва; 20.01.01
- Накладная № 4;  Прибыла;   Китай;  20.01.01

т.е. выбрать "актуальные" на дату в запросе строки.
1 Rie
 
23.01.12
19:38
(0) СрезПоследних именно это и вернёт, если в нём указать нужную дату.
2 Wobland
 
23.01.12
19:39
а что, просто СерзПоследних на период не работает?
3 Gsoom2010
 
23.01.12
19:40
Сред последних пробовал так:

Запрос = Новый Запрос ("
   |    ВЫБРАТЬ
   |    Регистр.Статус,
   |    Регистр.Регистратор,
   |    Регистр.ПунктНахождения,
   |    Регистр.Период
   |    ИЗ РегистрСведений.РегистрПеремещений.СрезПоследних(&Дата,) КАК Регистр
   |    ГДЕ
   |    Регистр.Документ= &Накладная");
4 Wobland
 
23.01.12
19:41
(3) и что получилось?
5 Gsoom2010
 
23.01.12
19:42
Такой запрос выдаёт мне из:

- Накладная № 4;  Оформлена; Москва; 17.01.01
- Накладная № 4;  Выехала;   Москва; 18.01.01
- Накладная № 4;  Прибыла;   Китай;  19.01.01
- Накладная № 4;  Выдана;    Китай;  23.01.01

на дату 20.01.01:

- Накладная № 4;  Оформлена; Москва; 17.01.01
- Накладная № 4;  Выехала;   Москва; 18.01.01
- Накладная № 4;  Прибыла;   Китай;  19.01.01
6 Wobland
 
23.01.12
19:42
(3) Документ  в параметры вирт. таблицы засунь
7 ssh2006
 
23.01.12
19:44
Срез последних помог бы если бы измерением был только документ
8 Wobland
 
23.01.12
19:46
(7) кстати, да ;)
9 Gsoom2010
 
23.01.12
19:46
Как тогда сделать?
10 Wobland
 
23.01.12
19:47
кривое проектирование регистра?
11 Wobland
 
23.01.12
19:47
(9) тебе по какому статусу и пункту надо СрезПоследних?
12 Gsoom2010
 
23.01.12
19:49
Пока что я могу его перепроектировать если пойму в чём соль.
Мне нужно получать список всех документов по "атуальному" статусу на дату в запросе.
И тоже самое получать с фильтром по документу или по статусу
13 Чайник Рассела
 
23.01.12
19:49
можно сделать три запроса по каждому статусу и их объединить
14 Wobland
 
23.01.12
19:50
имхо статус и пункт ресурсами должны быть. регистр отражает состояние документа и только, да?
15 Gsoom2010
 
23.01.12
19:51
Да
16 Gsoom2010
 
23.01.12
19:51
Логично...
17 Classic
 
23.01.12
19:52
(15)
Других ресурсов нет?
18 Wobland
 
23.01.12
19:52
(15) перепроектировывай давай ;)
19 Чайник Рассела
 
23.01.12
19:53
у меня такой регистр на 30 ресурсов
20 Gsoom2010
 
23.01.12
19:53
Ресурсов других нету.

Уникальность записей обеспечат Регистратор и измерение Документ. А Статус и ПунктНахождения сделаю ресурсами.
21 Gsoom2010
 
23.01.12
19:54
Когда я это сделаю запрос мой будет правильно работать? Или что-то я всё равно не догоняю?
22 Wobland
 
23.01.12
19:55
(21) да. период забыл в (20)
23 Wobland
 
23.01.12
19:56
+(22) всё-таки (6)
24 Gsoom2010
 
23.01.12
19:56
Период как стандартный реквизит пойдёт. А как сделать (6) ?
25 Wobland
 
23.01.12
19:57
(24) кнопка есть в конструкторе. вроде второй параметр в СрезеПоследних
26 Gsoom2010
 
23.01.12
19:58
Да я конструктор не трогаю, а то ещё взорвётся
27 Wobland
 
23.01.12
19:59
(26) а ничего так штучка, упрощает ;)
28 Gsoom2010
 
23.01.12
20:00
А без него как сделать подскажите пожалуйста?
29 Wobland
 
23.01.12
20:02
(28) лично мне для этого надо как минимум запустить 1Ску - лениво. стесняешься конструктора? вторая справа кнопка на среднем "подокне"
30 JesteR
 
23.01.12
20:03
Либо:
Переделай структуру регистра, статус и пункт перенеси в ресурсы, тогда нормуль должно отработать.

Либо:
С помощью вложенного запроса вытаскивай максимальный период и документ, потом по нему и документу соединяй с рабочей таблицей.

Как-то так....
31 Wobland
 
23.01.12
20:04
(30) да решили уже всё, читай (12)
32 Gsoom2010
 
23.01.12
20:07
Запрос по всем документам работает:

Запрос = Новый Запрос ("
   |    ВЫБРАТЬ
   |    Регистр.Статус,
   |    Регистр.Регистратор,
   |    Регистр.ПунктНахождения,
   |    Регистр.Период
   |    ИЗ РегистрСведений.РегистрПеремещений.СрезПоследних(&Дата,) КАК Регистр");

Сейчас проверю с фильтрацией по Документу.
33 Wobland
 
23.01.12
20:10
(32) ИЗ РегистрСведений.РегистрПеремещений.СрезПоследних(&Дата, Документ=&ТвойДокумент) КАК Регистр

кстати, Документ - плохое слово. так, на всякий случай
34 Gsoom2010
 
23.01.12
20:10
Всё работает, огромное спасибо.
Документом я обозвал для вас, чтобы удобнее было читать...
35 Wobland
 
23.01.12
20:11
+(33) я тут реквизит у документа обзывал "ПО" (программный объект), что вы думаете? не взлетело на УниверсальнойЗагрузкеXML, т.к. запрос формировался динамически и "ПО" он просто не понял ;)
36 Gsoom2010
 
23.01.12
20:12
))))
37 Gsoom2010
 
03.02.12
18:20
Подскажите как сделать.

Запросом я получил выборку Накладных с определённым статусом.

У меня есть документ "Транспортная накладная" в одно из её табличных полей я добавляю "Накладные", но во время выбора меня интересуют не все Накладные в журнале, а только те которые я получил в запросе.

Как использовать результаты запроса для такой задачи?
38 n koretsky
 
03.02.12
19:48
Отбор не помогает?
39 Gsoom2010
 
04.02.12
18:01
помог :)