← Назад к вопросам

Зачем использовать конструкцию ВЫРАЗИТЬ?

2.0 Middle🔥 191 комментариев
#Запросы и оптимизация

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Зачем использовать конструкцию ВЫРАЗИТЬ

Конструкция ВЫРАЗИТЬ в языке 1С Query (запросов) — это инструмент для явного преобразования типов данных. Это критически важно для корректной работы с данными в SQL запросах.

Основная цель ВЫРАЗИТЬ

ВЫРАЗИТЬ используется для:

  • Явного приведения данных одного типа к другому
  • Преобразования ссылок на объекты в строки (коды)
  • Преобразования строк в числа для расчётов
  • Преобразования дат для сравнения
  • Преобразования BLOB в строки

Синтаксис

ВЫРАЗИТЬ(Выражение КАК ТипДанных)

Практические примеры

Пример 1: Преобразование ссылки в строку

Запрос = Новый Запрос(
    "ВЫБРАТЬ
        ВЫРАЗИТЬ(Товары.Ссылка КАК Строка) КАК КодТовара,
        Товары.Наименование
    ИЗ
        Справочник.Товары КАК Товары"
);

Результат = Запрос.Выполнить();
Таблица = Результат.Выгрузить();
// КодТовара будет строкой, а не ссылкой на объект

Пример 2: Преобразование строки в число

Запрос = Новый Запрос(
    "ВЫБРАТЬ
        Товары.Наименование,
        ВЫРАЗИТЬ(Товары.ДополнительныеДанные.Вес КАК Число) КАК ВесКилограммов
    ИЗ
        Справочник.Товары КАК Товары
    ГДЕ
        ВЫРАЗИТЬ(Товары.ДополнительныеДанные.Вес КАК Число) > 10"
);

Основные типы преобразований

От типаК типуПричина
СсылкаСтрокаПолучить код/УИД для экспорта
СтрокаЧислоВычисления со строковыми данными
Дата-ВремяДатаСравнение только по дате
ЧислоСтрокаФорматирование для вывода
BLOBСтрокаСериализация бинарных данных

Когда ВЫРАЗИТЬ обязателен

1. Сравнение разных типов

// ОШИБКА - нельзя сравнить ссылку со строкой
ВЫБРАТЬ
    Товары.Ссылка
ИЗ
    Справочник.Товары КАК Товары
ГДЕ
    Товары.Ссылка = "12345"; // ОШИБКА!

// ПРАВИЛЬНО
ВЫБРАТЬ
    Товары.Ссылка
ИЗ
    Справочник.Товары КАК Товары
ГДЕ
    ВЫРАЗИТЬ(Товары.Ссылка КАК Строка) = "12345";

2. Математические операции

// Если поле хранит число как строку
ВЫБРАТЬ
    Наименование,
    ВЫРАЗИТЬ(СтроковоеЧисло КАК Число) + 10 КАК РезультатСложения
ИЗ
    ТаблицаДанных
ГДЕ
    ВЫРАЗИТЬ(СтроковоеЧисло КАК Число) > 100;

3. Объединение данных из разных источников

ВЫБРАТЬ
    ВЫРАЗИТЬ(Справочник1.Код КАК Строка) КАК КодПервого,
    ВЫРАЗИТЬ(Справочник2.Код КАК Строка) КАК КодВторого
ИЗ
    Справочник.Справочник1 КАК Справочник1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
    Справочник.Справочник2 КАК Справочник2
ПО
    ВЫРАЗИТЬ(Справочник1.Код КАК Строка) = ВЫРАЗИТЬ(Справочник2.Код КАК Строка);

Поддерживаемые типы в ВЫРАЗИТЬ

// Основные типы преобразования в 1С
ВЫРАЗИТЬ(... КАК Строка)      // Преобразование в текст
ВЫРАЗИТЬ(... КАК Число)       // Преобразование в число
ВЫРАЗИТЬ(... КАК Дата)        // Преобразование в дату
ВЫРАЗИТЬ(... КАК Булево)      // Преобразование в логическое
ВЫРАЗИТЬ(... КАК Документ.*) // Преобразование в ссылку на документ
ВЫРАЗИТЬ(... КАК Справочник.*) // Преобразование в ссылку на справочник

Различие типов данных в 1С

Ссылка на объект (Reference)

  • Это не строка, это внутренний указатель на объект БД
  • УИД (код) объекта — это строка, которая однозначно его идентифицирует
  • ВЫРАЗИТЬ преобразует указатель в его строковое представление
Ссылка = Справочник.Товары.ПолучитьСсылку(УИД);
// Ссылка - это объект, указатель
// ВЫРАЗИТЬ(Ссылка КАК Строка) даст строку с кодом/УИД

Производительность

Важно: ВЫРАЗИТЬ выполняется на уровне SQL, поэтому:

  • Преобразование происходит в СУБД, а не в приложении 1С
  • Это быстрее, чем преобразование после выгрузки
  • Фильтрация (WHERE) работает на преобразованных данных
  • Улучшает производительность при больших объёмах
// БЫСТРО - преобразование в SQL
ВЫБРАТЬ...
ГДЕ ВЫРАЗИТЬ(Ссылка КАК Строка) = @КодТовара;

// МЕДЛЕННО - преобразование в приложении
Таблица = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из Таблица Цикл
    Если СтрокаКвойства(Строка.Ссылка) = КодТовара Тогда
        // слишком поздно, уже загрузили
    КонецЕсли;
КонецЦикла;

Правила и ограничения

  1. Используйте ВЫРАЗИТЬ для явности — даже если работает и без него
  2. Преобразуйте в WHERE для фильтрации — на уровне СУБД
  3. Преобразуйте в SELECT для результата — явное типирование результата
  4. Помните о производительности — СУБД быстрее приложения
  5. Не цепляйте ВЫРАЗИТЬ просто так — только если есть смысл

ВЫРАЗИТЬ — это не просто синтаксис, это инструмент оптимизации и гарантии типобезопасности в SQL запросах 1С.

Зачем использовать конструкцию ВЫРАЗИТЬ? | PrepBro