|   |   | 
| 
 | Ошибка в запросе (баг в платформе со строковыми функции в запросе) | ☑ | ||
|---|---|---|---|---|
| 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 | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |