Имя: Пароль:
1C
 
Помогите улучшить запрос
,
0 GreatOne
 
01.12.14
16:19
Необходимо выбрать из ТЧ заказа номенклатуру + ее количество. Если номенклатура является комплектом, то разбить ее на комплектующие, а саму номенклатуру убрать.

Получились какие-то костыли. Думаю все как-то просто должно быть, на раз-два. Писал не очень вдумываясь, отсюда полагаю, что это явный перебор и все можно сделать аккуратнее и проще. Ну или может есть что-то типовое? Конфа КА 1.1

ВЫБРАТЬ
    ЗаказПокупателяТовары.Номенклатура,
    ЗаказПокупателяТовары.Количество
ПОМЕСТИТЬ Товары
ИЗ
    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
ГДЕ
    ЗаказПокупателяТовары.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Товары.Номенклатура,
    Товары.Количество
ПОМЕСТИТЬ НетКомплекта
ИЗ
    Товары КАК Товары
ГДЕ
    Товары.Номенклатура НЕ В
                (ВЫБРАТЬ
                    КомплектующиеНоменклатуры.Номенклатура
                ИЗ
                    РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры)
;

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

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

ВЫБРАТЬ
    НетКомплекта.Номенклатура,
    НетКомплекта.Количество
ИЗ
    НетКомплекта КАК НетКомплекта
1 mikecool
 
01.12.14
16:21
"Писал не очень вдумываясь, отсюда полагаю, что это явный перебор и все можно сделать аккуратнее и проще."
дальше читать не стал
напиши вдумываясь и вопросов не будет
4 Fragster
 
гуру
01.12.14
16:22
левое соединение и ЕстьNULL(КомплектующиеНоменклатуры.Количество,1) * Товары.Количество
5 Fragster
 
гуру
01.12.14
16:22
причем прямо к первой таблице
6 GreatOne
 
01.12.14
16:22
(1) у меня это пока плохо получается. Не очень вдумываясь = в голову пришло только 1 решение. Ну, до этого конечно было еще решить все в переборе объектным методом, но это уже совсем.
7 pessok
 
01.12.14
16:23
соедини регистр сведений и таблицу заказа по номенклатуре внутренним соединением
8 pessok
 
01.12.14
16:24
а, если не комплект, тогда тоже на выводить
9 Wirtuozzz
 
01.12.14
16:24
В добавь:
// Рюшечки, барашечки и смайлик :-)
//Это самый клаассный запрос что я видел!!!
10 an-korot
 
01.12.14
16:27
я понимаю еще помочь ошибку найти,  у чела опыта не хватает или глаз замылин )) но напишите мне отчет %) да ну нафиг, к тому же такая задача, ну не можешь 1 запросом это сделать, ну не выноси себе и другим мозг, сделай простой отчет остальное через таблицу перебери добавь что нужно - нет будем сидеть ждать когда нам код напишут. мдяяяя
11 johnny17
 
01.12.14
16:37
ВЫБРАТЬ
    ЕСТЬNULL(КомплектующиеНоменклатуры.Комплектующая, ЗаказПокупателяТовары.Номенклатура) КАК Номенклатура,
    ЗаказПокупателяТовары.Количество * ЕСТЬNULL(КомплектующиеНоменклатуры.Количество, 1) КАК Количество
ПОМЕСТИТЬ Товары
ИЗ
    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры
ПО ЗаказПокупателяТовары.Номенклатура = КомплектующиеНоменклатуры.Номенклатура
ГДЕ
    ЗаказПокупателяТовары.Ссылка = &Ссылка


Писал в форуме, так что синтаксис сам проверяй...
12 GreatOne
 
01.12.14
16:40
ура, вышло.

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


(11) ну вот как раз)
13 Fragster
 
гуру
01.12.14
16:41
(11) без поместить :)
14 mzelensky
 
01.12.14
16:42
(0) Загляни в типовую торговлю 10.3 Там все это сделано