Работа с дробными числами в 1С:Предприятие часто становится источником ошибок — особенно когда требуется отобразить или сохранить данные без десятичных знаков. Лишние копейки в отчетах, некорректные остатки на складе или округленные суммы в документах могут искажать реальную картину и приводить к расхождениям в учете. В этой статье разберем все возможные способы удаления дробной части — от простого округления до программных решений с использованием встроенного языка.
Важно понимать, что просто "убрать запятую" недостаточно: нужно учитывать правила округления (математическое, банковское, в большую/меньшую сторону), формат хранения данных (число, строка, денежный тип) и даже настройки конкретной конфигурации. Например, в 1С:Бухгалтерия 8.3 копейки в денежных полях обрабатываются иначе, чем десятичные дроби в количественных показателях. Мы рассмотрим решения для разных сценариев — от ручной правки до автоматизации через обработки.
1. Округление чисел в 1С: встроенные функции
Самый очевидный способ избавиться от дробной части — использовать функции округления. В 1С 8.3 для этого предусмотрены стандартные методы, которые работают как в конфигураторе, так и в пользовательском режиме:
- 🔹
Окр()— классическое округление до ближайшего целого (например,Окр(3.6)вернет4, аОкр(3.4)—3). - 🔹
Окр10()— округление до заданного количества знаков (полезно для копеек:Окр10(123.456, 2)→123.46). - 🔹
Цел()— отбрасывание дробной части без округления (Цел(5.99)=5). - 🔹
ОкрБанк()— банковское округление (до 0.5 отбрасывается, от 0.5 и выше округляется вверх).
Пример использования в коде:
СуммаБезКопеек = Окр(СуммаДокумента, 0); // Округляет до целых рублей
КоличествоУпаковок = Цел(ОбщийВес / ВесУпаковки); // Отбрасывает дробь
⚠️ Внимание: Функция Окр() в некоторых конфигурациях (например, 1С:Зарплата и Управление Персоналом) может конфликтовать с настройками округления зарплаты. Перед массовым применением проверьте результат на тестовых данных.
2. Настройка форматов чисел в отчетах и печатных формах
Если дробная часть мешает только при выводе данных (например, в отчетах или печатных формах), проблему можно решить без программирования — через настройки формата. Для этого:
- Откройте нужный отчет или печатную форму в режиме
1С:Предприятие. - Нажмите
Еще → Настройки → Формат чисел(путь может отличаться в зависимости от конфигурации). - Выберите формат
Числои установите количество десятичных знаков равным0. - Для денежных полей используйте формат
Денежныйс настройкойБез копеек.
Этот способ не изменяет сами данные, а только их отображение. Например, в отчете "Оборотно-сальдовая ведомость" суммы будут показаны без копеек, но в базе останутся с точностью до двух знаков.
Что делать, если настройки форматов не сохраняются?
Если после изменения формата числа в отчете изменения не применяются, проверьте:
- Права пользователя (требуется роль "Администратор" или "Полные права").
- Наличие обработки вывода данных (может переопределять формат).
- Кэш 1С (иногда помогает очистка через Файл → Обновить).
| Тип данных | Формат по умолчанию | Рекомендуемый формат без дроби |
|---|---|---|
| Число | ЧДЦ=2 (два знака) |
ЧЦ=0 (ноль знаков) |
| Денежный | ДЦ=2 (копейки) |
ДБК=1 (без копеек) |
| Количество | КДЦ=3 (три знака) |
КЦ=0 (целое число) |
3. Изменение типов данных в конфигураторе
Если дробная часть не нужна принципиально (например, в поле КоличествоШтук не может быть 0.5 единицы), лучше изменить тип данных прямо в конфигураторе. Для этого:
- Откройте конфигуратор (
1С:Предприятие → Файл → Конфигуратор). - Найдите нужный реквизит (например, в документе или справочнике).
- В свойствах реквизита измените тип с
Число(10,2)наЧисло(10,0). - Выполните
Обновление конфигурации базы данных.
Это единственный способ гарантированно запретить ввод дробных значений на уровне платформы. Однако после изменения типа данные в уже существующих записях не обнулятся автоматически — их придется обновить вручную или через обработку.
⚠️ Внимание: Изменение типов данных в рабочей базе может привести к ошибкам, если в коде есть ссылки на старую структуру. Всегда тестируйте изменения на копии базы!
4. Программное удаление дробной части через обработки
Для массового исправления данных (например, обнуления копеек во всех документах за период) удобно использовать внешние обработки. Пример кода для обработки документов "Реализация товаров и услуг":
Процедура ОбработатьДокументы()
Выборка = Документы.РеализацияТоваровИУслуг.Выбрать();
Пока Выборка.Следующий() Тогда
Если Выборка.СуммаДокумента <> Окр(Выборка.СуммаДокумента, 0) Тогда
Выборка.СуммаДокумента = Окр(Выборка.СуммаДокумента, 0);
Выборка.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Для запуска:
- Создайте новую обработку в конфигураторе.
- Вставьте код в модуль объекта.
- Запустите обработку в режиме
1С:Предприятие.
Создать резервную копию базы|Проверить права пользователя|Тестировать на копии данных|Зафиксировать изменения в журнале-->
5. Особенности работы с денежными полями
В 1С:Бухгалтерия и 1С:Управление Торговлей денежные поля (например, СуммаДокумента) по умолчанию хранят значения с точностью до копеек. Чтобы убрать дробную часть:
- 💰 Используйте функцию
Окр10(Сумма, 0)для округления до рублей. - 💰 В печатных формах настройте формат
ДБК=1(без копеек). - 💰 Для отчетов по ОСВ используйте настройку
Округление сумм → До целых.
Важно: в некоторых отчетах (например, "Анализ субконто") округление может привести к несовпадению итогов. В этом случае лучше выгрузить данные в Excel и обработать там.
Если после округления сумм в документах появляется разница в 1 копейку, используйте корректировочные проводки с типом операции "Сторно".
6. Работа с количественными полями (вес, объем, штуки)
В справочниках "Номенклатура" или документах "Поступление товаров" количественные поля (например, Количество) часто содержат дробные значения. Чтобы их убрать:
- ⚖️ Для весовых товаров используйте округление до граммов:
Окр10(ВесВКг, 3). - ⚖️ Для штучных товаров применяйте
Цел()илиОкр()в зависимости от бизнес-логики. - ⚖️ В настройках номенклатуры укажите
Тип количества → Целое.
Пример кода для автоматического округления количества при проведении документа:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Для Каждого Строка Из Товары Цикл
Строка.Количество = Окр(Строка.Количество, 0);
КонецЦикла;
КонецПроцедуры
7. Проблемы и ошибки при удалении дробной части
При работе с дробными числами в 1С часто возникают типичные ошибки:
| Ошибка | Причина | Решение |
|---|---|---|
Ошибка округления: результат не является целым числом |
Использование Цел() для отрицательных чисел |
Замените на Окр() или проверяйте знак |
| Расхождения в отчетах после округления | Суммы округляются по отдельности, а не в целом по документу | Округляйте итоговую сумму, а не строки |
Тип не совпадает: Число(10,2) ≠ Число(10,0) |
Попытка записать целое число в поле с дробным типом | Измените тип поля в конфигураторе |
Если после округления появляются ошибки проведения документов, проверьте:
- 🔍 Наличие ссылок на округленные поля в других документах.
- 🔍 Корректность расчета налогов (НДС, налог на прибыль).
- 🔍 Соответствие округленных значений бизнес-логике (например, количество не может быть отрицательным).
Перед массовым округлением данных всегда проверяйте влияние на связанные документы (счета, накладные, акты) — изменение суммы в одном месте может нарушить цепочку проводок.
FAQ: Частые вопросы по удалению дробной части в 1С
Можно ли убрать копейки во всех документах сразу?
Да, но это требует обработки с циклом по всем документам. Рекомендуем:
- Создать внешнюю обработку с кодом округления.
- Запустить ее в тестовом режиме на копии базы.
- Проверить корректность проводок после изменения.
Для 1С:Бухгалтерия 8.3 есть готовые обработки на Инфостарт (например, "Массовое округление сумм").
Почему после округления не совпадают дебет и кредит?
Это типичная проблема при округлении строк документа по отдельности. Решение:
- Округляйте итоговую сумму документа, а не каждую строку.
- Используйте корректировочную строку с разницей (например, на 1 копейку).
- В настройках учета включите опцию
Разрешить незначительные расхождения.
Как убрать дроби в отчете "Анализ счета"?
В этом отчете настройка форматов работает иначе:
- Откройте отчет и нажмите
Показать настройки. - Перейдите на вкладку
Дополнительно. - В разделе
ОкруглениевыберитеДо целых. - Для денежных полей установите флаг
Без копеек.
Если настройки не сохраняются, проверьте права пользователя или обновите конфигурацию.
Что делать, если после округления не проводится документ?
Ошибка проведения обычно связана с:
- Нарушением корреспонденции счетов (дебет ≠ кредит).
- Отрицательным количеством или суммой.
- Несоответствием типов данных (попытка записать дробь в целое поле).
Решение: проверьте журнал регистрации (Администрирование → Журнал регистрации) и исправьте ошибки вручную или откатйте изменения.
Можно ли настроить автоматическое округление при вводе?
Да, для этого:
- В конфигураторе откройте модуль документа или справочника.
- Добавьте обработчик события
ПриИзменениидля нужного поля:
Процедура КоличествоПриИзменении(Элемент)
Элемент.Значение = Окр(Элемент.Значение, 0);
КонецПроцедуры
Для денежных полей используйте Окр10(Элемент.Значение, 0).