|
v7: 1С77 прямой запрос через SQLite - сортировка по наименованию | ☑ | ||
---|---|---|---|---|
0
Looking
30.05.16
✎
22:35
|
Доброго времени суток! Вопрос в продолжение темы
ТиС 77 Прямой запрос к справочнику Номенклатура Очень прошу подсказать - как отсортировать результат запроса по Наименованию номенклатуры? Сортировка по ID дает совсем не ту сортировку. ТекстЗапроса=" |WITH RECURSIVE |Goods(ID,PARENTID,ISFOLDER) AS ( -- вся номенклатура в группе |SELECT t0.ID,t0.PARENTID,t0.ISFOLDER |FROM Справочник_Номенклатура AS t0 |WHERE t0.PARENTID=@Группа |UNION SELECT t1.ID,t1.PARENTID,t1.ISFOLDER |FROM Справочник_Номенклатура AS t1 |), |NoGoods(ID,PARENTID,ISFOLDER) AS ( -- вся запрещенная номенклатура |SELECT t1.ID,t1.PARENTID,t1.ISFOLDER |FROM Справочник_СоставФильтраСправочникаНоменклатура AS t0 |LEFT JOIN Справочник_Номенклатура AS t1 | ON t0.Номенклатура=t1.ID |WHERE t0.PARENTEXT=@ФильтрПользователя |UNION SELECT t3.ID,t3.PARENTID,t3.ISFOLDER |FROM Справочник_Номенклатура AS t3 |INNER JOIN NoGoods ON t3.PARENTID=NoGoods.ID |) |SELECT |Goods.ID [NoGoods $Справочник.Номенклатура] |FROM Goods |LEFT JOIN NoGoods ON NoGoods.ID=Goods.ID |WHERE NoGoods.ID IS NULL |ORDER BY Goods.ID DESC |"; База=СоздатьОбъект("SQLiteBase"); База.Открыть(":memory:"); Запрос=База.НовыйЗапрос(); Запрос.Подготовить(ТекстЗапроса); Запрос.УстановитьПараметр("@ФильтрПользователя",глПользователь.ФильтрСправочникаНоменклатура); СЗОтображаемойНоменклатуры=СоздатьОбъект("СписокЗначений"); СЗОтображаемойНоменклатуры=Запрос.Выполнить(СЗОтображаемойНоменклатуры); ИспользоватьСписокЭлементов(СЗОтображаемойНоменклатуры); |
|||
1
Djelf
30.05.16
✎
23:37
|
Ну так ID идентификатор, Наименование это DESCR
|
|||
2
Looking
31.05.16
✎
07:42
|
(1)если я вместо
ORDER BY Goods.ID DESC пишу в запросе ORDER BY Goods.DESCR DESC то получаю ошибку Запрос.Подготовить(ТекстЗапроса); {Справочник.Номенклатура.ФормаСписка.ФормаСписка.Модуль(1109)}: no such column: Goods.DESCR Это из-за того, что я выше не объявил в запросе переменную, или из-за того что в DBF-таблице нет такой колонки - Наименование? |
|||
3
spock
31.05.16
✎
07:51
|
В твоих CTE Goods и NoGoods определены такие поля ID,PARENTID,ISFOLDER.
Либо добавляй доп.поле для сортировки, либо заджойни в запросе таблицу с товарами. |
|||
4
Looking
31.05.16
✎
07:56
|
(3)вот так сортировка вроде-бы получилась. но я совсем-совсем начинающий, просто добавил по аналогии DESCR. очень прошу проверить, верно-ли получилось, или этот вариант не корректен.
ТекстЗапроса=" |WITH RECURSIVE |Goods(ID,PARENTID,ISFOLDER,DESCR) AS ( -- вся номенклатура в группе |SELECT t0.ID,t0.PARENTID,t0.ISFOLDER, t0.DESCR |FROM Справочник_Номенклатура AS t0 |WHERE t0.PARENTID=@Группа |UNION SELECT t1.ID,t1.PARENTID,t1.ISFOLDER, t1.DESCR |FROM Справочник_Номенклатура AS t1 //|INNER JOIN Goods ON Goods.ID = t1.PARENTID |), |NoGoods(ID,PARENTID,ISFOLDER, DESCR) AS ( -- вся запрещенная номенклатура |SELECT t1.ID,t1.PARENTID,t1.ISFOLDER, t1.DESCR |FROM Справочник_СоставФильтраСправочникаНоменклатура AS t0 |LEFT JOIN Справочник_Номенклатура AS t1 | ON t0.Номенклатура=t1.ID |WHERE t0.PARENTEXT=@ФильтрПользователя |UNION SELECT t3.ID,t3.PARENTID,t3.ISFOLDER, t3.DESCR |FROM Справочник_Номенклатура AS t3 |INNER JOIN NoGoods ON t3.PARENTID=NoGoods.ID |) |SELECT |Goods.ID [NoGoods $Справочник.Номенклатура] |FROM Goods |LEFT JOIN NoGoods ON NoGoods.ID=Goods.ID |WHERE NoGoods.ID IS NULL |ORDER BY Goods.DESCR |"; |
|||
5
Djelf
31.05.16
✎
21:52
|
(4) Не так чтоб не корректен раз работает, но не оптимален.
- вот ты зачем засунул DESCR в NoGoods? Это же получение списка номенклатуры которую мы не будем показывать! Следовательно DESCR там вообще не нужен. - в Goods DESCR еще куда шло, но если ты через NoGoods отчильтровываешь 30% товаров, то их Наименования тоже не нужны. Следовательно - лишние действия. Достаточно еще раз приджойнить номенклатуру, и отсортировать уже по ней.
Не факт, что это работать будет быстрее (все зависит от планировщика sqlite) так что сравни, но DESCR из NoGoods убирай 100% |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |