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

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

1С: как получить копейки из суммы

Как в 1С получить копейки из суммы: функции языка 1С, настройка точности и округления, отображение копеек в документах, отчётах и печатных формах.

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

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

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

Как получить копейки из суммы в коде 1С

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

Сумма = 123.45;

КопейкиДробные = Сумма - Цел(Сумма); // 0.45

КопейкиЦелые = Окр((Сумма - Цел(Сумма)) * 100, 0); // 45

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

Для отрицательных сумм учитывайте знак: Цел(-123,45) вернёт -123, и копейки получатся отрицательными. Если нужна абсолютная величина, оберните выражение в функцию Макс() с нулём или используйте модуль через условие.

bsl
Функция ПолучитьКопейки(Сумма)
    Возврат Окр((Сумма - Цел(Сумма)) * 100, 0);
КонецФункции

Как получить копейки в запросе 1С

В языке запросов прямой функции «дробная часть» нет, но задача решается через выражение ВЫРАЗИТЬ и вычитание. Типовой приём — привести сумму к целому и вычесть его из исходного значения:

ВЫБРАТЬ

Сумма,

Сумма - (ВЫРАЗИТЬ(Сумма КАК ЧИСЛО(15, 0))) КАК Копейки

ИЗ Документ.РеализацияТоваровУслуг

Здесь важно помнить особенность: приведение к ЧИСЛО(15, 0) выполняет округление, а не отсечение, поэтому для суммы 123,75 целая часть станет 124, и копейки получатся отрицательными (-0,25). Если требуется именно отсечение, корректнее вычислять копейки в коде после выборки или использовать конструкцию ВЫБОР с проверкой знака результата.

Для отбора документов с копейками (например, чтобы найти все суммы не в целых рублях) условие записывают так:

ГДЕ Сумма <> ВЫРАЗИТЬ(Сумма КАК ЧИСЛО(15, 2)) - (Сумма - ВЫРАЗИТЬ(Сумма КАК ЧИСЛО(15, 2)))

На практике проще сравнить сумму с её округлённым до целых вариантом: неравенство означает наличие копеек.

Как убрать копейки из цен и сумм документов

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

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

Второй вариант — округлять суммы программно при расчёте. В модуле объекта или в процедуре пересчёта строки применяется функция Окр():

СтрокаТовары.Сумма = Окр(СтрокаТовары.Цена * СтрокаТовары.Количество, 0);
Как убрать копейки из документов
  1. 1
    Определите, где возникают копейки: в цене, в сумме строки или в итоге с НДС
  2. 2
    Если в ценах — настройте округление в виде цен или правиле ценообразования
  3. 3
    Если в суммах строк — добавьте Окр(..., 0) в процедуру пересчёта строки
  4. 4
    Если в итоге с НДС — проверьте порядок расчёта налога (с суммы или с каждой строки)
  5. 5
    Проведите тестовый документ и сверьте итоги с ожидаемыми значениями

Настройка точности чисел в конфигураторе

Количество отображаемых и хранимых знаков после запятой определяется квалификатором числа в свойствах реквизита. В конфигураторе у реквизита типа «Число» задаются длина и точность: например, Число(15, 2) хранит два знака после запятой, а Число(15, 0) — только целые значения.

Если установить точность 0 у реквизита «Цена» или «Сумма», платформа будет округлять вводимые значения до целых автоматически. Однако менять точность существующих реквизитов в типовой конфигурации следует осторожно: это затрагивает структуру базы данных, требует реструктуризации и может нарушить обмены с другими системами, где ожидаются копейки.

Безопаснее управлять отображением, а не хранением: в формате поля формы можно указать маску вывода без дробной части, при этом в базе копейки сохранятся, но пользователь их не увидит. Это делается через свойство «Формат» элемента формы, например ЧДЦ=0.

Копейки в печатных формах и сумме прописью

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

Рубли = Цел(Сумма);

Копейки = Окр((Сумма - Рубли) * 100, 0);

СтрокаИтог = Формат(Рубли, "ЧГ=") + " руб. " + Формат(Копейки, "ЧЦ=2; ЧВН=") + " коп.";

Функция Формат() с параметром ЧВН= подставляет ведущий ноль, чтобы «5 копеек» выводилось как «05». Для суммы прописью в типовых конфигурациях есть готовые функции из общих модулей (например, РаботаСКурсамиВалют.СформироватьСуммуПрописью или аналоги в БСП), которые сами формируют рубли и копейки с правильными окончаниями.

Если типовая функция недоступна в вашей конфигурации, сумму прописью можно получить через НСтр и число прописью: Формат(Сумма, "ЧП=ИСТИНА") в сочетании с параметрами предмета исчисления «рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2».

При выводе копеек в печатную форму всегда форматируйте их двумя знаками с ведущим нулём. Без этого сумма 100,05 распечатается как «100 руб. 5 коп.», что в финансовых документах выглядит как ошибка и может стать поводом для отказа в приёме документа контрагентом.
ПЗ
Практическое замечание

Округление НДС и расхождения в копейках

Классическая проблема — копеечные расхождения между суммой НДС, посчитанной от итога документа, и суммой НДС по строкам. Возникает она из-за округления налога в каждой строке: 18% или 20% от цены с копейками редко даёт ровное значение.

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

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

Типичные ошибки
01
Использовать Цел() для округления копеек до рублей — функция отсекает дробную часть, а не округляет; 123,99 превратится в 123 вместо 124
02
Сравнивать суммы с копейками на точное равенство после арифметики — из-за особенностей представления чисел лучше сравнивать с допуском или после Окр()
03
Менять точность реквизита в типовой конфигурации без копии — реструктуризация обрежет данные безвозвратно
04
Округлять НДС в строках и итоге разными способами — получите копеечные расхождения в отчётности

Проверка результата

После внедрения любого из способов результат проверяется на контрольных примерах. Для функции получения копеек достаточно прогнать значения 0,01; 100,99; 1000,00 и отрицательную сумму — копейки должны быть 1, 99, 0 и корректного знака соответственно.

Для округления в документах создайте тестовый документ с несколькими строками, ценами с копейками и НДС. Сверьте: итог по строкам равен итогу документа, НДС в итоге совпадает с суммой НДС по строкам, печатная форма показывает копейки в двух знаках.

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

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

Функция получения копеек
Норма

Для 123,45 возвращает 45; для 100,00 возвращает 0

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

Возвращает 44 или дробное значение вроде 44,9999

Округление в документе
Норма

Итог по строкам равен итогу документа до копейки

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

Разница в копейках между табличной частью и шапкой

Печатная форма
Норма

Копейки выводятся двумя знаками: 05, 45

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

Один знак без ведущего нуля или пропущенные копейки

Часто задаваемые вопросы

Как в 1С округлить сумму до рублей без копеек?

Используйте функцию Окр(Сумма, 0) — она округляет по арифметическим правилам: 123,49 станет 123, а 123,50 — 124. Не путайте с Цел(), которая всегда отбрасывает дробную часть в меньшую сторону.

Почему при вычислении копеек получается 44,9999 вместо 45?

Это следствие представления дробных чисел при арифметике. Всегда завершайте вычисление функцией Окр() с нужной точностью: Окр((Сумма - Цел(Сумма)) * 100, 0) гарантированно даст целое число копеек.

Как вывести сумму прописью с копейками в печатной форме?

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

Можно ли в запросе найти все документы, где сумма содержит копейки?

Да. Сравните сумму с её округлённым до целых значением: неравенство означает наличие дробной части. Учтите, что приведение к ЧИСЛО(15, 0) округляет, поэтому условие корректно работает именно как проверка неравенства, а не как выделение копеек.

Откуда берутся копеечные расхождения по НДС и как их убрать?

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

Опасно ли менять точность реквизита «Сумма» в конфигураторе?

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