8.х получить последние 2 цены

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

  1. TopicStarter Overlay
    gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    Добрый день, как можно получить последние 2 цены номенклатуры? для конфигурации Розница (версия последняя)
  2. TopicStarter Overlay
    gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    оказывается всё просто
    Код:
    ВЫБРАТЬ ПЕРВЫЕ 2
    ЦеныНоменклатурыМагазинов.Период КАК Период,
    ЦеныНоменклатурыМагазинов.Цена,
    ЦеныНоменклатурыМагазинов.Номенклатура
    ИЗ
    РегистрСведений.ЦеныНоменклатурыМагазинов КАК ЦеныНоменклатурыМагазинов
    ГДЕ
    ЦеныНоменклатурыМагазинов.Номенклатура В(&список)
    
    УПОРЯДОЧИТЬ ПО
    Период УБЫВ
    
  3. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!
    Код:
    Функция ПолучитьРезультатЗапроса_gosn1ck()
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 2
    |	ЦеныНоменклатуры.Цена,
    |	ЦеныНоменклатуры.Валюта,
    |	ЦеныНоменклатуры.ЕдиницаИзмерения,
    |	ЦеныНоменклатуры.ПроцентСкидкиНаценки,
    |	ЦеныНоменклатуры.СпособРасчетаЦены
    |ИЗ
    |	РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    |ГДЕ
    |	ЦеныНоменклатуры.Номенклатура = &Номенклатура
    |	И ЦеныНоменклатуры.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры
    |	И ЦеныНоменклатуры.ТипЦен = &ТипЦен
    |
    |УПОРЯДОЧИТЬ ПО
    |	ЦеныНоменклатуры.Период УБЫВ";
    //Параметры запроса
    Запрос.УстановитьПараметр("Номенклатура",);// Справочник ссылка: Номенклатура
    Запрос.УстановитьПараметр("ТипЦен",);// Справочник ссылка: Типы цен номенклатуры
    мПараметрЗначение=Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
    Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", мПараметрЗначение);
    Результат = Запрос.Выполнить();
    
    Возврат Результат;
    
    КонецФункции //ПолучитьРезультатЗапроса_gosn1ck
    
  4. TopicStarter Overlay
    gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    спасибо, но это прокатит только для 1 позиции. как поличить таблицу списка номенклатуры с 2мя последними ценами? хочу видеть, что-то типа:

    Номенклатуры | ЦенаПоследняя | ЦенаПредпоследняя
  5. TopicStarter Overlay
    gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    извернуться пришлось вот так
    Код:
    ВЫБРАТЬ
    ВложенныйЗапрос.Период КАК Период,
    ЕСТЬNULL(ЦеныНоменклатурыМагазинов.Период,0) КАК ПериодПредпоследний,
    ВложенныйЗапрос.Номенклатура КАК Номенклатура,
    ВложенныйЗапрос.Цена КАК Цена,
    ЕСТЬNULL(ЦеныНоменклатурыМагазинов.Цена,0) КАК ЦенаПредпоследняя,
    ВложенныйЗапрос.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    ВложенныйЗапрос.Магазин КАК Магазин
    ИЗ
    (ВЫБРАТЬ
    ЦеныНоменклатурыМагазиновСрезПоследних.Период КАК Период,
    ЦеныНоменклатурыМагазиновСрезПоследних.Номенклатура КАК Номенклатура,
    ЦеныНоменклатурыМагазиновСрезПоследних.Цена КАК Цена,
    ЦеныНоменклатурыМагазиновСрезПоследних.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    ЦеныНоменклатурыМагазиновСрезПоследних.Магазин КАК Магазин
    ИЗ
    РегистрСведений.ЦеныНоменклатурыМагазинов.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыМагазиновСрезПоследних) КАК ВложенныйЗапрос
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыМагазинов КАК ЦеныНоменклатурыМагазинов
    ПО (ЦеныНоменклатурыМагазинов.Номенклатура = ВложенныйЗапрос.Номенклатура)
    И (ЦеныНоменклатурыМагазинов.Магазин = ВложенныйЗапрос.Магазин)
    И ВложенныйЗапрос.Период > ЦеныНоменклатурыМагазинов.Период
    
    УПОРЯДОЧИТЬ ПО
    ПериодПредпоследний УБЫВ
    ИТОГИ
    МИНИМУМ(Цена),
    МИНИМУМ(ЦенаПредпоследняя)
    ПО
    Номенклатура
    
    при обходе читать первую строку только.
    зы характеристик нет
  6. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Код:
        Запрос.Текст = "ВЫБРАТЬ
    |    Товары.Номенклатура,
    |    Товары.ХарактеристикаНоменклатуры
    |ПОМЕСТИТЬ Товары
    |ИЗ
    |    &Товары КАК Товары
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    Товары.Номенклатура КАК Номенклатура,
    |    Товары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    |    ЦеныНоменклатуры.Цена КАК Цена
    |ИЗ
    |    Товары КАК Товары
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 2
    |            ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
    |            ЦеныНоменклатуры.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    |            ЦеныНоменклатуры.ТипЦен КАК ТипЦен,
    |            ЦеныНоменклатуры.Цена КАК Цена
    |        ИЗ
    |            РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    |        ГДЕ
    |            ЦеныНоменклатуры.ТипЦен В(&ТипЦен)
    |        
    |        УПОРЯДОЧИТЬ ПО
    |            ЦеныНоменклатуры.Период УБЫВ) КАК ЦеныНоменклатуры
    |        ПО Товары.Номенклатура = ЦеныНоменклатуры.Номенклатура
    |            И Товары.ХарактеристикаНоменклатуры = ЦеныНоменклатуры.ХарактеристикаНоменклатуры
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |УНИЧТОЖИТЬ Товары";
    
    
    Можете сгруппировать отчет и обойти результат по группам Номенклатура и ХарактеристикаНоменклатуры для последовательного выбора цен и формирования таблицы предложенного Вами вида.
    Тип цены может быть конкретным значением, а так же списком.
    Параметр товары - это Ваша таблица, передать в запрос можете так МояТаблица.Выгрузить();
  7. TopicStarter Overlay
    gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    гениальное решение :) спасибо
  8. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    [off]Дело было вечером, делать было нечего...[/off]

    Не для розницы, но думаю переделать можно будет:
    Код:
    "ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
    ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры,
    ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Период) КАК ДатаПоследняяЦена,
    ЦеныНоменклатурыСрезПоследних.Цена КАК ПоследняяЦена,
    МАКСИМУМ(ЦеныНоменклатуры.Период) КАК ДатаПредпоследняяЦена,
    ЦеныНоменклатурыСрезПоследних.ТипЦен
    ПОМЕСТИТЬ ПредварительнаяВыборка
    ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ЦеныНоменклатуры.Номенклатура
    И ЦеныНоменклатурыСрезПоследних.ТипЦен = ЦеныНоменклатуры.ТипЦен
    И ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ЦеныНоменклатуры.ХарактеристикаНоменклатуры
    И ЦеныНоменклатурыСрезПоследних.Период > ЦеныНоменклатуры.Период
    </span>
    СГРУППИРОВАТЬ ПО
    ЦеныНоменклатурыСрезПоследних.ТипЦен,
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры,
    ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения,
    ЦеныНоменклатурыСрезПоследних.Цена;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ПредварительнаяВыборка.Номенклатура КАК Номенклатура,
    ПредварительнаяВыборка.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    ПредварительнаяВыборка.ЕдиницаИзмерения,
    ПредварительнаяВыборка.ДатаПоследняяЦена,
    ПредварительнаяВыборка.ПоследняяЦена,
    ЕСТЬNULL(ПредварительнаяВыборка.ДатаПредпоследняяЦена, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаПредпоследняяЦена,
    ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0) КАК ПредпоследняяЦена
    ИЗ
    ПредварительнаяВыборка КАК ПредварительнаяВыборка
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    ПО ПредварительнаяВыборка.Номенклатура = ЦеныНоменклатуры.Номенклатура
    И ПредварительнаяВыборка.ХарактеристикаНоменклатуры = ЦеныНоменклатуры.ХарактеристикаНоменклатуры
    И ПредварительнаяВыборка.ЕдиницаИзмерения = ЦеныНоменклатуры.ЕдиницаИзмерения
    И ПредварительнаяВыборка.ДатаПредпоследняяЦена = ЦеныНоменклатуры.Период
    И ПредварительнаяВыборка.ТипЦен = ЦеныНоменклатуры.ТипЦен
    
    УПОРЯДОЧИТЬ ПО
    Номенклатура,
    ХарактеристикаНоменклатуры
    АВТОУПОРЯДОЧИВАНИЕ"
    </FONT></FONT></pre>
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    В первый запрос пакета только еще надо связь добавить по единице измерения, забыл.

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