Последние документы в запросе

1. user1671936 1 09.11.22 10:22 Сейчас в теме
Добрый день. Есть документ реализация товаров, поступление номенклатуры осуществляется из Китая и России, разными документами (ПоступлениеТоваровРФ, ПоступлениеТоваровКНР). Нужно получить данные по реализациям, и соединить с поступлениями по условию (Номенклатура реализации, последнее поступление РФ либо последнее поступление КНР , в зависимости от того, какое поступление было позже (пример пришла ручка из РФ и пришла такая же ручка из КНР, в первом случае дата 01.06, во втором 03.06, должен попадать именно второй документ)). Подскажите, пожалуйста, возможно ли реализовать это одним запросом?
По теме из базы знаний
Найденные решения
16. tamidi 8 09.11.22 11:42 Сейчас в теме
Можно попробовать так:
1. Получаем список номенклатуры из реализации во временную таблицу
2. Соединяем эту временную таблицу с номенлатурой из ПоступлениеТоваровРФ и ПоступлениеТоваровКНР, делаем одним запросом с объединением, из документов выбираем дату и цену, также пишем во временную таблицу
3. Из временной таблицы п.2 получаем максимальную дату по номенклатуре
4. Соединяем таблицу из п.3 с таблицей из п.2 по номенклатуре и дате и получаем результат из временной таблицы 2
Единственно, засада может быть, если у документов ПоступлениеТоваровРФ и ПоступлениеТоваровКНР для одной номенклатуры одинаковые даты, ну тут уж вы сами дальше решайте, что будете с этим делать
VictorRGB2; user645801_yyyuuu123q; user1671936; +3 Ответить
19. VictorRGB2 13 09.11.22 12:53 Сейчас в теме
(13) если правильно понял условие задачи, то как-то так
ВЫБРАТЬ
	РеализацияТоваровУслугТовары.Номенклатура КАК Номекнлатура,
	РеализацияТоваровУслугТовары.Цена КАК ЦенаРеализации
ПОМЕСТИТЬ ВТ_Реализации
ИЗ 
	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
; 
/////

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

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

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

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


ЗЫ код писал в блокноте... за работу не гарантирую, но принцип должен быть понятен
user1671936; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. VictorRGB2 13 09.11.22 10:25 Сейчас в теме
(1) у документа есть дата, упорядочить по дате регистратора или взять максимальную дату
6. user1671936 1 09.11.22 10:54 Сейчас в теме
(2)
упорядочить по дате
это пробовал, сейчас попробовал максимум дата, но эти оба варианта просто кладут базу (зависает на моменте выполнения запроса, даже если небольшой период выбирать, выбрал три дня, и зависла база).
7. tamidi 8 09.11.22 10:59 Сейчас в теме
(6)Если кладут базу, значит неправильно делаете соединение таблиц, в итогн у вас идет соединение слишком большого объема данных и база перегружена
10. VictorRGB2 13 09.11.22 11:02 Сейчас в теме
(6) ну показывайте запрос
что-то намудрили, раз базу ложит на лопатки
13. user1671936 1 09.11.22 11:26 Сейчас в теме
(10)
ВЫБРАТЬ
        Максимум(ПоступлениеТоваровРФТовары.Ссылка.Дата) КАК ДатаПоступленияРФ,
	ПоступлениеТоваровРФТовары.Ссылка КАК ПоступлениеРФ,
	ПоступлениеТоваровРФТовары.Номенклатура КАК Номенклатура,
	ПоступлениеТоваровРФТовары.Цена КАК ЦенаПокупки,
	ПоступлениеТоваровРФТовары.Ссылка.Контрагент КАК Контрагент,
	РеализацияТоваровУслугТовары.Ссылка КАК Реализация,
	РеализацияТоваровУслугТовары.Сумма КАК Сумма,
	РеализацияТоваровУслугТовары.Цена КАК ЦенаРеализации,
	(ПоступлениеТоваровРФТовары.Цена - РеализацияТоваровУслугТовары.Цена) КАК РазницаЦен
	
ИЗ
	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровРФ.Товары КАК ПоступлениеТоваровРФТовары
		ПО РеализацияТоваровУслугТовары.Номенклатура = ПоступлениеТоваровРФТовары.Номенклатура
