Разработка и Конфигурация · 10 мин
Число прописью в 1С: как убрать нули в копейках
Как убрать нулевые копейки (00 коп.) в сумме прописью в 1С: настройка макета, параметры ЧислоПрописью и функции РаботаСКурсамиВалют. Пошаговые инструкции.
При печати счетов, актов и накладных 1С формирует сумму прописью, и часто в конце строки появляется фрагмент вида «00 копеек»: «Одна тысяча рублей 00 копеек». Для целых сумм это выглядит избыточно, а в некоторых внешних формах документов нулевые копейки вообще не допускаются. Убрать нули можно несколькими способами — от правки строки параметров в функции формирования суммы прописью до изменения макета печатной формы.
Конкретный способ зависит от конфигурации: в типовых решениях (Бухгалтерия предприятия, Управление торговлей, ERP) сумма прописью формируется типовыми функциями, а в самописных и доработанных конфигурациях — собственным кодом. Ниже разобраны оба случая, а также вариант без изменения конфигурации вообще.
Перед любыми изменениями определите, откуда берётся строка: из кода общего модуля, из макета печатной формы или из внешней обработки. От этого зависит, где вносить правку и насколько она безопасна при обновлении конфигурации.
Откуда берутся нули в сумме прописью
Строка суммы прописью в 1С строится функцией ЧислоПрописью() встроенного языка либо типовыми обёртками вроде РаботаСКурсамиВалют.СформироватьСуммуПрописью() или ОбщегоНазначения.СформироватьСуммуПрописью() (имя зависит от конфигурации и версии БСП). Эти функции принимают число и строку параметров, описывающую валюту: «рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2».
Последняя цифра в параметрах — количество знаков дробной части. Если указано 2, функция всегда дописывает копейки, даже когда их значение равно нулю: «00 копеек». Это штатное поведение, а не ошибка — оно требуется для бухгалтерских документов, где дробная часть должна присутствовать явно.
Поэтому «убрать нули» означает одно из двух: либо изменить параметры формирования, чтобы дробная часть не выводилась, либо постобработать готовую строку и вырезать из неё нулевые копейки. Оба подхода рассмотрены ниже.
Способ 1: изменить параметры функции ЧислоПрописью
Самый чистый вариант — убрать дробную часть на этапе формирования строки. Для этого в параметрах функции вместо описания копеек передаётся пустое описание дробной части, а количество знаков устанавливается в 0.
Пример для рублей без копеек:
СуммаПрописью = ЧислоПрописью(Сумма, "Л=ru_RU", "рубль, рубля, рублей, м, , , , , 0");
В этом варианте сумма 1500 будет выведена как «Одна тысяча пятьсот рублей» — без фрагмента «00 копеек». Учтите важное ограничение: если сумма реально содержит копейки (например, 1500,45), дробная часть просто не попадёт в строку, и текст перестанет соответствовать цифровой сумме. Поэтому способ подходит только для документов, где суммы заведомо целые, либо нужна дополнительная проверка.
Более аккуратный вариант — формировать строку по условию: если дробная часть равна нулю, использовать параметры без копеек, иначе — стандартные:
Если Сумма = Цел(Сумма) Тогда
СуммаПрописью = ЧислоПрописью(Сумма, "Л=ru_RU", "рубль, рубля, рублей, м, , , , , 0");
Иначе
СуммаПрописью = ЧислоПрописью(Сумма, "Л=ru_RU", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
КонецЕсли;
Если Сумма = Цел(Сумма) Тогда
СуммаПрописью = ЧислоПрописью(Сумма, "Л=ru_RU", "рубль, рубля, рублей, м, , , , , 0");
Иначе
СуммаПрописью = ЧислоПрописью(Сумма, "Л=ru_RU", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
КонецЕсли;Способ 2: обрезать фрагмент «00 копеек» в готовой строке
Если менять параметры формирования нежелательно (например, функция вызывается из типового кода, который вы не хотите трогать), можно обработать уже готовую строку. Идея: найти подстроку «00 копеек» (или «00 коп.») и удалить её вместе с предшествующим пробелом.
СуммаПрописью = СтрЗаменить(СуммаПрописью, " 00 копеек", "");
СуммаПрописью = СтрЗаменить(СуммаПрописью, " 00 коп.", "");
Этот приём безопасен, потому что сочетание «00 копеек» не может встретиться в середине суммы прописью в другом смысле — дробная часть всегда стоит в конце. Тем не менее проверяйте точное написание («копеек», «коп.», «копійок» для украинской локали и т. п.) в вашей конфигурации: строка замены должна совпадать с фактическим выводом.
Недостаток способа — он «заплаточный»: при смене локали или параметров валюты текст замены может перестать совпадать, и нули вернутся. Для долгосрочного решения предпочтительнее первый способ.
Способ 3: правка в типовой конфигурации без снятия с поддержки
В типовых конфигурациях сумма прописью обычно формируется в общем модуле (например, в модуле формирования печатных форм) и вызывается из процедуры печати конкретного документа. Прямая правка общего модуля потребует снятия конфигурации с поддержки, что усложнит обновления.
Правильный путь — использовать механизм расширений конфигурации. В расширении заимствуется нужный общий модуль или процедура печати, и в аннотации «ИзменениеИКонтроль» или «После» выполняется постобработка строки: из параметра, содержащего сумму прописью, удаляются нулевые копейки. Конфигурация остаётся на поддержке, а правка сохраняется при обновлениях.
Порядок действий в общем виде такой: найдите, в каком модуле и какой процедуре формируется печатная форма (это видно по кнопке «Печать» документа и менеджеру печати), определите переменную или параметр области макета с суммой прописью, создайте расширение с перехватом этой процедуры и добавьте обрезку нулевых копеек перед выводом области в табличный документ.
Способ 4: убрать нули во внешней печатной форме
Если документ печатается через внешнюю печатную форму (файл .epf, подключённый в «Дополнительные отчеты и обработки»), править нужно именно её, а не конфигурацию. Внешняя форма обычно содержит собственный код формирования суммы прописью — найдите в модуле обработки вызов ЧислоПрописью или типовой функции и примените способ 1 или 2.
Если внешняя форма берёт сумму прописью из параметров, переданных типовым механизмом, то в модуле обработки в процедуре Печать после получения параметров добавьте обрезку нулевых копеек перед заполнением макета. Это самая безопасная точка вмешательства: внешнюю обработку легко отключить и вернуть типовую печать.
После правки обработку нужно переподключить (обновить файл в справочнике дополнительных отчётов и обработок), иначе будет работать старая версия.
- 1Определите, откуда формируется сумма прописью: типовой модуль, внешняя обработка или собственный код
- 2Сделайте копию базы или работайте на тестовой копии
- 3Внесите правку: параметры без дробной части либо СтрЗаменить для «00 копеек»
- 4Сформируйте печатную форму с целой суммой и с суммой с копейками
- 5Проверьте, что цифровая сумма и сумма прописью соответствуют друг другу
- 6Перенесите изменение в рабочую базу (подключите расширение или обновите внешнюю обработку)
Проверка результата и типичные ошибки
После внесения правки проверьте минимум три сценария: целая сумма (нули должны исчезнуть), сумма с копейками (копейки должны остаться и быть корректными) и нулевая сумма (строка не должна «сломаться» или стать пустой). Также проверьте все документы, использующие тот же код: правка общего модуля влияет на счета, акты, накладные и доверенности одновременно.
Обратите внимание на регистр первой буквы. В некоторых формах сумма прописью должна начинаться с заглавной буквы — после обрезки строки убедитесь, что форматирование не пострадало. Если строка выводится в скобках после цифровой суммы, проверьте, что не осталось лишнего пробела или висячей запятой.
Сравнение подходов
Сравнение вариантов
Чистое решение без постобработки; требует доступа к коду и проверки сумм с копейками
Быстро и универсально, но зависит от точного текста локали и параметров валюты
Сохраняет поддержку и обновления типовой конфигурации; требует навыка работы с расширениями
Не затрагивает конфигурацию вообще; действует только для конкретной формы
Выбор зависит от масштаба задачи: для одного документа на внешней печатной форме достаточно правки обработки, для всех печатных форм типовой конфигурации — расширения. Прямая правка общих модулей оправдана только в собственных (нетиповых) конфигурациях, где вопрос обновлений не стоит.
Что важно запомнить
Нулевые копейки убираются либо параметрами ЧислоПрописью (дробная часть 0 знаков), либо удалением подстроки «00 копеек» из готовой строки. В типовых конфигурациях правку выполняйте через расширение или внешнюю печатную форму, проверяйте результат на суммах с копейками и без, а также на всех затронутых документах.
Частые вопросы
Почему после правки сумма с копейками выводится без копеек?
Вы установили количество знаков дробной части равным 0 для всех сумм. Добавьте условие: если сумма целая — параметры без копеек, иначе — стандартные параметры с двумя знаками дробной части.
СтрЗаменить не срабатывает, нули остались. В чём причина?
Скорее всего, текст замены не совпадает с фактическим выводом. Выведите сформированную строку в сообщение и посмотрите точное написание: «00 копеек», «00 коп.», другой регистр или другая локаль. Скопируйте фрагмент в строку замены один в один, включая пробелы.
Можно ли убрать нули без программирования?
Штатной настройкой в пользовательском режиме это не решается: формат суммы прописью зашит в коде печатных форм. Вариант без программирования — отредактировать макет вручную, если сумма прописью захардкожена в тексте макета, но обычно она вычисляется кодом, и потребуется доработка.
Правка пропадёт при обновлении конфигурации?
Если вы изменили типовой общий модуль напрямую — да, при обновлении изменение будет затёрто или вызовет конфликт. Если правка сделана через расширение конфигурации или во внешней печатной форме — она сохранится.
Как убрать нули только в одном документе, например в счёте?
Найдите процедуру формирования печатной формы именно этого документа (через менеджер печати) и примените обрезку нулевых копеек только там. Проще всего это сделать через внешнюю печатную форму, подключённую к конкретному виду документа.
Влияет ли удаление «00 копеек» на юридическую значимость документа?
Для большинства первичных документов допустимы оба варианта записи, но для отдельных форм (банковские, бюджетные документы) действуют свои правила заполнения. Перед изменением сверьтесь с требованиями к конкретному виду документа и при необходимости согласуйте формат с бухгалтерией.