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

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

Одним запросом получить пять последних документов по всем контрагентам

Одним запросом получить пять последних документов по всем контрагентам
Я
   Victor111
 
26.10.17 - 22:04
Посоветуйте как лучше реализовать идею.
Нужно по каждому контрагенту получить последние пять документов СчетНаОплатуПокупателю
Пробивал через левое соединение, не то, получим всех контрагентов и по одной записи

ВЫБРАТЬ
    Контрагенты.Наименование КАК Наименование,
    ВложенныйЗапрос.Ссылка,
    ВложенныйЗапрос.Контрагент
ИЗ
    Справочник.Контрагенты КАК Контрагенты
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 5
            СчетНаОплатуПокупателю.Ссылка КАК Ссылка,
            СчетНаОплатуПокупателю.Контрагент КАК Контрагент,
            СчетНаОплатуПокупателю.Дата КАК Дата
        ИЗ
            Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
        
        УПОРЯДОЧИТЬ ПО
            Дата УБЫВ) КАК ВложенныйЗапрос
        ПО Контрагенты.Ссылка = ВложенныйЗапрос.Контрагент
ГДЕ
    Контрагенты.ПометкаУдаления = ЛОЖЬ
    И Контрагенты.ЭтоГруппа = ЛОЖЬ

СГРУППИРОВАТЬ ПО
    Контрагенты.Наименование,
    ВложенныйЗапрос.Ссылка,
    ВложенныйЗапрос.Контрагент

УПОРЯДОЧИТЬ ПО
    Наименование
 
 
   Fragster
 
1 - 26.10.17 - 22:10
гугли "коррелированный запрос 1с"
   Franchiser
 
2 - 27.10.17 - 00:39
Сделай на скд
   Franchiser
 
3 - 27.10.17 - 00:47
Во вложенном запросе попробуй
Где счетнаоплатупокупателя.контрагент = контрагент.ссылка
   Tateossian
 
4 - 27.10.17 - 01:00
Держи

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

СГРУППИРОВАТЬ ПО
    ЗаказПокупателя.Ссылка,
    ЗаказПокупателя.Номер,
    ЗаказПокупателя.Контрагент

ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказПокупателя1.Ссылка) <= 5

УПОРЯДОЧИТЬ ПО
    Контрагент,
    НПП


;)
   youalex
 
5 - 27.10.17 - 05:59
Как-то так, согласно (1):
ВЫБРАТЬ  ПЕРВЫЕ 100
    СпрКонтрагенты.Ссылка,
    ЗаказПокупателя.Ссылка
ИЗ
    Справочник.Контрагенты КАК СпрКонтрагенты
         СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя
        ПО СпрКонтрагенты.Ссылка = ЗаказПокупателя.Контрагент
            И (ЗаказПокупателя.Ссылка В
                (ВЫБРАТЬ ПЕРВЫЕ 5
                    Документ.ЗаказПокупателя.Ссылка
                ИЗ
                    Документ.ЗаказПокупателя
                ГДЕ
                    Документ.ЗаказПокупателя.Контрагент = СпрКонтрагенты.Ссылка))
   wondkind
 
6 - 27.10.17 - 07:31
(5) первые 5 это не последние 5 оплат) но идея правильная. Может автор и догадается
   wondkind
 
7 - 27.10.17 - 07:32
(6) но у тебя наиболее правильный вариант, чем в (4), в котором не поняли что нужно сделать
   craxx
 
8 - 27.10.17 - 07:49
(6) и последние станут первые)) смотря как сортировать))
   wondkind
 
9 - 27.10.17 - 07:58
(8) сейчас проверил - по убыванию норм получится
   Tateossian
 
10 - 27.10.17 - 11:54
(7) ТЫ пустозвон, насчет вот этого
"в котором не поняли что нужно сделать"

Проверь вот этот вариант

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

УПОРЯДОЧИТЬ ПО
    Контрагент

И мой и попробуй найти  пять отличий. А, еще можешь параметры добавить, чтобы было вообще идеально.
 
 Рекламное место пустует
   Victor111
 
11 - 27.10.17 - 12:18
Спасибо всем за совет, все получилось :)
   mistеr
 
12 - 27.10.17 - 12:21
Оба варианта очень тяжелые будут, на большой базе. "ПЕРВЫЕ 5" будет не по индексу. Тут надо подумать.

Например, получить сначала в ВТ даты отсечения по каждому контру, после которых будут эти 5 заказов.
   toypaul
 
13 - 27.10.17 - 12:28
а давно у 1С "коррелированный запрос" можно делать? чот пробовал - вроде не получалось.


или в соединении давно можно?
   Tateossian
 
14 - 27.10.17 - 12:30
(12) Там куча мест по оптимизации, если уже дальше дорабатывать оба эти запроса.

(13) В RLS это активно используется, если посмотреть запросы => давно.
   Dzenn
 
15 - 27.10.17 - 12:59
Я сначала совершенно не понял, как работает запрос в (4), и уже списал себя в тупые, но немного повтыкал — действительно шикарный запрос :-)
   Dzenn
 
16 - 27.10.17 - 13:00
Tateossian, насколько хорошо твой запрос из (4) будет работать на больших данных?

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