8.х Оператор ПОДОБНО и служебные символы

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем v0233, 27 окт 2011.

  1. TopicStarter Overlay
    v0233
    Offline

    v0233 Опытный в 1С

    Регистрация:
    23 авг 2010
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    Добрый день. Создаю запрос, включаю в него условие ПОДОБНО. (тип строка).
    У меня в этой строке есть служебные символы
    например:
    [00515465456]_8495156456184-103_20111026132442(163).wav

    Запрос выдает пустой результат.
    Как решить эту задачу, чтобы не перебирать все элементы? Помогите пожалуйста.
  2. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    686
    Симпатии:
    8
    Баллы:
    29
    Что должен возвращать запрос? Где текст запроса?
  3. TopicStarter Overlay
    v0233
    Offline

    v0233 Опытный в 1С

    Регистрация:
    23 авг 2010
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    Вот этот запрос не работает, (т.е. он работает если параметр "ИмяФайлаЗаписи" без служебных символов)
    Код:
     
    Запрос.Текст="ВЫБРАТЬ
    |    ЗаказыЗаписиРазговоров.Ссылка.Ссылка
    |ИЗ
    |    Документ.Заказы.ЗаписиРазговоров КАК ЗаказыЗаписиРазговоров
    |ГДЕ
    |    ЗаказыЗаписиРазговоров.ПользовательПринявшийЗаявку = &Пользователь
    |    И ЗаказыЗаписиРазговоров.ИмяФайлаЗаписи ПОДОБНО &ИмяФайлаЗаписи";
    Запрос.УстановитьПараметр("ИмяФайлаЗаписи",имяФайла);
    Запрос.УстановитьПараметр("Пользователь",Оператор);
    
    
    
    Сейчас сделал вот так, работает как надо, только времени больше теряется, и ресурсов.
    Код:
        Запрос=Новый запрос;
    Запрос.Текст="ВЫБРАТЬ
    |    ЗаказыЗаписиРазговоров.Ссылка.Ссылка,
    |    ЗаказыЗаписиРазговоров.ИмяФайлаЗаписи
    |ИЗ
    |    Документ.Заказы.ЗаписиРазговоров КАК ЗаказыЗаписиРазговоров
    |ГДЕ
    |    ЗаказыЗаписиРазговоров.ПользовательПринявшийЗаявку = &Пользователь";
    
    Запрос.УстановитьПараметр("Пользователь",Оператор);
    В1=запрос.Выполнить().Выбрать();
    Пока В1.Следующий()  Цикл
    Если В1.ИмяФайлаЗаписи=ИмяФайла Тогда
    
    ЗаказСсылка=В1.Ссылка;
    КонецЕсли;
    КонецЦикла;
    
    
    
  4. PavelBaryshev
    Offline

    PavelBaryshev Опытный в 1С

    Регистрация:
    9 сен 2008
    Сообщения:
    316
    Симпатии:
    0
    Баллы:
    26
    А если за место ПОДОБНО написать СОДЕРЖИТ
  5. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    686
    Симпатии:
    8
    Баллы:
    29
    Вместо этого

    Код:
    ЗаказыЗаписиРазговоров.Ссылка.Ссылка
    
    
    
    
    Правильно писать это:

    Код:
    ЗаказыЗаписиРазговоров.Ссылка
    
    
    
    
    Это работает быстрее. Результат тот же.

    В первом примере
    Код:
     |    И ЗаказыЗаписиРазговоров.ИмяФайлаЗаписи ПОДОБНО &ИмяФайлаЗаписи";
    </span>
    </FONT></FONT></pre>
    Т.е. Вроде как ИмяФайлаЗаписи должно быть подобно имяФайла
    Во втором примере:
    Код:
    Если В1.ИмяФайлаЗаписи=ИмяФайла Тогда
    
    
    Строгое равенство. Что-то странно. Почему тогда в запросе не использовать "="?
  6. TopicStarter Overlay
    v0233
    Offline

    v0233 Опытный в 1С

    Регистрация:
    23 авг 2010
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    Синтаксическая ошибка, "содержит" на сколько я знаю в запросе не используется.

    Реквизит "ИмяФайлаЗаписи" тип строка.
    И если установить "=" появляется Синтаксическая ошибка
  7. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    686
    Симпатии:
    8
    Баллы:
    29
    Код:
    Запрос.Текст="ВЫБРАТЬ
    |    ЗаказыЗаписиРазговоров.Ссылка
    |ИЗ
    |    Документ.Заказы.ЗаписиРазговоров КАК ЗаказыЗаписиРазговоров
    |ГДЕ
    |    ЗаказыЗаписиРазговоров.ПользовательПринявшийЗаявку = &Пользователь
    |    И ЗаказыЗаписиРазговоров.ИмяФайлаЗаписи = &ИмяФайлаЗаписи";
    
    Запрос.УстановитьПараметр("ИмяФайлаЗаписи",имяФайла);
    Запрос.УстановитьПараметр("Пользователь",Оператор);
    
    
    
    Вот так будет ошибка?! Хотя может быть если длина строки не ограничена. У вас ведь неограниченная длина строки или нет?
  8. TopicStarter Overlay
    v0233
    Offline

    v0233 Опытный в 1С

    Регистрация:
    23 авг 2010
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    Да, действительно тип строки без ограничения длины.

    {Документ..Форма.ФормаДокумента(70)}: Ошибка при вызове метода контекста (Выполнить)
    В1=запрос.Выполнить().Выбрать();
    по причине:

    по причине:
    {(8, 42)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
    неограниченной длины и поля несовместимых типов.
    И ЗаказыЗаписиРазговоров.ИмяФайлаЗаписи <<?>>= &ИмяФайлаЗаписи
  9. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    686
    Симпатии:
    8
    Баллы:
    29
    Для вашего примера:

    [00515465456]_8495156456184-103_20111026132442(163).wav

    ИмяФайлаЗаписи будет таким:

    [00515465456]_8495156456184-103_20111026132442(163)

    То есть тоже самое только, без расширения да?
  10. TopicStarter Overlay
    v0233
    Offline

    v0233 Опытный в 1С

    Регистрация:
    23 авг 2010
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    РЕШЕНО. СПАСИБО БОЛЬШОЕ ЗАРАБОТАЛО.
    Изменил неограниченную длину и все заработало. теперь можно в запросе установить "="
  11. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    686
    Симпатии:
    8
    Баллы:
    29
    Это было не обязательно был и другой выход...
  12. TopicStarter Overlay
    v0233
    Offline

    v0233 Опытный в 1С

    Регистрация:
    23 авг 2010
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    А какой еще был выход если бы оставить неограниченную длину в реквизите и не перебирать все реквизиты в цикле? :angry:
  13. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Наверное он имел ввиду оператор Выразить в запросе. Например
    Код:
    И ВЫРАЗИТЬ(ЗаказыЗаписиРазговоров.ИмяФайлаЗаписи КАК Строка(100)) = &ИмяФайлаЗаписи
    
  14. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    686
    Симпатии:
    8
    Баллы:
    29
    Почти угадал

    Код:
    И ВЫРАЗИТЬ(ЗаказыЗаписиРазговоров.ИмяФайлаЗаписи КАК Строка(100)) ПОДОБНО &ИмяФайлаЗаписи + ""%""
    
    
    Я думаю должно сработать

Поделиться этой страницей