Разработка и Конфигурация · 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 для скидки), чтобы исключить отрицательные суммы и суммы больше базы.
Функция ПроцентОтЧисла(База, Ставка) Экспорт
Если База = 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 ИНАЧЕ ... КОНЕЦ.
Проценты в зарплате и кадровых расчётах
В «1С:Зарплате и управлении персоналом» процентные начисления — премия процентом, районный коэффициент, процентная надбавка за стаж — настраиваются как виды расчёта с формулой «Процент × РасчетнаяБаза / 100». Сам процент хранится либо в показателе сотрудника, либо в шаблоне начисления, а база собирается из заданного перечня начислений за расчётный период.
Ключевой момент — состав расчётной базы. Если премия должна считаться только от оклада, а в базу попали отпускные и больничные, процент будет рассчитан неверно. Состав базы редактируется на закладке «Расчет базы» в настройке начисления, и после изменения уже рассчитанные документы нужно пересчитать.
Как проверить правильность расчёта
Самая простая проверка — обратный пересчёт: прибавьте скидку к итоговой сумме и сравните с базой, или умножьте выделенный НДС на (100 + Ставка) / Ставка и сравните с суммой документа. Для отчётов с долями контрольный признак — сумма всех долей должна давать 100 % (с допуском на округление в сотые доли).
Второй приём — тест на крайних значениях: ставка 0 % должна давать нулевую скидку, ставка 100 % — нулевой итог, пустая база — отсутствие ошибки. Если расчёт проходит эти три проверки и сходится обратным пересчётом на реальном документе, его можно считать корректным.
Как проверить результат
Итог + скидка = исходная база
Расхождение хотя бы на копейку — неверная база или округление
Около 100 % с допуском на округление
Заметно меньше или больше 100 % — неверный знаменатель
НДС = Сумма × Ставка / (100 + Ставка) при режиме «в том числе»
НДС равен Сумма × Ставка / 100 — применена не та формула
0 % и 100 % считаются без ошибок
Ошибка деления или отрицательные суммы
Частые вопросы
Как посчитать процент от суммы прямо в документе без доработок?
В табличной части большинства типовых документов есть колонка процента скидки или ставки НДС — введите значение, и сумма пересчитается автоматически. Если такой колонки нет, используйте кнопку «Изменить» над табличной частью: там доступна операция распределения или изменения цен на процент.
Почему в запросе доля получается равной нулю?
Потому что оба операнда целые и результат деления меньше единицы отбрасывается. Оберните выражение в ВЫРАЗИТЬ(... КАК ЧИСЛО(10, 2)) и убедитесь, что хотя бы один операнд дробный — тогда результат сохранит знаки после запятой.
Как выделить НДС 20 % из суммы?
Умножьте сумму на 20 и разделите на 120: НДС = Сумма × 20 / 120. В документах это делается автоматически, если в «Ценах и валюте» выбран режим «НДС в том числе» и указана ставка 20 %.
Как округлить процент до двух знаков в коде?
Функцией Окр(Значение, 2). Округляйте только конечный результат, а не промежуточные вычисления, иначе при суммировании строк документа накопится погрешность в копейках.
Можно ли в отчёте на СКД вывести долю процента без изменения запроса?
Да. Добавьте вычисляемое поле или ресурс с выражением, использующим функцию ВычислитьВыражение с указанием группировки общего итога в знаменателе. Такой подход не требует соединений в запросе и корректно работает при любых отборах пользователя.
Что делать, если после изменения процента документ не сходится с актом сверки?
Проверьте три вещи: какая база использовалась (до или после других скидок), какой режим НДС выбран, и перепроведён ли документ после правки. Если расхождение остаётся, сверьте построчно — часто округление в одной строке даёт копеечную разницу, которую корректируют вручную в последней строке.
Что важно запомнить
Процент в 1С считается по формуле База × Ставка / 100, а для сумм с включённым процентом — База × Ставка / (100 + Ставка). Контролируйте тип данных и округление, в документах используйте типовые механизмы скидок и НДС, в запросах — явное приведение типов и защиту от деления на ноль. Проверяйте результат обратным пересчётом и тестом на крайних значениях.