Имя: Пароль:
1C
 
Минимальный по дате оплаты документ в запросе
0 lamme
 
19.07.19
12:44
уф
ут11

есть заказ покупателя. есть оплата безнал. надо определить первую оплату
Минимум куда только не вставлял .. не помогает
Задача примитивная. Не раз решенная ... у тут чего-то не получается.

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


В итоге вот такая таблица
https://c2n.me/42FgE0k

по факту = это 1 заказ клиента и 2 оплаты.
нужна только первая оплата . от 24,06,19
1 sqr4
 
19.07.19
12:46
во вложенной убирай платежный документ из группировки, там только заказ и дата все!
2 lamme
 
19.07.19
12:49
поле было для себя. для контроля.
убрал
не помогло
3 sqr4
 
19.07.19
12:50
Сумму тоже!
4 lamme
 
19.07.19
12:50
суммуОплаты?

почему
откуда я тогда потом сумму возьму ?
5 sqr4
 
19.07.19
12:52
Тогда тебе нужен свой срез последних, сначала получаешь минимальные даты, затем соединяешь и получаешь остальные поля
6 lamme
 
19.07.19
12:53
Без суммы и без документа оплаты - да, показывает то как надо
а где теперь тогда сумму оплаты брать ?
новым подзапросом ?
7 sqr4
 
19.07.19
12:53
И почему вложенные запрсоы?
8 lamme
 
19.07.19
12:53
(7)
это я запрос пытался вертеть .. там подзапросы не нужны. согласен
9 lamme
 
19.07.19
12:55
(5)
а подробнее
10 sqr4
 
19.07.19
12:59
ВЫБРАТЬ
    ВложенныйЗапрос.Заказ КАК Заказ,
    ВложенныйЗапрос.ДатаОплаты КАК ДатаОплаты,
    ВложенныйЗапрос1.ПлатежныйДокумент КАК ПлатежныйДокумент,
    ВложенныйЗапрос1.СуммаУпр КАК СуммаУпр,
    ВложенныйЗапрос1.СуммаРегл КАК СуммаРегл
ИЗ
    (ВЫБРАТЬ
        ДенежныеСредстваБезналичные.Заказ КАК Заказ,
        МИНИМУМ(ДенежныеСредстваБезналичные.ПлатежныйДокумент.Дата) КАК ДатаОплаты
    ИЗ
        РегистрНакопления.ДенежныеСредстваБезналичные КАК ДенежныеСредстваБезналичные
    
    СГРУППИРОВАТЬ ПО
        ДенежныеСредстваБезналичные.Заказ) КАК ВложенныйЗапрос
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ДенежныеСредстваБезналичные.Заказ КАК Заказ,
            МИНИМУМ(ДенежныеСредстваБезналичные.ПлатежныйДокумент.Дата) КАК ДатаОплаты,
            ДенежныеСредстваБезналичные.ПлатежныйДокумент КАК ПлатежныйДокумент,
            ДенежныеСредстваБезналичные.СуммаУпр КАК СуммаУпр,
            ДенежныеСредстваБезналичные.СуммаРегл КАК СуммаРегл
        ИЗ
            РегистрНакопления.ДенежныеСредстваБезналичные КАК ДенежныеСредстваБезналичные
        
        СГРУППИРОВАТЬ ПО
            ДенежныеСредстваБезналичные.Заказ,
            ДенежныеСредстваБезналичные.ПлатежныйДокумент,
            ДенежныеСредстваБезналичные.СуммаУпр,
            ДенежныеСредстваБезналичные.СуммаРегл) КАК ВложенныйЗапрос1
        ПО ВложенныйЗапрос.Заказ = ВложенныйЗапрос1.Заказ
            И ВложенныйЗапрос.ДатаОплаты = ВложенныйЗапрос1.ДатаОплаты
11 lamme
 
19.07.19
13:04
работает ...

логику не понимаю (
12 lamme
 
19.07.19
13:06
а .понимаю
13 lamme
 
19.07.19
13:06
тут косяк может быть
что если по одному заказу сделано 2 оплаты с одной датой (с точностью до секунды)
14 d4rkmesa
 
19.07.19
13:15
(13) Если очень критично, можно воспользоваться коррелированным запросом, как в:
Одним запросом получить пять последних документов по всем контрагентам
15 lamme
 
19.07.19
13:17
в принципе
спасибо
тема закрыта .

сами виноваты - что делают оплаты одним моментом времени
16 sqr4
 
19.07.19
14:18
(15) в регистрах сведений, эта проблема решена тем, что не сделать две записи с одинаковым набором измерений с учетом значения периода.