Имя: Пароль:
1C
1С v8
Подскажите с запросом, пожалуйста!
, ,
0 yabes
 
19.11.12
23:27
Здравствуйте! Подскажите, а то я уже голову сломал. Возьмем, к примеру, документы "Счет на оплату покупателю". Счета выставляются разным контрагентам. Как написать запрос, чтобы получить список счетов, в котором по каждому контрагенту выбран один самый новый документ?
1 XLife
 
19.11.12
23:28
максимум по дате с группировкой по контрагенту
2 КошерныйТролль
 
19.11.12
23:29
максимум(документ)
3 КошерныйТролль
 
19.11.12
23:31
(1) максимум по дате вернет максимум даты а не документ
4 XLife
 
19.11.12
23:32
(3) а максимум по документу введенному задним числом что вернет?
5 КошерныйТролль
 
19.11.12
23:34
(4)  а каким образом (1) решает вопрос?
6 КошерныйТролль
 
19.11.12
23:37
кстати, никогда не видел чтобы счета на оплату вводились задним числом )
7 XLife
 
19.11.12
23:38
(6) не умничай ашот, тебе не идет
8 yabes
 
19.11.12
23:40
(2),(1). И правда, в одном случае максимум даты, во втором проблемы возникнут, если документ задним числом ввести! Так Как быть? (6) Счет на оплату - это пример. Могут быть и другие документы!
9 yabes
 
19.11.12
23:44
А если Сделать пакетный запрос. В первом получить таблицу: Контрагент, самая последняя дата и соединить с таблицей Счет на оплату по контрагенту и дате! Только вместо даты использовать Момент времени, чтобы документов с одним моментом не было! Получится?
10 КошерныйТролль
 
19.11.12
23:44
(8) а каким образом просто максимум по дате даст ему последний документ?
11 КошерныйТролль
 
19.11.12
23:48
(9) а если в пределах даты момента времени был введен документ задним числом? Так , как предлагаешь ты, не решается ситуация, что два счета выписаны в одну и ту же секунду.
12 КошерныйТролль
 
19.11.12
23:50
имхо, тс интересует последний введенный документ  максимум(док) эту задачу решает
13 yabes
 
19.11.12
23:53
(12) Максимум(Док) найдет тебе максимальную ссылку! К примеру, если я введу новый документ и укажу ему прошлый год, то у него будет максимальная ссылка и запрос покажет его!
14 XLife
 
19.11.12
23:55
(13) сделай сначала максимум по дате, а потом от него еще и максимум по ссылке
15 yabes
 
19.11.12
23:56
(14) Что и есть Максимум по моменту времени!))) Момент времени - это дата + ссылка
16 alexei366
 
19.11.12
23:58
Сортировка по дате,и Выбрать различные
17 ssh2012
 
20.11.12
00:10
Вариант:

ВЫБРАТЬ
   Контрагенты.Ссылка КАК Контрагент,
   ЗаказПокупателя.Ссылка КАК Заказ
ПОМЕСТИТЬ Таб
ИЗ
   Справочник.Контрагенты КАК Контрагенты
       ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя
       ПО (ЗаказПокупателя.Ссылка В
               (ВЫБРАТЬ ПЕРВЫЕ 1
                   ЗаказПокупателя.Ссылка КАК Ссылка
               ИЗ
                   Документ.ЗаказПокупателя КАК ЗаказПокупателя
               ГДЕ
                   ЗаказПокупателя.Контрагент = Контрагенты.Ссылка
               УПОРЯДОЧИТЬ ПО
                   ЗаказПокупателя.Дата УБЫВ,
                   Ссылка УБЫВ))
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Таб.Контрагент,
   Таб.Заказ
ИЗ
   Таб КАК Таб
ГДЕ
   Таб.Заказ ЕСТЬ НЕ NULL
18 25-11
 
20.11.12
00:11
1-ый запрос: максимум даты с группировкой по контрагенту
2-ой запрос: соединение с исходной таблицей (контрагент, документ, дата) по двум полям: контрагент и дата. Можно, ессно, и в одном запросе.
19 КошерныйТролль
 
20.11.12
00:37
можно обойтись без пакета запросов
20 КошерныйТролль
 
20.11.12
00:40
и без выбрать первые. Достаточно одного соединения.
21 КошерныйТролль
 
20.11.12
00:44
соединение надо писать по функции максимум(документ) и по дата. Намерена туда запихивать условие в виде вложенного запроса?
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший