Синтаксис и применение Функция Цел в платформе 1С:Предприятие. Описание и примеры кода.
Полное описание, параметры и ограничения
Функция Цел (Int)
Цел(<Число>)
Round(<Число>)
Данная функция вычисляет целую часть переданного числа, полностью отсекая дробную часть.
Число - Число.
Возвращаемое значение: Число.
Внимание! При использовании в запросе данной функции запрос не будет передан в Дата акселератор.
см. также: Функции языка запросов
Практические примеры
Сравнить порядок округления своей суммы и целую часть отрицательного числа
ОКР запроса использует округление как BSL с Окр15как20. На собственных числах видно, почему округлить цену до умножения и округлить итог — разные операции.
Где и как запускать
Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте общий модуль УчебныйЯзык: Сервер=Истина, Глобальный=Ложь, ВызовСервера=Ложь, Привилегированный=Ложь. Клиентские и внешнее соединение отключены; ПовторноеИспользованиеВозвращаемыхЗначений=НеИспользовать.
Вставьте весь приведённый текст в этот общий модуль. ВыполнитьПример — экспортная точка входа; остальные процедуры и функции располагаются рядом, а не внутри неё.
В своей внешней учебной обработке создайте управляемую форму, команду Выполнить и кнопку. Клиентский обработчик Выполнить(Команда) вызывает свою процедуру ВыполнитьНаСервере(); она имеет директиву &НаСервереБезКонтекста и одну строку УчебныйЯзык.ВыполнитьПример();. Это серверный вызов общего модуля, а не разрешение клиенту прямо обращаться к серверной библиотеке.
Все товары, количества и строки придуманы в этом модуле. Запись документов, подключение к чужой базе, файлы, сеть и печать не используются. В рабочие общие модули текст не вставляйте.
HTML только показывает BSL. Код в 1С не запускался; перечисленные результаты и отрицательные опыты проверяйте самостоятельно в собственном стенде.
Все числа созданы этим уроком. Запрос без ИЗ получает одну строку только из параметров; рабочие документы, регистры и справочники не читаются.
Речь о функциях языка запросов из установленного shquery_ru.hbk 8.5.1.1343, не о произвольной математической библиотеке. Модуль серверный; HTML запросы не выполняет.
Для всех перечисленных здесь математических функций установленная справка предупреждает: запрос не будет передан в Дата акселератор. Производительность этим учебным примером не измерена.
Иррациональные/тригонометрические результаты сравниваются с явной погрешностью 0.000001, а не обещанием бесконечной точности.
Процедура ВыполнитьПример() Экспорт
ЦенаОбразца = 12.345;
КоличествоОбразца = 3;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| &Цена * &Количество КАК СуммаБезОкругления,
| ОКР(&Цена, 2) КАК ОкруглённаяЦена,
| ОКР(&Цена * &Количество, 2) КАК ОкруглитьПослеУмножения,
| ОКР(&Цена, 2) * &Количество КАК УмножитьПослеОкругления,
| ОКР(1234, -2) КАК ДоСотен,
| ОКР(12.6) КАК ПоУмолчанию,
| ОКР(12.345, 2.9) КАК ДробнаяРазрядность,
| ЦЕЛ(-12.9) КАК ЦелаяОтрицательного";
Запрос.УстановитьПараметр("Цена", ЦенаОбразца);
Запрос.УстановитьПараметр("Количество", КоличествоОбразца);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если НЕ Выборка.Следующий() Тогда
ВызватьИсключение "Запрос из собственных параметров должен вернуть одну строку";
КонецЕсли;
Сообщить(Выборка.СуммаБезОкругления = 37.035);
Сообщить(Выборка.ОкруглённаяЦена = 12.35);
Сообщить(Выборка.ОкруглитьПослеУмножения = 37.04);
Сообщить(Выборка.УмножитьПослеОкругления = 37.05);
Сообщить(Выборка.ДоСотен = 1200);
Сообщить(Выборка.ПоУмолчанию = 13);
Сообщить(Выборка.ДробнаяРазрядность = 12.35);
Сообщить(Выборка.ЦелаяОтрицательного = -12);
Сообщить("Порядок округления даёт разные результаты: 37.04 и 37.05. Это демонстрация, не правило рабочего учёта.");
Если Выборка.Следующий() Тогда
ВызватьИсключение "У запроса без источников ожидалась ровно одна строка";
КонецЕсли;
КонецПроцедурыРазбор по шагам
Передать собственные цену 12.345 и количество 3 параметрами, без текста рабочего документа.
Получить неокруглённые 37.035 и отдельно округлённую цену 12.35.
После умножения округлить до двух знаков: 37.04. Сначала округлённая цена, умноженная на 3, даёт 37.05.
Отрицательная разрядность -2 округляет 1234 до сотен 1200; отсутствие разрядности означает 0.
Дробная часть разрядности 2.9 игнорируется, используются два дробных знака.
ЦЕЛ(-12.9) отсекает дробную часть и даёт -12, а не математическое округление вниз -13.
Проверить одну строку и все восемь полей. Порядок округления реального учёта этим не назначается.
Как проверить результат
Восемь сравнений Истина.
Два явно разных итога 37.04 и 37.05 не объявляются ошибкой запроса: отличается место округления.
ЦелаяОтрицательного=-12, ДоСотен=1200, ПоУмолчанию=13.
Ожидаемый результат
На полностью заданных собственных числах разобраны округление, разрядность и отсечение дробной части.
На что обратить внимание
Это учебная арифметика, не инструкция менять порядок округления в рабочей конфигурации.
ЦЕЛ отрицательного числа не является функцией пола.
В установленной странице ЦЕЛ английская строка синтаксиса ошибочно повторяет Round; урок использует русский ЦЕЛ и её описанную семантику.
Третий параметр режима BSL Окр в функцию запроса не передаётся: у неё только число и необязательная разрядность.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.