Давайте представим ситуацию, когда из регистра накопления «ТоварыНаСкладах» нам необходимо выбрать регистратор, являющийся составным полем:
А теперь представим себе запрос, в котором мы выбираем регистратор и два его подчиненных поля – «Номер» и «Дата»:
Результатов выполнения запроса будет следующая таблица:
Когда мы выбираем номер и дату, система начинает перебирать все таблицы, которые являются регистраторами – “Продажи”, “Поступления”, а также третий документ, который не влез на скриншот – “Перемещение”. Получается достаточно сложный запрос, когда мы пытаемся разыменовать (обратиться через точку) поле составного типа. Его сложную структуру можно отдельно посмотреть в консоли запросов, поддерживающей план выполнения запроса – там мы увидим запрос в виде SQL.
Если же нам необходимы данные из регистра только лишь по документу “РеализацияТовара”, то мы можем с помощью функции “ВЫРАЗИТЬ” получать номер и дату только для нужного документа:
1 2 3 4 5 6 |
ВЫБРАТЬ ТоварыНаСкладах.Регистратор КАК Регистратор, ВЫРАЗИТЬ(ТоварыНаСкладах.Регистратор КАК Документ.РеализацияТоваров).Номер КАК РегистраторНомер, ВЫРАЗИТЬ(ТоварыНаСкладах.Регистратор КАК Документ.РеализацияТоваров).Дата КАК РегистраторДата ИЗ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах |
В результате мы не будем выполнять лишнюю работу и заставлять систему осуществлять перебор лишних таблиц, что значительно повышает производительность.
Также при помощи оператора ВЫРАЗИТЬ можно преобразовать строку неограниченной длины в строку с ограниченным количеством символов, когда это необходимо. Например:
1 |
ВЫРАЗИТЬ (Контрагенты.ПолноеНаименование КАК СТРОКА(100)) КАК Контрагент |