Версия для печати темы (https://pro1c.org.ua/index.php?s=ac0d04e137f628cc6ffbf0b1b0396fda&showtopic=45800)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Запрос по регистру сведений и продажам!

Автор: Sergowa 18.05.18, 11:59

Всем добрый день!
Делаю отчет по заказам с сайта для анализа валово прибыли по курсу!

Так вот есть регистр сведений ЦеныНоменклатурыКонтрагентов где вносится цена номенклатуры. Но есть две организации, которые вводят эти цены с одним типом цен и одним типом валюты.
И в запросе когда делаю срезпоследних по регистру, на одну номенклатуру получается два значения от одной организации и от второй, но даты разные! Нужно выбрать именно по последней дате не зависимо какая организация вносила цены!

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

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

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


Как отобрать одно значение с регистра?

"Управление производственным предприятием для Украины", редакция 1.3 (1.3.54.1)
1С:Предприятие 8.3 (8.3.10.2252)

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

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

СГРУППИРОВАТЬ ПО
    ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,
    Продажи.КоличествоОборот,
    Продажи.СтоимостьОборот,
    ЦеныНоменклатурыКонтрагентовСрезПоследних.Валюта
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура,
    ДатыПоследнихЦен.КоличествоОборот КАК Количество,
    ДатыПоследнихЦен.СтоимостьОборот КАК Стоимость,
    ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена,
    КурсыВалютСрезПоследних.Курс,
    ЦеныНоменклатурыКонтрагентовСрезПоследних.Цена * КурсыВалютСрезПоследних.Курс * ДатыПоследнихЦен.КоличествоОборот КАК СебестоимостьВГрнПоКурсу,
    ДатыПоследнихЦен.СтоимостьОборот - ЦеныНоменфклатурыКонтрагентовСрезПоследних.Цена * КурсыВалютСрезПоследних.Курс * ДатыПоследнихЦен.КоличествоОборот КАК ВаловаяПрибыль,
    ДатыПоследнихЦен.Валюта
ИЗ
    РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&КонецПериода, ) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДатыПоследнихЦен КАК ДатыПоследнихЦен
        ПО ЦеныНоменклатурыКонтрагентовСрезПоследних.Период = ДатыПоследнихЦен.Период
            И ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура = ДатыПоследнихЦен.Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВалютСрезПоследних
        ПО ЦеныНоменклатурыКонтрагентовСрезПоследних.Валюта = КурсыВалютСрезПоследних.Валюта

Автор: logist 18.05.18, 12:42

Есть еще ЛЕВОЕ соединение, и вероятно в вашем случае это оно, тогда всё должно работать в одном запросе. Внутреннее выбирает совпадение в таблицах, почитайте что такое соединения в запросах.

Автор: Sergowa 18.05.18, 13:08

logist @ Сегодня, 13:42 * ,
Спасибо за ответ! Пробовал Левым соединением, но не получилось!)) Возможно не правильно связи сделал!

Автор: logist 18.05.18, 14:03

Как-то так, наверное

    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода) КАК ПродажиОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&КонецПериода,ТипЦен = &ТипЦен И Валюта = &Валюта) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних
        ПО ПродажиОбороты.Номенклатура = ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура
            И ПродажиОбороты.ХарактеристикаНоменклатуры = ЦеныНоменклатурыКонтрагентовСрезПоследних.ХарактеристикаНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&КонецПериода, Валюта = &Валюта) КАК КурсыВалютСрезПоследних
        ПО (ИСТИНА)


Автор: Sergowa 18.05.18, 15:29

logist @ Сегодня, 15:03 * ,
Попробую поиграться! Спасибо!

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua