Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Можно ли сделать в одном запросе выборку посл. документов?

Можно ли сделать в одном запросе выборку посл. документов?
Я
   Stagor
 
21.09.16 - 19:46
По каждому клиенту выбрать только по одному документу, который был введен последним?
Выборка такая клиент/документ
 
 
   mehfk
 
1 - 21.09.16 - 19:47
Можно. Но лучше писать данные в регистр сведений и выбирать из него.
   Джинн
 
2 - 21.09.16 - 19:50
(0) Был введен последним или последний по дате?
   Stagor
 
3 - 21.09.16 - 19:53
Ну, вот такая задача стоит сейчас, регистра нет
Последним по дате
   Stagor
 
4 - 21.09.16 - 19:55
МАКСИМУМ по дате и группировка по клиенту не дает ссылку на абонемент
   mehfk
 
5 - 21.09.16 - 19:59
Язык запросов он тем и хорош: захотел максимум по дате с группировкой по контрагенту - получил максимум по дате с группировкой по контрагенту и никаких тебе ссылок.
   Stagor
 
6 - 21.09.16 - 19:59
Ну, задачу таким образом не решить, ту которая в (0)
   Torquader
 
7 - 21.09.16 - 20:07
(6) Сначала во временную таблицу выбираешь по каждому клиенту максимальную дату с группировкой по клиенту (контрагенту) потом с этой таблицей соединяешь таблицу документов по дате и контрагенту - далее, если в одну и ту же дату есть несколько документов, то нужно выбрать какой-то один из них (то есть, также выбрать максимум по какому-то ещё полю).
   Stagor
 
8 - 21.09.16 - 20:09
(7) если 2-3 документа с одной датой?
   Torquader
 
9 - 21.09.16 - 20:11
(8) Максимум по Док.Номер сделай - два номера точно одинаковых быть не могут.
   piter3
 
10 - 21.09.16 - 20:12
(9) а если требется перенумерация
 
 Рекламное место пустует
   Torquader
 
11 - 21.09.16 - 20:14
(10) Теперь вопрос - есть несколько документов с одной и той же датой и временем - какой из них последний - тот, у которого номер больше.
А перенумерацию ты делать будешь уже после того, как что-то выберешь.
   piter3
 
12 - 21.09.16 - 20:18
(11) к сожалению перенумерацию могут сделать в любой момент.момент времени?
   Torquader
 
13 - 21.09.16 - 20:20
(12) В (0) написано - последний по дате - то есть на момент выполнения запроса - когда пользователь будет смотреть на результат - вполне вероятно, что и дата документа уже поменялась, а и вообще - что его могли удалить.
Но, мы же смотрим на задачу в транзакции выполнения отчёта, когда есть срез базы на какое-то определённое время.
   Stagor
 
14 - 21.09.16 - 20:21
Значит нужно упорядочить по убыванию и взять 1й и так по каждому клиенту, вопрос, как это засунуть в запрос
   piter3
 
15 - 21.09.16 - 20:22
(13) ок если действительно у автора так
   Stagor
 
16 - 21.09.16 - 20:24
Вообще это просто результат запроса должен быть на момент выполнения запроса
   Torquader
 
17 - 21.09.16 - 20:26
(16) Ну можно и так - упорядочить по клиенту Возр, дате Убыб и номеру Убыв и сделать группировку по клиенту - а потом переходить к следующему значению по группировке - но, тогда в отчёте хоть и неявно будут упомянуты все документы.
   Stagor
 
18 - 21.09.16 - 20:28
Вообще, пока не вижу оптимального решения...
   Stagor
 
19 - 21.09.16 - 20:30
О нашел, кто догадается?
   Torquader
 
20 - 21.09.16 - 20:31
Таблицу контрагентов соединить с выборкой первого из таблицы документов с условием по контрагенту ?
   jsmith
 
21 - 21.09.16 - 20:33
Вот это поворот
   Stagor
 
