Добрый день. Есть документ реализация товаров, поступление номенклатуры осуществляется из Китая и России, разными документами (ПоступлениеТоваровРФ, ПоступлениеТоваровКНР). Нужно получить данные по реализациям, и соединить с поступлениями по условию (Номенклатура реализации, последнее поступление РФ либо последнее поступление КНР , в зависимости от того, какое поступление было позже (пример пришла ручка из РФ и пришла такая же ручка из КНР, в первом случае дата 01.06, во втором 03.06, должен попадать именно второй документ)). Подскажите, пожалуйста, возможно ли реализовать это одним запросом?
---
Можно попробовать так:
1. Получаем список номенклатуры из реализации во временную таблицу
2. Соединяем эту временную таблицу с номенлатурой из ПоступлениеТоваровРФ и ПоступлениеТоваровКНР, делаем одним запросом с объединением, из документов выбираем дату и цену, также пишем во временную таблицу
3. Из временной таблицы п.2 получаем максимальную дату по номенклатуре
4. Соединяем таблицу из п.3 с таблицей из п.2 по номенклатуре и дате и получаем результат из временной таблицы 2
Единственно, засада может быть, если у документов ПоступлениеТоваровРФ и ПоступлениеТоваровКНР для одной номенклатуры одинаковые даты, ну тут уж вы сами дальше решайте, что будете с этим делать
---
если правильно понял условие задачи, то как-то так

```1c
    ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Номенклатура КАК Номекнлатура,
    РеализацияТоваровУслугТовары.Цена КАК ЦенаРеализации
    ПОМЕСТИТЬ ВТ_Реализации
    ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ГДЕ
    РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    ;
    /////

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

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

    ВЫБРАТЬ
    МАКСИМУМ(ВТ_ПоступлениеТоваров.ДатаПоступлениеТоваров) КАК ДатаПоступлениеТоваров,
    ВТ_ПоступлениеТоваров.СсылкаПоступлениеТоваров КАК СсылкаПоступлениеТоваров,
    ВТ_ПоступлениеТоваров.Номенклатура КАК Номенклатура
    ПОМЕСТИТЬ ВТ_ПоступленияСМаксДатой
    ИЗ
    ВТ_ПоступлениеТоваров
    ;
    /////

    ВЫБРАТЬ
    ВТ_ПоступленияСМаксДатой.ДатаПоступлениеТоваров) КАК ДатаПоступление,
    ВТ_ПоступленияСМаксДатой.СсылкаПоступлениеТоваров КАК СсылкаПоступление,
    ВТ_Реализации.Номенклатура КАК Номенклатура,
    ВТ_Реализации.ЦенаРеализации КАК ЦенаРеализации
    ИЗ
    ВТ_Реализации
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПоступленияСМаксДатой КАК ВТ_ПоступленияСМаксДатой
    ПО ВТ_ПоступленияСМаксДатой.Номенклатура = ВТ_Реализации.Номенклатура
```

ЗЫ код писал в блокноте... за работу не гарантирую, но принцип должен быть понятен
---
у документа есть дата, упорядочить по дате регистратора или взять максимальную дату
---
упорядочить по дате это пробовал, сейчас попробовал максимум дата, но эти оба варианта просто кладут базу (зависает на моменте выполнения запроса, даже если небольшой период выбирать, выбрал три дня, и зависла база).
---
Если кладут базу, значит неправильно делаете соединение таблиц, в итогн у вас идет соединение слишком большого объема данных и база перегружена
---
ну показывайте запрос
что-то намудрили, раз базу ложит на лопатки
---
```1c
    ВЫБРАТЬ
    Максимум(ПоступлениеТоваровРФТовары.Ссылка.Дата) КАК ДатаПоступленияРФ,
    ПоступлениеТоваровРФТовары.Ссылка КАК ПоступлениеРФ,
    ПоступлениеТоваровРФТовары.Номенклатура КАК Номенклатура,
    ПоступлениеТоваровРФТовары.Цена КАК ЦенаПокупки,
    ПоступлениеТоваровРФТовары.Ссылка.Контрагент КАК Контрагент,
    РеализацияТоваровУслугТовары.Ссылка КАК Реализация,
    РеализацияТоваровУслугТовары.Сумма КАК Сумма,
    РеализацияТоваровУслугТовары.Цена КАК ЦенаРеализации,
    (ПоступлениеТоваровРФТовары.Цена - РеализацияТоваровУслугТовары.Цена) КАК РазницаЦен

    ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровРФ.Товары КАК ПоступлениеТоваровРФТовары
    ПО РеализацияТоваровУслугТовары.Номенклатура = ПоступлениеТоваровРФТовары.Номенклатура
    ГДЕ
    РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    И ПоступлениеТоваровРФТовары.Ссылка.Дата МЕЖДУ ДобавитьКДате(&ДатаНачала, Месяц, -6) И &ДатаОкончания

    СГРУППИРОВАТЬ ПО
    ПоступлениеТоваровРФТовары.Ссылка,
    ПоступлениеТоваровРФТовары.Номенклатура,
    ПоступлениеТоваровРФТовары.Цена,
    ПоступлениеТоваровРФТовары.Ссылка.Контрагент,
    РеализацияТоваровУслугТовары.Ссылка,
    РеализацияТоваровУслугТовары.Сумма,
    РеализацияТоваровУслугТовары.Цена
```
---
если правильно понял условие задачи, то как-то так

