Встроенный калькулятор 1С:Предприятия 8.3 — от Ctrl+F2 до собственной формы расчёта

· 9 мин

Содержание

Калькулятор в 1С 8.3 — часть платформы, а не конфигурации. Поэтому он одинаково работает в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и любой другой базе на 8.3. Открыть его можно сочетанием Ctrl+F2, через главное меню Сервис → Калькулятор или кнопкой выбора в числовом поле документа.

Механизм простой: калькулятор считает в десятичной арифметике платформы, а результат попадает в поле либо напрямую (если калькулятор открыт из поля), либо через буфер обмена. Настройка калькулятора для пользователя почти не нужна. Разработчик же управляет им через свойства поля формы и может заменить его своим расчётом.

Как калькулятор встроен в платформу 1С 8.3

Калькулятор принадлежит клиентскому приложению 1С:Предприятия. Он не хранится в конфигурации, не требует прав и не зависит от релиза типового решения. Если база запускается в тонком клиенте, веб-клиенте или толстом клиенте — калькулятор есть везде.

Способов вызова три:

  • ⌨️ Ctrl+F2 — открывает отдельное окно калькулятора из любого места программы;
  • 📂 главное меню (значок с тремя полосками в левом верхнем углу) → Сервис → Калькулятор;
  • 🔢 кнопка выбора у числового поля — выпадающий калькулятор, привязанный к этому полю.

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

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

Почему калькулятор платформы считает точнее Excel

Тип «Число» в 1С десятичный, до 38 значащих цифр. Платформа не использует двоичную плавающую точку, поэтому классическая ошибка вида 0,1 + 0,2 = 0,30000000000000004 здесь не возникает. Для денежных сумм это важно: копейки не «уплывают» при длинных цепочках сложения.

Что умеет калькулятор «из коробки»

Набор операций у встроенного калькулятора базовый, как у простого настольного прибора:

  • ➕ сложение, вычитание, умножение, деление;
  • 📊 процент;
  • 🔁 смена знака числа;
  • 🧹 сброс текущего значения и полная очистка;
  • ⌫ удаление последней введённой цифры.

Вводить числа можно мышью по кнопкам, но быстрее — с клавиатуры. Цифры, знаки + - * / и Enter для результата работают с основного блока клавиатуры и с цифрового блока. Backspace стирает последнюю цифру.

Перенос результата в документ

Самый частый сценарий бухгалтера выглядит так:

  1. Нажмите Ctrl+F2.
  2. Посчитайте, например, 18 450 * 3 / 12.
  3. Скопируйте результат Ctrl+C.
  4. Встаньте в нужное поле документа и вставьте Ctrl+V.

Работает и обратное направление: скопировали сумму из поля или ячейки отчёта — вставили её в калькулятор через Ctrl+V и продолжили расчёт.

При вставке в поле с форматом «2 знака после запятой» лишние разряды платформа отбросит по формату поля. Если вы разделили 18 451 / 3 и получили 6 150,333333, в документ попадёт округлённое значение. Проверьте, что именно оно вам и нужно.

Сумма выделенных ячеек в отчётах

Для многих расчётов калькулятор вообще не нужен. В отчётах типовых конфигураций (оборотно-сальдовая ведомость, анализ счёта, карточка счёта) выделите мышью несколько числовых ячеек с зажатым Ctrl или Shift. В шапке отчёта появится их сумма. Это быстрее, чем переписывать числа вручную.

Калькулятор в полях документов и справочников

В числовых полях документов (сумма, цена, количество) часто есть кнопка выбора — маленький значок справа от поля. Для числового типа платформа по этой кнопке открывает выпадающий калькулятор.

Как пользоваться им на практике:

  1. Встаньте в поле, например «Цена» в строке табличной части.
  2. Нажмите кнопку выбора справа от поля или F4.
  3. В калькуляторе уже стоит текущее значение поля. Допишите операцию: * 1,2, / 12, + 350.
  4. Нажмите Enter — результат запишется в поле.
  5. Сработает обработчик изменения поля: пересчитаются сумма строки, НДС и итоги документа.

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

Где кнопки калькулятора нет

Если у числового поля нет кнопки выбора, значит, разработчик формы её отключил или поле используется только для отображения. Тогда остаётся Ctrl+F2 и вставка через буфер. Включить кнопку пользователь не может: это свойство формы, а не пользовательская настройка.

СпособКогда удобенЧто учесть
Ctrl+F2 + буферРазовые расчёты, сверка цифрРезультат нужно вставить вручную
Кнопка выбора в полеКорректировка цены, суммы, количестваЕсть не во всех полях
Сумма выделенных ячеекСложение строк отчётаТолько в отчётах с этой функцией

Настройка калькулятора в форме для разработчика

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

Ключевые свойства числового поля ввода:

  • 🔘 КнопкаВыбора — показывает кнопку, по которой для типа «Число» открывается калькулятор;
  • 🔼 КнопкаРегулирования — стрелки «больше/меньше» для пошагового изменения значения;
  • 🧾 Формат и ФорматРедактирования — сколько знаков после запятой показывать и вводить, например ЧДЦ=2;
  • 🚧 МинимальноеЗначение и МаксимальноеЗначение — границы допустимого ввода.

Если тип реквизита — Число(15, 2), то два знака после запятой обрежутся и при вводе с калькулятора. Сначала определите точность реквизита в метаданных, потом формат поля. Обратное (формат точнее типа) только запутает пользователя.

Как заменить стандартный калькулятор своей формой

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

&НаКлиенте
Процедура ЦенаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь; // стандартный калькулятор не откроется
    
    Оповещение = Новый ОписаниеОповещения("ЦенаПослеРасчета", ЭтотОбъект);
    ПоказатьВводЧисла(Оповещение, Объект.Цена, "Цена с наценкой 20 %", 15, 2);
    
КонецПроцедуры

&НаКлиенте
Процедура ЦенаПослеРасчета(Число, ДополнительныеПараметры) Экспорт
    
    Если Число = Неопределено Тогда
        Возврат; // пользователь нажал «Отмена»
    КонецЕсли;
    
    Объект.Цена = Окр(Число * 1.2, 2);
    
КонецПроцедуры

Здесь вместо калькулятора открывается диалог ввода числа, а в поле записывается значение с наценкой 20 %. Вместо ПоказатьВводЧисла можно открыть свою форму через ОткрытьФорму с тем же описанием оповещения.

Если после программной записи значения нужно пересчитать сумму строки, вызовите тот же код, что стоит в обработчике ПриИзменении. Программное присваивание само по себе событие изменения не вызывает.

Продвинутые расчёты: строка-формула, точность и округление

Встроенный калькулятор не принимает формулу целиком. Если пользователю удобнее набрать (1250 + 380) * 1,2 / 3 одной строкой, такой калькулятор пишут сами на функции Вычислить().

Калькулятор выражений на Вычислить()

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

&НаСервереБезКонтекста
Функция ВычислитьВыражение(Знач Выражение)
    
    Выражение = СокрЛП(Выражение);
    Если ПустаяСтрока(Выражение) Тогда
        Возврат 0;
    КонецЕсли;
    
    Допустимые = "0123456789+-*/()., ";
    Для Сч = 1 По СтрДлина(Выражение) Цикл
        Если СтрНайти(Допустимые, Сред(Выражение, Сч, 1)) = 0 Тогда
            ВызватьИсключение "Недопустимый символ в выражении: " + Сред(Выражение, Сч, 1);
        КонецЕсли;
    КонецЦикла;
    
    Выражение = СтрЗаменить(Выражение, " ", "");
    Выражение = СтрЗаменить(Выражение, ",", ".");
    
    УстановитьБезопасныйРежим(Истина);
    Попытка
        Результат = Вычислить(Выражение);
    Исключение
        УстановитьБезопасныйРежим(Ложь);
        ВызватьИсключение "Не удалось вычислить: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
    КонецПопытки;
    УстановитьБезопасныйРежим(Ложь);
    
    Возврат Окр(Результат, 2);
    
КонецФункции

Для строки (1250 + 380) * 1,2 / 3 функция вернёт 652: 1 630 × 1,2 = 1 956, делим на 3 — 652. Деление на ноль и незакрытая скобка попадут в исключение с понятным текстом.

Никогда не передавайте в Вычислить() строку от пользователя без проверки символов — это прямой путь к выполнению произвольного кода с правами сеанса.

Округление: какие режимы есть

Функция Окр() округляет по-разному в зависимости от третьего параметра:

ВызовРезультатПравило
Окр(2.345, 2)2,35по умолчанию пятёрка вверх
Окр(2.345, 2, РежимОкругления.Окр15как20)2,35то же, указано явно
Окр(2.345, 2, РежимОкругления.Окр15как10)2,34пятёрка вниз
Цел(2.99)2отбрасывание дробной части

Порядок операций в денежных расчётах важен. Окр(100 / 3, 2) * 3 даёт 99,99, а Окр(100 / 3 * 3, 2) — 100. Округляйте на последнем шаге, а распределение суммы по строкам доводите остатком на последнюю строку.

Массовые расчёты без потери скорости

Пока в документе 20 строк, способ расчёта не важен. На 5 000 строк загрузки из файла или на обработке, которая пересчитывает цены по всему справочнику, ошибки проектирования становятся заметны.

Приёмы, которые реально ускоряют:

  • 🖥️ Один вызов сервера вместо тысячи. Пересчитывайте табличную часть целиком в серверной процедуре, а не построчно с клиента. Каждый серверный вызов — это обмен по сети.
  • 🔎 Расчёт в запросе. Умножение, сумма, группировка в запросе выполняются СУБД. Например, Количество * Цена КАК Сумма с СУММА() и СГРУППИРОВАТЬ ПО быстрее цикла.
  • 🎯 Приведение типа в запросе. ВЫРАЗИТЬ(Количество * Цена КАК ЧИСЛО(15, 2)) фиксирует точность сразу и избавляет от лишнего Окр() в цикле.
  • ➕ Итоги коллекций. Для итога колонки используйте ТабличнаяЧасть.Итог("Сумма") или ТаблицаЗначений.Итог("Сумма") вместо цикла со сложением.
  • 🚫 Без обращений через точку в цикле. Строка.Номенклатура.ЕдиницаИзмерения в цикле на каждой строке читает объект из базы. Нужные реквизиты получайте одним запросом заранее.

Пример запроса, который считает суммы по документу без цикла:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Товары.Номенклатура КАК Номенклатура,
|    СУММА(ВЫРАЗИТЬ(Товары.Количество * Товары.Цена КАК ЧИСЛО(15, 2))) КАК Сумма
|ИЗ
|    Документ.РеализацияТоваровУслуг.Товары КАК Товары
|ГДЕ
|    Товары.Ссылка = &Ссылка
|СГРУППИРОВАТЬ ПО
|    Товары.Номенклатура";
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Итоги = Запрос.Выполнить().Выгрузить();

Когда встроенного калькулятора мало: доработка или внешняя программа

Встроенный калькулятор закрывает быстрые арифметические расчёты. Для остального выбор такой:

ЗадачаЧем решатьПочему
Сложить пять сумм, найти процентВстроенный калькуляторБыстро, результат сразу в поле
Формула из нескольких действий одной строкойСвоя форма на Вычислить()Пользователь видит выражение целиком
Повторяющийся расчёт: наценка, пересчёт валюты, раскройОбработка или расширение конфигурацииРасчёт по правилам, без ручных ошибок
Разовый анализ с графиками и сводными таблицамиВыгрузка отчёта в ExcelИнструменты анализа богаче
Инженерные и научные функцииВнешний калькуляторВ 1С их нет, писать нет смысла

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

Частые ошибки при расчётах

  • ❌ Вставили результат в поле через буфер и ждёте пересчёта. В большинстве форм пересчёт срабатывает после выхода из поля. Если итоги не изменились, нажмите Tab или перейдите в другое поле.
  • ❌ Получили «лишнюю» копейку в итоге. Округляли каждую строку, а итог считали от неокруглённых значений. Считайте итог от уже округлённых сумм строк.
  • ❌ Поставили формат поля точнее типа реквизита. Пользователь видит три знака, а в базу записывается два. Формат не должен быть точнее типа.
  • ❌ Перекрыли НачалоВыбора и забыли СтандартнаяОбработка = Ложь. Тогда откроются сразу и стандартный калькулятор, и ваша форма.
  • ❌ Пропустили строку пользователя в Вычислить() без фильтра. Последствия описаны выше: проверка символов обязательна.

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

Почему Ctrl+F2 не открывает калькулятор?
Сочетание может перехватывать другая программа: переключатель раскладки, утилита для скриншотов, драйвер ноутбука с функциональными клавишами. Проверьте Fn+Ctrl+F2 и откройте калькулятор через главное меню Сервис → Калькулятор.
Можно ли закрепить калькулятор на панели?
Отдельной кнопки в панели разделов по умолчанию нет. Быстрее всего пользоваться Ctrl+F2: сочетание работает в любой форме.
Работает ли калькулятор в веб-клиенте?
Да. Калькулятор — часть клиентского приложения платформы и доступен в тонком, толстом и веб-клиенте. Сочетания клавиш в браузере иногда перехватывает сам браузер, тогда помогает вызов через меню.
Сохраняет ли калькулятор историю расчётов?
Нет, журнала операций у встроенного калькулятора нет. Если расчёт нужно показать проверяющему, оформите его в бухгалтерской справке или в комментарии к документу.
Почему результат в калькуляторе отличается от суммы в документе?
Документ хранит число с точностью реквизита, обычно два знака после запятой, и округляет каждую строку. Калькулятор считает без промежуточного округления. Разница в копейку на итоге — нормальное следствие округления по строкам.