Значения типа Тип в запросах 1С могут использоваться при наложении условий, в сравнениях, упорядочивании и группировках. Для работы с типами предусмотрено несколько механизмов, которые покрывают все потребности разработчика. Рассмотрим их.
Функция ТИПЗНАЧЕНИЯ
Функция ТИПЗНАЧЕНИЯ имеет единственный параметр, куда передается значение, для которого требуется определить тип. Функция возвращает значения типа Тип. Чаще всего функция используется совместно с литералом ТИП в условиях запроса.
Рассмотрим примеры использования. Вывод в результат запроса типа Регистратора:
Закупки.Регистратор КАК Регистратор ,
ТИПЗНАЧЕНИЯ( Закупки.Регистратор ) КАК ТипРегистратора
РегистрНакопления.Закупки КАК Закупки
Использование функции ТИПЗНАЧЕНИЯ в операции сравнения:
Закупки.Регистратор КАК Регистратор
РегистрНакопления.Закупки КАК Закупки
ТИПЗНАЧЕНИЯ( Закупки.Регистратор ) = ТИП( Документ.ПриобретениеТоваровУслуг )
Литерал ТИП
В литерал ТИП передается имя примитивного типа или таблицы ссылочного типа. Результатом конструкции будет значение типа Тип.
Примеры имен типов:
ТИП(Строка)
ТИП(Число)
ТИП( Перечисление.СтавкиНДС )
ТИП( Справочник.Номенклатура )
ТИП( Документ.ПриобретениеТоваровУслуг )
ТИП( ПланСчетов.Хозрасчетный )
ТИП( ПланОбмена.Полный )
Использование в запросе:
Закупки.Регистратор КАК Регистратор ,
КОГДА ТИПЗНАЧЕНИЯ( Закупки.Регистратор ) = ТИП( Документ.ПриобретениеТоваровУслуг )
ТОГДА «Приобретение товаров»
КОНЕЦ КАК ТипИсточника
РегистрНакопления.Закупки КАК Закупки
Оператор ССЫЛКА
Оператор позволяет проверить, является ли значение выражения, указанного справа от него, ссылкой на таблицу, указанную слева. Результат оператора — значение типа Булево.
Закупки.Регистратор КАК Регистратор
РегистрНакопления.Закупки КАК Закупки
Закупки.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг
Для ссылочных таблиц оператор ССЫЛКА является эквивалентом сравнения
Остались вопросы?
Спросите в комментариях к статье.
1 комментарий
Скажите, пжст, для оптимальной производительности что лучше использовать:
ТипЗначения() ИЛИ «Регистартор Ссылка Документ…»?
Несовместимые типы «ВЫРАЗИТЬ» — такое сообщение появляется, когда программист 1С 8.2 или 8.3 в запросе пытается сравнить два различных типа.
Функция Выразить() позволяет привести значение поля запроса 1С к определенному типу. Это может понадобиться в двух случаях:
1. Получить нужную разрядность числа или нужное количество символов строкового значения. Количество символов полей неограниченного типа приходится ограничить из-за определенных особенностей.
Получите 267 видеоуроков по 1С бесплатно:
ВЫРАЗИТЬ(Номенклатура.Комментарий КАК СТРОКА(300))
ВЫРАЗИТЬ(Номенклатура.Цена КАК ЧИСЛО(15, 2)) КАК Сумма
2. Преобразовать поле составного типа в поле с одним типом. Это может понадобиться в целях оптимизации запросов. Если в типизированное поле попадёт значение другого типа, то система вернёт NULL, поэтому всегда необходимо дополнительно устанавливать условие в секции «ГДЕ», ограничивая его оператором ССЫЛКА.
ВЫБРАТЬ
…
ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.Реализация)
…
ИЗ
…
ГДЕ Продажи.Регистратор ССЫЛКА Документ.Реализация
Как избежать ошибок
Ошибки типа «Несовместимые типы ВЫРАЗИТЬ …» могут возникать при неправильном использования синтаксиса.
К примеру, конструкция «ВЫРАЗИТЬ(«123″ КАК ЧИСЛО(5, 2)) КАК Сумма» считается ошибочной, так как в запросе нельзя штатными способами преобразовывать из одного типа в другой.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Встроенная функция запроса ВЫРАЗИТЬ() используется не только для приведения, но и для округления чисел.
Для этого используется такой синтаксис:
ВЫРАЗИТЬ( КАК ЧИСЛО ( . ))
Общие особенности использования в запросе
Если в качестве параметра передано не числовое значение, это может не вызывать ошибки выполнения запроса, но значение корректно не обработается:
Например, если передан NULL или он сформировался при соединениях таблиц, значение на выходе останется NULL:
Передача же «Неопределено» вызывает ошибку «Несовместимые типы ВЫРАЗИТЬ»:
- Ссылочные типы или значения БУЛЕВО вызывают такую же ошибку (ИСТИНА не приводится к 1, а ЛОЖЬ к 0).
- ВЫРАЗИТЬ строку как число также нельзя, используя эту функцию.
Поэтому следует обрабатывать/проверять значение до его передачи в качестве параметра функции.
Обработка значения производится по методам округления (0.5 округляется до 1.0), поэтому, если требуется получить целое значение, то следует перед округлением вычесть 0.5 (половину цены шага)
Для округления до десятых в меньшую сторону вычесть 0.5, до сотых 0.05.
Демонстрация использования ВЫРАЗИТЬ в запросе для округления
Никакая реклама не поможет продать то, что продать невозможно.