Встроенный калькулятор 1С:Предприятия 8.3 — от Ctrl+F2 до собственной формы расчёта
Содержание
Калькулятор в 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 стирает последнюю цифру.
Перенос результата в документ
Самый частый сценарий бухгалтера выглядит так:
- Нажмите
Ctrl+F2. - Посчитайте, например,
18 450 * 3 / 12. - Скопируйте результат
Ctrl+C. - Встаньте в нужное поле документа и вставьте
Ctrl+V.
Работает и обратное направление: скопировали сумму из поля или ячейки отчёта — вставили её в калькулятор через Ctrl+V и продолжили расчёт.
При вставке в поле с форматом «2 знака после запятой» лишние разряды платформа отбросит по формату поля. Если вы разделили 18 451 / 3 и получили 6 150,333333, в документ попадёт округлённое значение. Проверьте, что именно оно вам и нужно.
Сумма выделенных ячеек в отчётах
Для многих расчётов калькулятор вообще не нужен. В отчётах типовых конфигураций (оборотно-сальдовая ведомость, анализ счёта, карточка счёта) выделите мышью несколько числовых ячеек с зажатым Ctrl или Shift. В шапке отчёта появится их сумма. Это быстрее, чем переписывать числа вручную.
Калькулятор в полях документов и справочников
В числовых полях документов (сумма, цена, количество) часто есть кнопка выбора — маленький значок справа от поля. Для числового типа платформа по этой кнопке открывает выпадающий калькулятор.
Как пользоваться им на практике:
- Встаньте в поле, например «Цена» в строке табличной части.
- Нажмите кнопку выбора справа от поля или
F4. - В калькуляторе уже стоит текущее значение поля. Допишите операцию:
* 1,2,/ 12,+ 350. - Нажмите
Enter— результат запишется в поле. - Сработает обработчик изменения поля: пересчитаются сумма строки, НДС и итоги документа.
Последний пункт — главное отличие от ручного ввода через буфер. Документ ведёт себя так же, как если бы вы впечатали число руками: все связанные пересчёты выполняются.
Где кнопки калькулятора нет
Если у числового поля нет кнопки выбора, значит, разработчик формы её отключил или поле используется только для отображения. Тогда остаётся 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: сочетание работает в любой форме.