Форматирование чисел прописью в 1С:Предприятие — стандартная задача при оформлении платежных поручений, счетов-фактур и других бухгалтерских документов. Однако часто пользователи сталкиваются с проблемой: функция ЧислоПрописью() автоматически добавляет "ноль рублей 00 копеек" или "0,00" даже когда сумма целая. Это портит внешний вид документов и требует ручной правки.
В большинстве случаев лишние нули появляются из-за особенностей работы встроенных механизмов 1С. Например, при выводе суммы 1500 рублей система может показать "Одна тысяча пятьсот рублей 00 копеек", хотя логичнее было бы "Одна тысяча пятьсот рублей". В этой статье разберём 5 способов убрать нули — от простых настроек до программного кода для разработчиков.
Проблема актуальна для всех конфигураций на базе 1С:Предприятие 8.3 (Бухгалтерия, ЗУП, Управление торговлей, ERP). Решения подойдут как для типовых, так и для самописных конфигураций. Если вы не программист, начните с первых трёх методов — они не требуют изменения кода.
1. Настройка формата числа в печатной форме
Самый простой способ убрать нули — изменить параметры вывода числа прописью непосредственно в печатной форме документа. Этот метод не требует программирования и доступен любому пользователю с правами на редактирование макетов.
Откройте нужную печатную форму (например, Платежное поручение или Счет-фактура) в режиме конфигуратора или через меню Все функции → Печатные формы. Найдите поле, где выводится сумма прописью, и проверьте его свойства:
- 🔹 Формат числа — установите значение
ЧДЦ=0; ЧРД=0;(это отключит вывод дробной части, если она равна нулю). - 🔹 Точность — если поле поддерживает этот параметр, задайте
0для целых сумм. - 🔹 Показывать нулевые значения — снимите эту галочку, если она есть.
Если в вашей конфигурации используется универсальный механизм печатных форм (например, в Бухгалтерии 3.0), найдите макет формы и отредактируйте выражение для суммы прописью. Обычно оно выглядит так:
ЧислоПрописью(СуммаДокумента, "рубль,,рубля,,рублей,,копейка,,копейки,,копеек,,0,,,0,,,Истина,,,Ложь")
Здесь последние два параметра (Ложь) как раз отвечают за вывод дробной части. Замените их на Истина, чтобы скрыть нули.
Перед изменением макета сделайте его копию через Файл → Сохранить как — это поможет быстро откатиться, если что-то пойдет не так.
2. Использование функции СокрЛП() для обрезки нулей
Если изменять печатную форму нельзя (например, в типовых конфигурациях с блокировкой редактирования), воспользуйтесь встроенной функцией СокрЛП(). Она удаляет пробелы и лишние символы справа, включая "00 копеек".
Добавьте в код вывода суммы прописью следующую конструкцию:
СокрЛП(ЧислоПрописью(Сумма, "рубль,,рубля,,рублей,,копейка,,копейки,,копеек,,0,,,0,,,Истина,,,Ложь"), " 00 копеек")
Этот код:
- Преобразует число в прописной формат.
- Удаляет фразу " 00 копеек" (обратите внимание на пробел перед нулями!).
Если в вашей конфигурации используются другие валюты (доллары, евро), замените "копеек" на соответствующее слово ("центов", "евроцентов").
Если сумма не круглая (например, 1500,50), функция Результат = СокрЛП(ЧислоПрописью(Сумма, "..."), " 00 копеек"); Иначе Результат = ЧислоПрописью(Сумма, "..."); КонецЕсли;Что делать, если сумма с копейками?
СокрЛП() не удалит копейки. В этом случае лучше использовать условный оператор:
Если Копейки(Сумма) = 0 Тогда
3. Программное решение: модификация функции ЧислоПрописью()
Для разработчиков самый гибкий способ — создать собственную функцию обработки чисел прописью. Это позволит:
- 🔹 Убирать нули только для целых сумм.
- 🔹 Сохранять копейки, если они ненулевые.
- 🔹 Адаптировать вывод под разные валюты.
Пример кода для обработчика:
Функция ЧислоПрописьюБезНулей(Число, ВалютаРод = "", ВалютаРодительный = "", ВалютаМножество = "",
ДробьЕд = "", ДробьДве = "", ДробьМного = "", ДробьРод = "",
Разделитель = "", НеОтбрасыватьДробь = Ложь) Экспорт
Результат = ЧислоПрописью(Число, ВалютаРод, ВалютаРодительный, ВалютаМножество,
ДробьЕд, ДробьДве, ДробьМного, ДробьРод, Разделитель);
Если НеОтбрасыватьДробь Или Копейки(Число) <> 0 Тогда
Возврат Результат;
Иначе
// Удаляем " 00 копеек" или аналогичный суффикс
Позиция = Найти(Результат, " 00 ");
Если Позиция > 0 Тогда
Возврат Лев(Результат, Позиция - 1);
КонецЕсли;
Возврат Результат;
КонецЕсли;
КонецФункции
Чтобы использовать эту функцию в печатных формах, замените стандартный вызов ЧислоПрописью() на ЧислоПрописьюБезНулей(). Например:
ЧислоПрописьюБезНулей(СуммаДокумента, "рубль", "рубля", "рублей", "копейка", "копейки", "копеек")
Этот метод универсален и работает во всех конфигурациях 1С, включая старые версии платформы (8.2 и ниже).
4. Настройка через параметры сеанса (для опытных пользователей)
В некоторых конфигурациях (например, 1С:ERP) вывод чисел прописью регулируется параметрами сеанса. Это позволяет гибко управлять форматом без изменения кода.
Чтобы проверить или изменить эти параметры:
- Откройте
Администрирование → Настройки программы → Параметры сеанса. - Найдите параметры с названиями:
- 🔹
ФорматЧислаПрописьюПоУмолчанию - 🔹
ОтображатьНулиВДробнойЧасти
- 🔹
ОтображатьНулиВДробнойЧасти = Ложь.Если таких параметров нет, их можно добавить программно через обработку "Управление параметрами сеанса" (доступна в режиме 1С:Предприятие).
Запустить 1С в режиме предприятия|Открыть раздел "Администрирование"|Найти "Настройки программы"|Проверить параметры формата чисел|Сохранить изменения и перезапустить сеанс
-->
5. Решение для внешних печатных форм (БСП 3.0 и выше)
Если вы используете Библиотеку стандартных подсистем (БСП) 3.0, то вывод чисел прописью часто настраивается через внешние печатные формы. В этом случае:
Откройте макет внешней печатной формы (файл с расширением .mxl или .erf) и найдите поле с суммой прописью. Обычно оно имеет вид:
&ЧислоПрописью(СуммаДокумента, "рубль,,рубля,,рублей,,копейка,,копейки,,копеек,,0,,,0")
Замените его на:
&ЧислоПрописью(СуммаДокумента, "рубль,,рубля,,рублей,,копейка,,копейки,,копеек,,0,,,0,,,Истина,,,Ложь")
И добавьте обработку через СокрЛП(), как описано в разделе 2.
Если внешняя форма использует механизм компоновки данных, измените выражение в настройках поля:
- 🔹 Откройте схему компоновки данных.
- 🔹 Найдите ресурс с суммой прописью.
- 🔹 В выражении добавьте условие для обрезки нулей.
В БСП 3.1+ есть готовая функция ФорматированнаяСтрока.ЧислоПрописьюБезНулей() — проверьте её наличие в глобальном модуле.
Сравнение методов: какой выбрать?
Выбор способа зависит от вашей роли в работе с 1С и типа конфигурации. Ниже таблица с сравнением всех методов:
| Метод | Сложность | Требуются права | Подходит для типовых конфигураций | Гибкость |
|---|---|---|---|---|
| Настройка печатной формы | Низкая | Редактирование макетов | Да (если макет не заблокирован) | Ограничена |
СокрЛП() |
Средняя | Изменение кода модуля | Да | Средняя |
| Собственная функция | Высокая | Конфигуратор | Да | Высокая |
| Параметры сеанса | Низкая | Администрирование | Зависит от конфигурации | Низкая |
| Внешние печатные формы (БСП) | Средняя | Редактирование файлов | Да | Высокая |
Для бухгалтеров и пользователей без доступа к конфигуратору оптимальны первый и второй методы. Разработчикам лучше использовать собственную функцию или настройку через БСП — это даст максимальную гибкость.
Если вы работаете в облачной версии 1С (1C:Fresh), большинство методов недоступны. В этом случае обратитесь в поддержку для настройки формата вывода.
Частые ошибки и как их избежать
При работе с числами прописью пользователи часто сталкиваются с типичными проблемами:
⚠️ Внимание: Если после изменений в печатной форме сумма прописью пропала совсем, проверьте синтаксис функции ЧислоПрописью(). Частая ошибка — лишние запятые или неверное количество параметров.
- 🚫 Некорректный разделитель валют. Если в функции указан разделитель (например,
"руб. "), а в коде его нет, сумма отобразится криво. Всегда проверяйте соответствие параметров. - 🚫 Игнорирование локализации. В украинской или казахской локализации 1С используются другие правила склонения валют. Убедитесь, что параметры функции соответствуют языку базы.
- 🚫 Забытые пробелы в
СокрЛП(). Функция ищет точную строку. Если в сумме прописью перед "00 копеек" есть два пробела, а вы указали один — замена не сработает.
Ещё одна распространённая проблема — округление сумм. Если в документе указана сумма 1500,99, а вы применили обрезку нулей, копейки исчезнут. Всегда используйте условные операторы (как в разделе 3) для корректной обработки.
⚠️ Внимание: В конфигурациях с управляемым приложением (например, 1С:Бухгалтерия 3.0) некоторые макеты печатных форм хранятся в базе данных, а не в файлах. Их можно редактировать только через Все функции → Печатные формы.
FAQ: Ответы на популярные вопросы
Можно ли убрать нули в типовых печатных формах без изменения конфигурации?
Да, в большинстве случаев достаточно отредактировать макет печатной формы через меню Все функции. Найдите нужную форму (например, ПлатежноеПоручение), откройте её макет и измените выражение для суммы прописью, добавив параметры для скрытия нулей.
Если макет заблокирован, используйте функцию СокрЛП() в модуле документа.
Почему после обновления 1С снова появляются нули в суммах?
Это происходит потому, что типовые обновления перезаписывают макеты печатных форм. Чтобы избежать проблемы:
- Создайте копию макета с другим именем (например,
ПлатежноеПоручение_БезНулей). - В коде документа замените вызов стандартной печатной формы на вашу копию.
Так ваши изменения не затрутся при обновлении.
Как убрать нули в суммах с иностранной валютой (доллары, евро)?
Для иностранных валют используйте аналогичные параметры в функции ЧислоПрописью(), но с другими суффиксами. Пример для долларов:
ЧислоПрописью(СуммаВДолларах, "доллар", "доллара", "долларов", "цент", "цента", "центов", "", "", "", "", Ложь)
Чтобы убрать "00 cents", примените СокрЛП() с соответствующей строкой:
СокрЛП(Результат, " 00 cents")
Возможно ли автоматически скрывать нули во всех документах?
Да, но для этого потребуется глобальное изменение конфигурации. Создайте общую функцию (например, ЧислоПрописьюБезНулей()) и замените все вызовы стандартной ЧислоПрописью() на неё.
В типовых конфигурациях это сделать сложнее — придётся использовать расширения или внешние обработки.
Почему в некоторых документах нули остаются, а в других — нет?
Это зависит от:
- 🔹 Типа печатной формы (некоторые формы используют свои механизмы вывода).
- 🔹 Локализации (в разных языковых версиях 1С разные правила форматирования).
- 🔹 Прав пользователя (если у вас нет прав на редактирование макетов, изменения не применятся).
Проверьте настройки каждой формы отдельно.