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

Разработка и Конфигурация · 10 мин

Как сделать калькулятор в 1С:Предприятие своими руками

Практическая инструкция по созданию калькулятора в 1С:Предприятие 8.3: внешняя обработка, форма, кнопки, код на встроенном языке, проверка ошибок и типовые проблемы.

Калькулятор в 1С:Предприятие — классическая учебная и практическая задача, которая помогает освоить работу с формами, реквизитами и встроенным языком. Чаще всего его создают как внешнюю обработку: такой файл не требует изменения конфигурации, легко переносится между базами и безопасен для рабочей системы. Результатом будет окно с полями ввода, выбором операции и кнопкой расчёта.

Встроенный язык 1С поддерживает стандартные арифметические операции — сложение, вычитание, умножение, деление, — поэтому базовый калькулятор пишется буквально за десяток строк кода. Сложности начинаются на этапе оформления формы и обработки ошибок: деление на ноль, пустые поля, нечисловой ввод.

Ниже разобран полный цикл: от создания пустой внешней обработки в конфигураторе до готового калькулятора с защитой от ошибок. Инструкция ориентирована на платформу 1С:Предприятие 8.3 и управляемые формы, но общая логика применима и к обычным формам.

Что понадобится для работы

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

Подойдёт любая типовая конфигурация — «Управление торговлей», «Бухгалтерия предприятия» или даже пустая база без конфигурации. Внешняя обработка не зависит от прикладного решения, потому что использует только механизмы платформы: формы, реквизиты и встроенный язык.

Также полезно заранее определить, какой вариант калькулятора вам нужен: простой (два числа и операция), инженерный с дополнительными функциями или калькулятор в виде «живого» поля, пересчитывающего результат при каждом изменении. От этого зависит структура формы и объём кода.

Создание внешней обработки и формы

Откройте конфигуратор и в главном меню выберите «Файл — Новый — Внешняя обработка». Задайте имя, например «ПростойКалькулятор», — оно должно начинаться с буквы и не содержать пробелов. Синоним можно указать с пробелами: «Простой калькулятор», именно его увидит пользователь.

В дереве обработки перейдите на вкладку «Формы» и нажмите «Добавить». Конструктор предложит создать основную форму обработки — соглашайтесь со значениями по умолчанию. Откроется редактор формы: слева дерево элементов, справа список реквизитов.

Добавьте три реквизита формы: Число1 (тип Число, длина 15, точность 2), Число2 (такой же тип) и Результат (тип Число или Строка, если хотите выводить сообщения об ошибках в то же поле). Для выбора операции удобно использовать реквизит Операция типа Строка со списком значений.

Настройка элементов формы

Перетащите реквизиты из панели реквизитов в дерево элементов формы — платформа автоматически создаст поля ввода. Для поля «Операция» в свойствах установите «РежимВыбораИзСписка» и заполните «СписокВыбора» значениями: «+», «−», «*», «/». Так пользователь не сможет ввести произвольный символ.

Для поля «Результат» разумно установить свойство «ТолькоПросмотр» в значение «Истина», чтобы пользователь не редактировал его вручную. Это типичное правило интерфейса: результат должен изменяться только программно.

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

Код расчёта на встроенном языке

В модуле формы создайте обработчик команды. Минимальный вариант с выбором операции через конструкцию «Если…Тогда» выглядит так:

&НаКлиенте

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

Если Операция = "+" Тогда

Результат = Число1 + Число2;

ИначеЕсли Операция = "-" Тогда

Результат = Число1 - Число2;

ИначеЕсли Операция = "*" Тогда

Результат = Число1 * Число2;

ИначеЕсли Операция = "/" Тогда

Если Число2 = 0 Тогда

ПоказатьПредупреждение(, "Деление на ноль невозможно");

Возврат;

КонецЕсли;

Результат = Число1 / Число2;

Иначе

ПоказатьПредупреждение(, "Выберите операцию");

КонецЕсли;

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

Обратите внимание на две защитные проверки. Первая — деление на ноль: без неё платформа выдаст системную ошибку и прервёт выполнение. Вторая — пустая операция: если пользователь нажмёт кнопку, не выбрав действие, он получит понятное сообщение вместо молчаливого нуля.

Если реквизит «Результат» имеет числовой тип, сообщения об ошибках выводятся отдельно через ПоказатьПредупреждение или Сообщить. Если тип строковый, текст ошибки можно записывать прямо в поле результата — выбирайте подход под свою задачу.

Проверка работы и типичные ошибки

Сохраните обработку, откройте режим 1С:Предприятие и запустите файл через «Файл — Открыть». Проверьте все четыре операции, деление на ноль, нажатие кнопки с пустыми полями и ввод дробных чисел. Результат должен соответствовать ожиданию в каждом сценарии.

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

