Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Помогите с запросом

Помогите с запросом
Я
   AnisaL
 
16.04.19 - 12:27
Добрый день! Есть запрос, в нем выбирается цена товара с типом цен "Учетная". Если есть несколько записей с таким типом цен (например, от 01.01.16 цена 10, а потом 01.01.19 стала 5), то запрос выдает 0 цену. А если только один раз цену устанавливали, то он ее выдает. Как поправить запрос, чтобы выводил последнюю цену?
 
 
   AnisaL
 
1 - 16.04.19 - 12:27
(0) ВЫБРАТЬ
        ВложенныйЗапрос.Номенклатура КАК Номенклатура,
        ВложенныйЗапрос.Ответственный КАК Ответственный,
        ВложенныйЗапрос.Организация КАК Организация,
        ВложенныйЗапрос.ДатаДок КАК ДатаДок,
        ВложенныйЗапрос.СуммаОборот КАК СуммаОборот,
        ВложенныйЗапрос.СебестоимостьОборот КАК СебестоимостьОборот,
        ВложенныйЗапрос.Количество КАК Количество,
        ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) КАК Цена,
        ВложенныйЗапрос.Количество * ЦеныНоменклатуры.Цена КАК Сумма
    ИЗ
        (ВЫБРАТЬ
            ПродажиОбороты.Номенклатура КАК Номенклатура,
            ПродажиОбороты.Характеристика КАК Характеристика,
            ПродажиОбороты.Ответственный КАК Ответственный,
            МАКСИМУМ(ПродажиОбороты.Регистратор.Дата) КАК ДатаДок,
            МАКСИМУМ(ПродажиОбороты.Организация) КАК Организация,
            СУММА(ПродажиОбороты.СуммаОборот) КАК СуммаОборот,
            СУММА(ПродажиОбороты.СебестоимостьОборот) КАК СебестоимостьОборот,
            СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество,
            МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Период) КАК Период
        ИЗ
            РегистрНакопления.Продажи.Обороты(
                    &НачПериода,
                    &КонПериода,
                    Регистратор,
                    Ответственный <> ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка)
                        И Ответственный <> &Ответственный
                        И ВЫБОР
                            КОГДА &Сотрудник <> ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка)
                                ТОГДА Ответственный В ИЕРАРХИИ (&Сотрудник)
                            ИНАЧЕ ИСТИНА
                        КОНЕЦ) КАК ПродажиОбороты
                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
                ПО ПродажиОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
                    И ПродажиОбороты.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
                    И (ЦеныНоменклатурыСрезПоследних.ВидЦен = &ТипЦен)
                    И ПродажиОбороты.Период >= ЦеныНоменклатурыСрезПоследних.Период
        
        СГРУППИРОВАТЬ ПО
            ПродажиОбороты.Номенклатура,
            ПродажиОбороты.Характеристика,
            ПродажиОбороты.Ответственный) КАК ВложенныйЗапрос
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
            ПО ВложенныйЗапрос.Период = ЦеныНоменклатуры.Период
                И ВложенныйЗапрос.Номенклатура = ЦеныНоменклатуры.Номенклатура
                И ВложенныйЗапрос.Характеристика = ЦеныНоменклатуры.Характеристика
                И (ЦеныНоменклатуры.ВидЦен = &ТипЦен)
   mikecool
 
2 - 16.04.19 - 12:28
а ценыноменклатуры отсутствуют?
   1Сергей
 
3 - 16.04.19 - 12:29
(1) запихнуть отбор по типу цены в параметры виртуальной таблицы
   AnisaL
 
4 - 16.04.19 - 12:30
(2) есть ценыноменклатуры, причем два раза менялась цена, а выдает 0
   1Сергей
 
5 - 16.04.19 - 12:36
(4) вот этот момент тоже не понятен. Всё можно достать простым запросом с одним левым соединением. У цен номенклатуры какие измерения?
   AnisaL
 
6 - 16.04.19 - 12:38
(5) вид цен, характеристика, цена
   xXeNoNx
 
7 - 16.04.19 - 12:42
Следующий вопрос от ТС будет: Как оптимизировать запрос?
Через 2 недели буду в Магнитке, могу проконсультировать
   Ник080808
 
8 - 16.04.19 - 12:43
(0) последнюю цену на конечную дату отчета или дату продажи?
   xXeNoNx
 
9 - 16.04.19 - 12:44
(6) а можно вопрос: Кто написал этот запрос?
   AnisaL
 
10 - 16.04.19 - 12:45
(5) вот упростила запрос, чтобы увидеть период, какой выбирается, получается так: ставлю дату начала 01.01.18 по 31.01.18, и если учетная цена установлена 01.01.18, то он выводит этот период, а когда устанавливаю цену с 01.01.19, то период выводит NULL

