Всем привет
Помогите разобраться.
Нужно получить отчет в котором все заказы клиентов с начала года, по которым не выполнена отгрузка (нет реализации) и все заказы за период (задаем руками) с отгрузками и без отгрузок.
Обращаюсь к рег накопления Заказы клиентов. В результате дает все заказы клиентов с начала года. Как можно исключить из результата заказы, по которым прошла отгрузка? Какое условие добавить?
Помогите разобраться.
Нужно получить отчет в котором все заказы клиентов с начала года, по которым не выполнена отгрузка (нет реализации) и все заказы за период (задаем руками) с отгрузками и без отгрузок.
Обращаюсь к рег накопления Заказы клиентов. В результате дает все заказы клиентов с начала года. Как можно исключить из результата заказы, по которым прошла отгрузка? Какое условие добавить?
ВЫБРАТЬ
ЗаказыКлиентов.Период КАК Период,
ЗаказыКлиентов.Регистратор КАК Регистратор,
ЗаказыКлиентов.ВидДвижения КАК ВидДвижения,
ЗаказыКлиентов.ЗаказКлиента КАК ЗаказКлиента,
ЗаказыКлиентов.Заказано КАК Заказано,
ЗаказыКлиентов.КОформлению КАК КОформлению,
ЗаказыКлиентов.Сумма КАК Сумма,
ВЫБОР
КОГДА ЗаказыКлиентов.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
ТОГДА ЗаказыКлиентов.Заказано
ИНАЧЕ 0
КОНЕЦ КАК ЗаказКоличество,
ВЫБОР
КОГДА ЗаказыКлиентов.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
ТОГДА ЗаказыКлиентов.Заказано
ИНАЧЕ 0
КОНЕЦ КАК РеализацияКоличество,
ВЫБОР
КОГДА ЗаказыКлиентов.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
ТОГДА ЗаказыКлиентов.Сумма
ИНАЧЕ 0
КОНЕЦ КАК ЗаказСумма,
ВЫБОР
КОГДА ЗаказыКлиентов.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
ТОГДА ЗаказыКлиентов.Сумма
ИНАЧЕ 0
КОНЕЦ КАК РеализацияСумма
ИЗ
РегистрНакопления.ЗаказыКлиентов КАК ЗаказыКлиентов
ГДЕ
ЗаказыКлиентов.Заказано <> 0
И ЗаказыКлиентов.ЗаказКлиента.Дата Между &ДатаЗаказа и &Дата2
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ТоварыКОтгрузке.Период,
ТоварыКОтгрузке.Регистратор,
ТоварыКОтгрузке.ВидДвижения,
ТоварыКОтгрузке.ДокументОтгрузки,
ТоварыКОтгрузке.КОтгрузке,
ТоварыКОтгрузке.КОформлению,
NULL,
NULL,
NULL,
NULL,
NULL
ИЗ
РегистрНакопления.ТоварыКОтгрузке КАК ТоварыКОтгрузке
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
ПО ТоварыКОтгрузке.Регистратор = ТоварыОрганизаций.Регистратор
ГДЕ
ТоварыКОтгрузке.Регистратор.Дата МЕЖДУ &Дата И &Дата2
И ТоварыКОтгрузке.ВидДвижения = &ВидДвижения
И ТоварыОрганизаций.ХозяйственнаяОперация = &ХозяйственнаяОперация
ПоказатьПо теме из базы знаний
- Получение фактических данных с помощью произвольного запроса. Бюджетирование. ERP 2.2
- Переход с 1С:УПП на 1C:ERP. Переделываем интеграции, использующие SQL запросы к СУБД (на примере УПП -> QlikView -> ERP)
- Экспертный взгляд на оптимизацию производительности на примере исправления и декомпозиции запроса
- Разбор механизма "Настройки полей формы" в 1С:ERP. Управление холдингом
- Запрос кодов маркировки товаров через API Честный знак (Система маркировки товаров) по заданным фильтрам и списание
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(4) Раз вы решили использовать таблицу регистра, то не ждите производительного запроса) Можно вот так в лоб.
Сначала в временную таблицу выберете все заказы, по которым была отгрузка.
Далее в свой запрос вставляйте условие
Сначала в временную таблицу выберете все заказы, по которым была отгрузка.
ВЫБРАТЬ РАЗЛИЧНЫЕ
ЗаказыКлиентовОстаткиИОбороты.ЗаказКлиента КАК ЗаказКлиента
ПОМЕСТИТЬ ВТ_ЗаказыСОтгрузками
ИЗ
РегистрНакопления.ЗаказыКлиентов.ОстаткиИОбороты(&Дата, &Дата2, Авто, , ) КАК ЗаказыКлиентовОстаткиИОбороты
ГДЕ
ЗаказыКлиентовОстаткиИОбороты.ЗаказаноРасход > 0
;
ПоказатьДалее в свой запрос вставляйте условие
ГДЕ
ЗаказыКлиентов.Заказано <> 0
И ЗаказыКлиентов.ЗаказКлиента.Дата Между &ДатаЗаказа и &Дата2
И НЕ ЗаказыКлиентов.ЗаказКлиента В (Выбрать ВТ.ЗаказКлиентаИз ВТ_ЗаказыСОтгрузками КАК ВТ)
(8) Нет)
Первое это желательно сделать через виртуальную таблицу ОстаткиИОбороты. У нее есть фильтры по периоду, всем измерениям.
В вашем запросе выбираются все строки из регистра (к примеру их там 10 млн), потом они фильтруются по первому и второму условию. А если в отчете будет СуммаЗаказано), то отчет еще суммировать эти миллионы будет). В таблице оборотов уже просуммировано и фильтры накладываются быстрее
Первое условие пойдет, второе "ЗаказыКлиентов.ЗаказКлиента.Дата МЕЖДУ &Дата И &Дата2" имеет 2 момента:
1) очень похоже на ЗаказыКлиентов.Период МЕЖДУ &Дата И &Дата2. Период у регистров индексируется, поэтому будет быстрее.
2) ЗаказКлиента тип составной, поэтому запрос сделает неявные левые соединения со всеми типами, которые есть в измерении (С Заказами давальцев, и пр) Можете выполнить запрос под пользователем, у которого права только на заказы клиентов и убедиться, что у него запросят права на заказы давальцев).
Долго объяснять почему, просто факт - если поле составное, то нельзя к нему обращаться через точку. тоже самое с регистратором.
ЗаказыКлиентов.ЗаказКлиента.Дата - плохо
ЗаказыКлиентов.Регистратор.Дата - плохо
ВЫРАЗИТЬ(ЗаказыКлиентов.ЗаказКлиента КАК Документ.ЗаказКлиента).Дата - лучше, так как явно указано, что поле дата нужно брать из таблицы заказов клиентов, и не нужно получать из всех типов.
Если честно есть еще куда оптимизировать, но это первое что успел написать
Первое это желательно сделать через виртуальную таблицу ОстаткиИОбороты. У нее есть фильтры по периоду, всем измерениям.
В вашем запросе выбираются все строки из регистра (к примеру их там 10 млн), потом они фильтруются по первому и второму условию. А если в отчете будет СуммаЗаказано), то отчет еще суммировать эти миллионы будет). В таблице оборотов уже просуммировано и фильтры накладываются быстрее
Первое условие пойдет, второе "ЗаказыКлиентов.ЗаказКлиента.Дата МЕЖДУ &Дата И &Дата2" имеет 2 момента:
1) очень похоже на ЗаказыКлиентов.Период МЕЖДУ &Дата И &Дата2. Период у регистров индексируется, поэтому будет быстрее.
2) ЗаказКлиента тип составной, поэтому запрос сделает неявные левые соединения со всеми типами, которые есть в измерении (С Заказами давальцев, и пр) Можете выполнить запрос под пользователем, у которого права только на заказы клиентов и убедиться, что у него запросят права на заказы давальцев).
Долго объяснять почему, просто факт - если поле составное, то нельзя к нему обращаться через точку. тоже самое с регистратором.
ЗаказыКлиентов.ЗаказКлиента.Дата - плохо
ЗаказыКлиентов.Регистратор.Дата - плохо
ВЫРАЗИТЬ(ЗаказыКлиентов.ЗаказКлиента КАК Документ.ЗаказКлиента).Дата - лучше, так как явно указано, что поле дата нужно брать из таблицы заказов клиентов, и не нужно получать из всех типов.
Если честно есть еще куда оптимизировать, но это первое что успел написать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот