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

как получить первые записи по каждой номенклатуре в запросе

как получить первые записи по каждой номенклатуре в запросе
Я
   Alive
 
15.04.20 - 08:14
Всем доброго времени суток! Есть такая задача, получить начальную цену закупа и конечную по каждой номенклатуре. Запросом выбрала из Регистра накопления минимальную дату и максимальную и по ним смотрю движения, но оказалось, что по некоторым позициям номенклатуры на одну и ту же дату есть движения по двум документам. Как в запросе выбрать только первый документ?
ВЫБРАТЬ
    ЗакупкиОбороты.Номенклатура,
    МИНИМУМ(ЗакупкиОбороты.Период) КАК Период
ПОМЕСТИТЬ МинимальныйПериод
ИЗ
    РегистрНакопления.Закупки.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ЗакупкиОбороты

СГРУППИРОВАТЬ ПО
    ЗакупкиОбороты.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЗакупкиОбороты.Номенклатура,
    ЗакупкиОбороты.КоличествоОборот,
    ЗакупкиОбороты.СтоимостьОборот,
    ЗакупкиОбороты.Период
ИЗ
    РегистрНакопления.Закупки.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ЗакупкиОбороты
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ МинимальныйПериод КАК МинимальныйПериод
        ПО ЗакупкиОбороты.Номенклатура = МинимальныйПериод.Номенклатура
            И ЗакупкиОбороты.Период = МинимальныйПериод.Период
   mzelensky
 
1 - 15.04.20 - 08:46
(0) Выбрать "минимальный" по дате документ и потом внутренним соединением соединить с таблицей.
   Alive
 
2 - 15.04.20 - 08:50
дело в том, что у нескольких документов одинаковая дата, если я буду брать минимальные, он выбирает несколько , у кого одинаковая дата
   mzelensky
 
3 - 15.04.20 - 08:59
(2) По твоей задаче - " получить начальную цену закупа". Если В один момент есть 2 документа с разной ценой, то какой из них ты выберешь? Не запросом я имею ввиду, а в принципе, какой из них нужно взятЬ? Если ответить на этот вопрос не сможешь, то нет смысла дальше ковыряться с задачей, суть которой не ясна.

Варианты:

1) Взять любую. Т.к. они в один "момент"
2) Взять из них "минимальную\максимальную"
   rsv
 
4 - 15.04.20 - 09:09
(0) эти доки попытаться пронумеровать  в запросе  по дате и выбирать где номер равно 1
   mzelensky
 
5 - 15.04.20 - 09:11
(4) в (2) написано - "у нескольких документов одинаковая дата"
   Alive
 
6 - 15.04.20 - 09:22
(3) нужно смотреть документ с меньшим номером
   mzelensky
 
7 - 15.04.20 - 09:32
(6) НУ вот и ответ на твой вопрос - получаешь минимальный номер, потом по нему делаешь внутреннее соединение.

Но запрос будет ОЧЕНЬ тяжкий, т.к. еще придется получать реквизит "номер"

Т.е. будет так

Номенклатура1 Док1.номер_01 Цена1
Номенклатура1 Док2.номер_02 Цена2

Получаешь минимальный номер и тогда будет с группировкой по номенклатуре

Номенклатура1 Док1.номер_01

Далее делаешь внутреннее соединение по Номенклатуре и номеры удет в итоге

Номенклатура1 Док1.номер_01 Цена1
   Alive
 
8 - 15.04.20 - 10:32
(7) Спасибо, попробую!!!
   Lama12
 
9 - 15.04.20 - 10:46
(8) А может сразу по номеру брать минимум и не заморачиваться по дате?
   Simod
 
10 - 15.04.20 - 11:49
Как то так:

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

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ РАЗЛИЧНЫЕ
    ВТ_Закупки.Номенклатура,
    ВТ_Закупки.Регистратор
ИЗ
    ВТ_Закупки КАК ВТ_Закупки
ГДЕ
    ВТ_Закупки.Регистратор В
            (ВЫБРАТЬ ПЕРВЫЕ 1
                Отбор.Регистратор
            ИЗ
                ВТ_Закупки КАК Отбор
            ГДЕ
                Отбор.Номенклатура = ВТ_Закупки.Номенклатура
            УПОРЯДОЧИТЬ ПО
                Отбор.МоментВремени)
   Alive
 
11 - 15.04.20 - 14:09
(10) все получилось, спасибо!

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