Запрос к erp

1. aritochka777 17.05.21 14:05 Сейчас в теме
Всем привет
Помогите разобраться.
Нужно получить отчет в котором все заказы клиентов с начала года, по которым не выполнена отгрузка (нет реализации) и все заказы за период (задаем руками) с отгрузками и без отгрузок.
Обращаюсь к рег накопления Заказы клиентов. В результате дает все заказы клиентов с начала года. Как можно исключить из результата заказы, по которым прошла отгрузка? Какое условие добавить?

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


ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ТоварыКОтгрузке.Период,
	ТоварыКОтгрузке.Регистратор,
	ТоварыКОтгрузке.ВидДвижения,
	ТоварыКОтгрузке.ДокументОтгрузки,
	ТоварыКОтгрузке.КОтгрузке,
	ТоварыКОтгрузке.КОформлению,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL
ИЗ
	РегистрНакопления.ТоварыКОтгрузке КАК ТоварыКОтгрузке
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
		ПО ТоварыКОтгрузке.Регистратор = ТоварыОрганизаций.Регистратор
ГДЕ
	ТоварыКОтгрузке.Регистратор.Дата МЕЖДУ &Дата И &Дата2
	И ТоварыКОтгрузке.ВидДвижения = &ВидДвижения
	И ТоварыОрганизаций.ХозяйственнаяОперация = &ХозяйственнаяОперация
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dandykry 10 17.05.21 14:15 Сейчас в теме
(1) Ох...
"прошла отгрузка" - это Заказ полностью отгружен? Если отгружен не полностью?
4. aritochka777 17.05.21 14:22 Сейчас в теме
(2)Это если есть связанный документ Реализация, созданный на основании Заказа клиента. Здесь неважно насколько отгружен - полностью или нет.
7. dandykry 10 17.05.21 14:41 Сейчас в теме
(4) Раз вы решили использовать таблицу регистра, то не ждите производительного запроса) Можно вот так в лоб.

Сначала в временную таблицу выберете все заказы, по которым была отгрузка.

ВЫБРАТЬ РАЗЛИЧНЫЕ
	ЗаказыКлиентовОстаткиИОбороты.ЗаказКлиента КАК ЗаказКлиента
ПОМЕСТИТЬ ВТ_ЗаказыСОтгрузками
ИЗ
	РегистрНакопления.ЗаказыКлиентов.ОстаткиИОбороты(&Дата, &Дата2, Авто, , ) КАК ЗаказыКлиентовОстаткиИОбороты
ГДЕ
	ЗаказыКлиентовОстаткиИОбороты.ЗаказаноРасход > 0

;
Показать

Далее в свой запрос вставляйте условие

ГДЕ
    ЗаказыКлиентов.Заказано <> 0
    И ЗаказыКлиентов.ЗаказКлиента.Дата Между &ДатаЗаказа и &Дата2
    И НЕ ЗаказыКлиентов.ЗаказКлиента В (Выбрать ВТ.ЗаказКлиентаИз ВТ_ЗаказыСОтгрузками КАК ВТ)
8. aritochka777 17.05.21 14:46 Сейчас в теме
(7) А чтобы производительно получилось, нужно к чему обращаться? Непосредственно из документов информацию тянуть?
10. dandykry 10 17.05.21 15:17 Сейчас в теме
(8) Нет)

Первое это желательно сделать через виртуальную таблицу ОстаткиИОбороты. У нее есть фильтры по периоду, всем измерениям.

В вашем запросе выбираются все строки из регистра (к примеру их там 10 млн), потом они фильтруются по первому и второму условию. А если в отчете будет СуммаЗаказано), то отчет еще суммировать эти миллионы будет). В таблице оборотов уже просуммировано и фильтры накладываются быстрее

Первое условие пойдет, второе "ЗаказыКлиентов.ЗаказКлиента.Дата МЕЖДУ &Дата И &Дата2" имеет 2 момента:
1) очень похоже на ЗаказыКлиентов.Период МЕЖДУ &Дата И &Дата2. Период у регистров индексируется, поэтому будет быстрее.
2) ЗаказКлиента тип составной, поэтому запрос сделает неявные левые соединения со всеми типами, которые есть в измерении (С Заказами давальцев, и пр) Можете выполнить запрос под пользователем, у которого права только на заказы клиентов и убедиться, что у него запросят права на заказы давальцев).
Долго объяснять почему, просто факт - если поле составное, то нельзя к нему обращаться через точку. тоже самое с регистратором.

ЗаказыКлиентов.ЗаказКлиента.Дата - плохо
ЗаказыКлиентов.Регистратор.Дата - плохо
ВЫРАЗИТЬ(ЗаказыКлиентов.ЗаказКлиента КАК Документ.ЗаказКлиента).Дата - лучше, так как явно указано, что поле дата нужно брать из таблицы заказов клиентов, и не нужно получать из всех типов.

Если честно есть еще куда оптимизировать, но это первое что успел написать
11. aritochka777 17.05.21 15:23 Сейчас в теме
(10) Попробую внести изменения согласно вашему комментарию
И еще вопрос. получу я строки заказов, по которым не прошла реализация.
Каким способом воспользоваться, чтобы получить еще и реализации.
Объединить в этом случае не сработает?
12. dandykry 10 18.05.21 06:39 Сейчас в теме
(11) Зависит от вида отчета, который нужно получить.
Возможно проще сделать разными наборами данных
3. glek 119 17.05.21 14:16 Сейчас в теме
(1) Попробуйте поюзать еще РС СостоянияЗаказовКлиентов. Там держится актуальная информация по заказам.
5. aritochka777 17.05.21 14:24 Сейчас в теме
(3)не подойдет, заказы не закрывают, статусы использовать не получится
6. glek 119 17.05.21 14:32 Сейчас в теме
(5) Не Статусы. В РС есть
Сумма оплаты
сумма отгрузки
и прочая сказочная фигня.
9. aritochka777 17.05.21 14:51 Сейчас в теме
(6)Да, процент отгрузки можно получить, Спасибо.
Но в результате дает все заказы с нулевой отгрузкой.
вторую часть запроса, где отбираются реализации, не отрабатывает.
т.е. никакого объединения данных нет.
В чем еще ошиблась?
13. user1135816 4 18.05.21 15:44 Сейчас в теме
А если оттолкнуться от реализации? найти те РТУ, которые с заказом, а вывести все заказы без РТУ
Оставьте свое сообщение

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