ВЫБРАТЬ
            ПродажиОбороты.Номенклатура КАК Номенклатура,
            ПродажиОбороты.Характеристика КАК Характеристика,
            ПродажиОбороты.Ответственный КАК Ответственный,
            МАКСИМУМ(ПродажиОбороты.Регистратор.Дата) КАК ДатаДок,
            МАКСИМУМ(ПродажиОбороты.Организация) КАК Организация,
            СУММА(ПродажиОбороты.СуммаОборот) КАК СуммаОборот,
            СУММА(ПродажиОбороты.СебестоимостьОборот) КАК СебестоимостьОборот,
            СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество,
            МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Период) КАК Период
        ИЗ
            РегистрНакопления.Продажи.Обороты(
                    &НачПериода,
                    &КонПериода,
                    Регистратор,
                    Ответственный <> ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка)
                        И Ответственный <> &Ответственный
                        И ВЫБОР
                            КОГДА &Сотрудник <> ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка)
                                ТОГДА Ответственный В ИЕРАРХИИ (&Сотрудник)
                            ИНАЧЕ ИСТИНА
                        КОНЕЦ) КАК ПродажиОбороты
                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
                ПО ПродажиОбороты.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
                    И ПродажиОбороты.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
                    И (ЦеныНоменклатурыСрезПоследних.ВидЦен = &ТипЦен)
                    И ПродажиОбороты.Период >= ЦеныНоменклатурыСрезПоследних.Период
        
        СГРУППИРОВАТЬ ПО
            ПродажиОбороты.Номенклатура,
            ПродажиОбороты.Характеристика,
            ПродажиОбороты.Ответственный
   AnisaL
 
11 - 16.04.19 - 12:46
(8) последнюю цену на дату продажи
   AnisaL
 
12 - 16.04.19 - 12:47
(9) в интернете нашла и подкорректировала
   catena
 
13 - 16.04.19 - 12:47
(5)Ну, за основу явно брался запрос по срезу на каждый день.

Вот это условие в связке со срезом последних может сильно подставить:

И ПродажиОбороты.Период >= ЦеныНоменклатурыСрезПоследних.Период
   catena
 
14 - 16.04.19 - 12:48
(12)Еще раз пересмотрите исходный запрос. Во вложенном запросе срез последних там сто процентов не используется.
   dezss
 
15 - 16.04.19 - 12:48
(10) Ну так правильно выдает.
И еще читать (3)
   1Сергей
 
16 - 16.04.19 - 12:49
(13) Ты права.

Тут срезпоследних вообще не подходит
   1Сергей
 
17 - 16.04.19 - 12:49
(5) Сторно
   Ник080808
 
18 - 16.04.19 - 12:49
(10) берем
ВЫБРАТЬ
            ПродажиОбороты.Номенклатура КАК Номенклатура,
            ПродажиОбороты.Характеристика КАК Характеристика,
            ПродажиОбороты.Ответственный КАК Ответственный,
            ПродажиОбороты.Период КАК ДатаДок,
            МАКСИМУМ(ПродажиОбороты.Организация) КАК Организация,
            СУММА(ПродажиОбороты.СуммаОборот) КАК СуммаОборот,
            СУММА(ПродажиОбороты.СебестоимостьОборот) КАК СебестоимостьОборот,
            СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество
        ИЗ
            РегистрНакопления.Продажи.Обороты(
                    &НачПериода,
                    &КонПериода,
                    ДЕнь,
                    Ответственный <> ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка)
                        И Ответственный <> &Ответственный
                        И ВЫБОР
                            КОГДА &Сотрудник <> ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка)
                                ТОГДА Ответственный В ИЕРАРХИИ (&Сотрудник)
                            ИНАЧЕ ИСТИНА
                        КОНЕЦ) КАК ПродажиОбороты
пихаем в вт
   Ник080808
 
19 - 16.04.19 - 12:51
(18) + далее выбираем из временной таблицы Номенклатура,Характеристика период и соединяем с таблицей цены номенклатуры по условию на период  . получаем максимальную дату цены и пихаем во вторую вт.
Далее соединяем первую вт с второй вт  и с регистром цены и получаем профит
   Ник080808
 
20 - 16.04.19 - 12:52
(16) она всегда права)
   1Сергей
 
21 - 16.04.19 - 12:53
(20) Нет. Бывали случаи. Правда, давно очень :)
   Ник080808
 
22 - 16.04.19 - 12:54
(21) лет 15 назад, когда она не знала 1с?)
   AnisaL
 
23 - 16.04.19 - 12:55
Нашла) нужно было в срез последних добавить параметр КонПериода
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонПериода, )
   catena
 
24 - 16.04.19 - 12:55
(22)Ну уж зачем уж так... Раскрывать-то))))
   Ник080808
 
25 - 16.04.19 - 12:56
(23) это не цена на дату продажи, а цена на конец отчета
   Ник080808
 
26 - 16.04.19 - 12:57
(24) простите, моя Госпожа. Ушел делать сеппуку (
   AnisaL
 
27 - 16.04.19 - 12:59
(25) тогда как напишите?
   Ник080808
 
28 - 16.04.19 - 13:04
(27) написал в (18)-(19)
   Ник080808
 
29 - 16.04.19 - 14:59
(27) получилось?
   D_E_S_131
 
30 - 16.04.19 - 15:37
Вообще в (0) не написано, что нужны цены на дату продажи. Нужны или нет в итоге?
 
 Рекламное место пустует
   Ник080808
 
31 - 16.04.19 - 15:39
(30) нужны (11)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.