Имя: Пароль:
1C
1С v8
Подскажите по запросу.
0 Повелитель
 
17.03.14
08:53
Пишу отчет по номенклатуре. Типовая УТ.
Надо чтобы была возможность выбирать 2 типа любых цен + остаток.

Проблема в том, что если не задать Тип цен, то остатки начинают умножаться на количество заведенных цен в справочнике.
по идее если я хочу видеть только номенклатуру + остаток, без цен, то регистр цен заключенный в {} должен уходить из построителя, а он остается, вопрос почему?

Вот запрос:

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

Имею на выход:
УниверсальныйОтчет.ПостроительОтчета.ПолучитьЗапрос().Текст

ВЫБРАТЬ
    Н.Ссылка КАК Номенклатура
ИЗ
    Справочник.Номенклатура КАК Н
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКонца, Номенклатура В ИЕРАРХИИ(&Параметр1)) КАК Остатки
        ПО Н.Ссылка = Остатки.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКонца, (Номенклатура В ИЕРАРХИИ(&Параметр2)) И ТипЦен = &Параметр7) КАК Цены1
        ПО Н.Ссылка = Цены1.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКонца, (Номенклатура В ИЕРАРХИИ(&Параметр3)) И ТипЦен = &Параметр9) КАК Цены2
        ПО Н.Ссылка = Цены2.Номенклатура
ГДЕ
    Н.Ссылка В ИЕРАРХИИ (&Параметр6)
    И Цены1.ТипЦен = &Параметр8
    И Цены2.ТипЦен = &Параметр10
ИТОГИ ПО
    ОБЩИЕ,
    Номенклатура ИЕРАРХИЯ КАК Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
1 Повелитель
 
17.03.14
08:56
(0) В первом запросе, неправильно выложил, нечайно удалил связку

{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКонца, {(ТипЦен) КАК ТипЦен2, (Номенклатура) КАК Номенклатура}) КАК Цены2
        ПО Н.Ссылка = Цены2.Номенклатура}
2 Повелитель
 
17.03.14
09:25
(0)
Реально ли получить на выходе построителя, вот такой запрос?

ВЫБРАТЬ
    Н.Ссылка КАК Номенклатура
ИЗ
    Справочник.Номенклатура КАК Н
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКонца, Номенклатура В ИЕРАРХИИ(&Параметр1)) КАК Остатки
        ПО Н.Ссылка = Остатки.Номенклатура
ГДЕ
    Н.Ссылка В ИЕРАРХИИ (&Параметр6)
    И Цены1.ТипЦен = &Параметр8
    И Цены2.ТипЦен = &Параметр10
ИТОГИ ПО
    ОБЩИЕ,
    Номенклатура ИЕРАРХИЯ КАК Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
3 Maxus43
 
17.03.14
09:53
ну дак в ГДЕ у тебя что? Цены2, парвильно... значит обязательный.
Всё в скобки завёртывай
4 Maxus43
 
17.03.14
09:54
это как ты на фейскотроле запретиш одному из сиамских близнецов зайти, а второго пропустишь. Они не разделяются, если что
5 Maxus43
 
17.03.14
09:55
(3) + точнее из Где это тупо убирай, параметры вирт таблицы же есть
6 Повелитель
 
17.03.14
10:02
(5) Спасибо, но не помогло.
Вроде все завернуто.
Вот запрос сейчас:

ВЫБРАТЬ
    Н.Ссылка КАК Номенклатура,
    Остатки.Склад,
    Остатки.КоличествоОстаток КАК Остаток,
    Цены1.Цена КАК Цена1,
    Цены1.ТипЦен КАК ТипЦен1,
    Цены2.Цена КАК Цена2,
    Цены2.ТипЦен КАК ТипЦен2
{ВЫБРАТЬ
    Номенклатура.*,
    Склад.*,
    Остаток,
    Цена1,
    Цена2,
    ТипЦен1.*,
    ТипЦен2.*}
ИЗ
    Справочник.Номенклатура КАК Н
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКонца, {(Склад) КАК Склад, (Номенклатура) КАК Номенклатура}) КАК Остатки
        ПО Н.Ссылка = Остатки.Номенклатура}
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКонца, {(ТипЦен) КАК ТипЦен1, (Номенклатура) КАК Номенклатура}) КАК Цены1
        ПО Н.Ссылка = Цены1.Номенклатура}
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКонца, {(ТипЦен) КАК ТипЦен2, (Номенклатура) КАК Номенклатура}) КАК Цены2
        ПО Н.Ссылка = Цены2.Номенклатура}
{ГДЕ
    Н.Ссылка.* КАК Номенклатура,
    Н.НоменклатурнаяГруппа.*,
    Остатки.Склад.*,
    Остатки.КоличествоОстаток КАК Остаток}
{УПОРЯДОЧИТЬ ПО
    Номенклатура.*,
    Склад.*,
    Остаток,
    Цена1,
    Цена2,
    ТипЦен1.*,
    ТипЦен2.*}
ИТОГИ
    СУММА(Остаток)
ПО
    ОБЩИЕ
{ИТОГИ ПО
    Номенклатура.*,
    Склад.*}
7 Maxus43
 
17.03.14
10:16
что значит всё? сейчас в Выбор у тебя что-то не то... выбираешь ЦенЫ, а в скобках ЦенА.
8 Maxus43
 
17.03.14
10:17
из выбрать впринципе убери Цены1/2, оставь только в кв. скобках, на закладке построителя короче указывай необязательные, у убедись что галка "Обязательная" на таблицах не стоит
9 Maxus43
 
17.03.14
10:18
для тестирования юзай ПолучитьЗапрос
10 Повелитель
 
17.03.14
10:33
(9) Спасибо сейчас буду пробовать
11 Повелитель
 
17.03.14
12:07
Так и не получилось.
Вот запрос:

ТекстЗапроса =
    "ВЫБРАТЬ
    |    Н.Ссылка КАК Номенклатура,
    |    Остатки.Склад,
    |    Остатки.КоличествоОстаток КАК Остаток
    |{ВЫБРАТЬ
    |    Номенклатура.*,
    |    Склад.*,
    |    Остаток,
    |    Цены1.Цена КАК Цена1,
    |    Цены2.Цена КАК Цена2}
    |ИЗ
    |    Справочник.Номенклатура КАК Н
    |        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКонца, {(Склад) КАК Склад, (Номенклатура) КАК Номенклатура}) КАК Остатки
    |        ПО Н.Ссылка = Остатки.Номенклатура}
    |        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКонца, {(ТипЦен) КАК ТипЦен1, (Номенклатура) КАК Номенклатура}) КАК Цены1
    |        ПО Н.Ссылка = Цены1.Номенклатура}
    |        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКонца, {(ТипЦен) КАК ТипЦен2, (Номенклатура) КАК Номенклатура}) КАК Цены2
    |        ПО Н.Ссылка = Цены2.Номенклатура}
    |{ГДЕ
    |    Н.Ссылка.* КАК Номенклатура,
    |    Остатки.Склад.*,
    |    Остатки.КоличествоОстаток}
    |ИТОГИ
    |    СУММА(Остаток)
    |ПО
    |    ОБЩИЕ
    |{ИТОГИ ПО
    |    Номенклатура.*,
    |    Склад.*,
    |    Остаток}";


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


А должно быть:
ВЫБРАТЬ
    Н.Ссылка КАК Номенклатура
ИЗ
    Справочник.Номенклатура КАК Н
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКонца, Номенклатура = &Параметр1) КАК Остатки
        ПО Н.Ссылка = Остатки.Номенклатура
ГДЕ
    Н.Ссылка = &Параметр4
ИТОГИ ПО
    ОБЩИЕ,
    Номенклатура КАК Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
12 Повелитель
 
17.03.14
12:54
Вопрос актуальный, как убрать лишние соединения из построителя?
13 Crush
 
17.03.14
13:20
Прокрути это в консоли запросов. И добавь цены в основную выборку.
14 Повелитель
 
17.03.14
13:35
Все наконец то нашел причину.

Все нормально работает если убрать параметр Номенклатура в левом соединении.
Вот так:
|        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКонца, {(ТипЦен) КАК ТипЦен1})
Вместо так:
|        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКонца, {(ТипЦен) КАК ТипЦен1, (Номенклатура) КАК Номенклатура})

Отчет конечно строиться теперь медленно, но лишние соединения удаляет.
Сейчас еще попробую как то вернуть параметр Номенклатуру.