![]() |
|
v7: Отчет с "неопределенными" группировками в прямых запросах | ☑ | ||
---|---|---|---|---|
0
AMKahm
16.08.11
✎
14:35
|
Пролемма такая есть...
Запрос идет по периодам... по регистру Продажи... отчетик написать надо где группировки можно вручную выбирать: т.е.: Хочу выбиру из Списка: Фирма-Склад-Покупатель-Номенклатура-Партия или Поставщик-Номенклатура или Фирма-Номенклатура-Покупатель если писать 7-шным "языком" запросов то понятно сделал |Группировка Фирма; |Группировка Номенклатура; |Группировка Покупатель; - и профит... тока за 3 месяца запрос формируется аж минут 10... что совсем плохо... хочется написать это чудо на 1С++ прямых запросах... вопрос тока как? Следующая хрень выдаст примерно тоже, что и Запрос стандартными средствами по номенклатуре: |SELECT DISTINCT | TabSpr.id [Номенклатура $Справочник.Номенклатура] | , CASE WHEN (TabSpr.IsFolder = 1) THEN '_______________'+TabSpr.DESCR | ELSE TabSpr.DESCR | END As Наименование | , TabSpr.IsFolder As ЭтоГруппа | , $TabSpr.Артикул As Артикул | ,CASE WHEN TabSprGr4.DESCR IS NOT NULL THEN 5 | ELSE | CASE WHEN TabSprGr3.DESCR IS NOT NULL THEN 4 | ELSE | CASE WHEN TabSprGr2.DESCR IS NOT NULL THEN 3 | ELSE | CASE WHEN TabSprGr1.DESCR IS NOT NULL THEN 2 | ELSE 1 | END | END | END | END As Уровень, | CASE WHEN TabSprGr4.DESCR IS NOT NULL THEN TabSprGr4.id | ELSE | CASE WHEN TabSprGr3.DESCR IS NOT NULL THEN TabSprGr3.id | ELSE | CASE WHEN TabSprGr2.DESCR IS NOT NULL THEN TabSprGr2.id | ELSE | CASE WHEN TabSprGr1.DESCR IS NOT NULL THEN TabSprGr1.id | ELSE | CASE WHEN (TabSpr.IsFolder = 1) THEN TabSpr.id | END | END | END | END | END [гр1с $Справочник.Номенклатура], | CASE WHEN (TabSprGr3.DESCR IS NOT NULL) | AND (TabSprGr4.DESCR IS NOT NULL) THEN TabSprGr3.id | ELSE | CASE WHEN (TabSprGr2.DESCR IS NOT NULL) | AND (TabSprGr3.DESCR IS NOT NULL) THEN TabSprGr2.id | ELSE | CASE WHEN (TabSprGr1.DESCR IS NOT NULL) | AND (TabSprGr2.DESCR IS NOT NULL) THEN TabSprGr1.id | ELSE | CASE WHEN (TabSprGr1.DESCR IS NOT NULL) AND (TabSpr.IsFolder = 1) THEN TabSpr.id | END | END | END | END [гр2с $Справочник.Номенклатура], | CASE WHEN (TabSprGr2.DESCR IS NOT NULL) | AND (TabSprGr3.DESCR IS NOT NULL) | AND (TabSprGr4.DESCR IS NOT NULL) THEN TabSprGr2.id | ELSE | CASE WHEN (TabSprGr1.DESCR IS NOT NULL) | AND (TabSprGr2.DESCR IS NOT NULL) | AND (TabSprGr3.DESCR IS NOT NULL) THEN TabSprGr1.id | ELSE | CASE WHEN (TabSprGr1.DESCR IS NOT NULL) AND (TabSprGr2.DESCR IS NOT NULL) AND (TabSpr.IsFolder = 1) THEN TabSpr.id | END | END | END [гр3с $Справочник.Номенклатура], | CASE WHEN (TabSprGr1.DESCR IS NOT NULL) | AND (TabSprGr2.DESCR IS NOT NULL) | AND (TabSprGr3.DESCR IS NOT NULL) | AND (TabSprGr4.DESCR IS NOT NULL) THEN TabSprGr1.id | ELSE | CASE WHEN (TabSprGr1.DESCR IS NOT NULL) AND (TabSprGr2.DESCR IS NOT NULL) AND (TabSprGr3.DESCR IS NOT NULL) AND (TabSpr.IsFolder = 1) THEN TabSpr.id | END | END [гр4с $Справочник.Номенклатура], | CASE WHEN TabSprGr4.DESCR IS NOT NULL THEN TabSprGr4.DESCR | ELSE | CASE WHEN TabSprGr3.DESCR IS NOT NULL THEN TabSprGr3.DESCR | ELSE | CASE WHEN TabSprGr2.DESCR IS NOT NULL THEN TabSprGr2.DESCR | ELSE | CASE WHEN TabSprGr1.DESCR IS NOT NULL THEN TabSprGr1.DESCR | ELSE | CASE WHEN (TabSpr.IsFolder = 1) THEN TabSpr.DESCR | END | END | END | END | END гр1, | CASE WHEN (TabSprGr3.DESCR IS NOT NULL) | AND (TabSprGr4.DESCR IS NOT NULL) THEN TabSprGr3.DESCR | ELSE | CASE WHEN (TabSprGr2.DESCR IS NOT NULL) | AND (TabSprGr3.DESCR IS NOT NULL) THEN TabSprGr2.DESCR | ELSE | CASE WHEN (TabSprGr1.DESCR IS NOT NULL) | AND (TabSprGr2.DESCR IS NOT NULL) THEN TabSprGr1.DESCR | ELSE | CASE WHEN (TabSprGr1.DESCR IS NOT NULL) AND (TabSpr.IsFolder = 1) THEN TabSpr.DESCR | END | END | END | END гр2, | CASE WHEN (TabSprGr2.DESCR IS NOT NULL) | AND (TabSprGr3.DESCR IS NOT NULL) | AND (TabSprGr4.DESCR IS NOT NULL) THEN TabSprGr2.DESCR | ELSE | CASE WHEN (TabSprGr1.DESCR IS NOT NULL) | AND (TabSprGr2.DESCR IS NOT NULL) | AND (TabSprGr3.DESCR IS NOT NULL) THEN TabSprGr1.DESCR | ELSE | CASE WHEN (TabSprGr1.DESCR IS NOT NULL) AND (TabSprGr2.DESCR IS NOT NULL) AND (TabSpr.IsFolder = 1) THEN TabSpr.DESCR | END | END | END гр3, | CASE WHEN (TabSprGr1.DESCR IS NOT NULL) | AND (TabSprGr2.DESCR IS NOT NULL) | AND (TabSprGr3.DESCR IS NOT NULL) | AND (TabSprGr4.DESCR IS NOT NULL) THEN TabSprGr1.DESCR | ELSE | CASE WHEN (TabSprGr1.DESCR IS NOT NULL) AND (TabSprGr2.DESCR IS NOT NULL) AND (TabSprGr3.DESCR IS NOT NULL) AND (TabSpr.IsFolder = 1) THEN TabSpr.DESCR | END | END гр4 |FROM $Справочник.Номенклатура As TabSpr (nolock) | LEFT OUTER JOIN $Справочник.Номенклатура As TabSprGr1 (nolock) ON TabSpr.PARENTID = TabSprGr1.ID | LEFT OUTER JOIN $Справочник.Номенклатура As TabSprGr2 (nolock) ON TabSprGr1.PARENTID = TabSprGr2.ID | LEFT OUTER JOIN $Справочник.Номенклатура As TabSprGr3 (nolock) ON TabSprGr2.PARENTID = TabSprGr3.ID | LEFT OUTER JOIN $Справочник.Номенклатура As TabSprGr4 (nolock) ON TabSprGr3.PARENTID = TabSprGr4.ID |WHERE (TabSpr.IsMark = 0) AND ($TabSpr.НеВключатьВпрайс = 0) AND ((TabSpr.ID IN (SELECT Val FROM #спЭлементов)) OR (TabSpr.IsFolder = 1)) |ORDER BY гр1,гр2,гр3,гр4,Наименование ... но такое чудо для каждой группировки это невозможно просто.... может уже что придумано чтоб прямые запросы выдавали тоже что и "стандартные" |
|||
1
palpetrovich
16.08.11
✎
14:41
|
Хм сюда не ходит, переименуй тему в "Епрст3... отчет с "неопределенными" группировками " :)
|
|||
2
AMKahm
16.08.11
✎
14:48
|
101 ОК.. а как переименовать тему....??? кнопки ПРАВКА не наметил чегото...
|
|||
3
palpetrovich
16.08.11
✎
14:52
|
(2) пошутил я, переименовать модератор может, а по сути - я так понял что на встроенном языке у тебя получается слишком долго, поэтому попытка перевести на прямые запросы
если да - то лучше заведи новую тему. в которой обязательно упомяни о "прямых". Так быстрее подтянутся спецы по них |
|||
4
AMKahm
16.08.11
✎
14:56
|
я смотрю тему уже переименовали! Спасибо!
|
|||
5
Ёпрст
гуру
16.08.11
✎
14:57
|
>>>Следующая хрень выдаст примерно тоже, что и Запрос стандартными средствами по номенклатуре:
как запрос к справочнику может выдать тоже, что и запрос к регистру Продажи - не ясно.. :) |
|||
6
palpetrovich
16.08.11
✎
14:57
|
(4) ну дык, это-ж волшебный форум... ;)
|
|||
7
Ёпрст
гуру
16.08.11
✎
14:58
|
+5 да и .. иерархию лучше по-другому делать, и во всяком случае, без case-ов
|
|||
8
Ёпрст
гуру
16.08.11
✎
15:00
|
А так, для твоего отчета ВТ обороты + динамический текст запроса. + вывод, либо через индексированную тЗ, либо через класс, либо еще как.
|
|||
9
AMKahm
16.08.11
✎
15:01
|
ну запрос к справочнику я для примера привел.... под также я имел ввиду - также сгруппирован, ну примерно,
как без кейсов еЁ сделать не подскажите? |
|||
10
AMKahm
16.08.11
✎
15:03
|
хм.. про индексированную понял... возможно... но как группировки то сделать... я 5 для примера привел.. у меня их там 19 на самом деле...
|
|||
11
Ёпрст
гуру
16.08.11
✎
15:04
|
(9) самое простое - создать табличку в скуле на соответствие родителей.. и тригером её обновлять.
Затем просто иметь всю иерархию быстро в самом запросе. Ну или куча лефтджоинов по парентид = количеству уровней справочника (это, если иерархия нужна в самой табличке ) Или,в индексированной тз разворачивать. |
|||
12
AMKahm
16.08.11
✎
15:08
|
да... думал об этом тож.... но это ценая куча быдлокода по сравнению с стандартным путем... боюсь следующий за мной чел ниасилит сиё чюдо...
.... списибо за совет! всй вродт полял... буду думать что лучше... |
|||
13
Ёпрст
гуру
16.08.11
✎
15:13
|
(12) ну, используй готовые классы и твоя тонна кода превратится в пару строк для построения любого отчета..
+юзай конструктор запросов и консоль отчета. делов то, на пару часов на всё |
|||
14
AMKahm
16.08.11
✎
15:17
|
... готовые!? как зовуться скажите пожалуйста.
|
|||
15
Ёпрст
гуру
16.08.11
✎
15:31
|
класс.Прямой запрос - разновидностей и вариантов вагон.
Самый удачный, этот http://www.1cpp.ru/forum/YaBB.pl?num=1246429625 http://www.1cpp.ru/forum/YaBB.pl?num=1285352210 для бухни этот: http://www.1cpp.ru/forum/YaBB.pl?num=1181817217 консоль http://www.1cpp.ru/forum/YaBB.pl?num=1191511579/0 она же http://infostart.ru/public/15517/ конструктор http://www.1cpp.ru/forum/YaBB.pl?num=1148127139/0#0 он же http://infostart.ru/public/14933/ еще куча консолей тут http://www.1cpp.ru/forum/YaBB.pl?num=1157967835/all класс для отчетов http://www.1cpp.ru/forum/YaBB.pl?num=1202201945 ну и т.д.. |
|||
16
Ёпрст
гуру
16.08.11
✎
15:32
|
есть еще поделка, которая чорный запрос на прямой пытается переделать сама.. турбо-запрос зовётся.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |