![]() |
![]() |
|
Ошибка в запросе (баг в платформе со строковыми функции в запросе) nick86, Serg_1960, DiFas, mikecool, orakool, Студент23232, ALCAPONA, Fynjy, Vstur, Расим, bolder, Hawk_1c, youalex, PuhUfa, ttk, elka302, Terrixus, СвинТуз, Доминошник, Has, программистище, maxab72, Илья1С, Мультук, DimR_71, vis, zzz_zzz_zzz, Redkiy, DimVad, ADirks, Silgis, lexushka, Amra, palsergeich, вым, Гипервизор, banco
| ☑ | ||
---|---|---|---|---|
0
Студент23232
17.07.25
✎
12:02
|
пытаюсь разобраться в запросах, не понимаю почему выдает ошибку 'Неверные параметры "+" '
в этой секции Фальсификат.Торговое ПОДОБНО ВЫБОР КОГДА ДЛИНАСТРОКИ(СОКРЛП(ЛЕВ(СОКРЛП(Остатки.Номенклатура.Наименование), СТРНАЙТИ(СОКРЛП(Остатки.Номенклатура.Наименование), " ") - 1))) < 2 ТОГДА СОКРЛП(ЛЕВ(СОКРЛП(Остатки.Номенклатура.Наименование), СТРНАЙТИ(СОКРЛП(Остатки.Номенклатура.Наименование), " ") - 1)) + "%" ИНАЧЕ СОКРЛП(Остатки.Номенклатура.Наименование) + "%" КОНЕЦ хотя если в части "Тогда" убрать +"%" то работает |
|||
1
Волшебник
17.07.25
✎
12:33
|
говнокод
|
|||
2
youalex
17.07.25
✎
13:04
|
Любопытно, реально ошибки если:
ВЫБРАТЬ ЛЕВ("100", 1) + "1" (ЛЕВ от литерала рассчитывается на уровне платформы видимо ВЫБРАТЬ ЛЕВ(Спр.Наименование, 1) + "1" ИЗ Справочник.Номенклатура Спр (ЛЕВ трансформируется в LEFT на mssql) |
|||
3
Мультук
гуру
17.07.25
✎
22:30
|
(2)
В этом треде (можно читать только последнее сообщение). Я проводил "бесчеловечные" эксперименты с ПОДСТРОКА. Я результатов достиг (чисто из любопытства) Ошибка в соединении строк в запросе |
|||
4
Волшебник
17.07.25
✎
13:14
|
(2) Да, какие-то баги платформы.
|
|||
5
Студент23232
17.07.25
✎
13:20
|
(3) спасибо, большое
|
|||
6
Волшебник
17.07.25
✎
13:26
|
// так работает ВЫБРАТЬ "абв"+"гд" // так не работает, хотя должно ВЫБРАТЬ ЛЕВ("абв", 3) + "гд" // // ошибка: Неверные параметры "+" //а так снова работает ВЫБРАТЬ ПОДСТРОКА(ЛЕВ("абв", 3),1,1000) + "гд" |
|||
7
Волшебник
17.07.25
✎
13:22
|
(6)+ Закиньте на партнёрский, у кого есть доступ. Проверял на 8.5.1.397
|
|||
8
maxab72
17.07.25
✎
22:09
|
(6)+ а вот так работает
ВЫРАЗИТЬ (ЛЕВ("абв" + "еее", 3) КАК СТРОКА (3)) + "ввв" То есть ЛЕВ возвращает не строку или не совсем строку. |
|||
9
Волшебник
17.07.25
✎
22:13
|
(8) Кстати, редкий случай, когда студенческий говнокод потряс сообщество профессионалов 1С и разработчиков платформы 1С.
(0)👍Хороший говнокод! |
|||
10
Волшебник
18.07.25
✎
00:33
|
(7)+ Я вам приготовил обращение:
Тема: Необходимо исправить ошибку в обработке строковых операций в SQL-запросах 1С: `ЛЕВ(...) + "строка"`
Уважаемые разработчики платформы 1С, Мы, команда разработчиков 1С сообщества Mista.ru с многолетним стажем, столкнулись с проблемой, которая вызывает глубокое недоумение и сомнение в корректности формальной грамматики языка запросов 1С. Примитивный запрос со строковыми функциями работает некорректно (см код ниже): ВЫБРАТЬ "абв" + "гд" // Работает без ошибок ВЫБРАТЬ ЛЕВ("абв", 3) + "гд" // Не работает! Ошибка: "Неверные параметры '+'" // А так работает... (хак) ВЫБРАТЬ ПОДСТРОКА(ЛЕВ("абв", 3), 1, 1000) + "гд" Проблема: Функция `ЛЕВ()` и другие строковые функции должна возвращать строковое значение, что чётко указано в документации. Оператор `+` в SQL 1С заявлен как операция конкатенации строк. Однако при попытке сложить результат `ЛЕВ()` с другой строкой платформа выбрасывает ошибку на этапе синтаксического контроля. Это противоречит логике, ожиданиям и документации, а также нарушает принцип "не заставлять разработчиков писать бессмысленный код". Что делать: 1. Исправьте обработку строковых функций. Убедитесь, что результат `ЛЕВ()`, `ПРАВ()`, `ПОДСТРОКА()` и других функций, возвращающих строки, корректно совместимы с оператором `+` в контексте строк. 2. Уберите необходимость "магических обёрток". Не заставляйте нас писать `ПОДСТРОКА(..., 1, 1000)` или `ВЫРАЗИТЬ КАК СТРОКА` только для того, чтобы платформа "поняла", что мы имеем дело со строкой. 3. Следуйте своей же документации. Если в справке написано, что функция возвращает строку — пусть она ведёт себя как строка во всех контекстах. Мы, как разработчики, заслуживаем стабильной и логичной платформы. Исправьте это, пожалуйста. С уважением, Станислав Митичкин (Волшебник) МИСТА ФОРУМ |
|||
11
Волшебник
18.07.25
✎
01:31
|
(10) Я не сильно загнул про "корректности формальной грамматики языка запросов 1С"?
может лучше было бы "корректности формальной грамматики встроенного языка запросов 1С"? |
|||
12
Гипервизор
18.07.25
✎
05:14
|
(11) "Встроенный язык является важной частью технологической платформы".
"В платформе реализован язык запросов". Так что всё правильно, один называется встроенным языком, второй - просто языком. |
|||
13
Serg_1960
18.07.25
✎
08:41
|
(0) "Особенности использования в запросах оператора ПОДОБНО"
https://its.1c.ru/db/v8std/content/726/hdoc Не следует формировать строку шаблона вычислениями или конкатенацией. Правильно: Реквизит ПОДОБНО "123%" Реквизит ПОДОБНО &Шаблон Неправильно: Реквизит ПОДОБНО "123" + "%" Реквизит ПОДОБНО &Шаблон + "%" Платформа, имхо, "путается" из-за сложения строк: второй операнд в выражении должен быть неявно преобразовываться в строковый... invalid regular expression |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |