Имя: Пароль:
1C
1С v8
Запрос. выбор последего документа по контрагенту
0 d3N4eGG
 
05.10.12
16:53
Добрый день.

требуется получить следующее:
динамический список с такими колонками:
1) контрагент
2) послений документ "Событие" с этим контрагентом.

То есть, если у нас 10 документов "Событие" с данным контрагентом следует выбирать последний созданный документ.


Делаю так:

Из таблицы Контрагенты вытаскиваю нужные поля. Создаю ВложенныйЗапрос, в котором из Документа "состояние" вытаскиваю поля "Ссылка" и "Контрагент".
Связи устанавливаю - Контрагенты.Ссылка = ВложенныеЗапрос.Контрагент

Получается таблица:

Контрагент1  Событие1
Контрагент1  Событие2
Контрагент1  Событие3
Контрагент2  
Контрагент3  Событие1
Контрагент3  Событие2

Как все-таки сделать, чтоб выбирал только последнее событие?


Запрос:

ВЫБРАТЬ
   Контрагенты.Ссылка,
   ВложенныйЗапрос.СобытиеСсылка
ИЗ
   Справочник.Контрагенты КАК Контрагенты
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           Событие.Ссылка КАК СобытиеСсылка,
           Событие.Контрагент КАК Контрагент
       ИЗ
           Документ.Событие КАК Событие) КАК ВложенныйЗапрос
       ПО Контрагенты.Ссылка = ВложенныйЗапрос.Контрагент
ГДЕ
   НЕ Контрагенты.ЭтоГруппа
1 Renat11111
 
05.10.12
16:57
слово Максимум тебе о чем нибудь говорит?
2 d3N4eGG
 
05.10.12
16:58
на данный момент, нет =D сейчас посмотрим
3 tenikov
 
05.10.12
17:04
(0) отсортируй период по убыванию и сделай выбрать первые 1
4 tenikov
 
05.10.12
17:05
(1) и что ему должно сказать слово Максимум в контексте задачи из (0)
5 Kashemir
 
05.10.12
17:05
(3) Садись - два.
6 Азазелло
 
05.10.12
17:06
(5)+100
7 Fragster
 
гуру
05.10.12
17:06
нужно сделать РС и документом в него писать записи. в запросе брать срез последних
8 d3N4eGG
 
05.10.12
17:06
(3) выдаст мне одну запись и шо? мне надо по каждому контрагенту по одной записи
9 d3N4eGG
 
05.10.12
17:08
(7) средствами запроса это никак не сделать? :(
10 Fragster
 
гуру
05.10.12
17:08
(9) средствами запроса это сделать очень просто. только вот этот вопрос задают по 5 раз в неделю и он всех достал.
11 Fragster
 
гуру
05.10.12
17:09
предлагаю воспользоваться поиском
12 Азазелло
 
05.10.12
17:09
(9) тебе же сказали, Максимум + Сгруппировать. + джойн на вложенный запрос.
13 Fragster
 
гуру
05.10.12
17:09
или мозгом
14 Fragster
 
гуру
05.10.12
17:09
(12) а у него в исходных данных нету критерия для определения порядка записей
15 Торин
 
05.10.12
17:10
Погуглите на фразу "тета-соединие в запросе"...
16 Kashemir
 
05.10.12
17:10
ВЫБРАТЬ
   Контрагенты.Ссылка,
   ВложенныйЗапрос.СобытиеСсылка
ИЗ
   Справочник.Контрагенты КАК Контрагенты
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           МАКСИМУМ(Событие.Ссылка) КАК СобытиеСсылка,
           Событие.Контрагент КАК Контрагент
       ИЗ
           Документ.Событие КАК Событие
               ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   Событие.Контрагент КАК Контрагент,
                   МАКСИМУМ(Событие.Дата) КАК Дата
               ИЗ
                   Документ.Событие КАК Событие
               
               СГРУППИРОВАТЬ ПО
                   Событие.Контрагент) КАК ВложенныйЗапрос
               ПО Событие.Дата = ВложенныйЗапрос.Дата
                   И Событие.Контрагент = ВложенныйЗапрос.Контрагент
       
       СГРУППИРОВАТЬ ПО
           Событие.Контрагент) КАК ВложенныйЗапрос
       ПО Контрагенты.Ссылка = ВложенныйЗапрос.Контрагент
