Имя: Пароль:
1C
1С v8
Текст запроса для построителя, фигурные скобки не понятно как подправить
0 e053nk
 
21.03.18
11:39
УТ 10.3, внешний отчет на базе стандартного отчета "Продажи".
В нем  указан свой текст построителя запроса:
/code
ТекстЗапроса = "ВЫБРАТЬ
                        |    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток,0)  КАК Остаток,
                        |    ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток,0) КАК ОстатокРезерв,
                        |    ПродажиОбороты.ДокументПродажи,
                        |    ПродажиОбороты.Контрагент,
                        |    ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
                        |    ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот,
                        |    ПродажиОбороты.СтоимостьБезСкидокОборот КАК СтоимостьБезСкидокОборот,
                        |    ПродажиОбороты.НДСОборот КАК НДСОборот,
                        |    ПродажиОбороты.КоличествоОборот * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ПродажиОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент КАК КоличествоЕдиницОтчетов,
                        |    ПродажиОбороты.КоличествоОборот * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоличествоБазовыхЕдиниц,
                        |    ВЫБОР
                        |        КОГДА ПродажиОбороты.СтоимостьБезСкидокОборот = 0
                        |            ТОГДА 0
                        |        ИНАЧЕ (ПродажиОбороты.СтоимостьБезСкидокОборот - ПродажиОбороты.СтоимостьОборот) / ПродажиОбороты.СтоимостьБезСкидокОборот * 100
                        |    КОНЕЦ КАК ПроцентСкидки,
                        |    ПродажиОбороты.СтоимостьБезСкидокОборот - ПродажиОбороты.СтоимостьОборот КАК СуммаСкидки,
                        |    ПродажиОбороты.Номенклатура,
                        |    ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот КАК Цена,
                        |    ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот КАК ЦенаБезСкидок
                        |{ВЫБРАТЬ
                        |    Остаток,
                        |    ОстатокРезерв,
                        |    ДокументПродажи.*,
                        |    Контрагент.*,
                        |    КоличествоОборот,
                        |    СтоимостьОборот,
                        |    СтоимостьБезСкидокОборот,
                        |    НДСОборот,
                        |    КоличествоЕдиницОтчетов,
                        |    КоличествоБазовыхЕдиниц,
                        |    ПроцентСкидки,
                        |    СуммаСкидки,
                        |    Номенклатура.*,
                        |    Цена,
                        |    ЦенаБезСкидок}
                        |ИЗ
                        |    РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, ,) КАК ПродажиОбороты
                        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон,) КАК ТоварыНаСкладахОстатки
                        |        ПО ПродажиОбороты.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
                        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ДатаКон, ) КАК ТоварыВРезервеНаСкладахОстатки
                        |        ПО ПродажиОбороты.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
                        |ГДЕ
                        |    ПродажиОбороты.КоличествоОборот <> 0
                        |{ГДЕ
                        |    ТоварыНаСкладахОстатки.Номенклатура.*,
                        |    ТоварыНаСкладахОстатки.КоличествоОстаток,
                        |    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток,
                        |    ПродажиОбороты.ДокументПродажи.*,
                        |    ПродажиОбороты.Контрагент.*,
                        |    ПродажиОбороты.КоличествоОборот,
                        |    ПродажиОбороты.СтоимостьОборот,
                        |    ПродажиОбороты.СтоимостьБезСкидокОборот,
                        |    ПродажиОбороты.НДСОборот,
                        |    (ПродажиОбороты.КоличествоОборот * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ПродажиОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент) КАК КоличествоЕдиницОтчетов,
                        |    (ПродажиОбороты.КоличествоОборот * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент) КАК КоличествоБазовыхЕд,
                        |    (ВЫБОР
                        |            КОГДА ПродажиОбороты.СтоимостьБезСкидокОборот = 0
                        |                ТОГДА 0
                        |            ИНАЧЕ (ПродажиОбороты.СтоимостьБезСкидокОборот - ПродажиОбороты.СтоимостьОборот) / ПродажиОбороты.СтоимостьБезСкидокОборот * 100
                        |        КОНЕЦ) КАК ПроцентСкидки,
                        |    (ПродажиОбороты.СтоимостьБезСкидокОборот - ПродажиОбороты.СтоимостьОборот) КАК СуммаСкидки,
                        |    ПродажиОбороты.Номенклатура.*,
                        |    ПродажиОбороты.ЗаказПокупателя.*,
                        |    ПродажиОбороты.Подразделение.*,
                        |    ПродажиОбороты.Организация.*,
                        |    (ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот) КАК Цена,
                        |    (ПродажиОбороты.СтоимостьБезСкидокОборот / ПродажиОбороты.КоличествоОборот) КАК ЦенаБезСкидок}
                        |{УПОРЯДОЧИТЬ ПО
                        |    Контрагент.*,
                        |    Номенклатура.*,
                        |    ДокументПродажи.*,
                        |    ПродажиОбороты.Организация.*}
                        |ИТОГИ
                        |    СУММА(Остаток),
                        |    СУММА(ОстатокРезерв),
                        |    СУММА(КоличествоОборот),
                        |    СУММА(СтоимостьОборот),
                        |    СУММА(СтоимостьБезСкидокОборот),
                        |    СУММА(НДСОборот),
                        |    СУММА(КоличествоЕдиницОтчетов),
                        |    СУММА(КоличествоБазовыхЕдиниц),
                        |    МАКСИМУМ(ПроцентСкидки),
                        |    СУММА(СуммаСкидки),
                        |    СУММА(Цена),
                        |    СУММА(ЦенаБезСкидок)
                        |ПО
                        |    ОБЩИЕ
                        |{ИТОГИ ПО
                        |    ДокументПродажи.*,
                        |    Контрагент.*,
                        |    Номенклатура.*}
                        |АВТОУПОРЯДОЧИВАНИЕ";
/code

В результате выводится информация по продажам, только тех позиции,которые есть на остатках на конечную дату отчета..
Нужно исправить так что бы выводились все продажи,включая и позиции с нулевыми остатками.
Пробовал ,согласно http://catalog.mista.ru/public/185880/ заменить блок  условий  витруальных таблиц на

/code
|ИЗ
                        |    РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, ,{Номенклатура.* КАК НоменклатураОтбор} ) КАК ПродажиОбороты
                        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКон,{Номенклатура.* КАК НоменклатураОтбор} ) КАК ТоварыНаСкладахОстатки
                        |        ПО ПродажиОбороты.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
                        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ДатаКон,{Номенклатура.* КАК НоменклатураОтбор} ) КАК ТоварыВРезервеНаСкладахОстатки
                        |        ПО ПродажиОбороты.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
/code
ничего не изменилось.

Как нужно подправить код, что бы получить все продажи (и нулевые остатки тоже)?

И еще этот отчет выполняется ооооооооооочень долго, несколько минут крутит(за любой период). Создается впечатление что он все продажи сначала себе запихивает, а затем отфильтровывает все необходимое. Но , как я понимаю, условие указано верно (Номенклатура в группе из списка). Стандартный отчет продажи с этой же аналитикой и периодом- сек 10 выполняется
1 savaB
 
21.03.18
11:54
ПОЛНОЕ СОЕДИНЕНИЕ
2 FIXXXL
 
21.03.18
11:57
|{ГДЕ
                        |    ТоварыНаСкладахОстатки.Номенклатура.*,

исправь на
                        |{ГДЕ
                        |    ПродажиОбороты.Номенклатура.*,
3 e053nk
 
21.03.18
12:09
(2) В тексте эта строка есть, ниже только по конструкции "ГДЕ. Закомментил строку- жду выполнение отчет в, что то вообще тормозит отчет
4 Михаил Козлов
 
21.03.18
12:11
Или вообще убрать регистры ТоварыНаСкладах и ТоварыВРезерве.
Например, взять типовой отчет по продажам.
5 e053nk
 
21.03.18
12:26
(2) После закомментирования  строки
        |    ТоварыНаСкладахОстатки.Номенклатура.*,
в секции"ГДЕ" -отчте сформировался ноормально, вышли и нулевые остатки.
Спасибо большое!
Теперь , если можно, с точки теории работы построителя запроса ,объясните мне -почему так работает этот механизм?
Т.е. что там внутри происходит, что при указании         |    ТоварыНаСкладахОстатки.Номенклатура.*, отчет под другому работает.Как я понимаю в фигурных скобках указываются ВОЗМОЖНЫЕ поля для использования в построителе (в той или иной его секции) , но НЕОБЯЗАТЕЛЬНЫЕ. Тогда почему срабатывает отбор по наличию товаров на конец даты?

И еще ,почему этот запрос так долго отрабатывает-может в тексте запроса  лишнее что указано?
6 e053nk
 
21.03.18
12:33
О, победил торомознутость отчета. Он реально все продажи сначала выбирал и все остатки, а потом отфильтровывал по указанной группе. Сейчас 3 сек -отчет выведен
7 FIXXXL
 
21.03.18
12:44
(5) ты же указал Номенклатуру брать из "правой" таблицы
ну и Построитель расстарался :)
8 Михаил Козлов
 
21.03.18
13:07
(0) Не хотите использовать штатный отчет по продажам 10.3?
В нем вообще никакого запроса нет.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.