Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 5, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )

> Получить две последние цены товара          
Pashaboston Подменю пользователя
сообщение 25.09.18, 13:15
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 67
Спасибо сказали: 1 раз
Рейтинг: 1

Конфигурация УТ для Украины 2.3.24, платформа 8.3. Вопрос как запросом получить товары у которых менялась цена и получить последнюю и предпоследнюю цену на определенную дату.

Vladal Подменю пользователя
сообщение 26.09.18, 14:10
Сообщение #2

Завсегдатай
****
Группа: Пользователи
Сообщений: 217
Из: Украина
Спасибо сказали: 32 раз
Рейтинг: 18

Pashaboston @ Вчера, 14:15 * ,

Вы уже нашли "срез последних на каждую дату"?

Пока я не перед компьютером, опишу принцип:

1. Выбрать список цен по заданной номенклатуре из обычной таблицы (не из виртуальных СрезПоследних) и поместить во временную таблицу. Она нам пригодится не раз.
Колонки первой таблицы: Номенклатура, Период, Цена

2. Затем соединять таблицу товаров с таблицей цен с максимальной датой (Период <= ДатаПоискаЦен) и поместить во вторую временную таблицу.
Получится таблица с колонками: Номенклатура, Цена1. Период1 - это последние изменения цен на указанную дату.

3. Со второй временной таблицей снова соединить первую таблицу точно таким же способом по условию (Период первой таблицы < Период1 из второй таблицы)
Полученную цену и дату предпоследнего изменения поместить в колонки Цена2 и Период2.

Позже добавлю текст запроса

// может, тему перенести в форум для программистов?

McTSIMCO Подменю пользователя
сообщение 26.09.18, 15:19
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 13
Из: Киев
Спасибо сказали: 7 раз
Рейтинг: 7

Да, только тут нюансы в постановке задачи.
К примеру, должны ли товары попадать в выборку, если предыдущая цена равна последней?

RedCat77 Подменю пользователя
сообщение 26.09.18, 16:13
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 63
Из: Киев
Спасибо сказали: 8 раз
Рейтинг: 8

Цитата(McTSIMCO @ 26.09.18, 16:19) *
К примеру, должны ли товары попадать в выборку, если предыдущая цена равна последней?

В запросе использовать "РАЗЛИЧНЫЕ"

Vladal Подменю пользователя
сообщение 26.09.18, 17:11
Сообщение #5

Завсегдатай
****
Группа: Пользователи
Сообщений: 217
Из: Украина
Спасибо сказали: 32 раз
Рейтинг: 18

Цитата(RedCat77 @ 26.09.18, 17:13) *
В запросе использовать "РАЗЛИЧНЫЕ"

РАЗЛИЧНЫЕ отсечет одинаковые строки.
А если выборка будет такой?

Товар1, 01.07.18, 10 грн
Товар2, 02.09.18, 12 грн
Товар2, 01.05.18, 14 грн
Товар1, 02.09.18, 12 грн

Или такой?

Товар1, 01.07.18, 10 грн, 02.09.18, 12 грн
Товар2, 01.06.18, 18 грн, 02.09.18, 12 грн

РАЗЛИЧНЫЕ не помогут.

Vladal Подменю пользователя
сообщение 28.09.18, 13:22
Сообщение #6

Завсегдатай
****
Группа: Пользователи
Сообщений: 217
Из: Украина
Спасибо сказали: 32 раз
Рейтинг: 18

Смотрите, пользуйтесь.

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ втНоменклатура
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Родитель = &Родитель
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЦеныНоменклатуры.Период КАК Период,
    ЦеныНоменклатуры.Активность,
    ЦеныНоменклатуры.ТипЦен,
    ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
    ЦеныНоменклатуры.Цена КАК Цена
ПОМЕСТИТЬ втЦеныНоменклатуры
ИЗ
    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ГДЕ
    ЦеныНоменклатуры.Период <= &ДатаПолученияЦен
    И ЦеныНоменклатуры.Активность
    И ЦеныНоменклатуры.ТипЦен = &ТипЦен
    И ЦеныНоменклатуры.Номенклатура В
            (ВЫБРАТЬ
                втНоменклатура.Номенклатура
            ИЗ
                втНоменклатура КАК втНоменклатура)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    втНоменклатура.Номенклатура КАК Номенклатура,
    ЕСТЬNULL(втЦеныНоменклатуры.Цена, 0) КАК ПоследняяЦена,
    ЕСТЬNULL(втЦеныНоменклатуры.Период, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДатаПосленейЦены
ПОМЕСТИТЬ втПоследняяЦена
ИЗ
    втНоменклатура КАК втНоменклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ втЦеныНоменклатуры КАК втЦеныНоменклатуры
        ПО втНоменклатура.Номенклатура = втЦеныНоменклатуры.Номенклатура
            И (втЦеныНоменклатуры.Период В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    втЦеныНоменклатуры.Период КАК Период
                ИЗ
                    втЦеныНоменклатуры КАК втЦеныНоменклатуры
                ГДЕ
                    втЦеныНоменклатуры.Период <= &ДатаПолученияЦен
                    И втЦеныНоменклатуры.Номенклатура = втНоменклатура.Номенклатура
                УПОРЯДОЧИТЬ ПО
                    Период УБЫВ))
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    втПоследняяЦена.Номенклатура КАК Номенклатура,
    втПоследняяЦена.ПоследняяЦена КАК ПоследняяЦена,
    втПоследняяЦена.ДатаПосленейЦены КАК ДатаПосленейЦены,
    ЕСТЬNULL(втЦеныНоменклатуры.Цена, 0) КАК ПредпоследняяЦена,
    ЕСТЬNULL(втЦеныНоменклатуры.Период, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДатаПредпоследнейЦены
ИЗ
    втПоследняяЦена КАК втПоследняяЦена
        ЛЕВОЕ СОЕДИНЕНИЕ втЦеныНоменклатуры КАК втЦеныНоменклатуры
        ПО втПоследняяЦена.Номенклатура = втЦеныНоменклатуры.Номенклатура
            И (втЦеныНоменклатуры.Период В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    втЦеныНоменклатуры.Период КАК Период
                ИЗ
                    втЦеныНоменклатуры КАК втЦеныНоменклатуры
                ГДЕ
                    втЦеныНоменклатуры.Период < втПоследняяЦена.ДатаПосленейЦены
                    И втЦеныНоменклатуры.Номенклатура = втПоследняяЦена.Номенклатура
                УПОРЯДОЧИТЬ ПО
                    Период УБЫВ))

УПОРЯДОЧИТЬ ПО
    Номенклатура,
    ДатаПосленейЦены,
    ДатаПредпоследнейЦены
АВТОУПОРЯДОЧИВАНИЕ


В результате будет таблица с последними двумя ценами номенклатуры с указанием дат установки цены.

Если надо сгруппировать по товару, то просто в последнем подзапросе таблицы не соединять, а объединять и потом сгруппировать по номенклатуре.


Спасибо сказали: cos12,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 11.12.18, 6:59
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!

Курсы валют: доллар США к гривне Курсы валют: евро к гривне Курсы валют: российский рубль к гривне