Подобно 1с не в запросе 1с

Обновлено: 08.07.2024

Непонятно почему у меня другие конструкции не работают. Ведь должны бы, вроде.

(9) У вас набор всех ваших параметров взаимоисключающий - вот вы и получаете пустой результат (12)похоже, что в результат не попадают строки, в которых не заполнен способ отражения. Но я же ставлю условие не выбирать только 91 и 71.. Почему не выбирает пустое? (15) отбой. закомментировала строку отбора по ВидОперации (15) Потому что NULL не сравнивается ни с чем!
Он ищется только ЕСТЬ NULL (18)т.е я никак не могу учесть возможность выбора строки с нулевым значением СпособаОтражения? Ведь могут быть и заполненные и пустые, а нужны все.

Вы сначала выведите в запросе


и увидите , что там вообще, скажем первые 100, а уж потом ставьте условия с правильным заполнением ("Сч91", "[^9][^1]%".

Ведь в ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы.СпособОтраженияЗарплатыВБухучете.Наименование хранятся не номера счетов!
А вот это например "Отражение начислений по умолчанию"

Ну и кроме того очень не понятно, зачем столько параметров у запроса?
Они явно лишние.

(8) Ох. Думала над чем-то подобным, но сейчас это сложный запрос для меня. Но похоже пришло время разобраться с этим. Благодарю. Буду копать..

(14) у меня так не работает. Ума не дам почему.. Работает вот такая конструкция

Блин, не работает. Конструкция вытаскивает только значения, где Наименование Способ отражения начинается на 71 и 91 ((( Ну что не так-то.

ВидОперации СпособОтраженияЗарплатыВБухучете Ссылка

1. Компенсация ежегодного отпуска Отражение зарплаты в бухучете от 28.08.2019
2. Начислено Отражение зарплаты в бухучете от 28.08.2019
3. Доходы в натуральной форме 91.2 Доход в натуральной форме Отражение зарплаты в бухучете от 28.08.2019
4. Начислено Отражение зарплаты в бухучете от 28.08.2019
5. Начислено 71.01 Возмещение подотчетных сумм Отражение зарплаты в бухучете от 28.08.2019
6. Начислено 91.2 Субсидия Отражение зарплаты в бухучете от 28.08.2019
7. Начислено Отражение зарплаты в бухучете от 28.08.2019
8. Начислено Отражение зарплаты в бухучете от 28.08.2019

Вот из этой таблицы нужно вытащить строки с видом операций Компенсация, Начислено, Начислено(сдельно) и Отпуск, не трогая другие виды вообще. Из выбранных нужно исключить строки, в которых Способ отражения начинается на 91 и 71 (использовать точно не могу, т.к много таких способов)
Суть вопроса - почему не работает мой запрос? Нужно в итоге получить 1,2,3,7 и 8 строки. с моей конструкцией все наоборот, только 5 и 6 строки(((

(1) pjv, а вообще-то по моему запрос правильный, и параметр кажется праивльно передан.

1. Наверно после "Номенклатура = Запрос.Выполнить().Выбрать(); " идет позиционирование выборки т.е. как-то так

Номенклатура = Запрос.Выполнить().Выбрать();
ЕСли Номенклатура.Следующий() тогда
НомСсылка = Номенклатура.Ссылка;
КонецЕСли;

2. Проверь тип реквизита "Артикул" (должно быть строка) и посмотри в отлдадчике чему все-таки равно "СокрЛП(Формат(Ячейка.Value, "ЧГ=")); "

Но что-то я подозреваю что забыли сделать позиционирование выборки. :)

Выражение сравнения в данном случае должно быть заключено в кавычки в тексте запроса, сейчас текст запроса формируется как ПОДОБНО %Чотатам%, а надо ПОДОБНО "%Чототам%". Для этого замените
Запрос.УстановитьПараметр("Артикул","%" + Артикул + "%");
на
Запрос.УстановитьПараметр("Артикул","""%" + Артикул + "%"""); Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Артикул", Артикул);
Запрос.Текст ; (5) logos, спасибо!
Теперь почему-то пишет Недостаточно фактических параметров и ссылается на строку
Запрос = Новый Запрос; (9) pjv, А весь фрагмент кода приведите. Похоже на синтаксическую ошибку.

(4) Win98,
Так мой вариант не работает? Не может быть.
Может Вы не скопировали эту строку - в ней тоже изменения:

(7) kilokilo, не, ошибочка в том смысле, что я фигню написал ;)

(11) pjv, все таки еще раз влезу :)

переменная "Номеклатура" это не ссылка это результат выборки! Ее еще спозиционировать надо и потом уже получать ссылку. Вобщем 6 пост посмотри

(12) Ягг, пропробовала как Вы написали. Всё равно та же самая ошибка((((

(13) pjv, тогда уж пиши ошибку :) и строку

приведи в нормальное состояние (там ковычки лишние) у тебя в перывом посте нормально все было

(14) Ягг, Ничего лишнего. В начале должно быть 3 кавычки, в конце должно быть 3 кавычки. Одна кавычка обозначает начало или конец строки, а ещё 2 - кавычку внутри этой строки.

1. но у него то все равно 2 кавычки а не три :) да и не нужно это достаточно "%"+Артикул+"%" - в запрос все равно уходит строковая переменная нужного вида. Иначе в запрос уйдет строковая переменная начинающаяся с ковычки - это не правильно (думаю)

Анна Викулина

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

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

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

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

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

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

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

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

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

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

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

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

и другие знаки, после которых любые зарезервированные символы будут обозначать просто знак.

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

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

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

Синтаксис:

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

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

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

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

Результат:


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

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

Получите понятные самоучители по 1С бесплатно:

Результат:


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

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

Результат:


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

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

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


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

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

Результат:


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

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

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

Читайте также: