Синтаксическая ошибка подобно 1с

Я
   EugeneSemyonov

29.08.12 — 22:54

доброй всем ночи!

помогите кто сможет! То ли лыжи не едут то ли я …

создаю запрос в конструкторе запросов — он мне сразу при выборе оператора ПОДОБНО рисует красный круг с крестом на условии и не сохраняет его. пытался отредактировать запрос вручную (в соответствие с синтаксис-помощником, КБ на Мисте, и советами в форумах) при попытке выполнения такого простого запроса который  должен выбрать все значения справочника:

ВЫБРАТЬ

   Контрагенты.Ссылка

ИЗ

   Справочник.Контрагенты КАК Контрагенты

ГДЕ

   Контрагенты.Ссылка ПОДОБНО %

консоль запросов говорит : «синтаксическая ошибка»%» ПОДОБНО <<?>>%», если брать % в кавычки или скобки : «неверные параметры ПОДОБНО <<?>>%»

пробовал использовать Представление вместо Ссылки и параметр вместо % не помогает — неверные параметры! Кто скажет где собака зарылась?

   Aleksey

1 — 29.08.12 — 22:56

» Контрагенты.Ссылка ПОДОБНО % » — это что за еретизм? Что и с чем сравниваешь то?

   Aleksey

2 — 29.08.12 — 22:56

ПОДОБНО — Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL.

Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ.

(с) http://help1c.com/faq82/view/852.html

   Джинн

3 — 29.08.12 — 22:57

ПОДОБНО «»%»» + &Наименование + «»%»»

А так (1) прав — бред

   Aleksey

4 — 29.08.12 — 22:58

(3) Ты или «&» убери или «+»

   Джинн

5 — 29.08.12 — 22:58

(4) Ага. Туплю.

   EugeneSemyonov

6 — 29.08.12 — 23:05

(1) % — любое количество любых символов, т.е. Запрос должен сдать всех. Единственое меня смущает может Ссылка и Представление не являются строками? Пытался так ПОДСТРОКА(контрагенты.ссылка) ПОДОБНО % — результат тот же.

   Джинн

7 — 29.08.12 — 23:08

(6) Наименование…

   vmv

8 — 29.08.12 — 23:21

(6) преобразование в строку из других типов запрос не делает, еретик — сжечь

   EugeneSemyonov

9 — 29.08.12 — 23:22

(7) дочитал ссылку которую мне дал Алексей там внизу мелким шрифтом «не работает со строками неограниченой длины» и я понял в чем ошибка и тебе спасибо. Запрос для примера заработал, сейчас буду пробовать на рабочем запросе.

   Aleksey

10 — 29.08.12 — 23:24

ВЫБРАТЬ

   Ссылка

ИЗ

   Справочник.Контрагенты

ГДЕ

   Наименование ПОДОБНО % &Наименование

Запрос.УстановитьПараметр(«Наименование», «%» + Текст + «%»);

  

EugeneSemyonov

11 — 29.08.12 — 23:42

Ещё раз спасибо Джинн, Алексей! С наименованием всё получилось.

ВЫБРАТЬ

   Договоры.Ссылка

ИЗ

   Справочник.Договоры КАК Договоры

ГДЕ

   Договоры.Наименование ПОДОБНО &Наименование

&Наименование = %20125%

тему можно закрывать.

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

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


  2. Максим

    Offline

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

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

    Что должен возвращать запрос? Где текст запроса?

  3. Вот этот запрос не работает, (т.е. он работает если параметр «ИмяФайлаЗаписи» без служебных символов)

     
    Запрос.Текст="ВЫБРАТЬ
    |    ЗаказыЗаписиРазговоров.Ссылка.Ссылка
    |ИЗ
    |    Документ.Заказы.ЗаписиРазговоров КАК ЗаказыЗаписиРазговоров
    |ГДЕ
    |    ЗаказыЗаписиРазговоров.ПользовательПринявшийЗаявку = &Пользователь
    |    И ЗаказыЗаписиРазговоров.ИмяФайлаЗаписи ПОДОБНО &ИмяФайлаЗаписи";
    Запрос.УстановитьПараметр("ИмяФайлаЗаписи",имяФайла);
    Запрос.УстановитьПараметр("Пользователь",Оператор);
    
    
    

    Сейчас сделал вот так, работает как надо, только времени больше теряется, и ресурсов.

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

  4. PavelBaryshev

    Offline

    PavelBaryshev
    Опытный в 1С

    Регистрация:
    9 сен 2008
    Сообщения:
    326
    Симпатии:
    0
    Баллы:
    26

    А если за место ПОДОБНО написать СОДЕРЖИТ


  5. Максим

    Offline

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

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

    Вместо этого

    ЗаказыЗаписиРазговоров.Ссылка.Ссылка
    
    
    
    

    Правильно писать это:

    ЗаказыЗаписиРазговоров.Ссылка
    
    
    
    

    Это работает быстрее. Результат тот же.

    В первом примере

     |    И ЗаказыЗаписиРазговоров.ИмяФайлаЗаписи ПОДОБНО &ИмяФайлаЗаписи";
    </span>
    </FONT></FONT></pre>

    Т.е. Вроде как ИмяФайлаЗаписи должно быть подобно имяФайла
    Во втором примере:

    Если В1.ИмяФайлаЗаписи=ИмяФайла Тогда
    
    

    Строгое равенство. Что-то странно. Почему тогда в запросе не использовать «=»?

  6. Синтаксическая ошибка, «содержит» на сколько я знаю в запросе не используется.Реквизит «ИмяФайлаЗаписи» тип строка.
    И если установить «=» появляется Синтаксическая ошибка


  7. Максим

    Offline

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

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

    Запрос.Текст="ВЫБРАТЬ
    |    ЗаказыЗаписиРазговоров.Ссылка
    |ИЗ
    |    Документ.Заказы.ЗаписиРазговоров КАК ЗаказыЗаписиРазговоров
    |ГДЕ
    |    ЗаказыЗаписиРазговоров.ПользовательПринявшийЗаявку = &Пользователь
    |    И ЗаказыЗаписиРазговоров.ИмяФайлаЗаписи = &ИмяФайлаЗаписи";
    
    Запрос.УстановитьПараметр("ИмяФайлаЗаписи",имяФайла);
    Запрос.УстановитьПараметр("Пользователь",Оператор);
    
    
    

    Вот так будет ошибка?! Хотя может быть если длина строки не ограничена. У вас ведь неограниченная длина строки или нет?

  8. Да, действительно тип строки без ограничения длины.

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

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


  9. Максим

    Offline

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

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

    Для вашего примера:

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

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

    [00515465456]_8495156456184-103_20111026132442(163)

    То есть тоже самое только, без расширения да?

  10. РЕШЕНО. СПАСИБО БОЛЬШОЕ ЗАРАБОТАЛО.
    Изменил неограниченную длину и все заработало. теперь можно в запросе установить «=»


  11. Максим

    Offline

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

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

    Это было не обязательно был и другой выход…

  12. А какой еще был выход если бы оставить неограниченную длину в реквизите и не перебирать все реквизиты в цикле? :angry:


  13. has

    Offline

    has
    Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26

    Наверное он имел ввиду оператор Выразить в запросе. Например

    И ВЫРАЗИТЬ(ЗаказыЗаписиРазговоров.ИмяФайлаЗаписи КАК Строка(100)) = &ИмяФайлаЗаписи
    

  14. Максим

    Offline

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

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

    Почти угадал

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

    Я думаю должно сработать


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Я
   EugeneSemyonov

29.08.12 — 22:54

доброй всем ночи!

помогите кто сможет! То ли лыжи не едут то ли я …

создаю запрос в конструкторе запросов — он мне сразу при выборе оператора ПОДОБНО рисует красный круг с крестом на условии и не сохраняет его. пытался отредактировать запрос вручную (в соответствие с синтаксис-помощником, КБ на Мисте, и советами в форумах) при попытке выполнения такого простого запроса который  должен выбрать все значения справочника:

ВЫБРАТЬ

   Контрагенты.Ссылка

ИЗ

   Справочник.Контрагенты КАК Контрагенты

ГДЕ

   Контрагенты.Ссылка ПОДОБНО %

консоль запросов говорит : «синтаксическая ошибка»%» ПОДОБНО <<?>>%», если брать % в кавычки или скобки : «неверные параметры ПОДОБНО <<?>>%»

пробовал использовать Представление вместо Ссылки и параметр вместо % не помогает — неверные параметры! Кто скажет где собака зарылась?

   Aleksey

1 — 29.08.12 — 22:56

» Контрагенты.Ссылка ПОДОБНО % » — это что за еретизм? Что и с чем сравниваешь то?

   Aleksey

2 — 29.08.12 — 22:56

ПОДОБНО — Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL.

Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ.

(с) http://help1c.com/faq82/view/852.html

   Джинн

3 — 29.08.12 — 22:57

ПОДОБНО «»%»» + &Наименование + «»%»»

А так (1) прав — бред

   Aleksey

4 — 29.08.12 — 22:58

(3) Ты или «&» убери или «+»

   Джинн

5 — 29.08.12 — 22:58

(4) Ага. Туплю.

   EugeneSemyonov

6 — 29.08.12 — 23:05

(1) % — любое количество любых символов, т.е. Запрос должен сдать всех. Единственое меня смущает может Ссылка и Представление не являются строками? Пытался так ПОДСТРОКА(контрагенты.ссылка) ПОДОБНО % — результат тот же.

   Джинн

7 — 29.08.12 — 23:08

(6) Наименование…

   vmv

8 — 29.08.12 — 23:21

(6) преобразование в строку из других типов запрос не делает, еретик — сжечь

   EugeneSemyonov

9 — 29.08.12 — 23:22

(7) дочитал ссылку которую мне дал Алексей там внизу мелким шрифтом «не работает со строками неограниченой длины» и я понял в чем ошибка и тебе спасибо. Запрос для примера заработал, сейчас буду пробовать на рабочем запросе.

   Aleksey

10 — 29.08.12 — 23:24

ВЫБРАТЬ

   Ссылка

ИЗ

   Справочник.Контрагенты

ГДЕ

   Наименование ПОДОБНО % &Наименование

Запрос.УстановитьПараметр(«Наименование», «%» + Текст + «%»);

  

EugeneSemyonov

11 — 29.08.12 — 23:42

Ещё раз спасибо Джинн, Алексей! С наименованием всё получилось.

ВЫБРАТЬ

   Договоры.Ссылка

ИЗ

   Справочник.Договоры КАК Договоры

ГДЕ

   Договоры.Наименование ПОДОБНО &Наименование

&Наименование = %20125%

тему можно закрывать.

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

В общем, проблема в следующем: Мне нужно построить запрос из двух колонок: «Контрагент» и «Статус контрагента» (Покупатель, поставщик, прочее), а потом сформировать отчет, сгруппировав по статусу. Контрагент является поставщиком, если с ним проведен документ «Поступление товаров», покупателем, если «Реализация товаров» и прочим, если с ним не проведен ни один из названных. Идея следующая: Выбрать контрагентов из справочника, тип документа из журнала документа, связать их по контрагенту, указав, чтобы выводились все строчки из справочника «Контрагенты». Получается вот такой запрос:

ВЫБРАТЬ
Контрагенты.Наименование,
ДокументыУчетаТМЦ.Тип
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ ЖурналДокументов.ДокументыУчетаТМЦ КАК ДокументыУчетаТМЦ
ПО (ДокументыУчетаТМЦ.Контрагент = Контрагенты.Ссылка)
ГДЕ
НЕ Контрагенты.ЭтоГруппа

Вроде как все хорошо, думал я, осталось прописать условный оператор с ПОДОБНО, но когда пытаюсь написать такую конструкцию:

ВЫБОР
КОГДА ДокументыУчетаТМЦ.Тип ПОДОБНО "Поступление%" ТОГДА "Поставщик"
КОГДА ДокументыУчетаТМЦ.Тип ПОДОБНО "Реализация%" ТОГДА "Покупатель"
ИНАЧЕ "Прочее"
КОНЕЦ

пишет, что неверные параметры ПОДОБНО. Чувствую, что решение прям совсем рядом, но не могу найти, помогите, пожалуйста

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

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

  2. Offline

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

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

    Что должен возвращать запрос? Где текст запроса?

  3. Вот этот запрос не работает, (т.е. он работает если параметр «ИмяФайлаЗаписи» без служебных символов)

     
    Запрос.Текст="ВЫБРАТЬ
    |    ЗаказыЗаписиРазговоров.Ссылка.Ссылка
    |ИЗ
    |    Документ.Заказы.ЗаписиРазговоров КАК ЗаказыЗаписиРазговоров
    |ГДЕ
    |    ЗаказыЗаписиРазговоров.ПользовательПринявшийЗаявку = &Пользователь
    |    И ЗаказыЗаписиРазговоров.ИмяФайлаЗаписи ПОДОБНО &ИмяФайлаЗаписи";
    Запрос.УстановитьПараметр("ИмяФайлаЗаписи",имяФайла);
    Запрос.УстановитьПараметр("Пользователь",Оператор);
    
    
    

    Сейчас сделал вот так, работает как надо, только времени больше теряется, и ресурсов.

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

    PavelBaryshev
    Опытный в 1С

    Регистрация:
    9 сен 2008
    Сообщения:
    326
    Симпатии:
    0
    Баллы:
    26

    А если за место ПОДОБНО написать СОДЕРЖИТ

  5. Offline

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

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

    Вместо этого

    ЗаказыЗаписиРазговоров.Ссылка.Ссылка
    
    
    
    

    Правильно писать это:

    ЗаказыЗаписиРазговоров.Ссылка
    
    
    
    

    Это работает быстрее. Результат тот же.

    В первом примере

     |    И ЗаказыЗаписиРазговоров.ИмяФайлаЗаписи ПОДОБНО &ИмяФайлаЗаписи";
    </span>
    </FONT></FONT></pre>

    Т.е. Вроде как ИмяФайлаЗаписи должно быть подобно имяФайла
    Во втором примере:

    Если В1.ИмяФайлаЗаписи=ИмяФайла Тогда
    
    

    Строгое равенство. Что-то странно. Почему тогда в запросе не использовать «=»?

  6. Синтаксическая ошибка, «содержит» на сколько я знаю в запросе не используется.Реквизит «ИмяФайлаЗаписи» тип строка.
    И если установить «=» появляется Синтаксическая ошибка

  7. Offline

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

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

    Вот так будет ошибка?! Хотя может быть если длина строки не ограничена. У вас ведь неограниченная длина строки или нет?

  8. Да, действительно тип строки без ограничения длины.

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

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

  9. Offline

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

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

    Для вашего примера:

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

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

    [00515465456]_8495156456184-103_20111026132442(163)

    То есть тоже самое только, без расширения да?

  10. РЕШЕНО. СПАСИБО БОЛЬШОЕ ЗАРАБОТАЛО.
    Изменил неограниченную длину и все заработало. теперь можно в запросе установить «=»

  11. Offline

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

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

    Это было не обязательно был и другой выход…

  12. А какой еще был выход если бы оставить неограниченную длину в реквизите и не перебирать все реквизиты в цикле? :angry:

  13. Offline

    has
    Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26

    Наверное он имел ввиду оператор Выразить в запросе. Например

    И ВЫРАЗИТЬ(ЗаказыЗаписиРазговоров.ИмяФайлаЗаписи КАК Строка(100)) = &ИмяФайлаЗаписи
    
  14. Offline

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

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

    Почти угадал

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

    Я думаю должно сработать

Оператор «ПОДОБНО», в языке запросов 1С 8.3, предназначен для сравнения строковых выражений с заданным шаблоном. Результатом такой проверки будет «Ложь» или «Истина». Отличие от оператора « = », заключается в возможности использования спецсимволов.

Синтаксис:

<Строковое выражение> ПОДОБНО   <«Шаблон»>

Следует понимать, что спецсимволы оператора ПОДОБНО несут служебный характер и их смысл (назначение) отличается от обычных символов.

Пояснение спецсимволов:

  • « % » — любое количество обычных  произвольных символов;
  • « _ » — один любой обычный символ;
  • « [] » — в таких скобках, возможно, указать последовательность обычных символов или диапазон (а-д, 0-5 и подобные);
  • « [^] » — с помощью знака « ^ » в квадратных скобках, можно исключить последовательность обычных символов или диапазон (а-д, 0-5 и подобные).

Рассмотрим работу такого оператора на примерах.

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.

Связаться с нами можно по телефону +7 499 350 29 00.

Услуги и цены можно увидеть по ссылке.

Будем рады помочь Вам!

Содержание

  • Оператор «ПОДОБНО» в полях выборки запроса
  • Оператор «ПОДОБНО» в конструкции условного оператора «Где»
  • Оператор «ПОДОБНО» в конструкции условного оператора «ВЫБОР»
  • Как сравнивать текст по спецсимволу (%,..)
  • Использование параметров в конструкции «ПОДОБНО»
  • Возможные ошибки

Оператор «ПОДОБНО» в полях выборки запроса

ВЫБРАТЬ
Номенклатура.Наименование ПОДОБНО «Мол%» КАК Молоко,
Номенклатура.Наименование КАК Наименование
ИЗ
Справочник.Номенклатура КАК Номенклатура

Результат:

В данном примере проверяем каждую строку, начинается ли она на «Мол», для наглядности выводим такое же поле без применения оператора «ПОДОБНО».

Оператор «ПОДОБНО» в конструкции условного оператора «Где»

ВЫБРАТЬ
Номенклатура.Наименование КАК Наименование
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Наименование ПОДОБНО «_о%»

Результат:

Из результата запроса понятно, что были отобраны поля, у которых вторая буква « о », а после неё любые произвольные символы.

Оператор «ПОДОБНО» в конструкции условного оператора «ВЫБОР»

ВЫБРАТЬ
ВЫБОР
КОГДА Номенклатура.Наименование ПОДОБНО «%[л]%»
ТОГДА Номенклатура.Наименование
ИНАЧЕ «Не соответствует шаблону»
КОНЕЦ КАК Наименование
ИЗ
Справочник.Номенклатура КАК Номенклатура

Результат:

В таком примере помечаем поля, в которых не содержится буква « л ».

Как сравнивать текст по спецсимволу (%,..)

Для реализации таких задач требуется пользоваться ключевым словом СПЕЦСИМВОЛ. Указав любой символ после такого ключевого слова, система, в шаблоне конструкции ПОДОБНО, будет воспринимать следующий символ за ним как обычный.

ВЫБРАТЬ
Номенклатура.Наименование КАК Наименование
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Наименование ПОДОБНО «%/%» СПЕЦСИМВОЛ «/»

В таком примере были выбраны все поля содержащие знак « % » в конце.

Использование параметров в конструкции «ПОДОБНО»

Запрос = Новый Запрос;
Запрос.Текст =
            "ВЫБРАТЬ
            |          Номенклатура.Наименование КАК Наименование
            |ИЗ
            |          Справочник.Номенклатура КАК Номенклатура
            |ГДЕ
            |          Номенклатура.Наименование ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Шаблон", "М%");

Результат:

Установив параметр запроса в значение «М%», отбираем все поля, которые начинаются на символ « М ».

Возможные ошибки

Следует учитывать, что шаблон из конструкции оператора «ПОДОБНО» должен иметь исключительно строковый тип данных так же недопустимо формировать шаблон путём сложений строк.

Примеры неправильного формирования шаблона:

  • Номенклатура.Наименование ПОДОБНО Таблица.Шаблон
  • Номенклатура.Наименование ПОДОБНО  «Мол» + «%»

Yulunga

1117 / 671 / 195

Регистрация: 22.04.2013

Сообщений: 5,078

Записей в блоге: 1

1

13.09.2017, 09:45. Показов 3928. Ответов 8

Метки нет (Все метки)


Прекрасного летнего утра !

1C
1
2
3
4
5
6
7
8
9
ВЫБРАТЬ
    ЗаказПокупателя.Ссылка КАК СсылкаЗаказПокупателя,
    ЗаказПокупателя.Представление КАК Предст
ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
ГДЕ 
    ЗаказПокупателя.Ссылка = &Ссылка
ИМЕЮЩИЕ 
    ЗаказПокупателя.Представление ПОДОБНО "Заказ покупателя%"

{ВнешняяОбработка.КонсольЗапросов_8_3.МодульОбъект а(89)}: Ошибка при вызове метода контекста (НайтиПараметры): {(9, 2)}: Неверные параметры «ПОДОБНО»
<<?>>ЗаказПокупателя.Представление ПОДОБНО «%»

измаялся. ЧЯДНТ?
Представление какая-то хитрая хрень. в реквизитах его нет. но если просто попросить вывести — выводит. тип — строка. в стандартных тоже нет.
задача — мне надо именно заказ, а то там бывают замеры, какие-то ещё заказы, наряды, прочая лабудень.
Спасибо

0

Эксперт 1С

841 / 604 / 211

Регистрация: 24.07.2013

Сообщений: 2,101

13.09.2017, 10:32

2

Представление — это виртуальной поле. Насколько помню, его нельзя использовать нигде, кроме как выбрать в качестве поля.

Добавлено через 1 минуту

Цитата
Сообщение от Yulunga
Посмотреть сообщение

задача — мне надо именно заказ

Воспользуйся операцией ССЫЛКА, или сравнением типов.

0

1117 / 671 / 195

Регистрация: 22.04.2013

Сообщений: 5,078

Записей в блоге: 1

13.09.2017, 10:42

 [ТС]

3

Tklwegsd, не работает
замеры и прочие наряды — они все отсюда же. они все — заказ покупателя. только его разновидности. для них существуют разные формы . но отец один — заказ покупателя.
я пробовал уже. тоже самое выдаёт (

про представление понял. спасибо.

0

Эксперт 1С

841 / 604 / 211

Регистрация: 24.07.2013

Сообщений: 2,101

13.09.2017, 11:33

4

Цитата
Сообщение от Yulunga
Посмотреть сообщение

только его разновидности. для них существуют разные формы

Ну так каким-то значением они друга от друга отличаются.
Как программа определяет какую форму открывать?

1

Эксперт 1С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

13.09.2017, 12:00

5

Не по теме:

Yulunga, «подобно бесподобно»?:D Ты вроде тролль, но с тобой так весело… Прям открываешь и понимаешь, тему переименовать надо, но не хочется:good:

Добавлено через 8 минут
Yulunga, какая конфигурация? Может там есть документ-основание?

0

1117 / 671 / 195

Регистрация: 22.04.2013

Сообщений: 5,078

Записей в блоге: 1

13.09.2017, 12:02

 [ТС]

6

Лучший ответ Сообщение было отмечено GreenkA как решение

Решение

Тклвегсд спасибо! Нашёл я этот реквизит, который отвечает за нужное.

Объект «Перечисление.ВидыОперацийЗаказПокупателя» использован в:
Документ.ЗаказПокупателя.Реквизит.ВидОперации.Тип

GreenkA, ты бы посидела с 7 до 10 утра , не смогя написать простейший запрос, на котором ваще не собирался останавливаться ((

Не по теме:

троль, троль. низкий и толстый.не надо меня банить. я иногда приношу пользу. а иногда толстых партизан.

Добавлено через 1 минуту
УНФ довольно пирилично переделанная под себя

1

Эксперт 1С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

13.09.2017, 12:23

7

В УНФ действительно есть документ-основание… И разве реквизит ВидОперации — не перечисление?

0

1117 / 671 / 195

Регистрация: 22.04.2013

Сообщений: 5,078

Записей в блоге: 1

13.09.2017, 20:46

 [ТС]

8

Цитата
Сообщение от GreenkA
Посмотреть сообщение

В УНФ действительно есть документ-основание… И разве реквизит ВидОперации — не перечисление?

документ основание будет заказпокупателя.
вид операции — перечисление. но у заказа оно будет одно, а у наряда — другое, а у ещёчегото — третье, соответственно.
так что можно отождествить и отрезать ненужное, не дожидаясь перитонитов.
Спасибо!

Не по теме:

Ученые выяснили, что тролли в интернете — преимущественно мужчины. Исследователи связали это с большей склонностью мужчин к самолюбованию и привлечению внимания других людей.
Результаты исследования подтвердили стереотип о том, что троллингом в сети занимаются только мужчины, пишут ученые.

0

GreenkA

13.09.2017, 21:22


    Использование оператора «ПОДОБНО» в запросе 1С.

Не по теме:

Цитата
Сообщение от Yulunga
Посмотреть сообщение

троллингом в сети занимаются только мужчины

…сказал один тролль…

0

Несмотря на все недостатки, поиск по текстовому полю до сих пор является одним из самых популярных. Строковые типы данных мы можем встретить повсеместно – наименования, номера счетов, адреса, а также другая информация может храниться в этом формате. В запросах на встроенном языке 1С для удобства разработчиков используется специальный оператор «ПОДОБНО». Это одна из самых используемых команд, поэтому без досконального знания ее синтаксиса и возможностей программисту будет сложно работать.

Использование оператора «ПОДОБНО»

Перед тем, как применять какой-либо оператор на практике, нужно четко понять его предназначение, места применения и синтаксис. Целью использования «ПОДОБНО» в запросе 1С является проверка на удовлетворение условию, представленному в виде шаблона. Возвращаемым значением является логический тип – истина или ложь, демонстрирующий выполняется ли заданное условие. Использоваться оператор ПОДОБНО может в нескольких местах запроса:

  • В блоке условий, обозначенном ключевым словом «ГДЕ»;
  • В конструкции Выбор Когда Тогда Иначе Конец;
  • Непосредственно в полях выборки, как результат сравнения полей.

Синтаксис проверки всегда одинаков и состоит из 3 звеньев. Слева текстовое значение, которое проверяется, затем непосредственно сам оператор «ПОДОБНО», а справа – шаблон, по которому идет проверка. Для быстрого и удобного составления шаблонов существуют специальные символы, облегчающие разработку:

  1. «%»– последовательность любых символов произвольной длины. Используется для поиска отдельных слов или цифр в строке;
  2. «_»– любой единичный символ. Предназначен для обозначения наличия одного знака;
  3. «[…]»– последовательность символов для сравнения со знаком в строке. С помощью подобного шаблона проверяется соответствие любому из перечисленных в скобках знаков. Также можно задать диапазон цифр или букв ([а-г], [1-7]);
  4. «[^…]»– противоположный предыдущему шаблон. Проверяется отличие указанного в строке символа от перечисленных в скобках.

Чтобы лучше усвоить и понять принципы составления верных шаблонов, рассмотрим некоторые, часто встречающиеся в жизни разработчиков, примеры. Первый, когда нам необходимо выбрать из справочника номенклатуры все позиции, в наименованиях которых встречается слово «РЕЗЕЦ». В этом случае нам необходимо использовать ПОДОБНО в условиях запроса:


ВЫБРАТЬ
     Номенклатура.Наименование КАК Наименование
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Наименование ПОДОБНО "%РЕЗЕЦ%"

Если мы уберем оба символа «%», то запрос покажет номенклатуру, у которой наименование полностью совпадает с указанным в кавычках. Если оставим шаблон «РЕЗЕЦ%» или «%РЕЗЕЦ», то результатом будет список номенклатуры, оканчивающийся или начинающийся, соответственно, на заданную комбинацию символов.

Рис.1 Список номенклатуры с запросом «%РЕЗЕЦ», оканчивающийся на заданную комбинацию символов
Рис.1 Список номенклатуры с запросом «%РЕЗЕЦ», оканчивающийся на заданную комбинацию символов
Рис.2 Список номенклатуры с запросом «РЕЗЕЦ%», начинающийся на заданную комбинацию символов
Рис.2 Список номенклатуры с запросом «РЕЗЕЦ%», начинающийся на заданную комбинацию символов

Разберем задачу, которая может поставить в тупик начинающих программистов, не знающих синтаксис запросов. Допустим, вам нужно найти всю номенклатуру, в наименовании которой есть символ «%». Специально для случаев, когда нужно вести поиск зарезервированных символов, существует оператор «спецсимвол». В качестве спецсимвола можно использовать #,,/,~ и другие знаки, после которых любые зарезервированные символы будут обозначать просто знак.


ВЫБРАТЬ
     Номенклатура.Наименование КАК Наименование
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Наименование ПОДОБНО "%#%" СПЕЦСИМВОЛ "#"

Если вам нужно в поиске использовать параметр, то переменная в запросе с параметром ПОДОБНО используется при помощи сложения. Помните, что параметр должен быть строкового типа или вам потребуется перевести ее в строку в запросе. Это достаточно сложная операция и лучше ее исключить заранее.


ВЫБРАТЬ
     Номенклатура.Наименование КАК Наименование
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Наименование ПОДОБНО "%" + &наименование + "%"

Функция ПОДОБНО применима во всех версиях платформы, начиная с 8, и ввиду ее применяемости разработчики 1С не захотят ее менять. Конечно, текстовый поиск всегда зависит от точности ввода наименования, но он все равно остается одним из самых распространенных. В связи с этим профессиональным разработчикам 1С необходимо изучить использование ПОДОБНО со всеми его нюансами.

Yulunga

1188 / 727 / 211

Регистрация: 22.04.2013

Сообщений: 5,352

Записей в блоге: 1

1

13.09.2017, 09:45. Показов 4214. Ответов 8

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Прекрасного летнего утра !

1C
1
2
3
4
5
6
7
8
9
ВЫБРАТЬ
    ЗаказПокупателя.Ссылка КАК СсылкаЗаказПокупателя,
    ЗаказПокупателя.Представление КАК Предст
ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
ГДЕ 
    ЗаказПокупателя.Ссылка = &Ссылка
ИМЕЮЩИЕ 
    ЗаказПокупателя.Представление ПОДОБНО "Заказ покупателя%"

{ВнешняяОбработка.КонсольЗапросов_8_3.МодульОбъекта(89)}: Ошибка при вызове метода контекста (НайтиПараметры): {(9, 2)}: Неверные параметры «ПОДОБНО»
<<?>>ЗаказПокупателя.Представление ПОДОБНО «%»

измаялся. ЧЯДНТ?
Представление какая-то хитрая хрень. в реквизитах его нет. но если просто попросить вывести — выводит. тип — строка. в стандартных тоже нет.
задача — мне надо именно заказ, а то там бывают замеры, какие-то ещё заказы, наряды, прочая лабудень.
Спасибо



0



Эксперт 1С

841 / 604 / 211

Регистрация: 24.07.2013

Сообщений: 2,101

13.09.2017, 10:32

2

Представление — это виртуальной поле. Насколько помню, его нельзя использовать нигде, кроме как выбрать в качестве поля.

Добавлено через 1 минуту

Цитата
Сообщение от Yulunga
Посмотреть сообщение

задача — мне надо именно заказ

Воспользуйся операцией ССЫЛКА, или сравнением типов.



0



1188 / 727 / 211

Регистрация: 22.04.2013

Сообщений: 5,352

Записей в блоге: 1

13.09.2017, 10:42

 [ТС]

3

Tklwegsd, не работает
замеры и прочие наряды — они все отсюда же. они все — заказ покупателя. только его разновидности. для них существуют разные формы . но отец один — заказ покупателя.
я пробовал уже. тоже самое выдаёт (

про представление понял. спасибо.



0



Эксперт 1С

841 / 604 / 211

Регистрация: 24.07.2013

Сообщений: 2,101

13.09.2017, 11:33

4

Цитата
Сообщение от Yulunga
Посмотреть сообщение

только его разновидности. для них существуют разные формы

Ну так каким-то значением они друга от друга отличаются.
Как программа определяет какую форму открывать?



1



Эксперт 1С

3052 / 1999 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

13.09.2017, 12:00

5

Не по теме:

Yulunga, «подобно бесподобно»?:D Ты вроде тролль, но с тобой так весело… Прям открываешь и понимаешь, тему переименовать надо, но не хочется:good:

Добавлено через 8 минут
Yulunga, какая конфигурация? Может там есть документ-основание?



0



1188 / 727 / 211

Регистрация: 22.04.2013

Сообщений: 5,352

Записей в блоге: 1

13.09.2017, 12:02

 [ТС]

6

Лучший ответ Сообщение было отмечено GreenkA как решение

Решение

Тклвегсд спасибо! Нашёл я этот реквизит, который отвечает за нужное.

Объект «Перечисление.ВидыОперацийЗаказПокупателя» использован в:
Документ.ЗаказПокупателя.Реквизит.ВидОперации.Тип

GreenkA, ты бы посидела с 7 до 10 утра , не смогя написать простейший запрос, на котором ваще не собирался останавливаться ((

Не по теме:

троль, троль. низкий и толстый.не надо меня банить. я иногда приношу пользу. а иногда толстых партизан.

Добавлено через 1 минуту
УНФ довольно пирилично переделанная под себя



1



Эксперт 1С

3052 / 1999 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

13.09.2017, 12:23

7

В УНФ действительно есть документ-основание… И разве реквизит ВидОперации — не перечисление?



0



1188 / 727 / 211

Регистрация: 22.04.2013

Сообщений: 5,352

Записей в блоге: 1

13.09.2017, 20:46

 [ТС]

8

Цитата
Сообщение от GreenkA
Посмотреть сообщение

В УНФ действительно есть документ-основание… И разве реквизит ВидОперации — не перечисление?

документ основание будет заказпокупателя.
вид операции — перечисление. но у заказа оно будет одно, а у наряда — другое, а у ещёчегото — третье, соответственно.
так что можно отождествить и отрезать ненужное, не дожидаясь перитонитов.
Спасибо!

Не по теме:

Ученые выяснили, что тролли в интернете — преимущественно мужчины. Исследователи связали это с большей склонностью мужчин к самолюбованию и привлечению внимания других людей.
Результаты исследования подтвердили стереотип о том, что троллингом в сети занимаются только мужчины, пишут ученые.



0



GreenkA

13.09.2017, 21:22


    Использование оператора «ПОДОБНО» в запросе 1С.

Не по теме:

Цитата
Сообщение от Yulunga
Посмотреть сообщение

троллингом в сети занимаются только мужчины

…сказал один тролль…



0



Понравилась статья? Поделить с друзьями:
  • Сброс ошибок bmw x5 e70
  • Сброс ошибок bmw x3 e83
  • Сброс ошибок bmw g01
  • Сброс ошибок bmw e87
  • Сброс ошибок bmw e34