К статье
Практический материал

Разработка и Конфигурация · 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. 1
    Создайте общий модуль, например РасчетыКлиентСервер, с флагами клиентского и серверного контекста
  2. 2
    Добавьте функцию ДлинаОкружности с параметром Радиус и формулой 2 <em> 3.14159265358979 </em> Радиус
  3. 3
    Добавьте проверку на отрицательное значение радиуса
  4. 4
    Вызовите функцию из нужного места конфигурации и проверьте результат на известном значении
  5. 5
    При необходимости округлите результат функцией Окр до нужного числа знаков

Обработка с полем ввода радиуса

Для интерактивного расчёта создают внешнюю обработку: в конфигураторе выбирают «Файл → Новый → Внешняя обработка», добавляют реквизит формы «Радиус» (тип Число, длина 15, точность 2) и команду «Рассчитать». Реквизит выводят на форму, а в обработчике команды пишут код:

&НаКлиенте

Процедура Рассчитать(Команда)

Если Радиус <= 0 Тогда

ПоказатьПредупреждение(, "Введите положительный радиус");

Возврат;

КонецЕсли;

ДлинаОкружности = Окр(2 3.14159265358979 Радиус, 2);

ПоказатьОповещениеПользователя("Длина окружности: " + ДлинаОкружности);

КонецПроцедуры

Удобно добавить второй реквизит формы «ДлинаОкружности» доступный только для чтения, и выводить результат в него, а не в оповещение — так значение можно скопировать. Поле ввода с типом Число само защищает от ввода букв, поэтому дополнительная проверка типа не требуется.

Обработку подключают через механизм дополнительных отчётов и обработок (БСП) либо просто открывают через «Файл → Открыть» в режиме предприятия. Второй способ проще для учебных целей и не требует административных прав.

bsl
Функция ДлинаОкружности(Радиус) Экспорт
	Если Радиус < 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 — почти наверняка в формулу подставлен диаметр вместо радиуса или потерян множитель.

Контрольные точки

Как проверить результат

Радиус = 1
Норма

Результат около 6,2832

Тревожный признак

Результат 3,1416 — использован диаметр вместо радиуса

Диаметр = 1
Норма

Результат около 3,1416

Тревожный признак

Результат 6,2832 — лишний множитель 2

Отрицательный радиус
Норма

Программа выдаёт понятное сообщение об ошибке

Тревожный признак

Программа молча возвращает отрицательную длину

Типичные ошибки и ограничения

Самая частая ошибка начинающих — запятая в числе π. Запись 3,14159 в коде 1С не является числом: компилятор воспримет это как перечисление значений и выдаст синтаксическую ошибку ещё на этапе проверки модуля. Всегда используйте точку.

Вторая ошибка — попытка сложить число со строкой без преобразования. Конструкция "Результат: " + ДлинаОкружности работает, потому что 1С неявно преобразует число к строке, но в строгих выражениях лучше использовать Строка(ДлинаОкружности) или форматирование через Формат(ДлинаОкружности, "ЧДЦ=2"), чтобы управлять выводом.

Также учитывайте ограничения точности. Если результат попадает в реквизит с точностью 2 знака, лишние разряды отсекаются — для учебных задач это не важно, но при инженерных расчётах с большими радиусами потеря точности может стать заметной. Задавайте точность реквизита с запасом.

Типичные ошибки
01
Запятая в литерале 3,14159 — синтаксическая ошибка компиляции, модуль не сохраняется
02
Путаница радиуса и диаметра — результат отличается ровно в два раза
03
Отсутствие проверки отрицательного ввода — программа возвращает бессмысленную отрицательную длину
04
Низкая точность реквизита — результат обрезается до целого или двух знаков

Где применять такой расчёт в реальной конфигурации

За пределами учебных задач вычисление длины окружности встречается в производственных и складских сценариях: расчёт метража материала в рулоне по диаметру намотки, определение длины ремня или цепи по диаметру шкивов, расчёт длины сварного шва кольцевого соединения, оценка расхода кабеля при намотке на барабан.

В таких случаях функцию размещают в общем модуле и вызывают из документов или отчётов. Например, в документе списания материалов количество может вычисляться автоматически по введённому диаметру бухты, что снижает количество ручных ошибок при учёте.

Итог

Что важно запомнить

Длина окружности в 1С считается по формуле 2 <em> 3.14159265358979 </em> Радиус. Десятичный разделитель в коде — точка. Для повторного использования расчёт оформляют функцией с проверкой входного значения, а результат проверяют на контрольных числах: радиус 1 должен дать примерно 6,28.

Частые вопросы

Есть ли встроенная константа π в языке 1С?

Нет, предопределённой константы числа π во встроенном языке нет. Её задают вручную как числовой литерал, например 3.14159265358979. Удобно объявить её один раз в общем модуле и использовать во всех расчётах, чтобы не дублировать длинное число.

Как округлить результат до двух знаков после запятой?

Используйте функцию Окр: Окр(ДлинаОкружности, 2). Первый параметр — значение, второй — количество знаков. Для вывода без изменения самого значения применяют Формат(ДлинаОкружности, "ЧДЦ=2"), который возвращает отформатированную строку.

Почему код с числом 3,14 не сохраняется?

Потому что в литералах встроенного языка десятичный разделитель — только точка. Запись 3,14 компилятор воспринимает как два значения через запятую и сообщает о синтаксической ошибке. Замените запятую на точку: 3.14.

Можно ли сделать расчёт без изменения конфигурации?

Да. Создайте внешнюю обработку через «Файл → Новый → Внешняя обработка», добавьте форму с полем ввода радиуса и командой расчёта. Такой файл открывается в режиме предприятия через «Файл → Открыть» и не требует прав на изменение конфигурации.

Как найти радиус, если известна длина окружности?

Это обратная задача: разделите длину на удвоенное π. В коде: Радиус = ДлинаОкружности / (2 * 3.14159265358979). Для диаметра делите просто на π. Перед делением проверьте, что длина положительная, иначе результат не будет иметь смысла.

В чём разница между Сообщить и ПоказатьОповещениеПользователя?

Сообщить выводит текст в служебную панель сообщений и доступно в любом контексте. ПоказатьОповещениеПользователя показывает всплывающее уведомление в управляемом приложении и работает только на клиенте. Для учебной обработки подходят оба варианта, для диалога с пользователем удобнее ПоказатьПредупреждение.