Имя: Пароль:
1C
1С v8
Можно ли сделать в одном запросе выборку посл. документов?
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)
Оригинально, но можно умереть, ожидая результата.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший