Имя: Пароль:
1C
1С v8
Получение последнего документа по контрагенту
,
0 MAPATNK2
 
naïve
22.11.17
13:46
Всем доброго дня. Мне необходимо получить в отчете долг контрагента и последний акт сверки, который был выполнен по данному контрагенту. Не подскажете, как получить этот самый, последний, документ?

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

СГРУППИРОВАТЬ ПО
    РасчетыСКонтрагентамиОстатки.Контрагент,
    РасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
    РасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток,
    РасчетыСКонтрагентамиОстатки.СуммаУпрОстаток,
    АктСверкиВзаиморасчетов.СверкаСогласована,
    АктСверкиВзаиморасчетов.Ссылка
1 Зуекщмшср
 
22.11.17
13:52
Поиск по темам этого форума тебе поможет. Было уже n-цать раз.
2 MAPATNK2
 
naïve
22.11.17
13:57
(1) В итоге ничего стоящего
3 Ёпрст
 
22.11.17
14:00
максимум(АктСверкиВзаиморасчетов.Ссылка)
4 Ёпрст
 
22.11.17
14:01
ну или максимум по дате дока искать
5 MAPATNK2
 
naïve
22.11.17
14:11
(4) Не то
6 Numerus Mikhail
 
22.11.17
14:14
(5) почему?
7 MAPATNK2
 
naïve
22.11.17
14:15
(6) По ссылке выводит не максимум
8 MAPATNK2
 
naïve
22.11.17
14:15
(6) По дате ничего не выводит
9 Numerus Mikhail
 
22.11.17
14:17
Отдельным запросом получай документ, а потом уже получай остатки и присоединяй документ
10 wondkind
 
22.11.17
14:19
(9) поддерживаю. Так же бы сделал
11 MAPATNK2
 
naïve
22.11.17
14:20
(9) ВЫБРАТЬ
    РасчетыСКонтрагентамиОстатки.Контрагент,
    РасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
    РасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток,
    РасчетыСКонтрагентамиОстатки.СуммаУпрОстаток,
    ВложенныйЗапрос.Ссылка,
    ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Ссылка)
ИЗ
    РегистрНакопления.РасчетыСКонтрагентами.Остатки КАК РасчетыСКонтрагентамиОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            АктСверкиВзаиморасчетов.ДоговорКонтрагента КАК ДоговорКонтрагента,
            АктСверкиВзаиморасчетов.Контрагент КАК Контрагент,
            МАКСИМУМ(АктСверкиВзаиморасчетов.Ссылка) КАК Ссылка
        ИЗ
            Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
        
        СГРУППИРОВАТЬ ПО
            АктСверкиВзаиморасчетов.ДоговорКонтрагента,
            АктСверкиВзаиморасчетов.Контрагент) КАК ВложенныйЗапрос
        ПО РасчетыСКонтрагентамиОстатки.ДоговорКонтрагента = ВложенныйЗапрос.ДоговорКонтрагента
            И РасчетыСКонтрагентамиОстатки.Контрагент = ВложенныйЗапрос.Контрагент
12 wondkind
 
22.11.17
14:23
(11) какой вывод из этого сообщения мы должны сделать?
13 MAPATNK2
 
naïve
22.11.17
14:36
(12) не выходит до запросом.
14 DexterMorgan
 
22.11.17
14:37
15 DexterMorgan
 
22.11.17
14:38
(7), (8) Ну логично, получи сначала последние даты документов сверок, а потом получи последнюю ссылку
16 MAPATNK2
 
naïve
22.11.17
14:42
(15) не особо понятно как это работает
17 MAPATNK2
 
naïve
22.11.17
14:45
(15) Я понимаю как это сделать со справочником и документом, но с регистром и документом так не выходит
18 wondkind
 
22.11.17
14:45
(16)
ВЫБРАТЬ
    АктСверкиВзаиморасчетов.Ссылка КАК Ссылка,
    АктСверкиВзаиморасчетов.Контрагент КАК Контрагент,
    АктСверкиВзаиморасчетов.ДоговорКонтрагента КАК ДоговорКонтрагента
ПОМЕСТИТЬ ВТ_АктыСверки
ИЗ
    Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ
            (ВЫБРАТЬ
                АктСверкиВзаиморасчетов.Контрагент КАК Контрагент,
                АктСверкиВзаиморасчетов.ДоговорКонтрагента,
                МАКСИМУМ(АктСверкиВзаиморасчетов.Дата) КАК Дата
            ИЗ
                Документ.АктСверкиВзаиморасчетов КАК АктСверкиВзаиморасчетов
            ГДЕ
                НЕ АктСверкиВзаиморасчетов.ПометкаУдаления
            СГРУППИРОВАТЬ ПО
                АктСверкиВзаиморасчетов.Контрагент,
                АктСверкиВзаиморасчетов.ДоговорКонтрагента) КАК ВложенныйЗапрос
        ПО
            АктСверкиВзаиморасчетов.ДоговорКонтрагента =  ВложенныйЗапрос.ДоговорКонтрагента
            И АктСверкиВзаиморасчетов.Контрагент =    ВложенныйЗапрос.Контрагент
            И АктСверкиВзаиморасчетов.Дата = ВложенныйЗапрос.Дата
;

/////////////
ВЫБРАТЬ
    РасчетыСКонтрагентамиОстатки.Контрагент КАК Контрагент,
    РасчетыСКонтрагентамиОстатки.ДоговорКонтрагента КАК ДоговорКонтрагента,
    ЕСТЬNULL(ВТ_АктыСверки.Ссылка, ЗНАЧЕНИЕ(Документ.АктСверкиВзаиморасчетов.ПустаяСсылка)) КАК АктСверкиСсылка,
    ЕСТЬNULL(ВТ_АктыСверки.СверкаСогласована, Ложь) КАК СверкаСогласована,
    РасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток,
    РасчетыСКонтрагентамиОстатки.СуммаУпрОстаток КАК СуммаУпрОстаток
ИЗ
    РегистрНакопления.РасчетыСКонтрагентами.Остатки КАК РасчетыСКонтрагентамиОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_АктыСверки КАК ВТ_АктыСверки
        ПО РасчетыСКонтрагентамиОстатки.Контрагент = ВТ_АктыСверки.Контрагент
            И РасчетыСКонтрагентамиОстатки.ДоговорКонтрагента = ВТ_АктыСверки.ДоговорКонтрагента
19 wondkind
 
22.11.17
14:50
(17) хоть отпишись как попробуешь
20 wondkind
 
22.11.17
14:55
(19) и забыл ИТОГИ. Сам добавишь и должно работать лучше. Уверен на 98,6%. Хоть что-то тебе останется сделать)
21 MAPATNK2
 
naïve
22.11.17
15:00
(20) Забили АктСверкиВзаиморасчетов.СверкаСогласована КАК СверкаСогласована, после этого пошло, итоги добавлю. Только все равно не могу разобраться в этом. Берем акт сверки взаиморасчетов без пометки удаления и группируем по макисмальной дате. Потом снова берем акт сверки связываем с полученным подзапросом в разрезе договора, контрагента и даты.... и как я понимаю, получаем последний документ(по дате) по данному контрагенту.Дальше запихиваем это счастье во временную таблицу, потом связываем эту таблицу с регистром и получаем необходимые данные. СЛОЖНА, не могу проверить на правильность. Но спасибо большое.
22 wondkind
 
22.11.17
15:08
(21) а, да, забыл в первом запросе добавить данный реквизит документа.

Также будет проблема, если акты сверок по одному контрагенту/договору будут с одинаковой датой и временем. Подумайте над решением/обработкой таких ситуаций.

Что именно сложно?
Почему проверить не можете? Консоль запросов в этом вам поможет.

Вот по шагам:
1. Вначале находим максимальную дату акта сверки у контрагента;
2. Далее находим сам документ с максимальной датой;
3. Помещаем это во временную таблицу для удобства работы;
4. Уже смотрим остатки и присоединяем к ним последний документ.
23 MAPATNK2
 
naïve
22.11.17
15:13
(22) а почему в пункте 1 нельзя сразу получить ссылку?
24 MAPATNK2
 
naïve
22.11.17
15:15
(23) Или это по тому , что группировка в 1 пункте не удастся если добавить ссылку?
25 wondkind
 
22.11.17
15:21
(24) группировка не удастся. А искать по МАКСИМУМ(Ссылка) некорректно вообще. Вот пример: как будет определяться максимум ссылки? А если дату у документа изменили? Ссылка то останется прежней.

Правильный вариант узнать последний документ - искать по дате.

Единственная, как я думаю, возможная проблема - несколько документов с одинаковыми датой и временем.
26 wondkind
 
22.11.17
15:23
(25) в таком случае просто задублируется запись по контрагенту/договору
27 DexterMorgan
 
22.11.17
15:26
да ну нах, если ты не можешь понять (14) то вообще нах работать, найди че получше
28 DexterMorgan
 
22.11.17
15:27
в (14) просто написан код, нужно только свои вт подставить
29 DexterMorgan
 
22.11.17
15:28
(25) Ну может именно тогда максимум по ссылке подойдет?
30 иубиповец
 
22.11.17
15:29
(21) В разрезе договора, контрагента и даты
А если сделали акт по всем договорам контрагента (не указали договор) в выборку не попадет же.
(22) Также будет проблема, если акты сверок по одному контрагенту/договору будут с одинаковой датой и временем. Подумайте над решением/обработкой таких ситуаций.
Сначала максимум по дате, получить эти документы, (1,2,10) из множества, затем максимум по ссылке:).
Какой вообще смысл разных актов сверки, на один период, вы их оба с контрагентом что ли подписали, один же акт (если уж вы к договору прицепились). т.е. или один общий в момент времени, либо много по каждому договору.
31 wondkind
 
22.11.17
15:34
(29) именно тогда по бизнес-процессу такое не подойдёт, если только у них не всё через попу
32 DexterMorgan
 
22.11.17
15:45
(31) В смысле? не может быть документов в одну секунду? или что? мля что за бред