Разработка и Конфигурация · 10 мин
Как написать программу для вычисления длины окружности в 1С
Как написать на встроенном языке 1С программу, вычисляющую длину окружности по радиусу или диаметру: формула, код функции, обработка ввода и проверка результата.
Задача вычисления длины окружности — классический учебный пример, который удобно использовать для освоения синтаксиса встроенного языка 1С: объявления переменных, арифметических операций, ввода и вывода данных. Формула известна из школьного курса геометрии: длина окружности равна произведению числа π на диаметр, то есть L = π × D, или L = 2 × π × R, если задан радиус.
Во встроенном языке 1С нет предопределённой константы π, поэтому её задают вручную — например, 3,14159265358979. Обратите внимание: в коде 1С десятичным разделителем всегда служит точка, независимо от региональных настроек, а запятая в литерале числа вызовет синтаксическую ошибку.
Ниже разобраны несколько практических вариантов реализации: простейший расчёт в теле модуля, универсальная функция, обработка с полями ввода для интерактивного расчёта и вычисление через диаметр. Каждый вариант сопровождается пояснениями и проверками результата.
Базовый расчёт длины окружности в одну строку
Самый простой вариант — выполнить расчёт прямо в модуле, например в модуле приложения, в обработчике команды или в консоли кода. Достаточно объявить переменные, присвоить радиус и вычислить результат:
Радиус = 10;
Пи = 3.14159265358979;
ДлинаОкружности = 2 Пи Радиус;
Сообщить("Длина окружности: " + ДлинаОкружности);
Оператор Сообщить выводит результат в окно сообщений 1С. При радиусе 10 вы получите значение примерно 62,83. Этот способ подходит для быстрой проверки логики, но не для реальной работы: радиус зашит в код, и для каждого нового значения придётся править текст модуля.
Тип числа в 1С по умолчанию имеет ограниченную точность, которая задаётся при описании реквизитов, но для локальных переменных точность определяется платформой и достаточна для инженерных и учебных расчётов. Округление до нужного количества знаков выполняется функцией Окр(Значение, 2).
Универсальная функция для повторного использования
Если расчёт нужен в нескольких местах конфигурации, его оформляют функцией. Функция принимает радиус параметром и возвращает вычисленное значение:
Функция ДлинаОкружности(Радиус) Экспорт
Возврат 2 3.14159265358979 Радиус;
КонецФункции
Такую функцию размещают в общем модуле с установленным признаком «Клиент (управляемое приложение)» и «Сервер», если она нужна на обеих сторонах. Ключевое слово Экспорт делает функцию доступной из других модулей. Вызов выглядит так: Результат = МатематикаКлиентСервер.ДлинаОкружности(15);.
Хорошая практика — добавить в функцию проверку входного значения. Отрицательный радиус не имеет геометрического смысла, и лучше явно обработать эту ситуацию:
Функция ДлинаОкружности(Радиус) Экспорт
Если Радиус < 0 Тогда
ВызватьИсключение "Радиус не может быть отрицательным";
КонецЕсли;
Возврат 2 3.14159265358979 Радиус;
КонецФункции
- 1Создайте общий модуль, например РасчетыКлиентСервер, с флагами клиентского и серверного контекста
- 2Добавьте функцию ДлинаОкружности с параметром Радиус и формулой 2 <em> 3.14159265358979 </em> Радиус
- 3Добавьте проверку на отрицательное значение радиуса
- 4Вызовите функцию из нужного места конфигурации и проверьте результат на известном значении
- 5При необходимости округлите результат функцией Окр до нужного числа знаков
Обработка с полем ввода радиуса
Для интерактивного расчёта создают внешнюю обработку: в конфигураторе выбирают «Файл → Новый → Внешняя обработка», добавляют реквизит формы «Радиус» (тип Число, длина 15, точность 2) и команду «Рассчитать». Реквизит выводят на форму, а в обработчике команды пишут код:
&НаКлиенте
Процедура Рассчитать(Команда)
Если Радиус <= 0 Тогда
ПоказатьПредупреждение(, "Введите положительный радиус");
Возврат;
КонецЕсли;
ДлинаОкружности = Окр(2 3.14159265358979 Радиус, 2);
ПоказатьОповещениеПользователя("Длина окружности: " + ДлинаОкружности);
КонецПроцедуры
Удобно добавить второй реквизит формы «ДлинаОкружности» доступный только для чтения, и выводить результат в него, а не в оповещение — так значение можно скопировать. Поле ввода с типом Число само защищает от ввода букв, поэтому дополнительная проверка типа не требуется.
Обработку подключают через механизм дополнительных отчётов и обработок (БСП) либо просто открывают через «Файл → Открыть» в режиме предприятия. Второй способ проще для учебных целей и не требует административных прав.
Функция ДлинаОкружности(Радиус) Экспорт
Если Радиус < 0 Тогда
ВызватьИсключение "Радиус не может быть отрицательным";
КонецЕсли;
Возврат 2 <em> 3.14159265358979 </em> Радиус;
КонецФункцииРасчёт по диаметру и обратная задача
На практике часто известен не радиус, а диаметр — например, при расчёте длины трубы, кабельной бухты или окружности детали по чертежу. Формула упрощается: L = π × D, умножать на два не нужно:
Функция ДлинаОкружностиПоДиаметру(Диаметр) Экспорт
Возврат 3.14159265358979 * Диаметр;
КонецФункции
Встречается и обратная задача: по известной длине окружности найти радиус или диаметр. Например, по длине рулона материала определить его диаметр. Формулы обратные: R = L / (2 × π), D = L / π. В коде:
Радиус = ДлинаОкружности / (2 * 3.14159265358979);
Диаметр = ДлинаОкружности / 3.14159265358979;
При обратном расчёте важно помнить про деление на ноль не грозит (π — константа), но нулевая или отрицательная длина на входе даст бессмысленный результат, поэтому входное значение тоже стоит проверять.
Сравнение вариантов
Подходит для разовой проверки или учебного примера; значение зашито в код, переиспользование невозможно
Оптимально, когда расчёт нужен в нескольких объектах конфигурации; требует прав на изменение конфигурации
Удобна для интерактивного ввода пользователем; не требует изменения конфигурации, но нужно создавать форму
Как проверить правильность расчёта
Простейший контроль — подставить заведомо известные значения. При радиусе 1 длина окружности должна быть примерно 6,2832. При диаметре 1 — ровно π, то есть 3,14159. Если программа выдаёт другие значения, ищите ошибку в формуле: чаще всего путают радиус и диаметр или забывают множитель 2.
Второй способ — сверить результат с калькулятором или электронной таблицей. Расхождения в последних знаках после запятой допустимы из-за разной точности представления чисел, но целая часть и первые знаки должны совпадать.
Третий контроль — порядок величины. Длина окружности всегда примерно в 6,28 раза больше радиуса и примерно в 3,14 раза больше диаметра. Если при радиусе 50 вы получили 15,7 — почти наверняка в формулу подставлен диаметр вместо радиуса или потерян множитель.
Как проверить результат
Результат около 6,2832
Результат 3,1416 — использован диаметр вместо радиуса
Результат около 3,1416
Результат 6,2832 — лишний множитель 2
Программа выдаёт понятное сообщение об ошибке
Программа молча возвращает отрицательную длину
Типичные ошибки и ограничения
Самая частая ошибка начинающих — запятая в числе π. Запись 3,14159 в коде 1С не является числом: компилятор воспримет это как перечисление значений и выдаст синтаксическую ошибку ещё на этапе проверки модуля. Всегда используйте точку.
Вторая ошибка — попытка сложить число со строкой без преобразования. Конструкция "Результат: " + ДлинаОкружности работает, потому что 1С неявно преобразует число к строке, но в строгих выражениях лучше использовать Строка(ДлинаОкружности) или форматирование через Формат(ДлинаОкружности, "ЧДЦ=2"), чтобы управлять выводом.
Также учитывайте ограничения точности. Если результат попадает в реквизит с точностью 2 знака, лишние разряды отсекаются — для учебных задач это не важно, но при инженерных расчётах с большими радиусами потеря точности может стать заметной. Задавайте точность реквизита с запасом.
Где применять такой расчёт в реальной конфигурации
За пределами учебных задач вычисление длины окружности встречается в производственных и складских сценариях: расчёт метража материала в рулоне по диаметру намотки, определение длины ремня или цепи по диаметру шкивов, расчёт длины сварного шва кольцевого соединения, оценка расхода кабеля при намотке на барабан.
В таких случаях функцию размещают в общем модуле и вызывают из документов или отчётов. Например, в документе списания материалов количество может вычисляться автоматически по введённому диаметру бухты, что снижает количество ручных ошибок при учёте.
Что важно запомнить
Длина окружности в 1С считается по формуле 2 <em> 3.14159265358979 </em> Радиус. Десятичный разделитель в коде — точка. Для повторного использования расчёт оформляют функцией с проверкой входного значения, а результат проверяют на контрольных числах: радиус 1 должен дать примерно 6,28.
Частые вопросы
Есть ли встроенная константа π в языке 1С?
Нет, предопределённой константы числа π во встроенном языке нет. Её задают вручную как числовой литерал, например 3.14159265358979. Удобно объявить её один раз в общем модуле и использовать во всех расчётах, чтобы не дублировать длинное число.
Как округлить результат до двух знаков после запятой?
Используйте функцию Окр: Окр(ДлинаОкружности, 2). Первый параметр — значение, второй — количество знаков. Для вывода без изменения самого значения применяют Формат(ДлинаОкружности, "ЧДЦ=2"), который возвращает отформатированную строку.
Почему код с числом 3,14 не сохраняется?
Потому что в литералах встроенного языка десятичный разделитель — только точка. Запись 3,14 компилятор воспринимает как два значения через запятую и сообщает о синтаксической ошибке. Замените запятую на точку: 3.14.
Можно ли сделать расчёт без изменения конфигурации?
Да. Создайте внешнюю обработку через «Файл → Новый → Внешняя обработка», добавьте форму с полем ввода радиуса и командой расчёта. Такой файл открывается в режиме предприятия через «Файл → Открыть» и не требует прав на изменение конфигурации.
Как найти радиус, если известна длина окружности?
Это обратная задача: разделите длину на удвоенное π. В коде: Радиус = ДлинаОкружности / (2 * 3.14159265358979). Для диаметра делите просто на π. Перед делением проверьте, что длина положительная, иначе результат не будет иметь смысла.
В чём разница между Сообщить и ПоказатьОповещениеПользователя?
Сообщить выводит текст в служебную панель сообщений и доступно в любом контексте. ПоказатьОповещениеПользователя показывает всплывающее уведомление в управляемом приложении и работает только на клиенте. Для учебной обработки подходят оба варианта, для диалога с пользователем удобнее ПоказатьПредупреждение.