Функция ВЫРАЗИТЬ является одной из важных возможностей языка запросов 1С:Предприятие 8.3, позволяющей работать с данными составного типа и приводить их к определенному типу. В этой статье мы разберем основные аспекты использования функции, ее назначение, примеры применения и особенности работы.
Что такое функция ВЫРАЗИТЬ?
Функция ВЫРАЗИТЬ предназначена для работы с полями, имеющими составной тип данных. Её основное назначение заключается в явном преобразовании составных типов данных к определённому типу, ограничении строковых значений до заданной длины и контроле над разрядностью числовых показателей. Техническая реализация функции позволяет существенно повысить эффективность выполнения сложных запросов за счёт сокращения неявных соединений.
Немного теории о функции ВЫРАЗИТЬ
Функция имеет синтаксис
ВЫРАЗИТЬ(Выражение КАК Тип)
Где:
- Выражение — это поле или значение, которое нужно преобразовать.
- Тип — целевой тип данных, к которому необходимо привести выражение.
Если тип выражения не совпадает с типом, к которому требуется привести значение, функция вернет NULL.
В архитектуре 1С:Предприятие составные типы данных представляют собой объединение нескольких ссылочных типов в единую структуру. Типичным примером служит реквизит документа «Регистратор», который может ссылаться на различные виды документов в зависимости от конфигурации. Функция ВЫРАЗИТЬ позволяет явно указать платформе, к какому конкретному типу следует приводить значение, что принципиально меняет логику выполнения запроса. Например при использовании конструкции
ВЫРАЗИТЬ(ОстаткиТоваров.Регистратор КАК Документ.ПоступлениеТоваров)
система выполняет неявное внутреннее соединение только с таблицей указанного типа документа, игнорируя другие возможные варианты.
ВЫРАЗИТЬ(Справочник.Номенклатура.Наименование КАК Строка(100))Для числовых данных функция ВЫРАЗИТЬ выполняет двойную роль: контроль точности представления чисел и неявное округление значений.
ВЫРАЗИТЬ(Товары.Сумма КАК Число(15,2))Часто функция ВЫРАЗИТЬ используется совместно с условием ССЫЛКА, что позволяет более эффективно фильтровать данные в запросах.
Основной вариант применения функции ВЫРАЗИТЬ в запросах 1С
Предположим, при выборке данных из регистра “Оплата счетов” в 1С 8.3 требуется получить сумму документа регистратора. В документе «Поступление на расчетный счет» есть реквизит “Сумма документа”, а в документе «Операция» этот реквизит называется “СуммаОперации”. В этом случае можно использовать следующий запрос:
ВЫБРАТЬ
Выбор Когда РегистрОплатаСчетов.Регистратор ССЫЛКА Документ.ПоступлениеНаРасчетныйСчет Тогда
ВЫРАЗИТЬ(РегистрОплатаСчетов.Регистратор КАК Документ.ПоступлениеНаРасчетныйСчет ).СуммаДокумента
Когда РегистрОплатаСчетов.Регистратор ССЫЛКА Документ.Операция Тогда
ВЫРАЗИТЬ(РегистрОплатаСчетов.Регистратор КАК Документ.Операция).СуммаОперации
Конец КАК Сумма
ИЗ
РегистрНакопления.ОплатаСчетов КАК РегистрОплатаСчетов
ГДЕ
(РегистрОплатаСчетов.Регистратор ССЫЛКА Документ.ПоступлениеНаРасчетныйСчет
ИЛИ РегистрОплатаСчетов.Регистратор ССЫЛКА Документ.Операция)
Дополнительные применения функции ВЫРАЗИТЬ() в 1С 8.3
Для строковых типов:
Важное замечание:
Функция ВЫРАЗИТЬ() не является аналогом неявного преобразования типов в SQL, несмотря на наличие английского синонима Cast. Например, попытка преобразовать число в строку вызовет ошибку.
ВЫРАЗИТЬ("Пример строки" КАК Строка(5)) // Результат: "Приме"
Приведение неограниченной строки к строке фиксированной длины:
Строки неограниченной длины не могут быть обработаны в запросах 1С:Предприятия при сравнении, группировке или получении уникальных значений. Для обхода этого ограничения неограниченную строку можно преобразовать в ограниченную:
ВЫРАЗИТЬ(НеограниченнаяСтрока КАК Строка(100))
Для числовых типов:
Округление числовых значений до определенного знака:
ВЫРАЗИТЬ(123.456 КАК Число(10, 2)) // Результат: 123.46
Важное замечание:
Функция ВЫРАЗИТЬ() не является аналогом неявного преобразования типов в SQL, несмотря на наличие английского синонима Cast. Например, попытка преобразовать число в строку вызовет ошибку.