![]() |
![]() |
![]() |
|
Как оптимизировать запрос? ↓ (Волшебник 08.07.2025 09:29) program345, phabeZ, hunter76, Homer, Волшебник, Ненавижу 1С, H A D G E H O G s, vicof, DiMel_77, formista2000, Timon1405, okmail, Расим, Поток сознания, youalex, andryscha1c, elka302, nick86, бегинер, АгентБезопаснойНацио, Terrixus, KJlag, Климов Сергей, Широкий, TormozIT, Wern, fbear, dva1c, Borometr, Гипервизор, arsik, maxab72
| ☑ | ||
---|---|---|---|---|
0
program345
04.07.25
✎
10:44
|
Привет,
получаю логин пароль из рег.Сведений, получаю токен соответствующего склада, запросом в цикле ищу оплаченные заказы, и отправляю по ним данные по api. Как уйти от запроса в цикле? Насколько знаю по стандартам 1с это моветон. Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ РАЗЛИЧНЫЕ | ЗаказКлиента.Склад КАК Склад, | API.Логин КАК Логин, | API.Пароль КАК Пароль |ИЗ | Документ.ЗаказКлиента КАК ЗаказКлиента | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.API КАК API | ПО (ЗаказКлиента.Склад = API.Склад) | И (ЗаказКлиента.КаналПродаж = API.КаналПродаж) |ГДЕ | ЗаказКлиента.Проведен | И ЗаказКлиента.ДополнительныеРеквизиты.Свойство = &Свойство | И ЗаказКлиента.ДополнительныеРеквизиты.Значение = &Значение"; Запрос.УстановитьПараметр("Свойство",СвойствоСтатусЗазаза); Запрос.УстановитьПараметр("Значение",ЗначениеУведомлениеОПоступленииЗаказаПередано); РезультатЗапроса = Запрос.Выполнить(); ВыборкаСклад = РезультатЗапроса.Выбрать(); Пока ВыборкаСклад.Следующий() Цикл ЗапросВыкупленные = Новый Запрос; ЗапросВыкупленные.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ЗаказКлиента.НомерПоДаннымКлиента КАК НомерПоДаннымКлиента, | ЗаказКлиента.Ссылка КАК Ссылка, | ЗаказКлиента.Склад КАК Склад, | ЧекККМТовары.Ссылка КАК ЧекККМСсылка |ИЗ | Документ.ЗаказКлиента КАК ЗаказКлиента | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ЧекККМТовары | ПО ЗаказКлиента.Ссылка = ЧекККМТовары.ЗаказКлиента | И (ЧекККМТовары.Ссылка.Проведен) |ГДЕ | ЗаказКлиента.ДополнительныеРеквизиты.Свойство = &Свойство | И ЗаказКлиента.ДополнительныеРеквизиты.Значение = &Значение | И ЗаказКлиента.Проведен | И ЗаказКлиента.КаналПродаж = &КаналПродаж | И ЗаказКлиента.Склад = &Склад"; ЗапросВыкупленные.УстановитьПараметр("Свойство",СвойствоСтатусЗазаза); ЗапросВыкупленные.УстановитьПараметр("Значение",ЗначениеУведомлениеОПоступленииЗаказаПередано); ЗапросВыкупленные.УстановитьПараметр("КаналПродаж", КаналыПродаж); ЗапросВыкупленные.УстановитьПараметр("Склад",ВыборкаСклад.Склад); РезультатЗапроса = ЗапросВыкупленные.Выполнить(); КонецЦикла; |
|||
1
vicof
04.07.25
✎
10:27
|
СОЕДИНЕНИЯ спасут мир
|
|||
2
lEvGl
гуру
04.07.25
✎
10:36
|
а где тут вложенный запрос
в цикле что ле вот это что то стремное ГДЕ | ЗаказКлиента.Проведен | И ЗаказКлиента.ДополнительныеРеквизиты.Свойство = &Свойство | И ЗаказКлиента.ДополнительныеРеквизиты.Значение = &Значение надо брать из ТЧ ДопРеквизиты документа с внутренней связкой к регистру АПИ и еще одной внутренней связкой К НЕМУ же с ТЧ документа Чек три таблицы, две связи - между 1й и 2й, между 2й и 3й |
|||
3
Garykom
гуру
04.07.25
✎
10:30
|
Объедини два запроса в один, запрос в цикле не требуется
|
|||
4
Волшебник
04.07.25
✎
10:35
|
(0) Очередной бред
|
|||
5
LoneMan
04.07.25
✎
10:42
|
Ну хотя бы так навскидку
|
|||
6
lEvGl
гуру
04.07.25
✎
10:46
|
(5) как то соединений многовато, условия где ненужны, ну и работать, если так навскидку - не будет
да и вт наверно лишняя |
|||
7
Волшебник
04.07.25
✎
10:46
|
(5) Забыли период
|
|||
8
Garykom
гуру
04.07.25
✎
11:04
|
(6) ВТ есть смысл сделать для Склад|Логин|Пароль
но совсем не обязательно и да в (5) очередная глупость да еще с группировкой |
|||
9
LoneMan
04.07.25
✎
11:12
|
Нормальный запрос. Все таблицы и соединения будут использованы в итоговом запросе на стороне СУБД.
В контекст и оптимизацию не вникал, учитывая, что в исходном запросе вообще непонятно, что происходит. |
|||
10
Мультук
гуру
04.07.25
✎
11:13
|
(0)
если складов в районе 10 штук, то лучше оставить текущий говнокод и не писать новый. |
|||
12
Garykom
гуру
04.07.25
✎
11:46
|
(9) Ты кучу записей кладешь в ВТ а затем из нее снова забираешь
Зачем? Записей по складам с логин/пароль явно меньше, если и класть в ВТ то их Да еще универсальная ВТ (с запросом) для аналогичных других выгрузок по складам Но имхо одним запросом без ВТ (и без группировок) все прекрасно делается У тебя же чатгопотный идиотизм с МАКСИМУМ(ДокументЧекККМ.Ссылка) КАК ЧекККМ и СГРУППИРОВАТЬ ПО |
|||
13
LoneMan
04.07.25
✎
11:53
|
(12) А, ты об этом. Да не, вообще не парился. Разумеется, для реальной задачи написал бы по-другому.
|
|||
14
program345
08.07.25
✎
08:32
|
Всех благодарю за советы, написал такой код:
ВЫБРАТЬ РАЗЛИЧНЫЕ ЗаказКлиента.Ссылка КАК Ссылка, ЗаказКлиента.Склад КАК Склад, ЧекККМТовары.Ссылка КАК ЧекККМСсылка, API.Логин КАК Логин, API.Пароль КАК Пароль, ЗаказКлиента.НомерПоДаннымКлиента КАК НомерПоДаннымКлиента ИЗ Документ.ЗаказКлиента КАК ЗаказКлиента ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ЧекККМТовары ПО (ЗаказКлиента.Ссылка = ЧекККМТовары.УТР_ЗаказКлиента) И (ЧекККМТовары.Ссылка.Проведен) ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.API КАК API ПО (ЗаказКлиента.Склад = API.Склад) И (ЗаказКлиента.КаналПродаж = API.КаналПродаж) ГДЕ ЗаказКлиента.ДополнительныеРеквизиты.Свойство = &Свойство И ЗаказКлиента.ДополнительныеРеквизиты.Значение = &Значение И ЗаказКлиента.Проведен И ЗаказКлиента.КаналПродаж = &КаналПродаж УПОРЯДОЧИТЬ ПО ЗаказКлиента.Дата ИТОГИ МИНИМУМ(Логин), МИНИМУМ(Пароль), КОЛИЧЕСТВО(РАЗЛИЧНЫЕ НомерПоДаннымКлиента) ПО Склад От Итогов уйти не смог, я получаю выборку в группировке - склад, получаю токен апи для этого склада, дальше после обхода детальных записей делаю отправку НомерПоДаннымКлиента по данному складу. С учетом этого без итогов вообще никак. (10) Складов больше чем 10. |
|||
15
Волшебник
08.07.25
✎
08:43
|
(14) ТЧ Товаров зачем?
|
|||
16
program345
08.07.25
✎
08:50
|
(15) там ссылка на заказ, если в чеке заказ есть - он оплачен
|
|||
17
Волшебник
08.07.25
✎
09:04
|
(16) Ну так делай запрос к основной таблице Документ.ЧекККМ
|
|||
18
Волшебник
08.07.25
✎
09:28
|
а, понял. Заказ в таб.части
|
|||
19
program345
08.07.25
✎
13:29
|
(18) да
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |