8.х добавить условие в запрос

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Raideres, 21 ноя 2016.

  1. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    556
    Симпатии:
    1
    Баллы:
    29
    Ребят подскажите можно ли так сделать в запросе и как, нужно добавить колонку если цена менялась то поставить + если нет то ничего не ставить ну или -

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

    bajiepka Профессионал в 1С

    Регистрация:
    26 сен 2014
    Сообщения:
    460
    Симпатии:
    31
    Баллы:
    54
    Надо бы для этого знать дату по отношению к которой можно сказать, что цена поменялась. Потом уже дело техники: выбрать регистратор на текущую дату и на ту дату и пытаться делать Левое соединение. Если регистраторы одинаковы (т.е. цена не менялась) то левое прокатит и можно ставить плюс. Если регистраторы разные и цена менялась - минус.
    Т.е. будет либо два вложенных запроса (но писать влом, попробуйте сами), либо временные таблицы
  3. 1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    164
    Баллы:
    104
    Если нужно увидеть изменение цены относительно предыдущего периода, то там не все так просто :)
    Есть пример с динамикой курсов валют.

    Вложения:

  4. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.224
    Симпатии:
    15
    Баллы:
    29
    а банально сравнить срез первых и срез последних не ?
  5. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    556
    Симпатии:
    1
    Баллы:
    29
    добавил срез первых и срез последних запрос поехал=((
    --- Объединение сообщений, 21 ноя 2016 ---
    &ДатаОтчета эт максимальная
    и
    Дата2Отчета минимальная
  6. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.224
    Симпатии:
    15
    Баллы:
    29
    ВЗЛЕТЕЛ или разъехался )))?
  7. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    556
    Симпатии:
    1
    Баллы:
    29
    =))))