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

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

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

Варианты:

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

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

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

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

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

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

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

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

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

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