Разработка и Конфигурация · 11 мин
Калькулятор в 1С: как сделать и настроить
Как сделать калькулятор в 1С: встроенный калькулятор в полях ввода, обработка на встроенном языке, примеры кода, проверка результата и типичные ошибки.
Запрос «калькулятор в 1С» обычно означает одну из трёх задач: воспользоваться встроенным калькулятором, который есть в любой типовой конфигурации; вычислить выражение прямо в поле ввода документа; либо разработать собственный калькулятор как внешнюю обработку с формой и кнопками. Все три сценария доступны без покупки дополнительных компонентов — достаточно платформы 1С:Предприятие и базовых навыков работы с ней.
Встроенный калькулятор вызывается из любого числового поля и умеет складывать, вычитать, умножать, делить, работать с процентами и памятью. Для бухгалтера или менеджера этого достаточно в 90% ситуаций. Собственная обработка-калькулятор нужна, когда требуется специфическая логика: расчёт наценки, пересчёт по формулам, недоступным стандартному калькулятору, или выдача результата сразу в несколько полей документа.
Ниже разобраны оба подхода: как найти и использовать штатный калькулятор, как вычислять выражения прямо в полях ввода и как пошагово собрать простую обработку с формой на управляемом интерфейсе. Код приведён для встроенного языка 1С и подходит для платформы 8.3.
Где в 1С находится встроенный калькулятор
Штатный калькулятор встроен в платформу и доступен в любой конфигурации — «Бухгалтерии», «Управлении торговлей», «Зарплате и управлении персоналом» и других. Он открывается из числового поля ввода: поставьте курсор в поле с суммой, количеством или ценой и нажмите Ctrl+F2. Откроется отдельное окно калькулятора с цифровой клавиатурой, кнопками операций и ячейками памяти.
Альтернативный способ — кнопка с изображением калькулятора, которая появляется рядом с некоторыми полями, либо пункт контекстного меню поля ввода. Внешний вид и набор кнопок зависят от версии платформы, но базовые операции присутствуют всегда: сложение, вычитание, умножение, деление, проценты, смена знака, работа с памятью (M+, M−, MR, MC).
Результат вычисления переносится обратно в поле кнопкой «ОК» или нажатием Enter. Если калькулятор был открыт из документа, значение подставляется в то поле, из которого он был вызван, — переписывать число руками не нужно, что исключает ошибки переноса.
Быстрые вычисления прямо в поле ввода
Менее известная возможность: платформа умеет вычислять арифметические выражения, введённые прямо в числовое поле. Например, в поле «Количество» можно ввести 12*3+5 и нажать Enter — в поле окажется результат 41. Это работает в большинстве числовых полей управляемых форм без вызова окна калькулятора.
Такой способ удобен при вводе данных пакетами: менеджер может сразу набрать «количество коробов × штук в коробке», не открывая дополнительных окон и не считая в уме. Выражение поддерживает скобки, поэтому допустимы конструкции вида (120+80)*1,2.
Ограничение: разделитель дробной части должен соответствовать региональным настройкам сеанса (обычно запятая). Если ввести точку там, где ожидается запятая, платформа либо отклонит ввод, либо интерпретирует число иначе — всегда проверяйте итоговое значение после нажатия Enter.
- 1Установите курсор в числовое поле документа или справочника
- 2Введите выражение, например 25*4+10
- 3Нажмите Enter или Tab — платформа вычислит и подставит результат
- 4Проверьте итоговое число в поле перед записью документа
Когда нужен собственный калькулятор-обработка
Штатных средств не хватает, если расчёт многошаговый или специфический для бизнеса: вычисление отпускной цены с последовательным применением нескольких скидок, пересчёт веса в объём по плотности, расчёт комиссии по прогрессивной шкале. Каждый раз вбивать такую цепочку в стандартный калькулятор долго и чревато ошибками.
В этом случае делают внешнюю обработку: форму с полями для исходных данных, кнопкой «Рассчитать» и полем результата. Обработка не изменяет конфигурацию, поэтому не нарушает поддержку типовой базы и не требует прав на конфигуратор у рядовых пользователей — достаточно права открывать внешние обработки.
Альтернативы полноценной обработке — консоль кода (для разовых вычислений администратором) и произвольные выражения в настройках отчётов на СКД. Выбор зависит от того, кто будет пользоваться расчётом: консоль подходит техническому специалисту, обработка с формой — обычному пользователю.
Способы посчитать в 1С
Подходит для простых разовых вычислений любым пользователем; не хранит формулы и не автоматизирует логику
Быстрый способ для одной формулы; нельзя сохранить расчёт и переиспользовать
Для повторяющихся расчётов с собственной логикой; требует разработки и тестирования
Для разработчика или администратора; обычному пользователю не подходит
Создаём внешнюю обработку-калькулятор: пошагово
Откройте конфигуратор, в меню «Файл» выберите «Новый» → «Внешняя обработка». Задайте имя, например «КалькуляторРасчетов». Добавьте три реквизита обработки типа «Число»: Число1, Число2 и Результат. Для реквизита результата разумно установить достаточную точность — например, длину 15 и точность 2.
Создайте основную форму обработки. Перетащите на форму реквизиты Число1 и Число2 как поля ввода, Результат — как поле надписи или поле ввода с признаком «Только просмотр». Добавьте команду формы «Рассчитать» и кнопку, связанную с этой командой.
В модуле формы напишите обработчик команды. Простейший вариант — сложение двух чисел:
&НаКлиенте
Процедура Рассчитать(Команда)
Результат = Число1 + Число2;
КонецПроцедуры
Для калькулятора с выбором операции добавьте реквизит «Операция» типа «Строка» со списком значений («+», «−», «×», «÷») и обрабатывайте его в коде через конструкцию Если...ИначеЕсли. Деление обязательно защищайте проверкой: при нулевом делителе выводите предупреждение через Сообщить() или ПоказатьПредупреждение(), иначе пользователь получит системную ошибку.
&НаКлиенте
Процедура Рассчитать(Команда)
Если Операция = "/" И Число2 = 0 Тогда
ПоказатьПредупреждение(, "Деление на ноль невозможно");
Возврат;
КонецЕсли;
Если Операция = "+" Тогда
Результат = Число1 + Число2;
ИначеЕсли Операция = "-" Тогда
Результат = Число1 - Число2;
ИначеЕсли Операция = "<em>" Тогда
Результат = Число1 </em> Число2;
Иначе
Результат = Число1 / Число2;
КонецЕсли;
КонецПроцедурыПодключение обработки и проверка результата
Сохраните обработку в файл с расширением .epf. В пользовательском режиме она открывается через «Файл» → «Открыть». В типовых конфигурациях с подсистемой дополнительных отчетов и обработок файл можно зарегистрировать в справочнике «Дополнительные отчеты и обработки» — тогда калькулятор появится в общем списке и будет доступен пользователям по кнопке, без ручного открытия файла.
Проверку делайте на контрольных примерах с заранее известным ответом: сложение и умножение целых чисел, деление с дробным результатом, операция с отрицательными числами, деление на ноль (должно выдавать ваше предупреждение, а не ошибку платформы). Отдельно проверьте округление: если реквизит результата имеет точность 2, значение 10/3 отобразится как 3,33 — убедитесь, что это приемлемо для вашей задачи.
Как проверить готовый калькулятор
Результат 4, поле обновляется сразу после нажатия кнопки
Поле пустое или значение не меняется — обработчик не привязан к команде
Показано ваше предупреждение, результат не меняется
Ошибка платформы и аварийное завершение операции
Значение округлено согласно точности реквизита
Результат обрезан до целого — проверьте тип и точность реквизита
Типичные ошибки и ограничения
Частая ошибка новичков — размещение вычислений в серверной процедуре без необходимости. Для арифметики достаточно контекста &НаКлиенте: лишний серверный вызов замедляет работу и требует директив передачи данных. Сервер нужен только если расчёт обращается к данным базы — например, берёт курс валюты из регистра сведений.
Вторая типичная проблема — тип реквизита. Если оставить у реквизита тип «Строка», оператор «+» выполнит конкатенацию, и 2 + 2 даст строку «22». Всегда явно задавайте тип «Число» для полей калькулятора. Третья ошибка — отсутствие обработки пустых полей: незаполненное числовое поле равно нулю, что может незаметно исказить результат, поэтому при необходимости проверяйте заполненность через ЗначениеЗаполнено().
Помните и об ограничениях: внешняя обработка не запустится, если администратор запретил открытие внешних файлов в сервисе или настроил профили безопасности. В таком случае обработку должен добавить в справочник дополнительных обработок пользователь с правами администратора.
Что важно запомнить
Для простых расчётов достаточно встроенного калькулятора (Ctrl+F2) и выражений прямо в числовых полях. Собственный калькулятор делается как внешняя обработка с формой: числовые реквизиты, команда «Рассчитать» и клиентский обработчик с защитой от деления на ноль. Типовую конфигурацию при этом менять не нужно.
Частые вопросы
Не открывается калькулятор по Ctrl+F2 — что делать?
Проверьте, стоит ли курсор именно в числовом поле: в текстовых полях и таблицах сочетание может не срабатывать. Также комбинацию иногда перехватывают программы удалённого доступа (RDP-клиенты, AnyDesk) — попробуйте вызвать калькулятор через контекстное меню поля или кнопку выбора рядом с полем.
Можно ли вызвать встроенный калькулятор из своего кода?
Да, в управляемых формах есть метод ПоказатьВводЧисла() для запроса числа у пользователя, а для полноценного калькулятора проще дать пользователю стандартное числовое поле — кнопка калькулятора в нём доступна штатно. Отдельного программного вызова именно окна калькулятора в типовом API платформы не предусмотрено.
Как сохранить историю вычислений в самодельном калькуляторе?
Добавьте в обработку таблицу значений как реквизит формы и в обработчике команды записывайте в неё строку с операндами, операцией и результатом. Таблица живёт, пока открыта форма; для постоянного хранения потребуется запись в регистр сведений, что уже требует доработки конфигурации или хранения во внешнем файле.
Будет ли обработка работать в веб-клиенте и тонком клиенте?
Да, если форма создана как управляемая и в коде нет конструкций, недоступных в веб-клиенте (например, прямой работы с файловой системой без расширения). Описанный в статье калькулятор использует только арифметику и директиву &НаКлиенте, поэтому работает во всех клиентах.
Можно ли без программирования добавить расчёт в документ?
Частично: в типовых конфигурациях многие поля пересчитываются автоматически (сумма = количество × цена), а простые выражения можно вводить прямо в поля. Полноценная своя формула без кода невозможна — минимальный обработчик на встроенном языке всё же потребуется.
Чем отличается калькулятор в 1С 7.7 от 8.3?
Принцип тот же: вызов из числового поля и базовые операции. Отличаются сочетания клавиш и внешний вид окна. Разработка собственной обработки в 7.7 ведётся в другом дизайнере форм и на старом встроенном языке, поэтому примеры кода из этой статьи для 7.7 не подойдут.