Ещё одна типичная ситуация — ошибка «Переменная не определена». Она возникает, когда имена реквизитов в коде не совпадают с именами в форме, включая регистр букв в некоторых контекстах, или когда код размещён не в модуле формы, а в модуле объекта, где реквизиты формы недоступны.

Типичные ошибки
01
Код размещён в модуле объекта вместо модуля формы — реквизиты формы недоступны, платформа выдаёт ошибку
02
Нет проверки деления на ноль — обработка аварийно завершается системной ошибкой
03
Реквизит Результат доступен для редактирования — пользователь может случайно изменить итог вручную
04
Операция вводится свободным текстом без списка выбора — опечатка приводит к отсутствию расчёта
05
Команда создана, но к ней не привязан обработчик — кнопка не реагирует на нажатие
Контрольные точки

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

Нажатие кнопки «Вычислить» при корректных данных
Норма

В поле «Результат» появляется правильное число

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

Ничего не происходит или появляется ошибка платформы

Деление при Число2 = 0
Норма

Понятное предупреждение, поле результата не меняется

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

Системная ошибка и прерывание работы

Пустое поле операции
Норма

Сообщение с просьбой выбрать операцию

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

Молчаливый нулевой результат

Дробные числа с запятой
Норма

Корректный расчёт с заданной точностью

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

Округление до целых из-за нулевой точности типа

Как расширить функциональность

Базовый калькулятор легко доработать. Популярные направления: кнопка «Очистить», сбрасывающая все поля; история вычислений в табличном поле; дополнительные операции — процент, возведение в степень через функцию Pow, квадратный корень через Sqrt. Каждая операция добавляется в список выбора и в ветку условий обработчика.

Второй вариант развития — мгновенный пересчёт без кнопки. Для этого у полей ввода создаётся обработчик события «ПриИзменении», вызывающий ту же процедуру расчёта. Такой подход удобен, когда калькулятор встроен в рабочую форму, например для быстрого подсчёта скидки или наценки.

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

Сравнение вариантов размещения

Внешняя обработка (.epf)

Подходит для обучения и разовых задач, не требует изменения конфигурации; ограничение — запуск вручную через «Файл — Открыть»

Обработка внутри конфигурации

Подходит для постоянного использования, доступна из меню подсистем; ограничение — требует доработки конфигурации и сопровождения при обновлениях

Дополнительная обработка через БСП

Подходит для типовых конфигураций с библиотекой стандартных подсистем, регистрируется в справочнике дополнительных отчётов и обработок; ограничение — нужна настройка механизма БСП

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

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

Полноценный калькулятор с формой — нет: формы и модули создаются только в конфигураторе. Однако простые вычисления можно выполнять в любом поле ввода 1С: платформа понимает арифметические выражения вида «25*4» прямо в числовых полях документов и пересчитывает их при выходе из поля.

Почему вместо результата появляется ноль?

Чаще всего дело в пустых реквизитах: незаполненное числовое поле имеет значение 0, и операция с нулями даёт ноль. Вторая причина — код не выполняется из-за непривязанного обработчика команды. Проверьте свойство «Действие» у команды и добавьте отладку через точку останова.

Как очистить все поля одной кнопкой?

Создайте команду «Очистить» и в её обработчике присвойте реквизитам начальные значения: Число1 = 0; Число2 = 0; Результат = 0; Операция = "". Если реквизит строковый, присваивайте пустую строку, если числовой — ноль.

Работает ли такой калькулятор в тонком и веб-клиенте?

Да, если код написан с директивой &НаКлиенте и не использует механизмы, недоступные в конкретном клиенте. Простая арифметика и стандартные диалоги предупреждений работают во всех клиентах. Перед использованием проверьте обработку в том клиенте, который применяется у пользователей.

Как округлить результат до нужного числа знаков?

Используйте функцию Окр(Значение, Разрядность), например Окр(Результат, 2) для двух знаков после запятой. Альтернатива — задать нужную точность прямо в типе реквизита «Результат», тогда платформа сама ограничит отображаемое число знаков.

Можно ли встроить калькулятор в форму документа?

Да, но это уже доработка конфигурации: в форму документа добавляются собственные реквизиты и команда с аналогичным кодом. Учтите, что изменённые типовые формы усложняют последующие обновления, поэтому для редких расчётов безопаснее держать калькулятор отдельной внешней обработкой.

Итог

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

Калькулятор в 1С создаётся как внешняя обработка с формой: реквизиты для чисел и результата, список операций, команда с обработчиком на встроенном языке. Обязательны проверки деления на ноль и пустой операции, а для расчёта достаточно клиентского контекста без обращения к серверу.