Имя: Пароль:
1C
1С v8
Вопрос по запросу
0 WED
 
26.03.12
13:31
Понимаю, что вопрос простой, но что-то никак не соображу.

Имеем:
Документ: Заказ

Регистр сведенй: РабочийЖурнал
Поля регистра:
ОбъектЗаписи: ДокументСсылка.Заказ
ВидЗаписи: Перечисление.ВидыЗаписи (Значения: ДатаИсполнения, Комментарий)
Запись: (типы: Дата, Строка)

По каждому заказу в регистре может быть несколько записей.
Каждая запись имеет свой период (т.е. дату когда её внесли).
Например записи в регистре:
Заказ1, ДатаИсполнения, 01.03.12
Заказ2, Комментарий, Тра-ля-ля
Заказ2, ДатаИсполнения, 02.03.12
Заказ1, ДатаИсполнения, 05.03.12
Заказ1, ДатаИсполнения, 03.03.12
Заказ1, Комментарий, Тру-ля-ля
Заказ2, ДатаИсполнения, 04.03.12

Так вот.
Запрос с отбором по виду записи ДатаИсполнения должен выдать следующее:

Заказ1, 03.03.12
Заказ2, 04.03.12

т.е. он должен вернуть последнюю запись вида ДатаИсполнения по каждому заказу.


Что-то я не соображу как мне выбрать только последнюю запись по каждому заказу.


Мой запрос:

ВЫБРАТЬ
   РабочийЖурнал.Запись КАК ДатаИсполнения,
   РабочийЖурнал.Объект.Ссылка КАК Заказ
ИЗ
   РегистрСведений.РабочийЖурнал КАК РабочийЖурнал
ГДЕ
   РабочийЖурнал.ВидЗаписи = ЗНАЧЕНИЕ(Перечисление.ВидыЗаписиРабочегоЖурнала.ДатаИсполнения)
   
Возвращает все записи вида ДатаИсполнения по всем заказам.
А как получить только последнюю по каждому заказу?
1 КМ155
 
26.03.12
13:33
(0) используй срез последних
2 Ненавижу 1С
 
гуру
26.03.12
13:34
последнюю в каком смысле?
3 Axel2009
 
26.03.12
13:37
ВЫБРАТЬ
   МАКСИМУМ(РабочийЖурнал.Запись) КАК ДатаИсполнения,
   РабочийЖурнал.Объект КАК Заказ
ИЗ
   РегистрСведений.РабочийЖурнал КАК РабочийЖурнал
ГДЕ
   РабочийЖурнал.ВидЗаписи = ЗНАЧЕНИЕ(Перечисление.ВидыЗаписиРабочегоЖурнала.ДатаИсполнения)
СГРУППИРОВАТЬ ПО
   РабочийЖурнал.Объект
4 WED
 
26.03.12
13:48
(2) последнюю из внесенных записей данного вида по данному заказу.
(3) у тебя получится наибольшая дата исполнения по заказу, а надо последнюю из внесенных.
5 WED
 
26.03.12
13:50
(1) срез последних по моему примеру записей даст
Заказ2, 04.03.12
и потеряет Заказ1, 03.03.12
6 lubja
 
26.03.12
13:52
(5) а ты проверь )
срез последних - это раз, а второе - условие перенеси в условия виртуальной таблицы среза послдежних
7 Ненавижу 1С
 
гуру
26.03.12
13:53
(5) заказ это ресурс? тогда хреновые вы архитекторы
8 WED
 
26.03.12
13:55
(7) почему ресурс? реквизит!
(6) как раз проверяю. :)
9 Ненавижу 1С
 
гуру
26.03.12
13:56
(8) а ну тогда ваще пясец
10 WED
 
26.03.12
14:00
(9) тьфу! совсем запутал! не реквизит конечно - измерение :)

(6) проверил.
вот запрос:
ВЫБРАТЬ
   ВЫРАЗИТЬ(РабочийЖурналСрезПоследних.Запись КАК ДАТА) КАК ДатаИсполнения,
   РабочийЖурналСрезПоследних.Объект.Ссылка КАК Заказ
ИЗ
   РегистрСведений.РабочийЖурнал.СрезПоследних(, ВидЗаписи = ЗНАЧЕНИЕ(Перечисление.ВидыЗаписиРабочегоЖурнала.ДатаИсполнения)) КАК РабочийЖурналСрезПоследних

УПОРЯДОЧИТЬ ПО
   ДатаИсполнения УБЫВ

вместо 30 записей вернул 4...
11 WED
 
