1с выразить как справочник в запросе
Перейти к содержимому

1с выразить как справочник в запросе

  • автор:

Оператор ВЫРАЗИТЬ, аналог методов Лев, Прав, СокрЛП в Запросе?

Распечатать

Ещё оператор ВЫРАЗИТЬ используется для приведения числа к определённому виду. Например: Код 1C v 8.х даст результат 3,33 вместо 3,33333333333333.

Или ещё для выделения значений определённого типа значения из переменной с составным типом значения . Например такой запрос Код 1C v 8.х результат запроса будет содержать значения типа СправочникСсылка.Контрагенты и NULL когда значения будут встречаться другого типа

ВЫРАЗИТЬ в запросе

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

Зачем использовать ВЫРАЗИТЬ для полей составного типа?

Поля составного типа — реквизиты, в которых допустимо указание значения различных типов.

В случае, когда такое поле не заполнено в нём хранится НЕОПРЕДЕЛЕНО, с которым не совсем удобно работать на выходе:

  • необходимо постоянно проверять на заполнено
  • если используется обращение к реквизитам через точку, при обращении возможно появление ошибки.

Пример №1:

Есть реквизит составного типа: Число+Перечисление

Если выполнить ВЫРАЗИТЬ(Реквизит как ЧИСЛО(15,0)) тогда на выходе получится NULL, что ничем не лучше.

Если вызвать ВЫРАЗИТЬ(Реквизит КАК Перечисление.ВидыЗаявок), в результате получится значение Перечисления.ВидыЗаявок.Пустая(), что вполне удобно.

vyrazit-kak-ssylka

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

Пример №2:

Реквизит составного типа: Справочник.ФизическиеЛица+Справочник.Сотрудники

Если вы сделаете отбор в запросе:

ГДЕ
Сотрудник ССЫЛКА Справочник.Сотрудник

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

В случае использования конструкции

ВЫРАЗИТЬ (Сотрудник как Справочник.Сотрудники) как ПолеСотрудник

В данном поле всегда будет значение ссылки и допустимо обращение к нему: в момент обработки результата запроса «ПолеСотрудник.Наименование», ПолеСотрудник.Пустая(), не вызывая ошибки.

Дополнительное преимущество такого использования:

В случае если составное поле имеет тип Справочник.Ссылка или Документ.Ссылка (любой справочник и любой документ, совместно) при выполнении запроса 1С присоединит все связанные таблицы:

  • В лучшем случае это замедлит выполнение запроса.
  • В больших конфигурациях типа УПП или ERP, такие запросы могут вызвать ошибку превышения количества таблиц в запросе — он попросту не выполнится.

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

В типовых конфигурациях реквизит «ДокументОснование»,»ДокументОприходования», «Партия» или «Сделка», торговых документов чаще всего нуждается в таком преобразовании, т.к. составные поля используются редко: чаще разносят по различным реквизитам, которые видимы в зависимости от вида операции/ситуации.

Другие статьи про работу с ВЫРАЗИТЬ:

Реклама – самая интересная и самая трудная форма литературы.

— Олдос Хаксли.

Приведение типов в языке запросов 1С.

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

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

Выразить(<Число> как Число(<ДлинаЧисла>,<Точность>))

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

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

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

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

Выразить(<Строка> как Строка(<ДлинаСтроки>)

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

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

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

Выразить(<Документ> как Документ.<ИмяТаблицы>)
Выразить(<Справочник> как Справочник.< ИмяТаблицы > )
.

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

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

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

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

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

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

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

Вступайте в мои группы:

One Reply to “Приведение типов в языке запросов 1С.”

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

Разработчику о работе с 1С:Предприятие, Pascal, Паскаль

Операция приведения типа ВЫРАЗИТЬ() в 1С:Предприятие 8.2,8.3.

16.02.2017 | Автор Дмитрий

Операция приведения типа ВЫРАЗИТЬ() в 1С:Предприятие 8.2,8.3.
Функция Выразить() позволяет программисту привести значение поля запроса 1С к определенному типу.

Код, приводим к типу СТРОКА:

Код, приводим к типу ЧИСЛО:

Приводим к определенному типу поля составного типа. Для примера возьмем регистр накопления ПартииТоваровНаСкладах поле
ДокументОприходования составного типа. Пусть нам надо привести его к типу Документ.ОприходованиеТоваров.
Код:

В результате работы, выводятся все записи всех типов. В Поле2 отображаются либо документ оприходования товаров, либо значение типа NULL.
Требуется добавить проверку. Тогда код будет таким:

В результате работы выполнения запроса, мы получим записи только с документами ОприходованиеТоваров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *