Имя: Пароль:
1C
1C 7.7
v7: Перестали работать запросы
, , ,
0 Nokia3310
 
12.04.22
15:33
Вопрос знатокам
В SQL(!) базе любой запрос, если в нем есть пользовательская функция, то она всегда возвращает 0
А в DBF базе возвращает нормальное значение
В чем секрет?

Функция КолвоПлюс(Колво, Плюс)
    
  Возврат Колво + Плюс;
    
КонецФункции // ЧислоПлюс

    Запрос = СоздатьОбъект("Запрос");
    Запрос.ВключитьSQL(1);
    Запрос_текст = "
    |Ном = Регистр.ПартииНаличие.Номенклатура;
    |Колво = Регистр.ПартииНаличие.Количество;
    |Функция КолвоПлюс = Сумма(КолвоПлюс(Колво, 1)); //всегда возвращает 0
    |Функция КонОст = КонОст(Колво);
    |Группировка Ном;
    |";
1 Nokia3310
 
12.04.22
16:06
Получается, что в режиме  Запрос.ВключитьSQL(1) эта функция даже не вызывается. Как ее включить?
2 Builder
 
12.04.22
16:28
(1) Вообще не использовать Запрос.ВключитьSQL(1) не пробовал?
3 Андрей_Андреич
 
naïve
12.04.22
16:36
(0) А что получить-то хочешь? Что за КолвоПлюс
4 Nokia3310
 
12.04.22
16:36
(2) Пробовал. Тогда работает. но и скорость падает в 20 раз
5 Nokia3310
 
12.04.22
16:37
(3) Это просто пример любой пользовательской функции
6 dreizehn
 
12.04.22
16:38
(4) А какого поведения ты ожидаешь от использования недокументированной функции?
7 Nokia3310
 
12.04.22
16:39
(6) Хочу чтобы работало
8 Андрей_Андреич
 
naïve
12.04.22
16:47
(7) У тебя ИМХО неудачный пример совместного использования функции КонОст и Сумма. Убери КонОст, задай период. В твоем запросе просто выгружаются итоги на точку актуальности, т.е. перебора движений регистров нет. Могу ошибаться - классических запросов 100 лет не писал, а в особо извращенной форме и того более :))
9 Nokia3310
 
12.04.22
16:53
(8) Ошибки в запросе нет, он работает в DBF версии, а в SQL функция КолвоПлюс возвращает 0
10 Nokia3310
 
12.04.22
16:59
(4) Тут дело в том, что  Запрос.ВключитьSQL(1) неявно включается, если платформа запущена в SQL варианте
11 Volodja
 
12.04.22
17:01
(10) используй прямые запросы.
12 Ёпрст
 
12.04.22
19:04
(0) на то оне и внешние функции..которые работают снаружи запроса. А сам скуль не могёт такое, только если 1с-ина потом сама тебе посчитает.
13 Ёпрст
 
12.04.22
19:04
Ну и для скуля (и для дбф) писать черные запросы - моветон.
Единственное, для чего они годны - итоги по иерархии разве что.
Всё.
14 Ёпрст
 
12.04.22
19:05
Хотя, её можно и так собрать, а если спецом озаботиться хранением иерархии в отдельной табличке, так и подавно.
15 Злопчинский
 
12.04.22
19:13
(1) запусти отладку. поставь бряк в функции и смотри вызывается или нет. или тупо в функцию Сообщить("работает Имя функции");
16 Злопчинский
 
12.04.22
19:15
(9) Сумма() - за какой период? как правильно отметили
17 Злопчинский
 
12.04.22
19:17
Еще после того как правильно переписать запрос без неявностей
попробовать  |Функция КолвоПлюс = Сумма(КолвоПлюс(Запрос.Колво, 1));
18 Chai Nic
 
12.04.22
19:28
Не парь мозги себе и окружающим. Используй прямые запросы. А штатный семерочный запрос - неудачный атавизм.
19 Злопчинский
 
12.04.22
19:33
(18) ну, штатный чорный работает изкоробки.
а к прямым - еще кучу приблуд надо ставить - драйвер? строка подключения? правильное указание параметров в строке подключения?
20 Chai Nic
 
12.04.22
20:36
(19) Для SQL-базы ничего не надо, кроме 1cpp.dll. А оно и само по себе полезно. Та же индексированная таблица открывает новые горизонты возможностей.
21 Злопчинский
 
13.04.22
00:03
(20) а, точняк, это я дбфщик, на скуле у клиентов мало баз.
22 Arbuz
 
13.04.22
15:53
(21) дык, на дбф есть 1скулайт для прямых
23 АгентБезопасной Нацио
 
13.04.22
16:03
(14) или методом ильдаровича, здоровья ему...
24 Злопчинский
 
13.04.22
19:58
(22) я в курсе.
но он не всегда хорошо отрабатывает.
тот же запрос через VFP может оказаться лучшее существенно.
так мну гуру говорили.
но может я неправильно понял/здесь озвучиваю
25 Злопчинский
 
13.04.22
19:58
хотя даже "плохо" работающий скулайт будет лучше сeщественно чорного запроса/
вроде так.
26 Arbuz
 
14.04.22
15:54
(25) Ну, я тут недавно переписывал один оперативный отчёт на прямые... на чорных формировался пять минут, а в тяжёлых случаях приходилось снимать задачу, а на прямых скулайта - две секунды, в тяжёлых случаях - 15 секунд! В основном из-за того, что почти всю логику, а не просто равнозначные запросы перенёс из 1С на скуль (в 1sqlite есть же cte, оконные, а в последней и математические функции).
27 Злопчинский
 
14.04.22
20:29
(26) сте и прочее - это для меня высший пилотадж.
я-то и прямые запросы практически не использую и не пишу виду отсутсвия острой необходимости и слабой квалификации в них. ну вот просто так сложилось.. конторы мелкие, база в родной конторе самая большая в пике под 9Гб. Регистры заркрыты, документов немного - все формируется по-чорному или выборками.