Разработка и Конфигурация · 10 мин
Как написать программу в 1С: принимает радиус круга и возвращает площадь
Как написать программу на встроенном языке 1С, которая принимает радиус круга и возвращает его площадь: код функции, проверка ввода, примеры и типичные ошибки.
Задача «написать программу, которая принимает радиус круга и возвращает его площадь» — классическое учебное упражнение, и на встроенном языке 1С она решается буквально в несколько строк. Формула известна из школьной геометрии: площадь круга равна произведению числа π на квадрат радиуса (S = π × R²). В 1С для этого используется функция возведения в степень и числовой литерал для π.
Такое упражнение полезно не только новичкам: на его примере удобно освоить объявление функций, передачу параметров, возврат значений, проверку входных данных и вывод результата пользователю через диалоги. Ниже разобраны несколько вариантов реализации — от простейшей функции в общем модуле до интерактивного ввода радиуса с проверкой корректности.
Все примеры написаны на встроенном языке платформы 1С:Предприятие 8 и работают как в толстом, так и в тонком клиенте, если не оговорено иное. Код можно вставить в общий модуль, модуль формы или выполнить во внешней обработке — например, в консоли кода.
Формула и базовая функция вычисления площади
Математическая основа задачи — формула S = π × R². Во встроенном языке 1С нет предопределённой константы «Пи», поэтому значение числа π задаётся литералом. Для большинства прикладных расчётов достаточно записать 3.14159, но если важна точность, используйте больше знаков: 3.14159265358979.
Возведение в квадрат выполняется стандартной функцией Pow(Радиус, 2). Можно также просто перемножить радиус сам на себя: Радиус * Радиус — такой вариант работает чуть быстрее и нагляднее для квадрата.
Простейшая функция выглядит так:
Функция ПлощадьКруга(Радиус) Экспорт
Возврат 3.14159265358979 Радиус Радиус;
КонецФункции
Функция объявлена с ключевым словом Экспорт, чтобы её можно было вызывать из других модулей, если она размещена в общем модуле. Вызов: Площадь = ПлощадьКруга(5); — вернёт примерно 78.5398.
Интерактивный ввод радиуса от пользователя
Если программа должна именно «принимать» радиус от пользователя, понадобится диалог ввода. В тонком клиенте используется механизм оповещений: метод ПоказатьВводЧисла работает асинхронно и не блокирует интерфейс.
&НаКлиенте
Процедура РассчитатьПлощадь(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеВводаРадиуса", ЭтотОбъект);
ПоказатьВводЧисла(Оповещение, 0, "Введите радиус круга", 10, 2);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВводаРадиуса(Радиус, ДополнительныеПараметры) Экспорт
Если Радиус = Неопределено Тогда
Возврат; // пользователь нажал «Отмена»
КонецЕсли;
Площадь = 3.14159265358979 Радиус Радиус;
ПоказатьПредупреждение(, "Площадь круга: " + Площадь);
КонецПроцедуры
Обратите внимание: если пользователь нажал «Отмена», в обработчик приходит значение Неопределено, и его нужно обработать отдельно, иначе расчёт выполнится с пустым значением и выдаст ошибку или неверный результат.
В толстом клиенте обычного приложения допустим синхронный вызов ВвестиЧисло(Радиус, "Введите радиус", 10, 2), но в управляемых формах и веб-клиенте этот метод недоступен — ориентируйтесь на асинхронный вариант.
- 1Создайте внешнюю обработку или откройте общий модуль конфигурации
- 2Добавьте функцию ПлощадьКруга с параметром Радиус и формулой π × R²
- 3Добавьте команду формы с диалогом ПоказатьВводЧисла для ввода радиуса
- 4Реализуйте обработчик оповещения с проверкой на Неопределено и отрицательные значения
- 5Запустите обработку, введите радиус 1 и сверьте результат с числом π
Проверка входных данных
Радиус — физическая величина, которая не может быть отрицательной. Если пользователь введёт −5, формула всё равно вернёт положительное число (квадрат убирает знак), и молчаливый неверный результат может уйти дальше в расчёты. Поэтому входное значение стоит проверять явно.
Функция ПлощадьКруга(Радиус) Экспорт
Если ТипЗнч(Радиус) <> Тип("Число") Тогда
ВызватьИсключение "Радиус должен быть числом";
КонецЕсли;
Если Радиус < 0 Тогда
ВызватьИсключение "Радиус не может быть отрицательным";
КонецЕсли;
Возврат 3.14159265358979 Радиус Радиус;
КонецФункции
Нулевой радиус — допустимый вырожденный случай: площадь равна нулю. Запрещать его не нужно, если только прикладная логика не требует обратного. Также учитывайте, что при вводе через диалог пользователь может ввести дробное число — тип «Число» в 1С это полностью поддерживает, дополнительных действий не требуется.
Округление и точность результата
Результат вычисления почти всегда содержит длинную дробную часть. Для вывода пользователю его удобно округлить функцией Окр(Площадь, 2) или отформатировать строкой: Формат(Площадь, "ЧДЦ=2"). Разница в том, что Окр меняет само число, а Формат — только его отображение.
Если площадь участвует в дальнейших расчётах (например, расход материала на круглую заготовку), округляйте только итоговое значение на последнем шаге. Промежуточное округление накапливает погрешность, и итог может отличаться от ожидаемого на величину, заметную при больших объёмах вычислений.
Для точности π не стоит изобретать собственные константы с малым числом знаков вроде 3.14 — при больших радиусах ошибка становится ощутимой. Например, при радиусе 1000 разница между π = 3.14 и полным значением даёт расхождение в площади более тысячи квадратных единиц.
Где разместить код: модуль формы, общий модуль или консоль
Выбор места зависит от того, как будет использоваться расчёт. Для разового запуска проще всего открыть любую внешнюю обработку с консолью кода и выполнить функцию прямо там — не требуется ни конфигуратор, ни изменение конфигурации.
Если расчёт нужен в нескольких объектах (документы, отчёты, обработки), функцию правильно вынести в общий серверный модуль с признаком «Сервер» и, при необходимости, «Вызов сервера». Тогда клиентский код вызывает её как МодульРасчетов.ПлощадьКруга(Радиус).
Для интерактивного сценария с формой (поле ввода радиуса и кнопка «Рассчитать») создайте внешнюю обработку с формой: реквизит «Радиус» типа Число, команда с обработчиком на клиенте. Это самый наглядный вариант для обучения и демонстрации.
Где разместить код расчёта
Быстрый запуск и отладка; не подходит для регулярного использования пользователями
Переиспользование во всей конфигурации; требует изменения конфигурации и прав на доработку
Удобный диалог для пользователя без изменения конфигурации; расчёт доступен только внутри этой обработки
Проверка результата и типичные ошибки
Проверить корректность функции просто: при радиусе 1 площадь должна равняться π (примерно 3.14159), при радиусе 0 — нулю, при радиусе 10 — примерно 314.159. Этих трёх контрольных точек достаточно, чтобы убедиться, что формула записана правильно.
Частые ошибки в этой задаче: использование π = 3.14 с потерей точности; отсутствие обработки отмены ввода (значение Неопределено); попытка сложить число со строкой при выводе без преобразования — в 1С конкатенация числа со строкой выполняется неявно, но лучше использовать Строка(Площадь) или Формат() для предсказуемого результата.
Ещё одна типичная ситуация — функция объявлена в общем модуле без слова Экспорт, и вызов извне завершается ошибкой «Процедура или функция с указанным именем не определена». Проверяйте также флажки «Сервер» и «Вызов сервера» у общего модуля, если обращение идёт с клиента.
Как проверить результат
Площадь ≈ 3.14159
Любое другое значение — ошибка в формуле
Площадь = 0 без ошибок
Исключение или Неопределено
Программа молча завершает работу
Ошибка выполнения или расчёт с пустым значением
Понятное сообщение о некорректном вводе
Возвращается площадь ≈ 78.54 как ни в чём не бывало
Частые вопросы
Есть ли в 1С встроенная константа числа π?
Нет, предопределённой константы π во встроенном языке нет. Значение задаётся литералом, например 3.14159265358979. Если константа нужна в нескольких местах, удобно объявить функцию ЧислоПи() в общем модуле и возвращать значение из одного места.
Можно ли выполнить этот код без изменения конфигурации?
Да. Используйте внешнюю обработку (файл .epf) с формой или консоль кода — такие инструменты открываются через «Файл → Открыть» в режиме предприятия и не требуют доработки конфигурации и прав администратора.
Как вычислить площадь, если известен диаметр, а не радиус?
Разделите диаметр на два и передайте результат в ту же функцию: ПлощадьКруга(Диаметр / 2). Формулу S = π × D² / 4 тоже можно записать напрямую, но переиспользование одной функции снижает риск расхождений.
Почему ПоказатьВводЧисла не работает в моём коде?
Метод доступен только на клиенте и требует обработчика оповещения. Если вызов размещён в серверной процедуре (директива &НаСервере), код не скомпилируется. Перенесите диалог в клиентскую процедуру, а расчёт при необходимости вызывайте на сервере отдельно.
Как вывести результат с фиксированным числом знаков после запятой?
Используйте Формат(Площадь, "ЧДЦ=2") для строки с двумя знаками или Окр(Площадь, 2), если нужно округлить само число. Для отображения в поле формы достаточно настроить формат редактирования у реквизита.
Что важно запомнить
Площадь круга в 1С считается формулой π × R² с литералом π и умножением радиуса самого на себя. Обязательно проверяйте ввод: отмену диалога (Неопределено), тип и отрицательные значения. Округляйте только итоговый результат, а переиспользуемый расчёт выносите в общий модуль с Экспорт.