Как в запросе преобразовать строку в число

Как в запросе преобразовать строку в число

В языке запросов 1С существует большое количество различных функций и операторов, облегчающих построение запроса. Часть из них мы рассмотрели в статьях Функции работы с датами, Группировки в запросах 1С, остальные рассмотрим сейчас.

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

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

Во-первых, строки в запросах можно складывать. Для этого используется оператор «+»:

Во-вторых, можно выделить часть строки. Для этого используется функция ПОДСТРОКА. Функция аналогична функции СРЕД () встроенного языка 1С. У нее три параметра:

  1. Строка-источник.
  2. Номер символа, с которого должна начинаться выделяемая строка.
  3. Количество символов.

И, наконец, существует оператор, которые позволяет сравнить строку с неким шаблоном. Это оператор ПОДОБНО. О его использовании читайте в нашей статье о парамертах и операторах сравнения в запросах 1С.

Функция ЕСТЬNULL

NULL — особый тип данных на платформе 1С:Предприятие. Он же является единственным возможным значением этого типа. NULL может возникать в запросах в нескольких случаях: при соединениях источников запроса, если не было найдено соответствующего значения в одной из таблиц; при обращении к реквизитам несуществующего объекта; если NULL был указан в списке полей запроса (например при объединении результатов выборки из нескольких таблиц) и т.д.

Поскольку NULL не является ни нулем, ни пустой строкой, ни даже значением Неопределено, его часто бывает полезно заменять на какой-то более полезный тип данных. Для этого и предназначена функция ЕСТЬNULL.

Она имеет два параметра:

  1. Проверяемое значение.
  2. Значение, на которое нужно заменить первый параметр, если он оказался равен NULL.

Функции ПРЕДСТАВЛЕНИЕ и ПРЕДСТАВЛЕНИЕССЫЛКИ

Эти функции предназначены для получения строковых представлений различных значений. То есть, они преобразуют ссылки, числа, булево и т.д. в обычный текст. Разница между ними в том, что функция ПРЕДСТАВЛЕНИЕ преобразует в текст (строку) любые типы данных, а функция ПРЕДСТАВЛЕНИЕССЫЛКИ — только ссылки, а остальные значения возвращает как есть, не преобразованными.

Функции ТИП и ТИПЗНАЧЕНИЯ

Функция ТИП возвращает тип данных платформы 1С:Предприятие.

Функция ТИПЗНАЧЕНИЯ возвращает тип переданного в нее значения.

Эти функции удобно применять, например, когда нужно выяснить является ли полученное в запросе поле значением какого-то типа. Например, получим контактную информацию контрагентов из регистра сведений КонтактнаяИнформация (там хранятся контакты не только контрагентов, но и организаций, физических лиц и т.д.):

Функция ЗНАЧЕНИЕ

Функция Значение позволяет использовать в запросе объекты конфигурации 1С напрямую, без применения параметров запроса.

Читайте также:  Как включить геолокацию в вотсапе

Дополним предыдущий пример еще одним условием. Необходимо получить только телефоны контрагентов.

Следует отметить, что эту функцию можно использовать только с предопределенными значениями, т.е. со значениями, к которым можно обратиться напрямую из конфигуратора. То есть функция ЗНАЧЕНИЕ не можно использоваться с элементами справочников, созданными пользователями, но может работать с перечислениями, с предопределенными элементами справочников, со значениями ПустаяСсылка.

Оператор ССЫЛКА

Оператор ССЫЛКА предназначен для проверки значений, получаемых запросом, на принадлежность к определенному ссылочному типу. Эту же задачу можно выполнить с помощью функций ТИП и ТИПЗНАЧЕНИЯ (которые имеют более широкую область применения и были рассмотрены выше).

Например, задачу выбора контактной информации контрагентов можно было решить и так:

Оператор ВЫРАЗИТЬ

Оператор ВЫРАЗИТЬ используется в запросах 1С в двух случаях:

  • когда нужно изменить характеристики примитивного типа;
  • когда нужно из поля с составным типом данных сделать поле с одиночным типом.

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

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

В ряде случаев, запросы к полям с составным типом данных могут обрабатываться платформой 1С неоптимально. Это приводит к увеличению времени выполнения запросов, поэтому бывает полезно заранее преобразовать составной тип в одиночный.

Операторы ВЫБОР и ЕСТЬ NULL

Оператор ВЫБОР аналогичен оператору ЕСЛИ во встроенном языке 1С, но имеет несколько урезанный функционал.

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

Как видно из примера, в конструкции ВЫБОР всегда присутствует условие после слова КОГДА; значение, применяемое, если условие выполняется, после слова ТОГДА и значение, применяемое, если условие не выполняется, после слова ИНАЧЕ. Все три элемента конструкции ВЫБОР являются обязательными. Опустить элемент ИНАЧЕ, так же, как это делается при использовании оператора ЕСЛИ во встроенном языке 1С, нельзя. Также у оператора ВЫБОР отсутствует аналог конструкции ИНАЧЕЕСЛИ, зато можно вложить один ВЫБОР в другой, как и было сделано в нашем примере.

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

Оператор ЕСТЬ NULL используется в конструкции ВЫБОР для сравнения поля запроса с типом NULL.

Кроме того, оператор ЕСТЬ NULL можно использовать в условиях запроса, например в предложении ГДЕ.

Несовместимые типы «ВЫРАЗИТЬ» — такое сообщение появляется, когда программист 1С 8.2 или 8.3 в запросе пытается сравнить два различных типа.

Функция Выразить() позволяет привести значение поля запроса 1С к определенному типу. Это может понадобиться в двух случаях:

1. Получить нужную разрядность числа или нужное количество символов строкового значения. Количество символов полей неограниченного типа приходится ограничить из-за определенных особенностей.

ВЫРАЗИТЬ(Номенклатура.Комментарий КАК СТРОКА(300))
ВЫРАЗИТЬ(Номенклатура.Цена КАК ЧИСЛО(15, 2)) КАК Сумма

2. Преобразовать поле составного типа в поле с одним типом. Это может понадобиться в целях оптимизации запросов. Если в типизированное поле попадёт значение другого типа, то система вернёт NULL, поэтому всегда необходимо дополнительно устанавливать условие в секции «ГДЕ», ограничивая его оператором ССЫЛКА.

ВЫБРАТЬ

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

ИЗ

ГДЕ Продажи.Регистратор ССЫЛКА Документ.Реализация

Как избежать ошибок

Ошибки типа «Несовместимые типы ВЫРАЗИТЬ …» могут возникать при неправильном использования синтаксиса.

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

К примеру, конструкция «ВЫРАЗИТЬ(«123″ КАК ЧИСЛО(5, 2)) КАК Сумма» считается ошибочной, так как в запросе нельзя штатными способами преобразовывать из одного типа в другой.

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

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

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

  • настройки примитивного типа;
  • поле составного типа в поле одиночного типа;
Читайте также:  Как убрать белую точку на экране телефона

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

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

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

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

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

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

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

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

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

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

Ссылка на основную публикацию
Используется устаревшая версия webclientsigner как исправить
Название Инструкция по обновлению клиента электронной подписи 1 Удалите компонент электронной подписи WebClientSignerSetup. Для этого нажмите «ПускВсе программыКристаРегиональная контрактная системаРабота...
Игра динозавр прыгает через кактусы играть
This Easter Egg is usually hidden on the No Internet connection error page in Google's Chrome web browser and played...
Идеи для названия беседы в вк
Наш сайт уже рассказывал о том, что в ВКонтакте можно создавать так называемую беседу, участие в которой может принимать сразу...
Исходные объекты не компланарны в автокаде
Компланарность — свойство трёх (или большего числа) векторов, которые, будучи приведёнными к общему началу, лежат в одной плоскости [1] ....
Adblock detector