1с выразить как строка в запросе
В языке запросов отсутствуют встроенные функции преобразования одних типов данных в другие, например, строк в числа или даты и наоборот. В работе «Выразить строку как число и строку как дату в запросе» были предложены достаточно компактные способы преобразований «из строки». Теперь дошла очередь до обратных к ним преобразований «в строку».
Основной проблемой рассматриваемого преобразования в строку является выделение каждого конкретного разряда исходного числа. Например, число 123 состоит из трех разрядов. Пусть разряды нумеруются справа налево, начиная с нуля. Разряды отличаются весом: нулевой разряд в десятичной позиционной системе счисления имеет вес 1, первый – 10, второй – 100 и так далее. Для выделения каждого разряда требуется найти целое от деления числа на вес разряда, а затем – остаток от деления полученного целого на 10. Первый (второй слева) разряд, таким образом, получится так: 123 разделим на 10, получим 12,3. Затем возьмем целое, получим 12. Затем найдем остаток от деления на 10, получим 2 – искомый первый (второй слева) разряд. Буквальная запись этих выражений в запросе получается очень и очень громоздкой, но существует другой путь.
Этот путь заключается в использовании для нахождения остатка от деления пары функций: СЕКУНДА и ДОБАВИТЬКДАТЕ. Дело в том, что функция СЕКУНДА фактически является функцией остатка от деления на 60 числа секунд, прошедшего с начала времен. Чтобы превратить ее в функцию расчета остатка от деления на 10 достаточно считать секунды шестерками. То есть требуемая функция будет записываться так:
Эта функция выделяет самый правый (нулевой) разряд числа Икс. Чтобы выделить первый разряд, нужно использовать функцию
А чтобы выделить второй – функцию
И так далее. Множитель 60 позволяет выделить разряд десятых долей, 600 – сотых и так далее.
Ограничением рассмотренного подхода является максимальное число секунд при работе с датами. Оно таково, что мы можем выделить не более 10-ти десятичных знаков в числе. Если число значащих знаков больше, исходное число потребуется предварительно разделить на две части «обычным» способом с использованием операции ВЫРАЗИТЬ КАК.
Приведем пример запроса для случая ЧИСЛО(10, 2)
Чтобы сделать запись чуть более короткой, две постоянные - цепочку цифр «0123456789» и начало времен можно вынести во вложенный запрос
Аналогичным образом можно преобразовать число в строку в двоичной системе счисления. Вот запрос для записи в виде строки восьми младших двоичных разрядов заданного числа:
Побочным следствием использованных закономерностей является то, что выражение
можно использовать в запросе для проверки четности числа Икс.
Для перевода даты в строку достаточно перевести в строку по отдельности число дней, месяцев и лет исходной даты. В итоге получается следующий запрос
Как видно, используемые для преобразования в строку выражения довольно просты и компактны, особенно если сравнить их с тем, что приходилось использовать до сих пор.
В этой статье разберем возможности приведения типов в языке запросов 1С, которые предоставляет функция «Выразить».
Рассмотрим несколько вариантов применения этой функции.
И первый вариант – округление чисел.
Для этого необходимо использовать функцию Выразить в следующем формате:
Выразить(<Число> как Число(<ДлинаЧисла>,<Точность>))
Параметры и длинна и точность должны быть целыми положительными числами.
Посмотрите, как работает эта функция на рисунке ниже.
Второй вариант применения – приведение строк. Очень часто в конфигурациях используются строки неограниченной длинны, что накладывает некоторые ограничения. Например, мы не можем сравнивать строки неограниченной длины.
В запросе, который приведен ниже, поле ПолноеНаименование имеет тип строка неограниченной длины, и этот запрос не будет работать.
Для того что бы он работал, необходим поле неограниченной длины привести в строку с определенной длинной, делается это при помощи функции Выразить в следующем формате:
Выразить(<Строка> как Строка(<ДлинаСтроки>)
Где
ДлинаСтроки – максимальная длина, к которой будет приведена строка.
Переделаем запрос: будем в условии приводить неограниченную строку к строке с определенной длинной. Тогда ни каких ошибок не будет.
Рассмотрим последний и, я бы сказал, самый главный вариант её применения: при работе с полями составного типа.
Ниже приведены два запроса, в которых используются поля составного типа. Первый неправильный, а второй правильный.
Т.е. когда вам нужно получить поле какого-нибудь составного типа, то всегда получайте значение этого поля только после приведения типа при помощи функции Выразить. В этом случае для документов и справочников будет следующий формат:
Выразить(<Документ> как Документ.<ИмяТаблицы>)
Выразить(<Справочник> как Справочник.< ИмяТаблицы > ).
Всегда используйте функцию выразить, когда работаете с составными типами, это существенно оптимизирует запрос.
Если Вы всё еще «плаваете» в конструкциях языка запросов, и у Вас вызывают трудности даже самые простые запросы, то рекомендую вам мой курс «Запросы в 1С от новичка до профи». Где эти и многие другие вопросы рассматриваются более подробно.
В чем особенность этого курса:
• Курс рассчитан на тех, кто не знаком с языком запросов в 1С;
• Учебный материал грамотно скомпонован и прост в освоении;
• Несколько десятков уроков;
• Полезные практические примеры;
• Все уроки изложены понятным и простым языком
Для моих читателей, купон на скидку 25%: hrW0rl9Nnx
Я стараюсь как можно чаще выпускать различные интересные бесплатные статьи и видеоуроки. Поэтому буду очень рад, если Вы поддержите мой проект перечислив любую сумму:
Вступайте в мои группы:
One thought on “ Приведение типов в языке запросов 1С. ”
Добрый день, в 1С нельзя кастовать типы в запросе. Функция выразить используется для полей составного типа, что бы оставить один из них.
Разберем основные вопросы преобразования типов в 1С 8.3: из строки в число, из числа в строку, из даты в число и прочие варианты. В этой статье мы рассмотрим функции преобразования значений, и я соберу в едино все варианты преобразования примитивных типов.
Строка в число в 1С
Узнаем, как в 1С 8.3 преобразовать строку в число.
Пусть, у нас есть числа в таком виде.
Для того, чтобы выполнить преобразование этих строк в число, необходимо воспользоваться методом Число. Этот метод преобразует параметр в число.
Обратите внимание, что разделять дробную часть можно в строке как при помощи символа точка «.», так и при помощи символа запятая «,». Если перед каким-то числом в строке стоят нули, то они отсекаются. У нас будет следующий результат.
Число в строку в 1С
Рассмотрим обратную задачу, когда в 1С 8.3 нужно преобразовать число в строку. Самый простой вариант использовать метод Строка, который преобразует собственный параметр в строку.
И какой результат возвращает этот код:
У этого способа имеется недостаток: он ставит пробелы между разрядами у длинных чисел. Для того, чтобы в 1С преобразовать число в строку без пробелов нужно воспользоваться функцией Формат. Данная функция имеет два параметра: преобразуемое значение и форматную строку. Если нам нужно указать, что число преобразуется в строку без пробелов в разряде, то необходимо указать в форматной строке, что порядок разделения группировки разрядов числа или равен 0, или пустой.
Результат будет без разрядов:
Строка в дату 1С
Узнаем, как преобразовать в 1С 8.3 строку в дату. Для этого необходимо использовать метод Дата, который преобразует параметр (в том числе строку ) в дату . Причем, замечу, что строка должна быть задана в таком формате «ГГГГММДДЧЧММСС».
Подробнее о форматах дат читайте в этой статье: даты в 1С.
Если мы зададим дату в не верном формате, то преобразование не произойдет и возникнет ошибка «Преобразование значения к типу Дата не может быть выполнено».
Например, этот код:
Приведет к ошибке:
Дата в строку в 1С
Преобразовать дату в строку можно несколькими способами. Первый способ: воспользоваться уже знакомым нам методом Строка.
В этом случае у нас выйдет строка в обычном «полном» формате даты.
А чтобы получить дату в том формате, в каком нам нужно, необходимо воспользоваться методом Формат.
Форматов дат может быть великое множество ,все я разбирать в этой статье не буду, покажу только как можно быстро воспользоваться этой функцией.
Мы изменим предыдущий код, написав вместо метода Строка метод Формат, а в качестве второго параметра у метода Формат напишем просто две кавычки.
После нужно между кавычками поставить курсор, вызвать контекстное меню, и применить в нем команду Конструктор форматной строки.
В этом конструкторе на закладке Дата вы можете выбрать удобный вам формат даты.
И после нажатия кнопки ОК этого конструктора, нужный формат появится в виде строки.
В результате метода Формат, дата будет преобразована в строку в том виде, в каком нам необходимо.
Строка в булево в 1С
При помощи метода Булево мы можем некоторые строковые представления (Да, Нет, Истина, Ложь) преобразовывать в значения Истина или Ложь.
Например, следующие переменные:
Будут иметь такие значения:
Булево в строку в 1С
Разберем, как в 1С можно выразить тип булево строкой. Булево значение можно преобразовать в строку несколькими способами. Во-первых, можно просто воспользоваться методом Строка.
Например, как здесь:
У нас будет выходить следующий результат:
В этом случае, булево в строку преобразовалось согласно региональным установкам информационной базы.
Если мы, как-то по-другому хотим преобразовать булево в строку, то можно воспользоваться уже знакомым нам методом Формат.
Переделаем, предыдущий код:
Знакомым способом вызовем конструктор форматной строки, где на закладке Булево введем преставление значений Истина и Ложь.
После нажатия кнопки ОК конструктора, второй параметр метода Формат заполнится:
И будет следующий результат:
Число в булево в 1С
В 1С 8.3. мы можем преобразовать любое число в булево по следующему правилу: 0 будет преобразован в Ложь, все остальные значения в Истина.
Будет следующий результат:
Булево в число в 1С
Можно сделать и обратное преобразование. Булево значение в число.
Для этого нужно воспользоваться методом Число, где в качестве параметра указать булево значение. Тогда Истина будет преобразована в 1С, а Ложь – в 0.
Например, как в этом коде:
С таким результатом:
Статьи о примитивных типах в 1С:
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
можно оплатить вручную:
Читайте также: