Имя: Пароль:
1C
1С v8
помогите с запросом
Ø (GROOVY 31.10.2013 17:27)
0 vip67
 
30.10.13
21:46
1с 8.2 УПП для Украины, по сути релиз не важен - важен сам механизм получения данных. Необходимо для каждой сделки, по которой в течении определенного периода была или возникла дебиторская задолженность определить дату погашения данной задолженности, если эта задолженность была погашена.

Текст запроса - работает все - кроме получения данной даты:
ВЫБРАТЬ
    Остатки.Субконто1 КАК Контрагент,
    Остатки.Субконто2.Номер КАК НомерДоговора,
    Остатки.Субконто2.Дата КАК ДатаДоговора,
    Остатки.Субконто3 КАК Счет,
    Остатки.СуммаНачальныйОстатокДт КАК ОстатокДтНач,
    Остатки.СуммаКонечныйОстатокДт КАК ОстатокДтКон,
    Остатки.Субконто2 КАК Договор,
    Платеж.ДатаОплаты КАК ДатаОплаты,
    Платеж.НомерПоручения КАК НомерПоручения,
    КонтактнаяИнформация.Представление КАК АдресКонтрагента,
    Платеж.НазначениеПлатежа КАК Обязательства,
    Остатки.Субконто2.Подразделение КАК Подразделение,
    Остатки.Субконто2.ВидДоговора КАК видДоговора,
    Реализация.Номер КАК номерРТУ,
    Реализация.Дата КАК ДатаРТУ,
    ВЫБОР
        КОГДА Остатки.Субконто3 ССЫЛКА Документ.СчетНаОплатуПоставщика
            ТОГДА Остатки.Субконто3.НомерВходящегоДокумента
        КОГДА Остатки.Субконто3 ССЫЛКА Документ.СчетНаОплатуПокупателю
            ТОГДА Остатки.Субконто3.Номер
    КОНЕЦ КАК НомерСчета,
    ВЫБОР
        КОГДА Остатки.Субконто3 ССЫЛКА Документ.СчетНаОплатуПоставщика
            ТОГДА Остатки.Субконто3.ДатаВходящегоДокумента
        КОГДА Остатки.Субконто3 ССЫЛКА Документ.СчетНаОплатуПокупателю
            ТОГДА Остатки.Субконто3.Дата
    КОНЕЦ КАК ДатаСчета,
    ВЫБОР
        КОГДА ЕСТЬNULL(Платеж.НомерПоручения, 1) = 1
            ТОГДА Реализация.Номер
        ИНАЧЕ Платеж.НомерПоручения
    КОНЕЦ КАК НомерДокЗадолженности,
    ВЫБОР
        КОГДА Остатки.Субконто3 ССЫЛКА Документ.СчетНаОплатуПоставщика
            ТОГДА Остатки.Субконто3.ДатаПоступления
        КОГДА Остатки.Субконто3 ССЫЛКА Документ.СчетНаОплатуПокупателю
            ТОГДА Остатки.Субконто3.ДатаОплаты
    КОНЕЦ КАК ДатаОбязательств,
    Остатки.Счет КАК СчетБУ,
    ВЫБОР
        КОГДА Остатки.Субконто3 ССЫЛКА Документ.СчетНаОплатуПоставщика
            ТОГДА ЕСТЬNULL(Платеж.СуммаКонечныйОстаток, 0)
        КОГДА Остатки.Субконто3 ССЫЛКА Документ.СчетНаОплатуПокупателю
            ТОГДА ЕСТЬNULL(Реализация.СуммаКонечныйОстаток, 0)
    КОНЕЦ КАК СуммаОстаток,
    ДатаЗакрытияДолга.Период КАК ДатаЗакрытияДт
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ПериодНач, КОНЕЦПЕРИОДА(&ПериодКон, ДЕНЬ), , , Счет В ИЕРАРХИИ (&Счет), , ) КАК Остатки
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка.ДатаОплаты КАК ДатаОплаты,
            ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка.НомерПоручения КАК НомерПоручения,
            ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.ДоговорКонтрагента КАК ДоговорКонтрагента,
            ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Сделка КАК Сделка,
            ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка.Контрагент КАК Контрагент,
            ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка.НазначениеПлатежа КАК НазначениеПлатежа,
            ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток
        ИЗ
            Документ.ПлатежноеПоручениеИсходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеИсходящееРасшифровкаПлатежа
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, КОНЕЦПЕРИОДА(&ПериодКон, ДЕНЬ), Регистратор, , , , ) КАК ХозрасчетныйОстаткиИОбороты
                ПО ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка = ХозрасчетныйОстаткиИОбороты.Регистратор
        ГДЕ
            ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка.Проведен = ИСТИНА) КАК Платеж
        ПО Остатки.Субконто1 = Платеж.Контрагент
            И Остатки.Субконто2 = Платеж.ДоговорКонтрагента
            И Остатки.Субконто3 = Платеж.Сделка
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            РеализацияТоваровУслуг.Номер КАК Номер,
            РеализацияТоваровУслуг.Дата КАК Дата,
            РеализацияТоваровУслуг.Контрагент КАК Контрагент,
            РеализацияТоваровУслуг.Сделка КАК Сделка,
            РеализацияТоваровУслуг.ДоговорКонтрагента КАК ДоговорКонтрагента,
            ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток * -1 КАК СуммаКонечныйОстаток
        ИЗ
            Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, КОНЕЦПЕРИОДА(&ПериодКон, ДЕНЬ), Регистратор, , , , ) КАК ХозрасчетныйОстаткиИОбороты
                ПО РеализацияТоваровУслуг.Ссылка = ХозрасчетныйОстаткиИОбороты.Регистратор) КАК Реализация
        ПО Остатки.Субконто1 = Реализация.Контрагент
            И Остатки.Субконто2 = Реализация.ДоговорКонтрагента
            И Остатки.Субконто3 = Реализация.Сделка
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        ПО Остатки.Субконто1 = КонтактнаяИнформация.Объект
            И (КонтактнаяИнформация.Вид = &Вид)
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1
            ХозрасчетныйОстаткиИОбороты.Период КАК Период,
            ХозрасчетныйОстаткиИОбороты.Регистратор КАК Регистратор,
            ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Контрагент,
            ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Договор,
            ХозрасчетныйОстаткиИОбороты.Субконто3 КАК Сделка
        ИЗ
            РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&периодНач, &ПериодКон, Регистратор, , Счет В ИЕРАРХИИ (&Счет), , ) КАК ХозрасчетныйОстаткиИОбороты
        
        УПОРЯДОЧИТЬ ПО
            Период УБЫВ) КАК ДатаЗакрытияДолга
        ПО Остатки.Субконто3 = ДатаЗакрытияДолга.Сделка
ГДЕ
    (Остатки.СуммаКонечныйОстатокДт > 0
            ИЛИ Остатки.СуммаНачальныйОстатокДт > 0)

Последний вложенный запрос - явно неправильный, т.к. выдает только одну строку.
1 GROOVY
 
30.10.13
21:55
Смотри как можно удачно тему назвать!

"Как в запросе для каждой сделки определить дату погашения задолженности?"

Это совсем не сложно.
2 vip67
 
31.10.13
11:19
(1) ну, если не сложно и род занятий - "обучение 1С" - подскажи, плиз!
3 Wobland
 
31.10.13
11:20
(2) Груви не обучает, а обучается 1Су ;)
4 viktor_vv
 
31.10.13
11:22
Вот эта хрень не будет работать, так как ты хочешь.

ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1
5 viktor_vv
 
31.10.13
11:23
Ты соединяешь с подзапросом, резульаттаом которго будет одна единственная строка.
6 viktor_vv
 
31.10.13
11:27
Это тебе этот подзапрос во временную таблицу надо закинуть по образу и подобию

http://kb.mista.ru/article.php?id=92

и потом уже соединять.
7 vip67
 
31.10.13
12:18
(4)- (6) я отметил про это соединение.
8 viktor_vv
 
31.10.13
12:41
(7) Не дочитал :). Решение в (6).
9 GANR
 
31.10.13
12:41
(4)(7) Это, наверное, кто-то при написании запроса спутал с CROSS APPLY / OUTER APPLY из MS SQL последних версий, что часто используется когда надо сделать запрос для каждой строчки из левой части соединения :-).
10 vip67
 
31.10.13
17:15
(9) вот-вот я пытался в конструкторе создать новое поле,а в нем запрос - ругается на "Выбрать" - не дает...
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.