Как реализовать конкатенацию цифр и последовательный ввод чисел при создании калькулятора в 1С?

Программист IT и автоматизация бизнеса
← На главную

При разработке пользовательского интерфейса калькулятора на платформе 1С:Предприятие часто возникает задача последовательного набора цифр: когда пользователь нажимает кнопки с цифрами (например, «1», «1»), в дисплее калькулятора должно формироваться число «11», а не выполняться математическое сложение «1 + 1 = 2» на этапе ввода. Рассмотрим подробно, как правильно организовать обработку нажатия цифровых кнопок и выполнение дальнейших математических операций.

Подход 1: Строковая конкатенация символов

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

Проанализируем пример реализации:

  1. Установим реквизиту формы (например, ПолеВвода0) тип Строка.
  2. При нажатии на цифровую кнопку выполняем конкатенацию текущей строки и нажатой цифры:

// При нажатии кнопки "1"
ЭтаФорма.ПолеВвода = ЭтаФорма.ПолеВвода + "1";

После того как пользователь сформировал число в виде строки (например, «4693178») и нажимает кнопку операции (например, «+»), мы сохраняем полученную строку во временную переменную, предварительно преобразуя ее в числовой тип с помощью встроенной функции Число(), а поле ввода очищаем для набора второго слагаемого.

При нажатии на кнопку «=» выполняем итоговое вычисление:


ПервоеЧисло = Число(СохраненнаяСтрока1);
ВтороеЧисло = Число(ЭтаФорма.ПолеВвода);
Результат = ПервоеЧисло + ВтороеЧисло;

// Выводим результат обратно на экран
ЭтаФорма.ПолеВвода = Строка(Результат);

Подход 2: Математическое накопление разрядов

Если реквизит формы имеет числовой тип, последовательный ввод можно реализовать с помощью арифметических операций без перевода в строку. Каждая новая введенная цифра сдвигает предыдущее значение на один разряд влево (умножением на 10):


// Переменная ЧисловоеПоле хранит текущее значение
ЧисловоеПоле = ЧисловоеПоле * 10 + ВведеннаяЦифра;

Посмотрим, как это работает на примере: если на экране число 46, и пользователь нажимает 9, операция 46 * 10 + 9 дает результат 469.

Оптимизация кода и обработка нажатий

Чтобы не создавать отдельную процедуру для каждой из 10 цифровых кнопок (от 0 до 9), назначим единую процедуру-обработчик для всех цифровых кнопок на форме. Считывать нажатую цифру можно из заголовка кнопки:


&НаКлиенте
Процедура НажатиеЦифровойКнопки(Команда)
    // Получаем значение из имени или заголовка кнопки
    НажатаяЦифра = Элементы.ТекущийЭлемент.Заголовок;
    
    // Обработка ведущего нуля
    Если ЭтаФорма.ПолеВвода = "0" Тогда
        ЭтаФорма.ПолеВвода = НажатаяЦифра;
    Иначе
        ЭтаФорма.ПолеВвода = ЭтаФорма.ПолеВвода + НажатаяЦифра;
    КонецЕсли;
КонецПроцедуры

Важные нюансы работы с числами и строками в 1С

При практической реализации калькулятора важно учесть особенности платформы 1С:

  1. Удаление пробелов разгруппировки: При обратном преобразовании числа в строку функция Строка() может автоматически добавлять неразрывные пробелы для разделения триад (например, «4 693 178»). Чтобы избежать ошибок при последующем преобразовании, используйте функцию Формат() с отключенной группировкой: СтроковоеЗначение = Формат(ЧисловоеЗначение, "ЧГ=0");
  2. Работа с дробными числами: При вводе десятичного разделителя (точки или запятой) необходимо проверять, нет ли уже разделителя в строке, используя СтрНайти(). Перед вызовом функции Число() рекомендуется приводить разделители к стандартному виду с помощью СтрЗаменить(Строка, ".", ",").
  3. Защита поля ввода: Чтобы пользователь не вводил произвольный текст с клавиатуры напрямую в текстовое поле дисплея, установите для элемента формы свойство ТолькоПросмотр = Истина.
  4. Защита от ошибок (деление на ноль): Все математические вычисления следует оборачивать в блок обработки исключений:
    
    Попытка
        Результат = Число1 / Число2;
    Исключение
        ВызватьИсключение "Ошибка: Деление на ноль!";
    КонецПопытки;
    

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

← На главную