← Назад к вопросам
Зачем использовать конструкцию ВЫРАЗИТЬ?
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
ВЫБРАТЬ...
ГДЕ ВЫРАЗИТЬ(Ссылка КАК Строка) = @КодТовара;
// МЕДЛЕННО - преобразование в приложении
Таблица = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из Таблица Цикл
Если СтрокаКвойства(Строка.Ссылка) = КодТовара Тогда
// слишком поздно, уже загрузили
КонецЕсли;
КонецЦикла;
Правила и ограничения
- Используйте ВЫРАЗИТЬ для явности — даже если работает и без него
- Преобразуйте в WHERE для фильтрации — на уровне СУБД
- Преобразуйте в SELECT для результата — явное типирование результата
- Помните о производительности — СУБД быстрее приложения
- Не цепляйте ВЫРАЗИТЬ просто так — только если есть смысл
ВЫРАЗИТЬ — это не просто синтаксис, это инструмент оптимизации и гарантии типобезопасности в SQL запросах 1С.