Преобразование числа в строку в запросе 1С 8.x
В запросах 1С предприятие 8.x есть ограничение: нельзя преобразовывать число в строку.
- Описание
- Подробнее
Описание
Ограничение предсказуемо, т.к. для преобразования числа в строку возникает много вариантов представления числа: выводить лидирующие нули, до какого знака выводить после запятой, и т.д. Система счисления тоже может быть разная: десятичная, двоичная, шестнадцатеричная или n-ичная.
Данное ограничение можно преодолеть с помощью математической операции округления. Далее представлен текст запроса, который вернет строку «Число приведенное к строке 97443.456».
ВЫБРАТЬ
97443.456 КАК Поле
ПОМЕСТИТЬ ТЗ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
"Число приведенное к строке " +
ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(ТЗ.Поле / 10000 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(ТЗ.Поле / 100000 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1) +
ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(ТЗ.Поле / 1000 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(ТЗ.Поле / 10000 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1) +
ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(ТЗ.Поле / 100 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(ТЗ.Поле / 1000 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1) +
ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(ТЗ.Поле / 10 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(ТЗ.Поле / 100 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1) +
ПОДСТРОКА("0123456789", 1 + ТЗ.Поле - (ВЫРАЗИТЬ(ТЗ.Поле / 10 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1)+
"."+
ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(ТЗ.Поле / 0.1 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(ТЗ.Поле / 1 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1) +
ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(ТЗ.Поле / 0.01 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(ТЗ.Поле / 0.1 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1) +
ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(ТЗ.Поле / 0.001 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(ТЗ.Поле / 0.01 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1)
КАК СтрокаПоле
ИЗ
ТЗ КАК ТЗ |
Рассмотрим как это работает. Каждая цифра вычисляется и выводится отдельно. Для цифры в разряде i вычисление проводится следующим образом

Операция Цел(x) реализуется в запросе 1С 8.x с помощью округления Выразить. Несложно проверить:
Цел(x)=Выразить(x — 0.5 КАК ЧИСЛО(14,0))
Мы получили весь набор цифр числа в виде чисел от 0 до 9. Сделать из них строки можно с помощью Строковой функции ПОДСТРОКА(«0123456789»,1+Цифра).
Аналогично можно реализовать вывод чисел в другой системе счисления.
Подобный функционал можно просмотреть здесь: http://kb.mista.ru/article.php?id=666

