Имя: Пароль:
1C
1С v8
Пакетный запрос,объединение
,
0 jonik_joker
 
12.11.13
13:18
Всем привет. Помогите разобраться: есть запрос

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

в результате получаю вот такую таблицу

http://uploads.ru/eikJX.png

а хотелось бы вот так

http://uploads.ru/jJSLr.png
1 jonik_joker
 
12.11.13
13:19
пробовал ч\з объединить. Код:

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

ОБЪЕДИНИТЬ ВСЕ

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

результат

http://uploads.ru/UKZ3T.png
2 jonik_joker
 
12.11.13
13:21
ч\з пакетный

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

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

результат

http://uploads.ru/cIaqi.png
3 Wobland
 
12.11.13
13:21
пока ты сам не опишешь словами свои картинки, ничего у тебя не выйдет
4 jonik_joker
 
12.11.13
13:36
(3),в документе ЗаявкаНаПоставку есть ТабЧ,которая содержит инфу по счетам(Инвойсам). Соответственно регистрируется это все в регистре накоплений ОборотыДенежныхСредств. Инвойс может быть оплачен(Приход,соот-но нужна СуммаПриход) и неоплачен(Расход,соот-но нужна СуммаРасход). В заявке может быть как оплаченные так и неоплаченные Инвойсы.
5 jonik_joker
 
12.11.13
13:37
нужно вывести в отчет инфу по каждому инвойсу входящему в заявку.
6 WildSery
 
12.11.13
14:32
На любой вопрос могу дать любой ответ.

ГДЕ
    НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1
            ИЗ РегистрНакопления.ОборотыДенежныхСредств.ОстаткиИОбороты(, , Регистратор, , ) КАК ОборотыДенежныхСредствОстаткиИОбороты2
            ГДЕ ОборотыДенежныхСредствОстаткиИОбороты2.Заявка = ОборотыДенежныхСредствОстаткиИОбороты.Заявка
                И ОборотыДенежныхСредствОстаткиИОбороты2.СуммаПриход = ОборотыДенежныхСредствОстаткиИОбороты.СуммаРасход
                И НЕ ОборотыДенежныхСредствОстаткиИОбороты2.Инвойс = ЗНАЧЕНИЕ(.ПустаяСсылка))
7 jonik_joker
 
12.11.13
15:26
(6),эммм,можно пояснить что такое

ГДЕ
    НЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 1

?
8 mikecool
 
12.11.13
15:29
(7) кусок условия запроса
9 Wobland
 
12.11.13
15:31
+(8) причёи, синтаксически неверный кусок условия запроса
10 Wobland
 
12.11.13
15:31
(9) сторно
11 WildSery
 
12.11.13
15:46
(7) Когда я впервые увидел такую возможность использования подобия корелированного подзапроса в 1С, кофем поперхнулся.
Процитированное значит "вложенный запрос не должен вернуть ни одной записи"
12 jonik_joker
 
12.11.13
16:19
окей, (6) забываем. Какие тогда варианты решения? пакетные запросы,объединение?
13 WildSery
 
13.11.13
10:41
(12) а чего (6) не нравится? забавно получилось, по-моему.

Ну, если ты такой скучный, делай так.
(
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    0 КАК СуммаПриход,
    -ОборотыДенежныхСредствОстаткиИОбороты.СуммаПриход КАК СуммаРасход,
    ЗНАЧЕНИЕ(.ПустаяСсылка) КАК Инвойс
ИЗ РегистрНакопления.ОборотыДенежныхСредств.ОстаткиИОбороты(, , Регистратор, , ) КАК ОборотыДенежныхСредствОстаткиИОбороты
ГДЕ
    ...
    И НЕ ОборотыДенежныхСредствОстаткиИОбороты.Инвойс = ЗНАЧЕНИЕ(.ПустаяСсылка)

а дальше группировка с суммированием.