ГДЕ
	РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
        И ПоступлениеТоваровРФТовары.Ссылка.Дата МЕЖДУ ДобавитьКДате(&ДатаНачала, Месяц, -6) И &ДатаОкончания

СГРУППИРОВАТЬ ПО
        ПоступлениеТоваровРФТовары.Ссылка,
	ПоступлениеТоваровРФТовары.Номенклатура,
	ПоступлениеТоваровРФТовары.Цена,
	ПоступлениеТоваровРФТовары.Ссылка.Контрагент,
	РеализацияТоваровУслугТовары.Ссылка,
	РеализацияТоваровУслугТовары.Сумма,
	РеализацияТоваровУслугТовары.Цена
Показать
19. VictorRGB2 13 09.11.22 12:53 Сейчас в теме
(13) если правильно понял условие задачи, то как-то так
ВЫБРАТЬ
	РеализацияТоваровУслугТовары.Номенклатура КАК Номекнлатура,
	РеализацияТоваровУслугТовары.Цена КАК ЦенаРеализации
ПОМЕСТИТЬ ВТ_Реализации
ИЗ 
	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
; 
/////

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

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

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

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


ЗЫ код писал в блокноте... за работу не гарантирую, но принцип должен быть понятен
user1671936; +1 Ответить
21. user1671936 1 09.11.22 13:09 Сейчас в теме
3. soft_wind 09.11.22 10:32 Сейчас в теме
(1)а с чем соединяете? а учет партий, учет количества? например
поступило из РФ- 1000 шт. (01,06)
из КНР - 100 (03,06)

если подтягиваете к Продаже (800 шт) то получите только товар из КНР. (по вашей логике)
12. tamidi 8 09.11.22 11:16 Сейчас в теме
(1)А в регистры у вас что-то пишется по документам ПоступлениеТоваровРФ и ПоступлениеТоваровКНР? Может есть какой-то общий для этих документов, оттуда проще будет получить информацию.
14. user1671936 1 09.11.22 11:27 Сейчас в теме
(12) общего регистра, к сожалению, нет
16. tamidi 8 09.11.22 11:42 Сейчас в теме
Можно попробовать так:
1. Получаем список номенклатуры из реализации во временную таблицу
2. Соединяем эту временную таблицу с номенлатурой из ПоступлениеТоваровРФ и ПоступлениеТоваровКНР, делаем одним запросом с объединением, из документов выбираем дату и цену, также пишем во временную таблицу
3. Из временной таблицы п.2 получаем максимальную дату по номенклатуре
4. Соединяем таблицу из п.3 с таблицей из п.2 по номенклатуре и дате и получаем результат из временной таблицы 2
Единственно, засада может быть, если у документов ПоступлениеТоваровРФ и ПоступлениеТоваровКНР для одной номенклатуры одинаковые даты, ну тут уж вы сами дальше решайте, что будете с этим делать
VictorRGB2; user645801_yyyuuu123q; user1671936; +3 Ответить
17. user1671936 1 09.11.22 11:48 Сейчас в теме
4. Ivan_Sol 19 09.11.22 10:42 Сейчас в теме
Добрый день. Да можно одним запросом - но проще разбить на несколько, опять же из-за учета количества по партиям
5. user1671936 1 09.11.22 10:52 Сейчас в теме
(3)
(4) учет ни партий ни количества не нужен. Нужно только цену получать.
8. VictorRGB2 13 09.11.22 11:00 Сейчас в теме
9. Ivan_Sol 19 09.11.22 11:01 Сейчас в теме
Тогда проще получаем список накладных - из них список номенклатуры - по этом списку строим таблицу с датами последнего поступления - к этой таблице добавляем цены из накладных и соединяем все это
11. Ivan_Sol 19 09.11.22 11:03 Сейчас в теме
Вот пример:
https://infostart.ru/1c/articles/1072770/

Работа с запросами. Получение последней цены товара из табличной части документа. Несколько вариантов
user1671936; +1 Ответить
15. user1671936 1 09.11.22 11:30 Сейчас в теме
(11) спасибо, сейчас попробую как в примере.
20. Ivan_Sol 19 09.11.22 13:06 Сейчас в теме
18. karamazoff 96 09.11.22 11:58 Сейчас в теме
А у вас есть в конторе програмыст? Сильно снизило бы проблемы...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот