Неверные параметры подстрока в запросе 1с

Особенность выполнения функции ПОДСТРОКА() языка запросов

Раздел содержит описание особенности выполнения функции ПОДСТРОКА() языка запросов в клиент-серверном варианте работы и вытекающие из нее рекомендации по построению запросов.

Функция ПОДСТРОКА()


Вычисление функции ПОДСТРОКА() на SQL сервере

В клиент-серверном варианте работы функция ПОДСТРОКА() реализуется при помощи функции SUBSTRING() соответствующего оператора SQL, передаваемого серверу баз данных SQL Server, который вычисляет тип результата функции SUBSTRING() по сложным правилам в зависимости от типа и значений ее параметров, а так же в зависимости от контекста, в котором она используется.

В большинстве случаев эти правила не оказывают влияния на выполнение запроса 1С:Предприятия, однако есть случаи, когда для исполнения запроса существенна максимальная длина строки результата, вычисленная SQL Server. Важно иметь в виду, что в некоторых контекстах использования функции ПОДСТРОКА() максимальная длина ее результата может оказаться равной максимальной длине строки ограниченной длины, которая в SQL Server равна 4000 символам. Это может привести к неожиданному аварийному завершению выполнения запроса.

ВЫБРАТЬ
ВЫБОР
КОГДА Вид = &ЮрАдресФизЛица
ТОГДА ПОДСТРОКА(Представление, 0, 200)
ИНАЧЕ NULL
КОНЕЦ КАК Представление,
ВЫБОР
КОГДА Вид = &ЮрАдресФизЛица
ТОГДА ПОДСТРОКА(Представление, 0, 200)
ИНАЧЕ NULL
КОНЕЦ КАК Представление1
ИЗ
РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
УПОРЯДОЧИТЬ ПО
Представление,
Представление1

завершается аварийно с сообщением:

Ошибка СУБД:
Microsoft OLE DB Provider for SQL Server: Warning: The query processor could not produce a query plan from the optimizer because the total length of all the columns in the GROUP BY or ORDER BY clause exceeds 8000 bytes.
HRESULT=80040E14, SQLSTATE=42000, native=8618

Это происходит потому, что вычисленная Microsoft SQL Server максимальная длина строки, которая является результатом выражения:

ВЫБОР
КОГДА Вид = &ЮрАдресФизЛица
ТОГДА ПОДСТРОКА(Представление, 0, 200)
ИНАЧЕ NULL
КОНЕЦ КАК Представление,

равна 4000 символов. Поэтому длина записи, состоящей из двух таких полей превышает 8000 байт, разрешенные для выполнения операции сортировки.

ВЫБРАТЬ
ВЫБОР
КОГДА Вид = &ЮрАдресФизЛица
ТОГДА ВЫРАЗИТЬ(Представление КАК Строка(200))
ИНАЧЕ NULL
КОНЕЦ КАК Представление,
ВЫБОР
КОГДА Вид = &ЮрАдресФизЛица
ТОГДА ВЫРАЗИТЬ(Представление КАК Строка(200))
ИНАЧЕ NULL
КОНЕЦ КАК Представление1
ИЗ
РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
УПОРЯДОЧИТЬ ПО
Представление,
Представление1

Источник

Функции языка запросов 1С. Работа со строками

Функции работы со строками

Механизмов для работы со строками в запросах 1С мало. Во-первых, строки можно складывать. Во-вторых, от строки можно взять подстроку. В-третьих, строки можно сравнивать, в том числе по шаблону. Вот пожалуй и всё, что можно делать со строками.

Сложение строк

Для сложения строк в запросе используется операция «+». Складывать можно только строки ограниченной длины.

Функция Подстрока

Если длина строки меньше, чем указана во втором параметре, то функция вернет пустую строку.

Внимание! Использование функции ПОДСТРОКА() с целью приведения строк неограниченной длины к строкам ограниченной длины не рекомендуется. Вместо нее лучше использовать операцию приведения типа ВЫРАЗИТЬ().

Функция Подобно

Если нужно убедиться, что строковый реквизит соответствует определённым критериям мы его сравниваем:

А что, если нужно более хитрое сравнение? Не просто на равенство или неравенство, а на подобие определенному шаблону? Вот как раз для этого и создана функция ПОДОБНО.

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

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

Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки:

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

Источник

Функция ПОДСТРОКА()

Вычисление функции ПОДСТРОКА() на SQL сервере:
В клиент-серверном варианте работы функция ПОДСТРОКА() реализуется при помощи функции SUBSTRING() соответствующего оператора SQL, передаваемого серверу баз данных SQL Server, который вычисляет тип результата функции SUBSTRING() по сложным правилам в зависимости от типа и значений ее параметров, а так же в зависимости от контекста, в котором она используется.

В большинстве случаев эти правила не оказывают влияния на выполнение запроса 1С:Предприятия, однако есть случаи, когда для исполнения запроса существенна максимальная длина строки результата, вычисленная SQL Server. Важно иметь в виду, что в некоторых контекстах использования функции ПОДСТРОКА() максимальная длина ее результата может оказаться равной максимальной длине строки ограниченной длины, которая в SQL Server равна 4000 символам. Это может привести к неожиданному аварийному завершению выполнения запроса.

Например, запрос:
Код 1C v 8.х
завершается аварийно с сообщением Ошибка СУБД:
Microsoft OLE DB Provider for SQL Server: Warning: The query processor could not produce a query plan from the optimizer because the total length of all the columns in the GROUP BY or ORDER BY clause exceeds 8000 bytes.
HRESULT=80040E14, SQLSTATE=42000, native=8618

Это происходит потому, что вычисленная Microsoft SQL Server максимальная длина строки, которая является результатом выражения:
Код 1C v 8.х
равна 4000 символов. Поэтому длина записи, состоящей из двух таких полей превышает 8000 байт, разрешенные для выполнения операции сортировки.

В связи с описанной особенностью исполнения функции SUBSTRING() на SQL Server использование функции ПОДСТРОКА() с целью приведения строк неограниченной длины к строкам ограниченной длины не рекомендуется. Вместо нее лучше использовать операцию приведения типа ВЫРАЗИТЬ(). В частности, приведенный пример можно переписать в виде:
Код 1C v 8.х

Источник

Неверные параметры подстрока в запросе 1с

Войдите как ученик, чтобы получить доступ к материалам школы

Язык запросов 1С 8.3 для начинающих программистов: функции для работы со строками

Автор уроков и преподаватель школы: Владимир Милькин

Функции для работы со строками в запросе

Когда мы говорим строка в запросе, то имеется в виду либо строковая константа:

либо реквизит таблицы, у которого тип СТРОКА:

Сложение строк

Для сложения используется операция +

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Функция ПОДСТРОКА

Данная функция предназначена для выделения подстроки из строки.

В качестве параметров принимает:

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Функция ПОДОБНО

Если нужно убедиться, что строковый реквизит соответствует определённым критериям мы его сравниваем. Например, так:

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

А что, если нужно более хитрое сравнение? Не просто на равенство или неравенство, а на подобие определенному шаблону? Вот как раз для этого и создана функция ПОДОБНО.

Если быть совсем точным, то это даже не функция, а оператор, который позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа.

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

Давайте уже рассмотрим пример, чтобы ситуация прояснилась:

Результатом выполнения данного запроса будет вся еда, наименование которой начинается на букву “К”:

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Думаю вы догадались, что здесь вся “хитрость” сосредоточена в строке шаблона “[К]%”. Буква “К” в квадратных скобках в данном случае означает, что первым символом наименования должна быть буква “К”. Знак “%”, идущий следом означает, что после буквы “К” могут идти (или не идти) любые символы в любом количестве. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Конечно, я всё это не из головы придумал. При формировании строки шаблона есть определенные правила, которые нужно соблюдать:

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

“%” абсолютно любая строка (в том числе пустая):

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

“___” строка из трёх символов (любых):

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

“[ЧЛ]%[ЫН]” строка, начинающаяся с буквы Ч или Л и оканчивающаяся на Ы или Н:

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

“[^К]%” строка, не содержащая в начале букву К:

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

“[А-К]%” строка, начинающаяся с буквы из диапазона с А по К:

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Обратите внимание на приём, использованный в шаблоне “[А-К]%”. Вместо того, чтобы перечислять все буквы от А до К, например так “[АБВГДЕЁЖЗИЙК]%” мы указали диапазон значений через дефис. Квадратные скобки это позволяют делать.

Источник

Неверные параметры в 1С

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

1. Как установить параметр в запросе?

Параметр запроса – это некоторый элемент, который находится внутри функции поиска по базе данных. Рассмотрим пример, как должны быть установлены параметры запроса. Например, пускай нам нужно получить составляющие из перечня-справочника под названием «Еда» красного, жёлтого или зелёного цвета, это будет иметь такой вид:

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Рис. 1 Как установить параметр в запросе «Красный»

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Рис. 2 Как установить параметр в запросе «Желтый»

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Рис. 3 Как установить параметр в запросе «Зеленый»

Можно увидеть, что, по факту, все эти запросы одинаковые и разность только в цвете. Это-то и есть наш параметр – та переменная, которую не хотелось бы каждый раз повторять. В вышеуказанном примере параметр – это цвет, дадим ему имя «ВыбранныйЦвет» и поменяем значения цветов на эту переменную внутри запроса. А для того чтобы указать, что это именно параметр, нужно приписать перед именем амперсанд «&», тогда мы сможем задать параметр в запросе:

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Рис. 4 Как задать параметр в запросе «ВыбранныйЦвет»

После этой процедуры пробуем выполнить наш запрос, результат будет пустым и выглядеть так:

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Рис. 5 Результат неверного параметра в запросе пустой

Результат запроса пустой по причине того, что в коде не было указано само значение параметра. Выберем имя, для этого потребуется задействовать панель, которая находится над редактором запросов. Внутри данной панели размещен текст запросов:

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Рис. 6 Редактор запросов – панель с текстом запросов

Система 1С уже узнала параметр внутри запроса и выделила его в соответствующей секции, но пока без значений. Меняем пустое значение запроса, например, на значение «Жёлтый».

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Рис. 7 Смена пустого значения запроса на «Желтый»

Теперь запрос выполнится! Аналогично можно заполнить оставшиеся значения. Так при помощи параметра можно в одном и том же запросе получать результаты, которые отличаются. То есть, главная функция параметров внутри запросов – делать их более обобщёнными. Это особенно актуально в сложных запросах, так как достаточно будет только изменить сам параметр, не меняя весь запрос.

2. Функция параметра «Ссылка»

В этом варианте будет сравниваться в качестве ограничения для параметра не название цвета, а значение по ссылке:

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Рис. 8 Ограничение для параметра – значение по ссылке

Наш параметр «ВыбранныйЦвет» из строки превратился в ссылку на какой-то элемент внутри справочника «Цвета», поэтому у пользователя есть возможность изменить параметр и его тип:

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Рис. 9 Изменения типа параметра в 1С

После этого, в момент, когда ведётся выбор значения данного параметра, перед нами появится выпадающий список с перечнем цветов – это функция параметра ссылки.

3. Параметр «Дата»

Допустим, нужен запрос, который будет выбирать заказы клиентов в определённый период. Данный период будет иметь две границы – «НачалоИнтервала» и «КонецИнтервала».

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Рис. 10 Параметр «Дата»

Аналогично выполняем данный запрос и видим, что 1С уже распознала, что у данного параметра тип «Дата». Пусть нам нужны заказы за январь 2014 года, тогда получим:

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Рис. 11 Пример запроса по параметру «Дата»

Результат запроса с параметром «Дата» будет выглядеть следующим образом:

Неверные параметры подстрока в запросе 1с. Смотреть фото Неверные параметры подстрока в запросе 1с. Смотреть картинку Неверные параметры подстрока в запросе 1с. Картинка про Неверные параметры подстрока в запросе 1с. Фото Неверные параметры подстрока в запросе 1с

Рис. 12 Результат запроса с параметром «Дата»

В данной статье были рассмотрены параметры в системе 1С, видов параметр внутри запроса, параметр с типом «Дата», параметры с типом «Ссылка», аналогично проводится работа с параметрами в списках таблиц и таблиц со значениями. Ошибка в них возникает в случае задания невозможного названия, типа, их несоответствий, пунктуационных ошибок в коде программы.

Источник

Leave a Reply

Your email address will not be published. Required fields are marked *