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

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

Как рассчитать процент в 1С

Как рассчитать процент в 1С: арифметика в коде, скидки в документах, расчёт НДС, проценты в запросах и СКД. Примеры, ошибки и проверка результата.

Расчёт процента в 1С — одна из самых частых задач и у бухгалтера, и у разработчика: скидка в счёте, доля выручки в отчёте, НДС в накладной, премия в процентах от оклада. При этом единой кнопки «посчитать процент» в программе нет — способ зависит от того, где именно выполняется расчёт: в форме документа, в модуле на встроенном языке, в запросе или в схеме компоновки данных.

Базовая математика везде одинакова: процент от числа — это Число × Процент / 100. Различия начинаются в деталях: какой тип данных используется, где хранится ставка процента, как округляется результат и не потеряются ли копейки при делении. Именно эти детали чаще всего становятся причиной расхождений в отчётах.

Ниже разобраны основные сценарии: расчёт в коде на встроенном языке, проценты в типовых документах (скидки, НДС), вычисления в запросах и СКД, а также типичные ошибки и способы проверить корректность результата.

Как считается процент: базовые формулы

Все расчёты процентов в 1С сводятся к трём формулам. Первая — нахождение процента от числа: Результат = База Процент / 100. Например, скидка 15 % от суммы 12 000: 12000 × 15 / 100 = 1800. Вторая — определение, сколько процентов одно число составляет от другого: Процент = Часть / Целое 100. Третья — выделение процента из суммы, в которую он уже включён (типично для НДС): СуммаПроцента = Сумма * Ставка / (100 + Ставка).

Главная техническая тонкость — тип данных. Если оба операнда целые, результат деления в некоторых контекстах (особенно в запросах) может оказаться целым числом с отброшенной дробной частью. Поэтому ставку процента следует хранить как число с дробной частью, например Число(5,2), а в запросах принудительно приводить результат к дробному типу.

Расчёт процента на встроенном языке 1С

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

База = 12000;

Ставка = 15; // процент

СуммаСкидки = База * Ставка / 100; // 1800

СуммаИтог = База - СуммаСкидки; // 10200

ДоляПроцентов = 3000 / 12000 * 100; // 25

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

Если ставка приходит из пользовательского ввода или реквизита с типом «Строка», предварительно преобразуйте её через Число() и проверьте на допустимый диапазон (например, от 0 до 100 для скидки), чтобы исключить отрицательные суммы и суммы больше базы.

bsl
Функция ПроцентОтЧисла(База, Ставка) Экспорт
	Если База = 0 Тогда Возврат 0; КонецЕсли;
	Возврат Окр(База * Ставка / 100, 2);
КонецФункции

Проценты в документах: скидки и наценки

В типовых конфигурациях («Управление торговлей», «Комплексная автоматизация», ERP) процентные скидки обычно не считаются вручную — работает подсистема скидок и наценок. Скидка задаётся в виде процента в карточке скидки, назначается на сегмент номенклатуры, клиента или условие по сумме, а программа сама рассчитывает сумму скидки по каждой строке и распределяет её при проведении.

Если нужна разовая ручная скидка, в табличной части документа есть колонки «% скидки» и «Сумма скидки». Достаточно ввести процент — сумма и итог по строке пересчитаются автоматически. Важно помнить: ручная скидка и автоматическая могут либо суммироваться, либо вытеснять друг друга — это зависит от настроек в разделе настройки скидок, и перед массовым применением стоит проверить поведение на тестовом документе.

В «1С:Бухгалтерии» процент чаще встречается в расчётах: резерв отпусков, проценты по кредитам, торговый сбор, амортизационная премия. Эти величины задаются ставкой в соответствующем документе или регистре, а расчёт выполняется регламентной операцией при закрытии месяца.

Расчёт НДС как частный случай процента

НДС — самый частый «процент» в учётных конфигурациях, и у него две разные формулы. Начисление сверху: НДС = База Ставка / 100, где ставка — 20 или 10. Выделение из суммы с налогом: НДС = Сумма Ставка / (100 + Ставка), то есть для ставки 20 % — Сумма × 20 / 120. Путать эти формулы нельзя: для суммы 12 000 с НДС 20 % налог равен 2 000, а не 2 400.

В типовых документах обе операции выполняются автоматически: достаточно указать ставку в колонке «% НДС», и программа заполнит сумму налога. Переключение между режимами «НДС в том числе» и «НДС сверху» выполняется через кнопку «Цены и валюта» в шапке документа — от этого флага зависит, какая формула применяется.

Проценты в запросах и отчётах на СКД

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

ВЫБРАТЬ

Продажи.Номенклатура,

Продажи.СуммаОборот,

ВЫРАЗИТЬ(Продажи.СуммаОборот / Итоги.СуммаОборот * 100 КАК ЧИСЛО(10, 2)) КАК ДоляПроцентов

ИЗ ...

Итог для знаменателя обычно получают соединением с тем же набором данных без группировки либо через итоговый запрос. В схеме компоновки данных есть более удобный путь: вычисляемое поле с выражением Сумма / ВычислитьВыражение("Сумма(Сумма)", "ОбщийИтог") * 100 или встроенная функция ПроцентВГруппеИтог-подобные конструкции через «ВычислитьВыражениеСГруппировкойМассив» — в зависимости от версии платформы. Практичный вариант — ресурс с выражением Сумма(СуммаОборот) / Сумма(СуммаОборот) по общему итогу, заданным в настройках ресурса.

Деление на ноль — типовая проблема отчётов с долями: если итог по группе равен нулю, запрос вернёт ошибку или NULL. Защищайтесь конструкцией ВЫБОР КОГДА Итог = 0 ТОГДА 0 ИНАЧЕ ... КОНЕЦ.

Типичные ошибки
01
Целочисленное деление в запросе без ВЫРАЗИТЬ — доля 0,25 превращается в 0
02
Округление процента на каждой строке — сумма строк не сходится с итогом документа на копейки
03
Путаница формул НДС: начисление сверху вместо выделения из суммы даёт завышенный налог
04
Расчёт процента от суммы, в которую этот процент уже включён, — двойной учёт
05
Отсутствие проверки деления на ноль в отчёте — падение построения отчёта при пустом периоде

Проценты в зарплате и кадровых расчётах

В «1С:Зарплате и управлении персоналом» процентные начисления — премия процентом, районный коэффициент, процентная надбавка за стаж — настраиваются как виды расчёта с формулой «Процент × РасчетнаяБаза / 100». Сам процент хранится либо в показателе сотрудника, либо в шаблоне начисления, а база собирается из заданного перечня начислений за расчётный период.

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

Как проверить правильность расчёта

Самая простая проверка — обратный пересчёт: прибавьте скидку к итоговой сумме и сравните с базой, или умножьте выделенный НДС на (100 + Ставка) / Ставка и сравните с суммой документа. Для отчётов с долями контрольный признак — сумма всех долей должна давать 100 % (с допуском на округление в сотые доли).

Второй приём — тест на крайних значениях: ставка 0 % должна давать нулевую скидку, ставка 100 % — нулевой итог, пустая база — отсутствие ошибки. Если расчёт проходит эти три проверки и сходится обратным пересчётом на реальном документе, его можно считать корректным.

Контрольные точки

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

Обратный пересчёт скидки
Норма

Итог + скидка = исходная база

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

Расхождение хотя бы на копейку — неверная база или округление

Сумма долей в отчёте
Норма

Около 100 % с допуском на округление

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

Заметно меньше или больше 100 % — неверный знаменатель

НДС в документе
Норма

НДС = Сумма × Ставка / (100 + Ставка) при режиме «в том числе»

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

НДС равен Сумма × Ставка / 100 — применена не та формула

Крайние значения ставки
Норма

0 % и 100 % считаются без ошибок

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

Ошибка деления или отрицательные суммы

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

Как посчитать процент от суммы прямо в документе без доработок?

В табличной части большинства типовых документов есть колонка процента скидки или ставки НДС — введите значение, и сумма пересчитается автоматически. Если такой колонки нет, используйте кнопку «Изменить» над табличной частью: там доступна операция распределения или изменения цен на процент.

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

Потому что оба операнда целые и результат деления меньше единицы отбрасывается. Оберните выражение в ВЫРАЗИТЬ(... КАК ЧИСЛО(10, 2)) и убедитесь, что хотя бы один операнд дробный — тогда результат сохранит знаки после запятой.

Как выделить НДС 20 % из суммы?

Умножьте сумму на 20 и разделите на 120: НДС = Сумма × 20 / 120. В документах это делается автоматически, если в «Ценах и валюте» выбран режим «НДС в том числе» и указана ставка 20 %.

Как округлить процент до двух знаков в коде?

Функцией Окр(Значение, 2). Округляйте только конечный результат, а не промежуточные вычисления, иначе при суммировании строк документа накопится погрешность в копейках.

Можно ли в отчёте на СКД вывести долю процента без изменения запроса?

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

Что делать, если после изменения процента документ не сходится с актом сверки?

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

Итог

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

Процент в 1С считается по формуле База × Ставка / 100, а для сумм с включённым процентом — База × Ставка / (100 + Ставка). Контролируйте тип данных и округление, в документах используйте типовые механизмы скидок и НДС, в запросах — явное приведение типов и защиту от деления на ноль. Проверяйте результат обратным пересчётом и тестом на крайних значениях.