```1c
    ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Номенклатура КАК Номекнлатура,
    РеализацияТоваровУслугТовары.Цена КАК ЦенаРеализации
    ПОМЕСТИТЬ ВТ_Реализации
    ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    ГДЕ
    РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    ;
    /////

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

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

    ВЫБРАТЬ
    МАКСИМУМ(ВТ_ПоступлениеТоваров.ДатаПоступлениеТоваров) КАК ДатаПоступлениеТоваров,
    ВТ_ПоступлениеТоваров.СсылкаПоступлениеТоваров КАК СсылкаПоступлениеТоваров,
    ВТ_ПоступлениеТоваров.Номенклатура КАК Номенклатура
    ПОМЕСТИТЬ ВТ_ПоступленияСМаксДатой
    ИЗ
    ВТ_ПоступлениеТоваров
    ;
    /////

    ВЫБРАТЬ
    ВТ_ПоступленияСМаксДатой.ДатаПоступлениеТоваров) КАК ДатаПоступление,
    ВТ_ПоступленияСМаксДатой.СсылкаПоступлениеТоваров КАК СсылкаПоступление,
    ВТ_Реализации.Номенклатура КАК Номенклатура,
    ВТ_Реализации.ЦенаРеализации КАК ЦенаРеализации
    ИЗ
    ВТ_Реализации
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПоступленияСМаксДатой КАК ВТ_ПоступленияСМаксДатой
    ПО ВТ_ПоступленияСМаксДатой.Номенклатура = ВТ_Реализации.Номенклатура
```

ЗЫ код писал в блокноте... за работу не гарантирую, но принцип должен быть понятен
---
спасибо!
---
а с чем соединяете? а учет партий, учет количества? например
поступило из РФ- 1000 шт. (01,06)
из КНР - 100 (03,06)

если подтягиваете к Продаже (800 шт) то получите только товар из КНР. (по вашей логике)
---
А в регистры у вас что-то пишется по документам ПоступлениеТоваровРФ и ПоступлениеТоваровКНР? Может есть какой-то общий для этих документов, оттуда проще будет получить информацию.
---
общего регистра, к сожалению, нет
---
Можно попробовать так:
1. Получаем список номенклатуры из реализации во временную таблицу
2. Соединяем эту временную таблицу с номенлатурой из ПоступлениеТоваровРФ и ПоступлениеТоваровКНР, делаем одним запросом с объединением, из документов выбираем дату и цену, также пишем во временную таблицу
3. Из временной таблицы п.2 получаем максимальную дату по номенклатуре
4. Соединяем таблицу из п.3 с таблицей из п.2 по номенклатуре и дате и получаем результат из временной таблицы 2
Единственно, засада может быть, если у документов ПоступлениеТоваровРФ и ПоступлениеТоваровКНР для одной номенклатуры одинаковые даты, ну тут уж вы сами дальше решайте, что будете с этим делать
---
спасибо!
---
Добрый день. Да можно одним запросом - но проще разбить на несколько, опять же из-за учета количества по партиям
---
(4) учет ни партий ни количества не нужен. Нужно только цену получать.
---
упс.. не туда
---
Тогда проще получаем список накладных - из них список номенклатуры - по этом списку строим таблицу с датами последнего поступления - к этой таблице добавляем цены из накладных и соединяем все это
---
Вот пример:
https://infostart.ru/1c/articles/1072770/

Работа с запросами. Получение последней цены товара из табличной части документа. Несколько вариантов
---
спасибо, сейчас попробую как в примере.
---
Удачи!
---
А у вас есть в конторе програмыст? Сильно снизило бы проблемы...