Тип число в запросе 1с

Тип число в запросе 1с

Встроенная функция запроса ВЫРАЗИТЬ() используется не только для приведения, но и для округления чисел.

Для этого используется такой синтаксис:

ВЫРАЗИТЬ( КАК ЧИСЛО ( . ))

Общие особенности использования в запросе

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

Например, если передан NULL или он сформировался при соединениях таблиц, значение на выходе останется NULL:

Передача же «Неопределено» вызывает ошибку «Несовместимые типы ВЫРАЗИТЬ»:

  • Ссылочные типы или значения БУЛЕВО вызывают такую же ошибку (ИСТИНА не приводится к 1, а ЛОЖЬ к 0).
  • ВЫРАЗИТЬ строку как число также нельзя, используя эту функцию.

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

Обработка значения производится по методам округления (0.5 округляется до 1.0), поэтому, если требуется получить целое значение, то следует перед округлением вычесть 0.5 (половину цены шага)

Для округления до десятых в меньшую сторону вычесть 0.5, до сотых 0.05.

Демонстрация использования ВЫРАЗИТЬ в запросе для округления

Люди кончают самоубийством оттого, что получают по почте одну рекламу.

Функцию ВЫРАЗИТЬ в языке запросов 1С 8 многие интерпретируют как преобразователь типов, но она предназначена совершенно не для этих целей. Подробности под катом.

Итак, многие ошибочно полагают, что смогут преобразовать поле с типом Строка в поле с типом Число или ссылку в строку. На самом деле оператор ВЫРАЗИТЬ может преобразовать:

  • настройки примитивного типа;
  • поле составного типа в поле одиночного типа;

Рассмотрим эти ситуации более подробно.

Преобразование настроек примитивного типа

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

Читайте также:  Realtek перевод на русский

Еще ситуация когда в запросе используются расчеты, на выходе мы можем получить число с большим количество знаков после запятой (1100,001568794) . Чтобы не обрабатывать это число полсе выполнения запроса его сразу можно обрезать до нужной длины, но важно понимать что число именно обрезается, а не округляется. Пример:

Преобразование составного типа к одиночному

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

Допустим, вы задались целью получить номер каждого регистратора у РН Продажи. пишем запрос:

Собственно, ничего не может быть проще. Вот только 1С на этапе выполнения преобразует этот запрос без каких либо соединений в запрос с таким количество левых соединений сколько у нас возможных регистраторов. Т.е. если пишут в этот регистр 20 документов, то получим SQL запрос с 20 левыми соединениями. Почему так происходит? Потому что встроенный 1С оптимизатор не совсем хорошо обрабатывает поля получаемые через точку, в данном случае это реквизит Номер. Вот такие пироги, если мы часто захотим получать номер документа, то разумнее всего включить его в реквизиты регистра или же использовать оператор ВЫРАЗИТЬ, но в ущерб краткости:

Теперь в левом соединении будет участвовать одна конкретная таблица.

В общем случае, стоит внимательно обращаться к данным через точку, т.к. 1С в этом случае использует левое соединение в запросе SQL, что может существенно отразиться на производительности. Это один из моментов оптимизации.

Читайте также:  Как обновить систему на смартфоне

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

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

Выразить( как Число( , ))

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

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

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

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

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

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

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

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

Выразить( как Документ. )
Выразить( как Справочник. )
.

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

Читайте также:  Отключение ноутбука при отключении от сети

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

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

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

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

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

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

Ссылка на основную публикацию
Adblock detector