|
v7: 1С++ прямые | ☑ | ||
---|---|---|---|---|
0
Эльниньо
13.11.14
✎
16:31
|
RS.УложитьСписокОбъектов(СпКл, "#Клиенты", "Контрагенты");
ТекстЗапроса = " |SELECT |Рег.Товар as [Товар $Справочник.Номенклатура], |Рег.Покупатель as [Клиент $Справочник.Контрагенты], |Рег.АдресГр as [ГрузоПол $Справочник.АдресаГрузополучателей], //|Рег.Бонус as Бонус, |Рег.СуммаПродажиОборот СуммаПрод, |Рег.СуммаЗакупкиОборот СуммаЗак, |Рег.СуммаБазНовОборот СуммаБаз, |Рег.КолвоБазОборот Количество, |Рег.Период День |FROM $РегистрОбороты.Продажи(:НачДата,:КонДата, День) as Рег |WHERE |Рег.Покупатель IN (SELECT Val FROM #Клиенты)"; СпКл - СписокЗначений, в нём список групп Спр.Контрагенты Какого рожна в запрос все контрагенты попадают? Что не так в запросе? |
|||
1
olegves
13.11.14
✎
16:37
|
Уложить список разворачивает группы до вложенных элементов
|
|||
2
Эльниньо
13.11.14
✎
16:39
|
Насколько я понимаю - в #Клиенты попадают все элементы из групп в списке.
Или при списке групп происходит затык и надо искать другой вариант? |
|||
3
Chai Nic
13.11.14
✎
16:40
|
А попробуй глянуть что там уложилось в SELECT Val FROM #Клиенты
|
|||
4
Эльниньо
13.11.14
✎
16:49
|
(3) Как? Это же ВТ
|
|||
5
mehfk
13.11.14
✎
16:50
|
оставить только SELECT Val FROM #Клиенты и посмотреть полученную тз
|
|||
6
Эльниньо
13.11.14
✎
16:51
|
(5) Спс
|
|||
7
Эльниньо
13.11.14
✎
17:01
|
Нет времени хорошенько прямыми заняться.
Где бы найти хорошего прямозапросечника |
|||
8
Эльниньо
14.11.14
✎
09:13
|
Вопрос к гуру 1С++:
Нужен мегаотчёт с кучей группировок, параметров, условий. Средствами 1С запрос написать не проблема. Прямыми пока никак. Не хватает понимания логики построения скулёвых запросов. А вот если скинуть всё (1 - 2 сек) в ИТЗ, а потом крути-верти как хочешь? |
|||
9
trad
14.11.14
✎
09:22
|
(8) "А вот если скинуть всё (1 - 2 сек) в ИТЗ, а потом крути-верти как хочешь?"
Так и делаю. Только зачем все, только согласно фильтрам заданным в отчете. Потом результат в ИТЗ и группируешь как надо и выводишь. |
|||
10
Эльниньо
14.11.14
✎
09:34
|
(9) Ну судя по сабжу, так и пытаюсь сделать
|
|||
11
antoneus
14.11.14
✎
09:38
|
(4) ВТ, емнип, если их руками не дропать, хранятся до окончания сеанса 1С.
|
|||
12
dk
14.11.14
✎
09:40
|
ну и для скорости желательно фильтровать в параметрах вирт. таблицы оборотов, а не после
----
|
|||
13
Salimbek
14.11.14
✎
09:58
|
(3) Смотреть желательно не ID-шники т.е. SELECT Val [Контр $Справочник.Контрагенты] from #Клиенты
(10) Для быстрого задания условий - добавляешь в условиях "SELECT ... FROM ... WHERE (1=1) "+Фильтр1; или, для Виртуальных таблиц, "SELECT ... FROM $РегистрОстатки.<ИмяРегистра>(,,,,"(1=1)"+Фильтр2+")"; И дальше в зависимости от заданных тебе параметров формируешь этот Фильтр ФильтрNN = ""; Для ... ФильтрNN = ФильтрNN+" AND "+ПолеФильтра + ВидСравнения + ЗначениеФильтра; КонецЦикла По группировкам - там много всего бывает, да еще и с иерархиями, так что, чаще всего, я тоже закидывал результат в Индексированную таблицу. Отдельно лишь замечу, что если нужно использовать Иерархию, то добавление колонок по последнему абзацу из раздела документации: http://www.1cpp.ru/docum/icpp/html/IndexedTable.html#group очень хорошо влияет на производительность. |
|||
14
Эльниньо
14.11.14
✎
10:24
|
(13) Это давно пользую.
Там тоже вопрос. Скажем у меня в фильтре были группы 3,4 Группировка раскидает вплоть до самого верхнего уровня - 1,2,3,4 Приходится избавляться от уровней 1,2 ИТЗ |
|||
15
Salimbek
14.11.14
✎
11:26
|
(14) Не понял, если ты хочешь вывести отчет с иерархией, то выводить надо всю иерархию. Если же запрос строится целенаправленно по определенной узкой выборке и выводить надо только эту узкую, то значит и группы надо получать в качестве полей запроса, типа:
Select группа3.id, группа4.id, Номенклатура.id FROM Справочник.Номенклатура как Группа3 INNER JOIN Справочник.Номенклатура как Группа4 ON Группа3.ID=Группа4.ParentID INNER JOIN Справочник.Номенклатура как Номенклатура ON ... |
|||
16
КонецЦикла
14.11.14
✎
11:31
|
Смотри параметры уложить, там есть насчет иерархии
|
|||
17
КонецЦикла
14.11.14
✎
11:33
|
(7) С какой целью интересуетесь?
Почта в личке :) |
|||
18
Skom
14.11.14
✎
11:53
|
а укладываешь список контрагентов, ты его откуда берешь?
|
|||
19
Skom
14.11.14
✎
11:57
|
из формы?
|
|||
20
Salimbek
14.11.14
✎
12:11
|
(19) А хоть откуда можно брать этот список, хоть из формы, хоть из какой другой выборки.
|
|||
21
Эльниньо
14.11.14
✎
12:11
|
(17) Мне на постоянку нужно
|
|||
22
Эльниньо
14.11.14
✎
12:11
|
(19) Список на морде
|
|||
23
Эльниньо
14.11.14
✎
12:31
|
Тут мысля пришла.
ИТЗ.ДобавитьИндекс() занимает время. Если сначала ДобавитьКолонку индекса, добавить индекс, а потом загрузить туда данные. По идее нехилый выигрыш во времени. Ща попробую |
|||
24
Skom
14.11.14
✎
12:35
|
(22) а сам запрос покажи
|
|||
25
Salimbek
14.11.14
✎
12:36
|
(23) Ты глубоко ошибаешься, Добавить индекс куда как быстрее, чем добавлять записи, которые потом должны еще и в индексе перестроиться.
|
|||
26
Skom
14.11.14
✎
12:39
|
(24) ахахаха вот тупанул))) в (0) же есть.
Вопрос только такой, рабочий запрос как в (0) или с дополнениями? |
|||
27
Skom
14.11.14
✎
12:45
|
А в группах, которые указаны в списке значений, подгруппы есть? или там только элементы?
|
|||
28
Skom
14.11.14
✎
12:46
|
А контрагенты с пустыми оборотами нужны?
|
|||
29
Skom
14.11.14
✎
12:53
|
Скоро раб. день закончится. Уйду ведь))
|
|||
30
Эльниньо
14.11.14
✎
12:56
|
Проблему сабжа уже решил.
Буду дальше вас терзать по мере появления неясностей. Или не буду, если быстро прямозапросечник с резюме нарисуется |
|||
31
Skom
14.11.14
✎
12:57
|
через ИТЗ? или прямыми?
Не интересно, как на прямых решить? |
|||
32
Skom
14.11.14
✎
13:00
|
в общем, ждем от тебя новых интересных задач))
|
|||
33
Эльниньо
14.11.14
✎
13:21
|
Нехрена не решил, мля.
Оставил в списке одну группу. В ней есть подгруппы. Вытаскивает обороты по всем |
|||
34
DrZombi
гуру
14.11.14
✎
13:39
|
(33) Дак оно так и работает.
Если нужно только этот уровень получить по группе, так и пиши соответствующее условие запроса. Если нужно по элементно, так помести в список не группу, а элементы :) |
|||
35
DrZombi
гуру
14.11.14
✎
13:44
|
+(33) Когда ты укладываешь командой список, С параметром "Контрагенты".
RS.УложитьСписокОбъектов(СпКл, "#Клиенты", "Контрагенты"); А в списке есть группа. То он заполнят временную таблицу всеми элементами этой группы. Если нужно заполнить чисто элементами из списка, то не указывай "Контрагенты"" |
|||
36
Эльниньо
14.11.14
✎
14:01
|
Всё норм. Запрос с вхере отработал за секунду.
Теперь тоскливо жду, когда 165000 строк в печатную форму выведет |
|||
37
Salimbek
14.11.14
✎
14:02
|
+(35) А если нужно заполнить только элементами этой подгруппы, без вложенных, то:
Номенклатура in (select id from $Справочник.Номенклатура where parentid=:ТвояГруппа) |
|||
38
Эльниньо
14.11.14
✎
14:46
|
Сейчас подобный фильтр по товарам прикручиваю
|
|||
39
Ёпрст
14.11.14
✎
14:51
|
вывод в печ форму тоже можно(и нужно) оптимизировать
|
|||
40
dk
14.11.14
✎
14:55
|
еще 1с++ сильно тупит на
as [бла-бла $Справочник.зю-зю] если больше 1000 элементов, то весьма ощутимо поэтому если ссылка не нужна, то лучше descr возвращать вместо ссылки |
|||
41
Эльниньо
14.11.14
✎
14:58
|
Второе условие кушать не хочет:
ТекстЗапроса = " |SELECT |Рег.Товар as [Товар $Справочник.Номенклатура], |Рег.Покупатель as [Клиент $Справочник.Контрагенты], |Рег.АдресГр as [ГрузоПол $Справочник.АдресаГрузополучателей], |Рег.СуммаПродажиОборот СуммаПрод, |Рег.СуммаЗакупкиОборот СуммаЗак, |Рег.СуммаБазНовОборот СуммаБаз, |Рег.КолвоБазОборот Количество, |Рег.Период День |FROM $РегистрОбороты.Продажи(:НачДата,:КонДата, День) as Рег |WHERE 1=1"; Если СпКл.РазмерСписка() > 0 Тогда RS.УложитьСписокОбъектов(СпКл, "#Клиенты", "Контрагенты"); ТекстЗапроса = ТекстЗапроса + " |Рег.Покупатель IN (SELECT Val FROM #Клиенты)"; КонецЕсли; Если ВыбТовары.РазмерСписка() > 0 Тогда RS.УложитьСписокОбъектов(ВыбТовары, "#Товары", "Номенклатура"); ТекстЗапроса = ТекстЗапроса + " |Рег.Товар IN (SELECT Val FROM #Товары)"; КонецЕсли; Тзап = RS.ВыполнитьИнструкцию(ТекстЗапроса); {\\FILES2\BASES\ERT\ПЛОСКАЯМАТРИЦАПРОДАЖ.ERT(58)}: State 42000, native 102, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'Рег'. |
|||
42
trad
14.11.14
✎
15:00
|
and забыл
|
|||
43
Ёпрст
14.11.14
✎
15:01
|
(41) ну ясен пень.. надо либо
and Рег.Покупатель .. and Рег.Товар ... делать, либо в тексте запроса СтрЗаменить(ТекстЗапроса,"1=1","Рег in ...,блаблабла"); СтрЗаменить(ТекстЗапроса,"2=2","Рег in ...,блаблабла"); |
|||
44
trad
14.11.14
✎
15:03
|
(43) оригинальный подход
|
|||
45
Ёпрст
14.11.14
✎
15:07
|
(44) :)
с тобой на бентли не заработаешь.. ЗЫ: на счет стрЗаменить - иногда удобно, если необходимо в разных местах воткнуть одинаковое условие, например, в юнионе, или еще где, где просто динамическое собирание..проблематично |
|||
46
Эльниньо
14.11.14
✎
15:10
|
(45) Спс, сенсэй. Сработало.
Я так понимаю "1=1 И 2=2" не катит Прокатило 1=1 аnd 2=2 |
|||
47
Ёпрст
14.11.14
✎
15:11
|
Это, такие конструкции в снеговике в полный рост использовались раньше в универсальном отчете, там правда через комменты в тексте запроса было оформлено всё..
и потом замена на условия, поля запроса, группировки и т.д |
|||
48
Эльниньо
14.11.14
✎
15:11
|
Самое лёгкое разрулил. Дальше ямы поглубже будут
|
|||
49
КонецЦикла
14.11.14
✎
15:12
|
Я всегда пишу (1 = 1)
Далее, динамически формируя условия - просто and ... |
|||
50
trad
14.11.14
✎
15:18
|
(45) я не про стрЗаменить, сам делаю через замену (не люблю склеивать запрос из кусочков).
я про 1=1 and 2=2 and 3=3 |
|||
51
Ёпрст
14.11.14
✎
16:17
|
(50) ну.. по всякому же можно :)
|
|||
52
Эльниньо
14.11.14
✎
16:18
|
Кстати отдельные простые и гениальные решения вызывают поначалу отторжение даже у опытных прогов.
Например: Флаг = 1 - Флаг или Замена Если на Пока в алгоритме удаления "лишних" строк в ТЗ |
|||
53
Chai Nic
14.11.14
✎
16:29
|
(52) Нафиг нафиг эти ваши гениальные решения.. не надо из кода делать ребус.
|
|||
54
МаякНаКазачке
14.11.14
✎
16:38
|
а вот и я
(43) подстрока рулит давайте ещё |
|||
55
Эльниньо
14.11.14
✎
16:40
|
(53) Ну можно и так:
Флаг = 1 - Флаг // не пугайся. Вот смотри: Флаг=1. 1 - 1 скока буит? Теперь Флаг=0. 1-0 скока буит? Вот то-то же |
|||
56
МаякНаКазачке
14.11.14
✎
16:40
|
(49) ай как некрасиво,
http://umk.portal.kemsu.ru/uch-mathematics/papers/posobie/r3-3.htm |
|||
57
МаякНаКазачке
14.11.14
✎
16:47
|
(49) православный восьмёроШник не похвалит и напишет Истина = &ПараметрИстина
|
|||
58
Целина
14.11.14
✎
16:52
|
(52)особенно помогает в отладке конструкция типа на восьмерке
Выполнить(Подсказка) кулаки аж трещат. |
|||
59
Целина
14.11.14
✎
16:55
|
вообще 1С так работает что любая нетривиальность в условиях без скобок сглючивает, просто с разной частотой
|
|||
60
Эльниньо
14.11.14
✎
17:43
|
(59) Спс. Учту
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |