1с запрос выразить как строка
Перейти к содержимому

1с запрос выразить как строка

  • автор:

Приведение типов в языке запросов 1С.

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

Для этого необходимо использовать функцию Выразить в следующем формате:

Где:
Число — поле, параметр которое нужно округлить
ДлинаЧисла — максимальная длина числа
Точность — точность округления числа

Параметры и длинна и точность должны быть целыми положительными числами.
Посмотрите, как работает эта функция на рисунке ниже.

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

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

Выразить( как Строка()

Где
ДлинаСтроки – максимальная длина, к которой будет приведена строка.
Переделаем запрос: будем в условии приводить неограниченную строку к строке с определенной длинной. Тогда ни каких ошибок не будет.

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

Т.е. когда вам нужно получить поле какого-нибудь составного типа, то всегда получайте значение этого поля только после приведения типа при помощи функции Выразить. В этом случае для документов и справочников будет следующий формат:

Где
ИмяТаблицы — название объекта в конфигураторе 1С.

Всегда используйте функцию выразить, когда работаете с составными типами, это существенно оптимизирует запрос.

Если Вы всё еще «плаваете» в конструкциях языка запросов, и у Вас вызывают трудности даже самые простые запросы, то рекомендую вам мой курс «Запросы в 1С от новичка до профи». Где эти и многие другие вопросы рассматриваются более подробно.

В чем особенность этого курса:
• Курс рассчитан на тех, кто не знаком с языком запросов в 1С;
• Учебный материал грамотно скомпонован и прост в освоении;
• Несколько десятков уроков;
• Полезные практические примеры;
• Все уроки изложены понятным и простым языком

Для моих читателей, купон на скидку 25%: hrW0rl9Nnx

Я стараюсь как можно чаще выпускать различные интересные бесплатные статьи и видеоуроки. Поэтому буду очень рад, если Вы поддержите мой проект перечислив любую сумму:

Можете перечислить любую сумму напрямую:
Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

One Reply to “Приведение типов в языке запросов 1С.”

Добрый день, в 1С нельзя кастовать типы в запросе. Функция выразить используется для полей составного типа, что бы оставить один из них.

1с запрос выразить как строка

Добрый день. В платформе 8.3.10 есть новая фишка:

При работе в клиент-серверном варианте, с использованием СУБД Microsoft SQL Server, в результате запроса, содержащего выражение ВЫРАЗИТЬ(… КАК СТРОКА(…)), выполняется дополнение результата операции пробелами до требуемой длины.

Я так понял придется анализировать всю конфу и если где то выраженное поле результата запроса сравнивается с каким то значением или пишется в БД, то придется переделывать, например использовать функцию СокрП. У кого нибудь возникли с этим проблемы? Как решали?

эта фишка была еще в 8.0
(1) 8.0 не интересует.
Что-то не понял, честно говоря, где тут может вылезти проблема. Можно на примере?
(2) это я к тому, что проверки и так уже везде должны быть

Впервые прочитал об этой проблеме. Очень взволнован. Что же нам делать? Может быть само рассосётся? Давайте пообсуждаем!

.
ВЫРАЗИТЬ(ВариантыОтчетов.Автор.Наименование КАК СТРОКА(1000)) КАК АвторПредставление,
.

Если Не ЗначениеЗаполнено(Вариант.ПредставлениеАвтора.Значение) И ЗначениеЗаполнено(СтрокаТаблицы.АвторПредставление) Тогда
Вариант.ПредставлениеАвтора.Значение = СтрокаТаблицы.АвторПредставление;
КонецЕсли;

Т.е. Вариант.ПредставлениеАвтора.Значение будет некое значение + необходимое количество пробелов

ВЫРАЗИТЬ КАК СТРОКА в запросе

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

Синтаксис функции

  • Если на входе строка больше указанной длины — она усекается.
  • Если меньше — остается неизменной.
  • При передаче строки неограниченной длины происходит тоже самое.

Никаких пробелов в конце короткой строки не добавляется.

Другие особенности использования ВЫРАЗИТЬ КАК СТРОКА

Передача NULL в качестве параметра не вызывает ошибки, но на выходе будет NULL (не строкой).
Передача для преобразования других типов вызывает ошибку «Несовместимые типы ВЫРАЗИТЬ».

Преобразовать число как строку в запросе или же ссылку как строку в данной функции (да и в любых других функциях запроса невозможно). Это отличает TSQL запрос select cast(‘321’ as numeric(10) от запроса в 1С.

Функция ПРЕДСТАВЛЕНИЕ(ЧИСЛО), может на выходе запроса выдать строку, но внутри запроса ее результат использовать невозможно даже в качестве параметра для ВЫРАЗИТЬ.

predstavlenie-v-vyrazit

Конкантенация (сложение) строк допустима и с результатом ВЫРАЗИТЬ:

«321»+ ВЫРАЗИТЬ («Строка» КАК СТРОКА(100))

Идентификатор ссылочного объекта в запросе получить невозможно и ожидаемое многими начинающими программистами 1С в КАЧЕСТВЕ ВЫРАЗИТЬ(ССЫЛКА как СТРОКА()) не работает: ни наименования, ни кода, ни идентификатора не получится — будет ошибка несовместимости типов.

Вот такая простая функция без особых сюрпризов.

Возможно когда-нибудь в платформе 8.4 1С исправит ситуацию с преобразованиями типов в запрос, а может тут дело в поддержании совместимости всех баз данных.

Сущность хорошей рекламы не в том, чтобы возбуждать надежду, а в том, чтобы распалять жадность.

— Чарльз Адамс

ВЫРАЗИТЬ в запросе

Кроме преобразования строк и числа функция применяется для выделения одного типа в составных реквизитах.

  • Зачем использовать ВЫРАЗИТЬ для полей составного типа?
    • Пример №1:
    • Пример №2:

    Зачем использовать ВЫРАЗИТЬ для полей составного типа?

    Поля составного типа — реквизиты, в которых допустимо указание значения различных типов.

    В случае, когда такое поле не заполнено в нём хранится НЕОПРЕДЕЛЕНО, с которым не совсем удобно работать на выходе:

    • необходимо постоянно проверять на заполнено
    • если используется обращение к реквизитам через точку, при обращении возможно появление ошибки.

    Пример №1:

    Есть реквизит составного типа: Число+Перечисление

    Если выполнить ВЫРАЗИТЬ(Реквизит как ЧИСЛО(15,0)) тогда на выходе получится NULL, что ничем не лучше.

    Если вызвать ВЫРАЗИТЬ(Реквизит КАК Перечисление.ВидыЗаявок), в результате получится значение Перечисления.ВидыЗаявок.Пустая(), что вполне удобно.

    vyrazit-kak-ssylka

    Вышестоящий пример я привел для ситуации, когда удобство не так заметно.

    Пример №2:

    Реквизит составного типа: Справочник.ФизическиеЛица+Справочник.Сотрудники

    Если вы сделаете отбор в запросе:

    ГДЕ
    Сотрудник ССЫЛКА Справочник.Сотрудник

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

    В случае использования конструкции

    ВЫРАЗИТЬ (Сотрудник как Справочник.Сотрудники) как ПолеСотрудник

    В данном поле всегда будет значение ссылки и допустимо обращение к нему: в момент обработки результата запроса «ПолеСотрудник.Наименование», ПолеСотрудник.Пустая(), не вызывая ошибки.

    Дополнительное преимущество такого использования:

    В случае если составное поле имеет тип Справочник.Ссылка или Документ.Ссылка (любой справочник и любой документ, совместно) при выполнении запроса 1С присоединит все связанные таблицы:

    • В лучшем случае это замедлит выполнение запроса.
    • В больших конфигурациях типа УПП или ERP, такие запросы могут вызвать ошибку превышения количества таблиц в запросе — он попросту не выполнится.

    Если же вы знаете, что там будет и ограничите значения функцией ВЫРАЗИТЬ, такого не происходит — и вы помогаете оптимизатору запросов, а для файловой версии это может оказаться критичным.

    В типовых конфигурациях реквизит «ДокументОснование»,»ДокументОприходования», «Партия» или «Сделка», торговых документов чаще всего нуждается в таком преобразовании, т.к. составные поля используются редко: чаще разносят по различным реквизитам, которые видимы в зависимости от вида операции/ситуации.

    Другие статьи про работу с ВЫРАЗИТЬ:

    • ВЫРАЗИТЬ КАК СТРОКА
    • ВЫРАЗИТЬ КАК ЧИСЛО

    Вся реклама — это хорошие новости.

    — Маршалл Маклюэн

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *