8.х Получение динамических цен номенклатуры

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем AlexanderIF, 11 дек 2013.

  1. TopicStarter Overlay
    AlexanderIF
    Offline

    AlexanderIF

    Регистрация:
    11 дек 2013
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте всем!
    Помогите новичку разобраться с проблемой. Платформа 8.2, редакция УТ 10.3.
    Необходимо в обработке получить цены товаров. Написал простой запрос на получение:

    Код:
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    Цены.Номенклатура.Код КАК КодТовара,
    |    Цены.ТипЦен.Код КАК КодТипаЦен,
    |    Цены.ТипЦен.Наименование КАК ТипЦен,
    |    Цены.Цена КАК Цена
    |ИЗ
    |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ) КАК Цены
    |ГДЕ
    |    Цены.ХарактеристикаНоменклатуры.Ссылка IS NULL
    |    И НЕ Цены.Номенклатура.ПометкаУдаления
    |    И Цены.Номенклатура.ВидНоменклатуры.ТипНоменклатуры = &ТипНоменклатуры
    |    И Цены.Номенклатура.Ссылка В ИЕРАРХИИ(&Группа)
    |   
    |УПОРЯДОЧИТЬ ПО Цены.Номенклатура.Наименование ВОЗР, ТипЦен ВОЗР";
    Работает, но только не для динамических типов цен. Читал, гуглил, получилось модифицировать для получения цен с типами с признаком "Рассчитывается" и получить цены в типе котороых СпособыРасчетаЦены - ПоПроцентнойНаценкеНаБазовыйТип:

    Код:
    Запрос.Текст = "ВЫБРАТЬ
    |    Цены.Номенклатура.Код КАК КодТовара,
    |    Цены.ТипЦен.Код КАК КодТипаЦен,
    |    Цены.ТипЦен.Наименование КАК ТипЦен,
    |    ВЫБОР
    |	    КОГДА Цены.ТипЦен.Рассчитывается
    |		    ТОГДА ВЫБОР
    |				    КОГДА Цены.ТипЦен.СпособРасчетаЦены = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип)
    |					    ТОГДА ЕСТЬNULL(БазоваяЦена.Цена, 0) + ЕСТЬNULL(БазоваяЦена.Цена, 0) * (Цены.ТипЦен.ПроцентСкидкиНаценки / 100)
    |				    ИНАЧЕ ЕСТЬNULL(Цены.Цена, 0)
    |			    КОНЕЦ
    |	    ИНАЧЕ Цены.Цена
    |    КОНЕЦ КАК Цена
    |ИЗ
    |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ) КАК Цены
    |	    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК БазоваяЦена
    |	    ПО (БазоваяЦена.Номенклатура.Код = Цены.Номенклатура.Код)
    |		    И (БазоваяЦена.ТипЦен.Код = Цены.ТипЦен.БазовыйТипЦен.Код)
    |ГДЕ
    |    Цены.ХарактеристикаНоменклатуры.Ссылка ЕСТЬ NULL
    |    И НЕ Цены.Номенклатура.ПометкаУдаления
    |    И Цены.Номенклатура.ВидНоменклатуры.ТипНоменклатуры = &ТипНоменклатуры
    |    И Цены.Номенклатура.Ссылка В ИЕРАРХИИ(&Группа)
    |СГРУППИРОВАТЬ ПО
    |    Цены.ТипЦен,
    |    Цены.Номенклатура,
    |    Цены.Номенклатура.Код,
    |    Цены.ТипЦен.Код,
    |    Цены.ТипЦен.Наименование,
    |    ВЫБОР
    |	    КОГДА Цены.ТипЦен.Рассчитывается
    |		    ТОГДА ВЫБОР
    |				    КОГДА Цены.ТипЦен.СпособРасчетаЦены = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип)
    |					    ТОГДА ЕСТЬNULL(БазоваяЦена.Цена, 0) + ЕСТЬNULL(БазоваяЦена.Цена, 0) * (Цены.ТипЦен.ПроцентСкидкиНаценки / 100)
    |				    ИНАЧЕ ЕСТЬNULL(Цены.Цена, 0)
    |			    КОНЕЦ
    |	    ИНАЧЕ Цены.Цена
    |    КОНЕЦ
    |УПОРЯДОЧИТЬ ПО
    |    Цены.Номенклатура.Наименование,
    |    ТипЦен";
    А вот как получить цены расчитываемые диапазонами не соображу ни как... Нашёл РегистрСведений.ДиапазоныЦенДляНаценки, предполагаю, что его можно присоединить или оформить подзапросом основного запроса, но как получить именно нужную цену - не пойму.

    Прошу помощи.
  2. Aston
    Offline

    Aston Опытный в 1С

    Регистрация:
    6 июн 2012
    Сообщения:
    467
    Симпатии:
    3
    Баллы:
    29
    Как я понял вы хотели это получить
    Код:
    ВЫБРАТЬ
    ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
    ЦеныНоменклатуры.ТипЦен КАК ТипЦен,
    ЦеныНоменклатуры.Валюта КАК Валюта,
    ЦеныНоменклатуры.Цена
    ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    СГРУППИРОВАТЬ ПО
    ЦеныНоменклатуры.Номенклатура,
    ЦеныНоменклатуры.ТипЦен,
    ЦеныНоменклатуры.Валюта,
    ЦеныНоменклатуры.Цена
    УПОРЯДОЧИТЬ ПО
    Номенклатура,
    ТипЦен,
    Валюта
  3. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    В модуле Ценообразование есть функция ПолучитьЦенуНоменклатуры - не мучайтесь с запросом
  4. TopicStarter Overlay
    AlexanderIF
    Offline

    AlexanderIF

    Регистрация:
    11 дек 2013
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    нет, Aston, ваш вариант формирует список с пустыми значениями цен для диапазонных и расчитываемых типов, как и мой первый запрос.

    nickpugachev, будет ли оптимально использовать вместо запросов проходку по двум циклам (по справочнику номенклатуры и по типам цен для каждого элемента номенклотуры) чтобы внутри делать:
    Код:
    Цена = Ценообразование.ПолучитьЦенуНоменклатуры(Выборка.Ссылка,, ТипЦен);
    ?
  5. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    если нужны цены по многим позициям - есть в том же модуле СформироватьЗапросПоЦенам
    можете ее посмотреть и сделать наподобие, можете просто ей воспользоваться

Поделиться этой страницей