Число — это один из примитивных типов данных существующих в 1С. Числа в 1С:Предприятии встречаются абсолютно везде и всюду. Следовательно важность знания функций для работы с числами трудно переоценить. К рассмотрению этих функций и приступим.
В начале скажем, что максимальная разрядность для числа равняется 38-ми знакам, при этом для целой части выделено 32 символа.
При этом в конфигураторе можно указать длину числа в 64 символа (при точности в 32 символа), но это вероятно какая-то ошибка, так как при попытке обновить конфигурацию Вы увидите нечто подобное:
С числами в 1С можно выполнять все стандартные арифметические операции:
- “+” — сложение;
- “-” — вычитание;
- “*” — умножение;
- “/” — деление;
- “%” — остаток от деления.
Функции для работы с числами в 1С 8.2 и 8.3
Окр
Функция Окр(x, y, z) позволяет округлить число “x” в зависимости от заданной разрядности “y” и режима округления “z”.
1 2 3 4 5 6 7 8 | &НаКлиенте Процедура ФункцияОкр(Команда) Сообщить(Окр(123.15, 1, РежимОкругления.Окр15как10)); //123.1 Сообщить(Окр(123.15, 1, РежимОкругления.Окр15как20)); //123.2 Сообщить(Окр(123.15, 1, 0)); //123.1 Сообщить(Окр(123.15, 1, 1)); //123.2 Сообщить(Окр(123.15, -2)); //100 КонецПроцедуры |
Цел
Функция Цел(x) возвращает целую часть переданного в параметре числа “x”.
1 2 3 4 | &НаКлиенте Процедура ФункцияЦел(Команда) Сообщить(Цел(123.15)); //123 КонецПроцедуры |
Число
Функция Число(x) пытается преобразовать полученное значение “x” в значение типа Число. Такому преобразованию поддаются значения типа Булево и типа Строка (строка должна состоять только из цифр), во всех остальных случаях генерируется ошибка.
1 2 3 4 5 | &НаКлиенте Процедура ФункцияЧисло(Команда) Сообщить(Число("123.456")); //123.456 Сообщить(Число(Истина)); //1 КонецПроцедуры |
Формат
Функция Формат(x, y) позволяет получить заданным, при помощи форматной строки “y” образом форматированное строковое представление числа “x”. Подробнее об этой функции в соответствующей статье.
Число прописью
Функция ЧислоПрописью(x, y, z) формирует представление числа “x” прописью исходя из форматной строки “y” и параметров предмета исчисления “z”. Подробнее об этой функции в соответствующей статье.
Мин
Функция Мин(x1…xn) возвращает минимальное из переданных ей значений “x1…xn”, работает не только с числами.
1 2 3 4 5 6 7 | &НаКлиенте Процедура ФункцияМин(Команда) Сообщить(Мин(2,3,5,1,8,2,4,5,2,9)); //1 Сообщить(Мин('20170101','20170102','20170103')); //01.01.2017 Сообщить(Мин("xxx","yyy","zzz")); //xxx Сообщить(Мин(Истина, Ложь)); //Нет КонецПроцедуры |
Макс
Функция Макс(x1…xn) возвращает максимальное из переданных ей значений “x1…xn”, как и предыдущая функция работает не только с числами.
1 2 3 4 5 6 7 | &НаКлиенте Процедура ФункцияМакс(Команда) Сообщить(Макс(2,3,5,1,8,2,4,5,2,9)); //9 Сообщить(Макс('20170101','20170102','20170103')); //03.01.2017 Сообщить(Макс("xxx","yyy","zzz")); //zzz Сообщить(Макс(Истина, Ложь)); //Да КонецПроцедуры |
Вычислить
Функция Вычислить(x) позволяет вычислить математические и логические выражения “x”, а также операции конкатенации.
1 2 3 4 5 6 7 8 | &НаКлиенте Процедура ФункцияВычислить(Команда) Сообщить(Вычислить("1+2=3")); // Да Сообщить(Вычислить("3=5")); // Нет Сообщить(Вычислить("Число(""123.45"")")); // 123,45 Сообщить(Вычислить("Истина И Ложь")); // Нет Сообщить(Вычислить("2*(1+2)/3")); // 2 КонецПроцедуры |
Модуль
В 1С пока нет отдельной функции для получения модуля числа, но эта проблема решается просто:
1 2 3 4 | &НаКлиенте Функция МодульЧисла(Число) Возврат ?(Число<0, -Число, Число); КонецФункции |
Использование этой функции:
1 2 3 4 5 | &НаКлиенте Процедура ФункцияМодульЧисла(Команда) Сообщить(МодульЧисла(-123)); //123 Сообщить(МодульЧисла(123)); //123 КонецПроцедуры |
Sqrt
Функция Sqrt(x) просто возвращает квадратный корень переданного ей числа “x”.
1 2 3 4 | &НаКлиенте Процедура ФункцияSqrt(Команда) Сообщить(Sqrt(25)); //5 КонецПроцедуры |
Pow
Функция Pow(x, y) возводить число “x” в степень “y” и возвращает результат.
1 2 3 4 | &НаКлиенте Процедура ФункцияPow(Команда) Сообщить(Pow(5, 2)); //25 КонецПроцедуры |
Exp
Функция Exp(x) возвращает результат возведения числа Эйлера в указанную степень “x”.
1 2 3 4 | &НаКлиенте Процедура ТестЧисла(Команда) Сообщить(Exp(2)); //~7.389 КонецПроцедуры |
Логарифм
Функции Log(x) и Log10(x) возвращают натуральный и десятичный логарифм числа “x” соответственно.
1 2 3 4 5 | &НаКлиенте Процедура ТестЧисла(Команда) Сообщить(Log(7.389)); //~1.99 Сообщить(Log10(1000)); //3 КонецПроцедуры |
Тригонометрия
Набор функций которые вычисляют соответствующие тригонометрические функции, результат исчисляется в радианах:
- Sin(x) — синус;
- Cos(x) — косинус;
- Tan(x) — тангенс;
- ASin(x) — арксинус;
- ACos(x) — арккосинус;
- ATan(x) — арктангенс.
1 2 3 4 5 6 7 8 9 | &НаКлиенте Процедура ФункцииТригонометрии(Команда) Сообщить(Sin(10)); //-0.544 Сообщить(Cos(10)); //-0.839 Сообщить(Tan(10)); //0.648 Сообщить(ASin(0.5)); //0.524 Сообщить(ACos(0.5)); //1.047 Сообщить(ATan(0.5)); //0.464 КонецПроцедуры |
Случайные числа
Для получения случайных чисел в 1С существует даже не функция, а целый объект — генератор случайных чисел, пусть даже этот объект содержит всего один метод — СлучайноеЧисло(x, y), который возвращает случайное число в диапазоне от “x” до “y”.
1 2 3 4 5 | &НаКлиенте Процедура СлучайныеЧисла(Команда) СЧ = Новый ГенераторСлучайныхЧисел(); Сообщить(СЧ.СлучайноеЧисло(10,50)); КонецПроцедуры |
Ввести число
Функция ВвестиЧисло(x, y, z, v) позволяет вывести форму ввода числа, которое записывается в переменную “x”, в параметрах можно указать подсказку “y”, длину числа “z” и точность “v”.
1 2 3 4 5 | &НаКлиенте Процедура ФункцияВводаЧисла(Команда) Ч = 0; ВвестиЧисло(Ч, "Введите число", 10, 2); КонецПроцедуры |
В результате получится что-то вроде этого:
Типовые задачи при работе с числами в 1С 8.2 и 8.3
Дробная часть числа
Если для извлечения целой части числа в 1С существует специальная функция, то для того чтобы получить дробную часть придется использовать арифметические операции:
1 2 3 4 5 6 7 8 9 10 | &НаКлиенте Функция Дроб(Число) Возврат Число-Цел(Число); КонецФункции &НаКлиенте Процедура ДробнаяЧастьЧисла(Команда) Сообщить(Дроб(123.45)); //0,45 Сообщить(Дроб(123)); //0 КонецПроцедуры |
Строку в число
Преобразование строки в число выполняется функцией Число(), о которой было написано чуть выше, но самой по себе этой функции недостаточно, так как первый же пробел (или любой другой неподходящий символ) и 1С любезно сообщит нам о том, что преобразование к типу Число не может быть выполнено:
Чтобы избежать этого необходимо использовать конструкцию вида:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | &НаКлиенте Функция ВЧисло(Число) Попытка Возврат Число(Число); Исключение Возврат Неопределено КонецПопытки; КонецФункции &НаКлиенте Процедура ТестЧисла(Команда) Сообщить(ВЧисло("123")); //123 Сообщить(ВЧисло("12;3")); // КонецПроцедуры |
Подскажите, а куда вставлять код с ВвестиЧисло?
Создала внешнюю обработку и вставила в её форму, однако в конфигураторе ни намёка на окно ввода.
Окно ввода появляется не в конфигураторе, а в режиме предприятия, в тот момент когда вызывается функция «ВвестиЧисло».
Добрый день, у меня в конфигураторе-свойства реквизита- в поле значения выбрано «число», а в окне «длина» выбирается максимум значение «19», а надо минимум «21». Прошу помочь, версия 7.7
Спасибо.