26.03.12
14:02
а 4 он их вернул потому что на каждую дату исполнения может быть несколько заказов. вернется только один заказов
12 dva1c
 
26.03.12
14:05
(11) Нужна одна запись? Используй МАКСИМУМ из (3).
13 WED
 
26.03.12
14:06
(12) Тогда будет не последняя,а наибольшая дата. Мне надо последнюю из занесенных в регистр по конкретному заказу
14 dva1c
 
26.03.12
14:10
(13) Дата пишется со временем. Не?
15 WED
 
26.03.12
14:13
Без разницы.
Посмотри на мой пример записей в (0).
Там по заказ1 есть три записи с датой исполнения:
Заказ1, ДатаИсполнения, 01.03.12
Заказ1, ДатаИсполнения, 05.03.12
Заказ1, ДатаИсполнения, 03.03.12

твой вариант вернет дату 05.03.12, а должно быть 03.03.12
16 Axel2009
 
26.03.12
14:22
(4) ну и чем же задается порядок записей в регистре?
17 zladenuw
 
26.03.12
14:23
период
18 Axel2009
 
26.03.12
14:28
ВЫБРАТЬ РабочийЖурнал.* ИЗ РабочийЖурнал КАК РабочийЖурнал
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (
ВЫБРАТЬ
   МАКСИМУМ(РабочийЖурнал.Период) КАК Период,
   РабочийЖурнал.Объект КАК Заказ
ИЗ
   РегистрСведений.РабочийЖурнал КАК РабочийЖурнал
ГДЕ
   РабочийЖурнал.ВидЗаписи = ЗНАЧЕНИЕ(Перечисление.ВидыЗаписиРабочегоЖурнала.ДатаИсполнения)
СГРУППИРОВАТЬ ПО
   РабочийЖурнал.Объект) КАК МаксПериод
ПО РабочийЖурнал.Объект = МаксПериод.Объект
И РабочийЖурнал.Период = МаксПериод.Период
19 zladenuw
 
26.03.12
14:31
(18) а разве нельзя просто максимум по периоду ?
20 WED
 
26.03.12
14:48
(18) Что-то тут ошибок в запросе  много...
21 WED
 
26.03.12
14:52
но логику понял. копаю в эту сторону
22 WED
 
26.03.12
14:53
Работает.
23 WED
 
26.03.12
14:53
Финальный запрос таков:
ВЫБРАТЬ
   ВЫРАЗИТЬ(РабочийЖурнал.Запись КАК ДАТА) КАК ДатаИсполнения,
   РабочийЖурнал.Объект.Ссылка КАК Заказ
ИЗ
   РегистрСведений.РабочийЖурнал КАК РабочийЖурнал
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           МАКСИМУМ(РабочийЖурнал.Период) КАК Период,
           РабочийЖурнал.Объект КАК Объект
       ИЗ
           РегистрСведений.РабочийЖурнал КАК РабочийЖурнал
       ГДЕ
           РабочийЖурнал.ВидЗаписи = ЗНАЧЕНИЕ(Перечисление.ВидыЗаписиРабочегоЖурнала.ДатаИсполнения)
       
       СГРУППИРОВАТЬ ПО
           РабочийЖурнал.Объект) КАК МаксПериод
       ПО РабочийЖурнал.Объект = МаксПериод.Объект
           И РабочийЖурнал.Период = МаксПериод.Период
24 Axel2009
 
26.03.12
15:12
(23) г$вно-код обязательно нужно добавлять да?
25 WED
 
26.03.12
18:56
(24) Да.
Напиши свой вариант - не г$внокод, добавлю его.
26 Axel2009
 
26.03.12
19:16
РабочийЖурнал.Объект.Ссылка
27 WED
 
26.03.12
19:17
(26) и что?
28 WED
 
26.03.12
19:20
Это всё что тебя смутило? Сократи до РабочийЖурнал.Объект и спи спокойно :)
29 catena
 
26.03.12
19:45
А Запись в регистре - это кто?
30 Axel2009
 
26.03.12
19:55
(28) я то сокращу, потому что знаю чем это грозит
31 WED
 
31.03.12
12:38
(30) Чем же?
(29) Вопрос не понял. Запись это составное значение: Док,Спр,Дата,Строка
32 catena
 
31.03.12
15:30
(31)Регистру она кто? Ресурс измерение?
33 timurhv
 
31.03.12
15:56
(31) ".Ссылка" грозит еще дополнительным соединением таблиц.
34 WED
 
02.04.12
14:09
(32) Ресурс
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.