ГДЕ
   НЕ Контрагенты.ЭтоГруппа
17 Торин
 
05.10.12
17:10
"тета-соединение"
18 Азазелло
 
05.10.12
17:10
(14) "последний созданный документ" не оно?
19 Торин
 
05.10.12
17:11
(16)да, это оно...
20 d3N4eGG
 
05.10.12
17:12
спасибо
21 Renat11111
 
05.10.12
17:19
(16) тебе тоже два
22 d3N4eGG
 
05.10.12
17:22
(21) а тут что не так?
23 Renat11111
 
05.10.12
17:26
много лишнего в запросе...
24 tenikov
 
05.10.12
17:29
ВЫБРАТЬ
   Контрагенты.Ссылка КАК Контрагент,
   ПлатежноеПоручение.Дата КАК Период,
   ПлатежноеПоручение.Ссылка КАК Ссылка
ИЗ
   Справочник.Контрагенты КАК Контрагенты
       ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручение КАК ПлатежноеПоручение
       ПО (ПлатежноеПоручение.Контрагент = Контрагенты.Ссылка)
ГДЕ
   ПлатежноеПоручение.Дата В
           (ВЫБРАТЬ ПЕРВЫЕ 1
               ПлатежноеПоручение.Дата КАК ВТ_Период
           ИЗ
               Документ.ПлатежноеПоручение КАК ПлатежноеПоручение
           ГДЕ
               ПлатежноеПоручение.Контрагент = Контрагенты.Ссылка)
25 tenikov
 
05.10.12
17:29
На типовой бухгалтерии
26 tenikov
 
05.10.12
17:31
Сортировку забыл :)
--

ВЫБРАТЬ
   Контрагенты.Ссылка КАК Контрагент,
   ПлатежноеПоручение.Дата КАК Период,
   ПлатежноеПоручение.Ссылка КАК Ссылка
ИЗ
   Справочник.Контрагенты КАК Контрагенты
       ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручение КАК ПлатежноеПоручение
       ПО (ПлатежноеПоручение.Контрагент = Контрагенты.Ссылка)
ГДЕ
   ПлатежноеПоручение.Дата В
           (ВЫБРАТЬ ПЕРВЫЕ 1
               ПлатежноеПоручение.Дата КАК ВТ_Период
           ИЗ
               Документ.ПлатежноеПоручение КАК ПлатежноеПоручение
           ГДЕ
               ПлатежноеПоручение.Контрагент = Контрагенты.Ссылка
           УПОРЯДОЧИТЬ ПО
               ВТ_Период УБЫВ)
27 Kashemir
 
05.10.12
18:54
(23) Например ?
28 sinisterfrag
 
05.10.12
20:22
(27) Вот пример гораздо проще

ВЫБРАТЬ
   Событие.Контрагент,
   МАКСИМУМ(Событие.Дата) КАК Дата
ПОМЕСТИТЬ МаксСобытияКонтрагента
ИЗ
   Документ.Событие КАК Событие

СГРУППИРОВАТЬ ПО
   Событие.Контрагент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Событие.Контрагент,
   Событие.Ссылка
ИЗ
   Документ.Событие КАК Событие
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ МаксСобытияКонтрагента КАК МаксСобытияКонтрагента
       ПО Событие.Контрагент = МаксСобытияКонтрагента.Контрагент
           И Событие.Дата = МаксСобытияКонтрагента.Дата
29 Kashemir
 
08.10.12
10:39
(28) Молодец - а если 2 документа в 1 секунду - что твой запрос покажет ?