22 - 21.09.16 - 20:35
Нет, сейчас тестирую
   Stagor
 
23 - 21.09.16 - 20:44
не работает в 1С коррелированный подзапрос
   breezee
 
24 - 21.09.16 - 20:46
Максимум по моменту времени еще не предлагали?
   breezee
 
25 - 21.09.16 - 20:48
(24) Ну т.е. выстасиваем момент времени и контрагент из всех документов и группирем по максимум(документ.моментвремени)
   Torquader
 
26 - 21.09.16 - 20:48
(24) Уже предлагали и выяснили, что несколько документов могут быть с одним моментом времени.
   Torquader
 
27 - 21.09.16 - 20:56
Вообще, как бы:
http://cascade-group.com.ua/fizicheskaya-struktura-bazy-1s/
Если у нас есть несколько разных документов, то у них может быть одна и та же составляющая ссылки (УникальныйИдентификатор) - конечно - так быть не должно, но если из одного документа при переносе получается два, то иногда можно - тип документа 1С в ссылке не пишет (считая, что идентификаторы действительно уникальны) - так что - если выбирать разные документы, то можно получить два документа с одинаковым положением.
   Torquader
 
28 - 21.09.16 - 20:57
Хотя, два документа с одинаковым номером и одинаковыми датой и временем - тоже не такая уж редкость.
   DailyLookingOnASunse
 
29 - 21.09.16 - 21:49
Чегой-то коррелированные не работают? Всё как в аптеке.

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

СГРУППИРОВАТЬ ПО
    ПоступлениеТоваровУслуг.Организация,
    ПоступлениеТоваровУслуг.Контрагент
;

////////////////////////////////////////////////////////////////////////////////

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

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    МаксимальныеДатыИДокументы.Организация,
    МаксимальныеДатыИДокументы.Контрагент,
    МаксимальныеДатыИДокументы.Дата,
    МаксимальныеДатыИДокументы.Ссылка
ИЗ
    МаксимальныеДатыИДокументы КАК МаксимальныеДатыИДокументы
ГДЕ
    МаксимальныеДатыИДокументы.Ссылка В
            (ВЫБРАТЬ ПЕРВЫЕ 1
                Т2.Ссылка
            ИЗ
                МаксимальныеДатыИДокументы КАК Т2
            ГДЕ
                Т2.Организация = МаксимальныеДатыИДокументы.Организация
                И Т2.Контрагент = МаксимальныеДатыИДокументы.Контрагент
            УПОРЯДОЧИТЬ ПО
                Т2.Дата УБЫВ,
                Т2.Ссылка УБЫВ)
   Torquader
 
30 - 21.09.16 - 21:52
А чего сразу при выборке по второй таблице не сделать МАКСИМУМ по документу ? Ведь мы же его и получим ?
   DailyLookingOnASunse
 
31 - 21.09.16 - 22:02
(30)
Вот кстати да. Полазил по партнерскому форуму, подтверждается, что можно использовать МАКСИМУМ(Ссылка) для документов - будет правильно отсортировано по моменту времени.
   Torquader
 
32 - 21.09.16 - 22:05
(31) Так как МоментВремени={Дата,Ссылка} - то именно так и будет.
Просто, мне казалось, что логичнее говорить, что "самый последний документ - это максимум по номеру для текущих даты-времени" - иначе, долго придётся объяснять заказчику, почему выбран, скажем 103 и не 105.
   eryomin
 
33 - 21.09.16 - 23:06
ВЫБРАТЬ
    Док.Контрагент,
    Док.Ссылка
ИЗ
    Документ.Накладная КАК Док
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Накладная КАК ДокПозже
        ПО Док.Контрагент = ДокПозже.Контрагент
            И Док.МоментВремени < ДокПозже.МоментВремени
ГДЕ
    ДокПозже.Ссылка ЕСТЬ NULL
 
 
   DailyLookingOnASunse
 
34 - 21.09.16 - 23:35
(33)
Оригинально, но можно умереть, ожидая результата.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует