1С запрос несовместимые типы выразить

Значения типа Тип в запросах 1С могут использоваться при наложении условий, в сравнениях, упорядочивании и группировках. Для работы с типами предусмотрено несколько механизмов, которые покрывают все потребности разработчика. Рассмотрим их.

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

Функция ТИПЗНАЧЕНИЯ имеет единственный параметр, куда передается значение, для которого требуется определить тип. Функция возвращает значения типа Тип. Чаще всего функция используется совместно с литералом ТИП в условиях запроса.

Рассмотрим примеры использования. Вывод в результат запроса типа Регистратора:

Закупки.Регистратор КАК Регистратор ,

ТИПЗНАЧЕНИЯ( Закупки.Регистратор ) КАК ТипРегистратора

РегистрНакопления.Закупки КАК Закупки

Использование функции ТИПЗНАЧЕНИЯ в операции сравнения:

Закупки.Регистратор КАК Регистратор

РегистрНакопления.Закупки КАК Закупки

ТИПЗНАЧЕНИЯ( Закупки.Регистратор ) = ТИП( Документ.ПриобретениеТоваровУслуг )

Литерал ТИП

В литерал ТИП передается имя примитивного типа или таблицы ссылочного типа. Результатом конструкции будет значение типа Тип.

Примеры имен типов:

ТИП(Строка)
ТИП(Число)
ТИП( Перечисление.СтавкиНДС )
ТИП( Справочник.Номенклатура )
ТИП( Документ.ПриобретениеТоваровУслуг )
ТИП( ПланСчетов.Хозрасчетный )
ТИП( ПланОбмена.Полный )

Использование в запросе:

Закупки.Регистратор КАК Регистратор ,

КОГДА ТИПЗНАЧЕНИЯ( Закупки.Регистратор ) = ТИП( Документ.ПриобретениеТоваровУслуг )

ТОГДА «Приобретение товаров»

КОНЕЦ КАК ТипИсточника

РегистрНакопления.Закупки КАК Закупки

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

Оператор позволяет проверить, является ли значение выражения, указанного справа от него, ссылкой на таблицу, указанную слева. Результат оператора — значение типа Булево.

Закупки.Регистратор КАК Регистратор

РегистрНакопления.Закупки КАК Закупки

Закупки.Регистратор ССЫЛКА Документ.ПриобретениеТоваровУслуг

Для ссылочных таблиц оператор ССЫЛКА является эквивалентом сравнения

Остались вопросы?
Спросите в комментариях к статье.

1 комментарий

Скажите, пжст, для оптимальной производительности что лучше использовать:

ТипЗначения() ИЛИ «Регистартор Ссылка Документ…»?

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

Читайте также:  1С скд выбранные поля программно

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

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

Получите 267 видеоуроков по 1С бесплатно:

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

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

ВЫБРАТЬ

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

ИЗ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Можно дурачить всех все время, — при условии, что реклама ведется правильно, а расходы на нее достаточно велики.

Оцените статью
Добавить комментарий

Adblock detector