|
v7: Объединение списка справочника и пересечения справочников по реквизиту в выборку | ☑ | ||
---|---|---|---|---|
0
SSDDRR
27.04.17
✎
20:06
|
Приветствую!
Дано: 1) справочник "ГТД" размером, допустим, 9 000 элементов; из них примерно 6500 участвуют в справочнике "Партии", по которому уже можно найти страну происхождения, сопоставляя с ГТД. 2) запрос, который выдаёт как раз список из примерно 6500 ГТД, которые участвуют в справочнике "Партии": [код] ТекстЗапроса = " |Обрабатывать НеПомеченныеНаУдаление; |ГТДОбщий = Справочник.ГТД.ТекущийЭлемент, Справочник.Партии.ГТД; |Партия = Справочник.Партии.ТекущийЭлемент; |ГТДПартии = Справочник.Партии.ГТД; |СтранаПроисхожденияПартии = Справочник.Партии.СтранаПроисхождения; |Группировка ГТДОбщий без групп; |Группировка Партия без групп; |Условие (ПустоеЗначение(ГТДПартии) + ПустоеЗначение(СтранаПроисхожденияПартии) + Найти(Строка(ГТДПартии) + Строка(СтранаПроисхожденияПартии), ""--"") = 0);"; [/код] Вопрос: можно ли как-нибудь заставить запрос выдавать полный список из 9000 ГТД, а не только 6500, участвующие в справочнике "Партии"? В итогах запроса для остальных 2500 вторичная группировка "Партия" просто должна быть пустой. Добавление в запрос строки вроде "ГТД = Справочник.ГТД.ТекущийЭлемент;" и соответствующей группировки "Группировка ГТД без групп;" портит запрос, он выдаёт пустой итог, то есть это неправильно. Как исправить запрос? (Разумеется, можно сделать два запроса и (или) обработку после запроса, но хотелось бы получить сразу в одном запросе.) Спасибо заранее. |
|||
1
SSDDRR
27.04.17
✎
20:09
|
По идее, от запроса следует добиться чего-то вроде "левого соединения" в "Эс-Кью-Эль".
|
|||
2
GreyK
27.04.17
✎
20:46
|
Как-то так, открывать конфигуратор лень.
|Группировка ГТДОбщий без групп ВсеВошедшиеВЗапрос; |
|||
3
Смотрящий
27.04.17
✎
20:46
|
|Обрабатывать НеПомеченныеНаУдаление;
|ГТДОбщий = Справочник.ГТД.ТекущийЭлемент, Справочник.Партии.ГТД; |Партия = Справочник.Партии.ТекущийЭлемент; |СтранаПроисхожденияПартии = Справочник.Партии.СтранаПроисхождения; |Функция Счетчик = Счётчик(); |Группировка ГТДОбщий без групп; |Группировка Партия без групп; |
|||
4
SSDDRR
27.04.17
✎
23:25
|
(2) (3) Спасибо.
В итоге у меня получилось нужное с таким запросом: ТекстЗапроса = " |Обрабатывать НеПомеченныеНаУдаление; |ГТД = Справочник.ГТД.ТекущийЭлемент, Справочник.Партии.ГТД; |Партия = Справочник.Партии.ТекущийЭлемент; |Группировка ГТД без групп Все; |Группировка Партия без групп; |Условие (ПустоеЗначение(Строка(ГТД)) + Найти(Строка(ГТД), ""--"") = 0);"; -- я проверил это выгрузив итог в таблицу значений. Однако при непосредственном обходе итога метод "Группировка("Партия")" приводит к гарантированно мёртвому зависанию в случаях, когда выборка пустая, когда в итог добавлены ГТД, не участвующие в партиях. При выгрузке итога в таблицу значений это выглядит так (с моимими пояснениями): ___________________________________________ 00035, 0124020/300102/0000303/1, <-- Группировка("ГТД"): три вложенных значения внутренней вложенной группировки по партиям: 00036, 0124020/300102/0000303/1, 00000001 <-- Группировка ("Партия") 00037, 0124020/300102/0000303/1, 00000001 <-- Группировка ("Партия") 00038, 0124020/300102/0000303/1, 00000001 <-- Группировка ("Партия") 00047, 0210140/030709/0017567/5, <-- Группировка("ГТД"): ноль значений внутренней вложенной группировки по партиям -- зависание!!!!!!!!!!!!!!!!!!!! 00048, 03910/020301/0002022, <-- Группировка("ГТД"): одно значение внутренней вложенной группировки по партиям: 00049, 03910/020301/0002022, 00000002 <-- Группировка("Партия") ___________________________________________ Как можно делать обход вложенной группировки так, чтобы "Группировка("Партия")" не зависала? Согласно описанию, эта функция должна возвращать "0", если в выборке ничего нет, а не зависать. (Разумеется, можно работать с таблицей значений, но хотелось бы и прямым перебором уметь тоже.) |
|||
5
SSDDRR
27.04.17
✎
23:39
|
А, понял, в чём дело: я использую вызов функции с ключом для вывода выборки в обратном порядке: "Группировка("Партия", -1)" -- видимо, в платформе "7.70.027" есть ошибка, которая приводит к зависанию при пустой выборке.
Поэтому придётся использовать выборку в прямом порядке, что, конечно, очень медленно, ведь мне нужен именно последний элемент справочника "Партии", то есть с конца. |
|||
6
пипец
28.04.17
✎
08:55
|
ничо не понял, а в ТЗ , перевернуть и искать , не ?
|
|||
7
SSDDRR
28.04.17
✎
11:09
|
Хочется именно прямым перебором итогов запроса, без выгрузки в ТЗ.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |