![]() |
|
Можно ли сделать в одном запросе выборку посл. документов? | ☑ | ||
---|---|---|---|---|
0
Stagor
21.09.16
✎
19:46
|
По каждому клиенту выбрать только по одному документу, который был введен последним?
Выборка такая клиент/документ |
|||
1
mehfk
21.09.16
✎
19:47
|
Можно. Но лучше писать данные в регистр сведений и выбирать из него.
|
|||
2
Джинн
21.09.16
✎
19:50
|
(0) Был введен последним или последний по дате?
|
|||
3
Stagor
21.09.16
✎
19:53
|
Ну, вот такая задача стоит сейчас, регистра нет
Последним по дате |
|||
4
Stagor
21.09.16
✎
19:55
|
МАКСИМУМ по дате и группировка по клиенту не дает ссылку на абонемент
|
|||
5
mehfk
21.09.16
✎
19:59
|
Язык запросов он тем и хорош: захотел максимум по дате с группировкой по контрагенту - получил максимум по дате с группировкой по контрагенту и никаких тебе ссылок.
|
|||
6
Stagor
21.09.16
✎
19:59
|
Ну, задачу таким образом не решить, ту которая в (0)
|
|||
7
Torquader
21.09.16
✎
20:07
|
(6) Сначала во временную таблицу выбираешь по каждому клиенту максимальную дату с группировкой по клиенту (контрагенту) потом с этой таблицей соединяешь таблицу документов по дате и контрагенту - далее, если в одну и ту же дату есть несколько документов, то нужно выбрать какой-то один из них (то есть, также выбрать максимум по какому-то ещё полю).
|
|||
8
Stagor
21.09.16
✎
20:09
|
(7) если 2-3 документа с одной датой?
|
|||
9
Torquader
21.09.16
✎
20:11
|
(8) Максимум по Док.Номер сделай - два номера точно одинаковых быть не могут.
|
|||
10
piter3
21.09.16
✎
20:12
|
(9) а если требется перенумерация
|
|||
11
Torquader
21.09.16
✎
20:14
|
(10) Теперь вопрос - есть несколько документов с одной и той же датой и временем - какой из них последний - тот, у которого номер больше.
А перенумерацию ты делать будешь уже после того, как что-то выберешь. |
|||
12
piter3
21.09.16
✎
20:18
|
(11) к сожалению перенумерацию могут сделать в любой момент.момент времени?
|
|||
13
Torquader
21.09.16
✎
20:20
|
(12) В (0) написано - последний по дате - то есть на момент выполнения запроса - когда пользователь будет смотреть на результат - вполне вероятно, что и дата документа уже поменялась, а и вообще - что его могли удалить.
Но, мы же смотрим на задачу в транзакции выполнения отчёта, когда есть срез базы на какое-то определённое время. |
|||
14
Stagor
21.09.16
✎
20:21
|
Значит нужно упорядочить по убыванию и взять 1й и так по каждому клиенту, вопрос, как это засунуть в запрос
|
|||
15
piter3
21.09.16
✎
20:22
|
(13) ок если действительно у автора так
|
|||
16
Stagor
21.09.16
✎
20:24
|
Вообще это просто результат запроса должен быть на момент выполнения запроса
|
|||
17
Torquader
21.09.16
✎
20:26
|
(16) Ну можно и так - упорядочить по клиенту Возр, дате Убыб и номеру Убыв и сделать группировку по клиенту - а потом переходить к следующему значению по группировке - но, тогда в отчёте хоть и неявно будут упомянуты все документы.
|
|||
18
Stagor
21.09.16
✎
20:28
|
Вообще, пока не вижу оптимального решения...
|
|||
19
Stagor
21.09.16
✎
20:30
|
О нашел, кто догадается?
|
|||
20
Torquader
21.09.16
✎
20:31
|
Таблицу контрагентов соединить с выборкой первого из таблицы документов с условием по контрагенту ?
|
|||
21
jsmith
21.09.16
✎
20:33
|
Вот это поворот
|
|||
22
Stagor
21.09.16
✎
20:35
|
Нет, сейчас тестирую
|
|||
23
Stagor
21.09.16
✎
20:44
|
не работает в 1С коррелированный подзапрос
|
|||
24
breezee
21.09.16
✎
20:46
|
Максимум по моменту времени еще не предлагали?
|
|||
25
breezee
21.09.16
✎
20:48
|
(24) Ну т.е. выстасиваем момент времени и контрагент из всех документов и группирем по максимум(документ.моментвремени)
|
|||
26
Torquader
21.09.16
✎
20:48
|
(24) Уже предлагали и выяснили, что несколько документов могут быть с одним моментом времени.
|
|||
27
Torquader
21.09.16
✎
20:56
|
Вообще, как бы:
http://cascade-group.com.ua/fizicheskaya-struktura-bazy-1s/ Если у нас есть несколько разных документов, то у них может быть одна и та же составляющая ссылки (УникальныйИдентификатор) - конечно - так быть не должно, но если из одного документа при переносе получается два, то иногда можно - тип документа 1С в ссылке не пишет (считая, что идентификаторы действительно уникальны) - так что - если выбирать разные документы, то можно получить два документа с одинаковым положением. |
|||
28
Torquader
21.09.16
✎
20:57
|
Хотя, два документа с одинаковым номером и одинаковыми датой и временем - тоже не такая уж редкость.
|
|||
29
DailyLookingOnA Sunse
21.09.16
✎
21:49
|
Чегой-то коррелированные не работают? Всё как в аптеке.
ВЫБРАТЬ ПоступлениеТоваровУслуг.Организация, ПоступлениеТоваровУслуг.Контрагент, МАКСИМУМ(ПоступлениеТоваровУслуг.Дата) КАК Дата ПОМЕСТИТЬ МаксимальныеДаты ИЗ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг СГРУППИРОВАТЬ ПО ПоступлениеТоваровУслуг.Организация, ПоступлениеТоваровУслуг.Контрагент ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МаксимальныеДаты.Организация, МаксимальныеДаты.Контрагент, МаксимальныеДаты.Дата, ПоступлениеТоваровУслуг.Ссылка ПОМЕСТИТЬ МаксимальныеДатыИДокументы ИЗ МаксимальныеДаты КАК МаксимальныеДаты ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг ПО МаксимальныеДаты.Организация = ПоступлениеТоваровУслуг.Организация И МаксимальныеДаты.Контрагент = ПоступлениеТоваровУслуг.Контрагент И МаксимальныеДаты.Дата = ПоступлениеТоваровУслуг.Дата ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МаксимальныеДатыИДокументы.Организация, МаксимальныеДатыИДокументы.Контрагент, МаксимальныеДатыИДокументы.Дата, МаксимальныеДатыИДокументы.Ссылка ИЗ МаксимальныеДатыИДокументы КАК МаксимальныеДатыИДокументы ГДЕ МаксимальныеДатыИДокументы.Ссылка В (ВЫБРАТЬ ПЕРВЫЕ 1 Т2.Ссылка ИЗ МаксимальныеДатыИДокументы КАК Т2 ГДЕ Т2.Организация = МаксимальныеДатыИДокументы.Организация И Т2.Контрагент = МаксимальныеДатыИДокументы.Контрагент УПОРЯДОЧИТЬ ПО Т2.Дата УБЫВ, Т2.Ссылка УБЫВ) |
|||
30
Torquader
21.09.16
✎
21:52
|
А чего сразу при выборке по второй таблице не сделать МАКСИМУМ по документу ? Ведь мы же его и получим ?
|
|||
31
DailyLookingOnA Sunse
21.09.16
✎
22:02
|
(30)
Вот кстати да. Полазил по партнерскому форуму, подтверждается, что можно использовать МАКСИМУМ(Ссылка) для документов - будет правильно отсортировано по моменту времени. |
|||
32
Torquader
21.09.16
✎
22:05
|
(31) Так как МоментВремени={Дата,Ссылка} - то именно так и будет.
Просто, мне казалось, что логичнее говорить, что "самый последний документ - это максимум по номеру для текущих даты-времени" - иначе, долго придётся объяснять заказчику, почему выбран, скажем 103 и не 105. |
|||
33
eryomin
21.09.16
✎
23:06
|
ВЫБРАТЬ
Док.Контрагент, Док.Ссылка ИЗ Документ.Накладная КАК Док ЛЕВОЕ СОЕДИНЕНИЕ Документ.Накладная КАК ДокПозже ПО Док.Контрагент = ДокПозже.Контрагент И Док.МоментВремени < ДокПозже.МоментВремени ГДЕ ДокПозже.Ссылка ЕСТЬ NULL |
|||
34
DailyLookingOnA Sunse
21.09.16
✎
23:35
|
(33)
Оригинально, но можно умереть, ожидая результата. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |