Подобно 1с не в запросе 1с
Непонятно почему у меня другие конструкции не работают. Ведь должны бы, вроде.
(9) У вас набор всех ваших параметров взаимоисключающий - вот вы и получаете пустой результат (12)похоже, что в результат не попадают строки, в которых не заполнен способ отражения. Но я же ставлю условие не выбирать только 91 и 71.. Почему не выбирает пустое? (15) отбой. закомментировала строку отбора по ВидОперации (15) Потому что NULL не сравнивается ни с чем!Он ищется только ЕСТЬ NULL (18)т.е я никак не могу учесть возможность выбора строки с нулевым значением СпособаОтражения? Ведь могут быть и заполненные и пустые, а нужны все.
Вы сначала выведите в запросе
и увидите , что там вообще, скажем первые 100, а уж потом ставьте условия с правильным заполнением ("Сч91", "[^9][^1]%".
Ведь в ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы.СпособОтраженияЗарплатыВБухучете.Наименование хранятся не номера счетов!
А вот это например "Отражение начислений по умолчанию"
Ну и кроме того очень не понятно, зачем столько параметров у запроса?
Они явно лишние.
(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,
Так мой вариант не работает? Не может быть.
Может Вы не скопировали эту строку - в ней тоже изменения:
(11) pjv, все таки еще раз влезу :)
переменная "Номеклатура" это не ссылка это результат выборки! Ее еще спозиционировать надо и потом уже получать ссылку. Вобщем 6 пост посмотри
(12) Ягг, пропробовала как Вы написали. Всё равно та же самая ошибка(((((13) pjv, тогда уж пиши ошибку :) и строку
приведи в нормальное состояние (там ковычки лишние) у тебя в перывом посте нормально все было
(14) Ягг, Ничего лишнего. В начале должно быть 3 кавычки, в конце должно быть 3 кавычки. Одна кавычка обозначает начало или конец строки, а ещё 2 - кавычку внутри этой строки.1. но у него то все равно 2 кавычки а не три :) да и не нужно это достаточно "%"+Артикул+"%" - в запрос все равно уходит строковая переменная нужного вида. Иначе в запрос уйдет строковая переменная начинающаяся с ковычки - это не правильно (думаю)
Несмотря на все недостатки, поиск по текстовому полю до сих пор является одним из самых популярных. Строковые типы данных мы можем встретить повсеместно – наименования, номера счетов, адреса, а также другая информация может храниться в этом формате. В запросах на встроенном языке 1С для удобства разработчиков используется специальный оператор «ПОДОБНО». Это одна из самых используемых команд, поэтому без досконального знания ее синтаксиса и возможностей программисту будет сложно работать.
Использование оператора «ПОДОБНО»
Перед тем, как применять какой-либо оператор на практике, нужно четко понять его предназначение, места применения и синтаксис. Целью использования «ПОДОБНО» в запросе 1С является проверка на удовлетворение условию, представленному в виде шаблона. Возвращаемым значением является логический тип – истина или ложь, демонстрирующий выполняется ли заданное условие. Использоваться оператор ПОДОБНО может в нескольких местах запроса:
- В блоке условий, обозначенном ключевым словом «ГДЕ»;
- В конструкции Выбор Когда Тогда Иначе Конец;
- Непосредственно в полях выборки, как результат сравнения полей.
Синтаксис проверки всегда одинаков и состоит из 3 звеньев. Слева текстовое значение, которое проверяется, затем непосредственно сам оператор «ПОДОБНО», а справа – шаблон, по которому идет проверка. Для быстрого и удобного составления шаблонов существуют специальные символы, облегчающие разработку:
- «%»– последовательность любых символов произвольной длины. Используется для поиска отдельных слов или цифр в строке;
- «_»– любой единичный символ. Предназначен для обозначения наличия одного знака;
- «[…]»– последовательность символов для сравнения со знаком в строке. С помощью подобного шаблона проверяется соответствие любому из перечисленных в скобках знаков. Также можно задать диапазон цифр или букв ([а-г], 6);
- «[^…]»– противоположный предыдущему шаблон. Проверяется отличие указанного в строке символа от перечисленных в скобках.
Чтобы лучше усвоить и понять принципы составления верных шаблонов, рассмотрим некоторые, часто встречающиеся в жизни разработчиков, примеры. Первый, когда нам необходимо выбрать из справочника номенклатуры все позиции, в наименованиях которых встречается слово «РЕЗЕЦ». В этом случае нам необходимо использовать ПОДОБНО в условиях запроса:
Если мы уберем оба символа «%», то запрос покажет номенклатуру, у которой наименование полностью совпадает с указанным в кавычках. Если оставим шаблон «РЕЗЕЦ%» или «%РЕЗЕЦ», то результатом будет список номенклатуры, оканчивающийся или начинающийся, соответственно, на заданную комбинацию символов.
и другие знаки, после которых любые зарезервированные символы будут обозначать просто знак.
Если вам нужно в поиске использовать параметр, то переменная в запросе с параметром ПОДОБНО используется при помощи сложения. Помните, что параметр должен быть строкового типа или вам потребуется перевести ее в строку в запросе. Это достаточно сложная операция и лучше ее исключить заранее.
Функция ПОДОБНО применима во всех версиях платформы, начиная с 8, и ввиду ее применяемости разработчики 1С не захотят ее менять. Конечно, текстовый поиск всегда зависит от точности ввода наименования, но он все равно остается одним из самых распространенных. В связи с этим профессиональным разработчикам 1С необходимо изучить использование ПОДОБНО со всеми его нюансами.
Оператор «ПОДОБНО», в языке запросов 1С 8.3, предназначен для сравнения строковых выражений с заданным шаблоном. Результатом такой проверки будет «Ложь» или «Истина». Отличие от оператора « = », заключается в возможности использования спецсимволов.
Синтаксис:
Следует понимать, что спецсимволы оператора ПОДОБНО несут служебный характер и их смысл (назначение) отличается от обычных символов.
Пояснение спецсимволов:
Рассмотрим работу такого оператора на примерах.
Оператор «ПОДОБНО» в полях выборки запроса
Результат:
В данном примере проверяем каждую строку, начинается ли она на «Мол», для наглядности выводим такое же поле без применения оператора «ПОДОБНО».
Оператор «ПОДОБНО» в конструкции условного оператора «Где»
Получите понятные самоучители по 1С бесплатно:
Результат:
Из результата запроса понятно, что были отобраны поля, у которых вторая буква « о », а после неё любые произвольные символы.
Оператор «ПОДОБНО» в конструкции условного оператора «ВЫБОР»
Результат:
В таком примере помечаем поля, в которых не содержится буква « л ».
Как сравнивать текст по спецсимволу (%. )
Для реализации таких задач требуется пользоваться ключевым словом СПЕЦСИМВОЛ. Указав любой символ после такого ключевого слова, система, в шаблоне конструкции ПОДОБНО, будет воспринимать следующий символ за ним как обычный.
В таком примере были выбраны все поля содержащие знак « % » в конце.
Использование параметров в конструкции «ПОДОБНО»
Результат:
Установив параметр запроса в значение «М%», отбираем все поля, которые начинаются на символ « М ».
Возможные ошибки
Следует учитывать, что шаблон из конструкции оператора «ПОДОБНО» должен иметь исключительно строковый тип данных так же недопустимо формировать шаблон путём сложений строк.
Читайте также: