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

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

  • автор:

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

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

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

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

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

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

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

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

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

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

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

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

ВЫРАЗИТЬ (<СТРОКА-ИСТОЧНИК> КАК СТРОКА(<ДлинаРезультата>)

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

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

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

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

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

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

predstavlenie-v-vyrazit

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

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

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

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

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

Реклама магазина самообслуживания: треска, стоящая в очереди за cобственной печенью.

— Владимир Колечицкий

ВЫРАЗИТЬ в запросах 1С 8.3 — применение на примерах

Оператор «ВЫРАЗИТЬ» в языке запросов 1С 8.3 используют в двух случаях:

  • Когда необходимо преобразовать строковый или числовой тип данных к нужному виду (формату)
  • Для выделения одного типа, в полях выборки имеющих составной тип данных.

Рассмотрим на примерах работу такого оператора.

ВЫРАЗИТЬ КАК Строка

Для работы со строковым типом данных такой оператор может пригодиться, когда необходимо жёстко задать размерность строки.

Синтаксис:

ВЫРАЗИТЬ(<Выражение> КАК Строка(<ДлинаСтроки>))

Пример:

ВЫБРАТЬ

ВЫРАЗИТЬ(Номенклатура.Наименование КАК Строка(1)) КАК НаименованиеДлина_1

ИЗ

Справочник.Номенклатура КАК Номенклатура

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

ВЫРАЗИТЬ КАК Число

В полях выборки запроса имеющих числовой тип данных, с помощью оператора «ВЫРАЗИТЬ» возможно, контролировать длину целой и дробной части числа. В случаях, когда в результате такого контроля будет уменьшено количество знаков в числе, произойдёт округление по математическим правилам.

Синтаксис:

Получите понятные самоучители по 1С бесплатно:

ВЫРАЗИТЬ(<Выражение> КАК Число(<ДлинаЦелойЧасти>.<ДлинаДробнойЧасти>))

Пример№1:

ВЫБРАТЬ

3.55 КАК НашеЧисло,

ВЫРАЗИТЬ(3.55 КАК Число(15,1)) КАК РезультатОкругления

Результат:

Пример№2:

ВЫБРАТЬ

10/3 КАК Результат,

ВЫРАЗИТЬ(10/3 КАК Число(15,2)) КАК РезультатОкругления

Результат:

Глядя на результаты примеров понятно, что оператор «ВЫРАЗИТЬ» округляет числа по правилу «до ближайшего целого».

«ВЫРАЗИТЬ» для составного типа данных и оптимизация запросов

С помощью оператора «ВЫРАЗИТЬ», для в полей имеющих составной тип данных, возможно ограничить попадание значений которые не соответствуют определённому типу данных. Причём такие ограничения можно сделать ещё на этапе выборки данных. Такие действия приводят к неявной оптимизации запросов. Рассмотрим подробно на примере.

Есть запрос, который выбирает всех покупателей, из существующих в базе документов «ПродажаТоваров». У документов такого вида реквизит «Покупатель» имеет составной тип данных:

  • <СправочникСсылка.Контрагенты>
  • <СправочникСсылка.Сотрудники>.

Запрос:

ВЫБРАТЬ

ПродажаТоваров.Ссылка КАК СсылкаНаДокументПродажи,

ПродажаТоваров.Покупатель КАК СсылкаНаПокупателя

ИЗ

Документ.ПродажаТоваров КАК ПродажаТоваров

Результат:

Следует понимать, что данные в поле «СсылкаНаПокупателя» формируются путём неявного левого соединения с таблицами «Контрагенты.Ссылка» из справочника «Контраенты» и «Сотрудники.Ссылка» из справочника «Сотрудники». Такие соединения в запросах 1С происходят, когда мы обращаемся к подчинённому полю через точку (разыменовываем поле). В нашем случае мы обращаемся к полю «Покупатель».

Визуальное представление работы такого запроса:

Если бы стояла задача отобрать только те документы, в которых покупателем был сотрудник. То наиболее оптимальным решением с точки зрения скорости выполнения запроса было бы вовсе запретить обращаться к справочнику «Контрагенты» так как данные из этого справочника для нас излишни. С такой задачей легко справится оператор «ВЫРАЗИТЬ» и запрос мог бы выглядеть так:

Запрос:

ВЫБРАТЬ

ПродажаТоваров.Ссылка КАК СсылкаНаДокументПродажи,

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

ИЗ

Документ.ПродажаТоваров КАК ПродажаТоваров

Результат:

Однако, как мы можем видеть из результата запроса, поля выборки, которые не удовлетворяют условиям нашего отбора, получили значения «NULL». По этому реализуя отборы с помощью конструкции «ВЫРАЗИТЬ» во избежание дальнейших ошибок правильно накладывать дополнительное условие, например с помощью оператора «Где». Тогда запрос мог бы выглядеть так:

Запрос:

ВЫБРАТЬ

ПродажаТоваров.Ссылка КАК СсылкаНаДокументПродажи,

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

ИЗ

Документ.ПродажаТоваров КАК ПродажаТоваров

Где

ПродажаТоваров.Покупатель ССЫЛКА Справочник.Сотрудники

Результат:

Возможные ошибки

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

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

Распечатать

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

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

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

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