Имя: Пароль:
1C
1С v8
Помогите со вложенным запросом
,
0 mremin
 
23.07.15
00:40
Всем доброго времени суток!
Каким образом прикрутить такой запрос в качестве вложенного к другому запросу?

"ВЫБРАТЬ
|СУММА(РасходнаяНакладная.СуммаДокумента) КАК Сумма
|ИЗ
|Документ.РасходнаяНакладная КАК РасходнаяНакладная
|ГДЕ
|РасходнаяНакладная.Заказ = &Заказ
|И РасходнаяНакладная.Проведен";

Спасибо.
1 floody
 
23.07.15
00:58
Вот таким вот образом - не делать вложенный запрос.
2 floody
 
23.07.15
01:00
Может правильнее взять остатки по регистру заказы? Что хотите сделать вообще?
3 mremin
 
23.07.15
11:38
Есть такой запрос (список документов ЗаказПокупателя) в типовой УНФ:

ВЫБРАТЬ
    ВЫБОР
        КОГДА ДокументЗаказПокупателя.Проведен
                И ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа <> ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Открыт)
            ТОГДА ВЫБОР
                    КОГДА ГрафикВыполнения.Заказ ЕСТЬ NULL
                            И ГрафикВыполненияПлан.Заказ ЕСТЬ NULL
                        ТОГДА ВЫБОР
                                КОГДА ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.ВРаботе)
                                        И ДокументЗаказПокупателя.Закрыт
                                    ТОГДА 2
                                ИНАЧЕ 0
                            КОНЕЦ
                    ИНАЧЕ ВЫБОР
                            КОГДА ЕСТЬNULL(ГрафикВыполнения.Выполнено, 0) = 0
                                    И ЕСТЬNULL(ГрафикВыполненияПлан.Выполнено, 0) = 0
                                ТОГДА ВЫБОР
                                        КОГДА ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.ВРаботе)
                                                И НЕ ДокументЗаказПокупателя.Закрыт
                                            ТОГДА ВЫБОР
                                                    КОГДА НЕ ГрафикВыполнения.Заказ ЕСТЬ NULL
                                                            И ГрафикВыполнения.Период < &АкутальнаяДатаСеанса
                                                        ТОГДА 6
                                                    КОГДА НЕ ГрафикВыполнения.Заказ ЕСТЬ NULL
                                                            И ГрафикВыполнения.Период = &АкутальнаяДатаСеанса
                                                        ТОГДА 4
                                                    ИНАЧЕ 2
                                                КОНЕЦ
                                        ИНАЧЕ 2
                                    КОНЕЦ
                            ИНАЧЕ ВЫБОР
                                    КОГДА ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.ВРаботе)
                                            И НЕ ДокументЗаказПокупателя.Закрыт
                                        ТОГДА ВЫБОР
                                                КОГДА НЕ ГрафикВыполнения.Заказ ЕСТЬ NULL
                                                        И ГрафикВыполнения.Период < &АкутальнаяДатаСеанса
                                                    ТОГДА 5
                                                КОГДА НЕ ГрафикВыполнения.Заказ ЕСТЬ NULL
                                                        И ГрафикВыполнения.Период = &АкутальнаяДатаСеанса
                                                    ТОГДА 3
                                                ИНАЧЕ 1
                                            КОНЕЦ
                                    ИНАЧЕ 1
                                КОНЕЦ
                        КОНЕЦ
                КОНЕЦ
        ИНАЧЕ 2
    КОНЕЦ КАК НомерКартинкиОтгрузки,
    ВЫБОР
        КОГДА ДокументЗаказПокупателя.Проведен
            ТОГДА ВЫБОР
                    КОГДА (ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Открыт)
                            ИЛИ ЕСТЬNULL(ФактОплаты.Сумма, 0) <> 0)
                            И ЕСТЬNULL(ФактОплаты.СуммаОплаты, 0) + ЕСТЬNULL(ФактОплаты.СуммаАванса, 0) = 0
                        ТОГДА ВЫБОР
                                КОГДА ДокументЗаказПокупателя.ЗапланироватьОплату
                                        И ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.ВРаботе)
                                        И НЕ ДокументЗаказПокупателя.Закрыт
                                        И НЕ ГрафикОплаты.СчетНаОплату ЕСТЬ NULL
                                    ТОГДА ВЫБОР
                                            КОГДА ГрафикОплаты.Период < &АкутальнаяДатаСеанса
                                                ТОГДА 6
                                            КОГДА ГрафикОплаты.Период = &АкутальнаяДатаСеанса
                                                ТОГДА 4
                                            ИНАЧЕ 2
                                        КОНЕЦ
                                ИНАЧЕ 2
                            КОНЕЦ
                    КОГДА ЕСТЬNULL(ФактОплаты.Сумма, 0) <= ЕСТЬNULL(ФактОплаты.СуммаОплаты, 0) + ЕСТЬNULL(ФактОплаты.СуммаАванса, 0)
                        ТОГДА ВЫБОР
                                КОГДА ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.ВРаботе)
                                        И ДокументЗаказПокупателя.Закрыт
                                    ТОГДА 2
                                ИНАЧЕ 0
                            КОНЕЦ
                    ИНАЧЕ ВЫБОР
                            КОГДА ДокументЗаказПокупателя.ЗапланироватьОплату
                                    И ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.ВРаботе)
                                    И НЕ ДокументЗаказПокупателя.Закрыт
                                    И НЕ ГрафикОплаты.СчетНаОплату ЕСТЬ NULL
                                ТОГДА ВЫБОР
                                        КОГДА ГрафикОплаты.Период < &АкутальнаяДатаСеанса
                                            ТОГДА 5
                                        КОГДА ГрафикОплаты.Период = &АкутальнаяДатаСеанса
                                            ТОГДА 3
                                        ИНАЧЕ 1
                                    КОНЕЦ
                            ИНАЧЕ 1
                        КОНЕЦ
                КОНЕЦ
        ИНАЧЕ 2
    КОНЕЦ КАК НомерКартинкиОплаты,
    ВЫБОР
        КОГДА ДокументЗаказПокупателя.Проведен
                И НЕ ДокументЗаказПокупателя.Закрыт
                И ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.ВРаботе)
                И (НЕ ГрафикВыполнения.Заказ ЕСТЬ NULL
                    И ГрафикВыполнения.Период < &АкутальнаяДатаСеанса)
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК ПросроченоВыполнение,
    ВЫБОР
        КОГДА ДокументЗаказПокупателя.Проведен
                И НЕ ДокументЗаказПокупателя.Закрыт
                И ДокументЗаказПокупателя.ЗапланироватьОплату
                И ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.ВРаботе)
                И НЕ ГрафикОплаты.СчетНаОплату ЕСТЬ NULL
                И ГрафикОплаты.Период < &АкутальнаяДатаСеанса
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК ПросроченаОплата,
    ВЫБОР
        КОГДА ДокументЗаказПокупателя.Проведен
                И НЕ ДокументЗаказПокупателя.Закрыт
                И ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.ВРаботе)
                И (НЕ ГрафикВыполнения.Заказ ЕСТЬ NULL
                    И ГрафикВыполнения.Период = &АкутальнаяДатаСеанса)
            ТОГДА ИСТИНА
        КОГДА ДокументЗаказПокупателя.Проведен
                И НЕ ДокументЗаказПокупателя.Закрыт
                И ДокументЗаказПокупателя.ЗапланироватьОплату
                И ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.ВРаботе)
                И НЕ ГрафикОплаты.СчетНаОплату ЕСТЬ NULL
                И ГрафикОплаты.Период = &АкутальнаяДатаСеанса
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК НаСегодня,
    ВЫБОР
        КОГДА ДокументЗаказПокупателя.Проведен
                И НЕ ДокументЗаказПокупателя.Закрыт
                И ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.ВРаботе)
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК ЗаказВРаботе,
    ВЫБОР
        КОГДА ГрафикВыполнения.Заказ ЕСТЬ NULL
                И ГрафикВыполненияПлан.Заказ ЕСТЬ NULL
            ТОГДА 0
        ИНАЧЕ 1
    КОНЕЦ КАК КОтгрузке,
    ЕСТЬNULL(ФактОплаты.Сумма, 0) - ЕСТЬNULL(ФактОплаты.СуммаОплаты, 0) - ЕСТЬNULL(ФактОплаты.СуммаАванса, 0) КАК КОплате,
    ДокументЗаказПокупателя.Ссылка,
    ДокументЗаказПокупателя.ПометкаУдаления,
    ДокументЗаказПокупателя.Номер,
    ДокументЗаказПокупателя.Дата,
    ДокументЗаказПокупателя.Проведен,
    ДокументЗаказПокупателя.Автор,
    ДокументЗаказПокупателя.БанковскийСчет,
    ДокументЗаказПокупателя.ВалютаДокумента,
    ДокументЗаказПокупателя.ВидОперации,
    ДокументЗаказПокупателя.ВидРабот,
    ДокументЗаказПокупателя.ВидСкидкиНаценки,
    ДокументЗаказПокупателя.ВидЦен,
    ДокументЗаказПокупателя.ДатаОтгрузки,
    ДокументЗаказПокупателя.Договор,
    ДокументЗаказПокупателя.Закрыт,
    ДокументЗаказПокупателя.ЗапланироватьОплату,
    ДокументЗаказПокупателя.Касса,
    ДокументЗаказПокупателя.Комментарий,
    ДокументЗаказПокупателя.Контрагент,
    ДокументЗаказПокупателя.Контрагент.КонтактноеЛицо КАК КонтактноеЛицо,
    ДокументЗаказПокупателя.Кратность,
    ДокументЗаказПокупателя.Курс,
    ДокументЗаказПокупателя.НДСВключатьВСтоимость,
    ДокументЗаказПокупателя.Организация,
    ДокументЗаказПокупателя.Ответственный,
    ДокументЗаказПокупателя.Проект,
    ДокументЗаказПокупателя.Событие,
    ДокументЗаказПокупателя.СостояниеЗаказа,
    ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа КАК СтатусСостоянияЗаказа,
    ВЫБОР
        КОГДА (ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Открыт)
                ИЛИ ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.ВРаботе))
                И НЕ ДокументЗаказПокупателя.Закрыт
            ТОГДА "В работе"
        ИНАЧЕ ВЫБОР
                КОГДА ДокументЗаказПокупателя.СостояниеЗаказа.СтатусЗаказа = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Выполнен)
                    ТОГДА "Выполнен"
                ИНАЧЕ "Отменен"
            КОНЕЦ
    КОНЕЦ КАК СтатусЗаказа,
    ДокументЗаказПокупателя.СтруктурнаяЕдиницаПродажи,
    ДокументЗаказПокупателя.СтруктурнаяЕдиницаРезерв,
    ДокументЗаказПокупателя.СуммаВключаетНДС,
    ДокументЗаказПокупателя.СуммаДокумента,
    ДокументЗаказПокупателя.ТипДенежныхСредств,
    ДокументЗаказПокупателя.Ячейка,
    ДокументЗаказПокупателя.МоментВремени
        
    ВЫБОР
        КОГДА ДокументЗаказПокупателя.Проведен
                И ДокументЗаказПокупателя.СуммаДокумента > 0
            ТОГДА ВЫРАЗИТЬ((ЕСТЬNULL(ФактОплаты.СуммаОплаты, 0) + ЕСТЬNULL(ФактОплаты.СуммаАванса, 0)) * 100 / ДокументЗаказПокупателя.СуммаДокумента КАК ЧИСЛО(15, 2))
        ИНАЧЕ 0
    КОНЕЦ КАК ПроцентОплаты,
    ЕСТЬNULL(ФактОплаты.СуммаОплаты, 0) + ЕСТЬNULL(ФактОплаты.СуммаАванса, 0) КАК СуммаОплатыОборот
ИЗ
    Документ.ЗаказПокупателя КАК ДокументЗаказПокупателя
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикВыполненияЗаказов КАК ГрафикВыполнения
        ПО ДокументЗаказПокупателя.Ссылка = ГрафикВыполнения.Заказ
            И (ГрафикВыполнения.Период <= &АкутальнаяДатаСеанса)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикВыполненияЗаказов КАК ГрафикВыполненияПлан
        ПО ДокументЗаказПокупателя.Ссылка = ГрафикВыполненияПлан.Заказ
            И (ГрафикВыполненияПлан.Период > &АкутальнаяДатаСеанса)
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикОплатыЗаказов КАК ГрафикОплаты
        ПО ДокументЗаказПокупателя.Ссылка = ГрафикОплаты.СчетНаОплату
            И (ГрафикОплаты.Период <= &АкутальнаяДатаСеанса)}
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФактОплатыЗаказов КАК ФактОплаты
        ПО ДокументЗаказПокупателя.Ссылка = ФактОплаты.СчетНаОплату

Нужно добавить в форму списка колонку, в которой будет выводиться общая сумма отгруженных товаров по каждому заказу.
4 mremin
 
23.07.15
11:46
(2) Попробую сделать левое соединение с регистром ЗаказыПокупателей.
5 mremin
 
23.07.15
12:00
(2) В регистре ЗаказыПокупателей ведется только количественный учет, суммовой - нет.

Есть идеи как выйти из положения?
6 eklmn
 
гуру
23.07.15
12:14
не править типовой запрос, а обработать выходящие данные запрса, долипить свои суммы
7 mremin
 
23.07.15
12:21
(6) Можно немного подробнее суть идеи?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший