Документы и Печать · 12 мин
Как сделать сумму прописью в макете 1С
Как вывести сумму прописью в макете 1С: функция ЧислоПрописью, работа с параметрами макета, типовые механизмы БСП, частые ошибки и проверка результата.
Вывод суммы прописью — стандартное требование к печатным формам счетов, актов, накладных и договоров. В 1С эта задача решается двумя путями: встроенной функцией ЧислоПрописью() в коде модуля или готовыми механизмами типовых конфигураций. Выбор зависит от того, дорабатываете вы типовую печатную форму или создаёте собственный макет с нуля.
Ключевой момент, который часто упускают: сумма прописью не хранится в макете как статический текст. Макет содержит лишь параметр (место подстановки), а сам текст формируется программно в момент печати и подставляется в область макета. Поэтому правка сводится к двум действиям — добавить параметр в макет и заполнить его в коде формирования печатной формы.
Материал ориентирован на конфигурации на управляемых формах (УТ 11, ERP, БП 3.0, УНФ) и на обычные формы, где механизм аналогичен. Для работы понадобится доступ к конфигуратору и базовые навыки встроенного языка 1С.
Как устроен вывод суммы прописью в печатной форме
Печатная форма в 1С строится по табличному макету. В ячейках макета размещаются либо фиксированные тексты, либо шаблоны с параметрами вида [СуммаПрописью] или {СуммаПрописью} — синтаксис зависит от типа заполнения ячейки: «Шаблон» или «Параметр». При формировании документа код обращается к области макета, заполняет параметры через Область.Параметры.СуммаПрописью = ... и выводит область в результирующий табличный документ.
Само преобразование числа в текст выполняет встроенная функция ЧислоПрописью(). Она принимает число, код локализации и строку параметров склонения. Локализация по умолчанию соответствует русскому языку, поэтому второй параметр часто опускают.
В типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП) есть готовые обёртки: функции общих модулей, которые учитывают валюту документа, формируют строку с копейками и правильно склоняют названия денежных единиц. Перед написанием собственного кода проверьте, нет ли подходящей функции в общих модулях — это сэкономит время и снизит риск ошибок при обновлении.
Способ 1: функция ЧислоПрописью в коде формирования
Универсальный способ, работающий в любой конфигурации. В модуле менеджера объекта или в модуле формирования печатной формы найдите место, где заполняются параметры области макета, и добавьте вызов функции.
Типовой вызов для суммы в рублях выглядит так:
ОбластьМакета.Параметры.СуммаПрописью = ЧислоПрописью(СуммаДокумента, ,
"рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
Строка параметров задаёт формы склонения целой и дробной части: «рубль, рубля, рублей» — для целой части мужского рода (м), «копейка, копейки, копеек» — для дробной женского рода (ж). Последняя цифра 2 — количество знаков дробной части. Результат для суммы 1234,56 будет: «Одна тысяча двести тридцать четыре рубля 56 копеек».
Если нужна первая заглавная буква (обычно требуется в начале предложения), оберните результат: ВРег(Лев(Строка, 1)) + Сред(Строка, 2) или используйте функцию ТРег() с осторожностью — она поднимет регистр каждого слова, что для суммы прописью обычно нежелательно.
СуммаПрописью = ЧислоПрописью(СуммаДокумента, , "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");Способ 2: типовые функции конфигураций на БСП
В конфигурациях на базе БСП (БП 3.0, УТ 11, ERP, УНФ) сумму прописью формируют через общие модули. Точные имена различаются между версиями, поэтому ориентируйтесь на поиск по конфигуратору: откройте глобальный поиск (Ctrl+Shift+F) и ищите по фразе «СуммаПрописью» или «СформироватьСуммуПрописью».
Типичные варианты:
РаботаСКурсамиВалют.СформироватьСуммуПрописью(Сумма, Валюта)— формирует строку с учётом параметров валюты из справочника;ОбщегоНазначенияБПВызовСервера.СформироватьСуммуПрописью()— аналог в Бухгалтерии предприятия;- функции модуля менеджера документа, например
ПолучитьСуммуПрописью()в старых конфигурациях.
Преимущество типовых функций — они берут параметры склонения из справочника валют. Если в документе выбраны доллары или евро, строка автоматически будет содержать «долларов США» и «центов» вместо рублей и копеек. При самостоятельном вызове ЧислоПрописью() строку параметров для каждой валюты придётся задавать вручную.
Сравнение вариантов
Подходит для любой конфигурации и самописных макетов. Ограничение: параметры склонения валют задаются вручную, при мультивалютном учёте нужна своя логика.
Подходят для доработки типовых печатных форм. Учитывают валюту из справочника. Ограничение: имена модулей различаются между версиями, при обновлении вызов может потребовать корректировки.
Во многих типовых формах сумма прописью уже выводится. Подходит, если нужно только изменить расположение или формат. Ограничение: при снятии макета с поддержки усложняется обновление.
Добавление параметра в макет
Откройте макет печатной формы: в конфигураторе найдите документ, разверните ветку «Макеты» и откройте нужный табличный макет. Если дорабатываете типовую конфигурацию, предварительно добавьте макет в расширение или скопируйте его, чтобы не снимать объект с поддержки.
Порядок действий в макете:
- Выделите ячейку, где должна выводиться сумма прописью, или объедините несколько ячеек по ширине строки.
- В свойствах ячейки установите «Заполнение» = «Параметр» и в поле «Текст» укажите имя параметра, например
СуммаПрописью. Либо оставьте заполнение «Шаблон» и впишите текст вида:Всего наименований [КоличествоПозиций], на сумму [СуммаПрописью]. - Проверьте, что имя параметра в макете в точности совпадает с именем в коде:
Область.Параметры.СуммаПрописью. Регистр букв не важен, но опечатка приведёт к пустому значению без сообщения об ошибке. - Для длинных сумм включите в свойствах ячейки «Размещение текста» с переносом и «Автовысоту» строки, иначе текст обрежется.
После сохранения макета сформируйте печатную форму из пользовательского режима и проверьте результат на документе с крупной суммой и ненулевыми копейками — так видны и перенос строки, и корректность дробной части.
- 1Найдите в конфигураторе макет печатной формы и код её формирования
- 2Добавьте в нужную ячейку макета параметр СуммаПрописью
- 3В коде заполните параметр через ЧислоПрописью или типовую функцию модуля
- 4Сохраните изменения и обновите конфигурацию базы данных
- 5Сформируйте печатную форму тестового документа с копейками и проверьте текст
Особенности: валюта, НДС и формат строки
Сумма с выделением НДС
Во многих формах требуется строка вида «В том числе НДС: сто двадцать рублей 00 копеек». Для этого формируется отдельный параметр: сумма налога передаётся в ту же функцию ЧислоПрописью() с той же строкой параметров. Если НДС не выделен (сумма налога равна нулю), выводите вместо прописи фиксированный текст «без налога (НДС)» — это стандартная практика для счетов без НДС.
Мультивалютные документы
При выводе суммы в валюте строка параметров склонения должна соответствовать валюте: «доллар, доллара, долларов, м, цент, цента, центов, м, 2» или «евро, евро, евро, м, цент, цента, центов, м, 2». В типовых конфигурациях эти строки хранятся в реквизитах справочника валют («ПараметрыПрописи»), поэтому предпочтительнее вызывать типовую функцию, передавая ссылку на валюту.
Формат с дублированием цифрами
Некоторые формы требуют формат «1234,56 (одна тысяча двести тридцать четыре рубля 56 копеек)». В этом случае параметр формируется конкатенацией: сначала сумма в числовом формате через Формат(Сумма, "ЧДЦ=2"), затем в скобках результат ЧислоПрописью(). Удобно собирать такую строку в шаблоне ячейки макета с двумя отдельными параметрами.
Проверка результата и частые ошибки
После внедрения проверьте печатную форму на контрольном наборе документов: сумма без копеек, сумма с копейками, крупная сумма (миллионы), сумма в валюте, документ без НДС и с НДС. Расхождение хотя бы в одном сценарии означает, что параметр формируется не для всех веток кода.
Как проверить результат
Текст соответствует сумме цифрами, копейки совпадают, первая буква заглавная
Пустая строка, текст обрезан, копейки отличаются от числовой суммы
Рубли/копейки или доллары/центы склоняются правильно при разных окончаниях (1, 2, 5)
Форма слова не меняется или не соответствует валюте документа
Текст переносится на вторую строку, строка макета увеличивается по высоте
Часть текста скрыта, строка имеет фиксированную высоту
Выводится «без налога (НДС)» или аналогичный текст
Выводится «ноль рублей 00 копеек» там, где ожидался текст об отсутствии налога
Типичные ошибки при самостоятельной доработке:
- Имя параметра в макете не совпадает с именем в коде — область выводится с пустым значением, ошибка не диагностируется.
- Ячейка имеет заполнение «Текст» вместо «Параметр» или «Шаблон» — параметр игнорируется.
- Не включён перенос текста — длинная сумма обрезается по ширине объединённой ячейки.
- Сумма передаётся без округления — копейки в прописи расходятся с цифровым значением.
- Изменён типовой макет напрямую без расширения — при обновлении конфигурации доработка теряется.
Ограничения и когда нужен разработчик
Добавление параметра в существующий макет и одна строка кода — задача, которую может выполнить специалист с базовыми навыками конфигурирования. Однако есть ситуации, где лучше привлечь разработчика: печатная форма формируется через СКД или внешнюю обработку, сумма собирается из нескольких табличных частей с разными валютами, требуется пропись на нескольких языках или нестандартный формат (например, «прописью только целая часть, копейки цифрами» в специфическом виде).
Работайте на копии базы или в тестовом контуре. Перед доработкой рабочей базы сделайте резервную копию и зафиксируйте исходное состояние макета — это позволит быстро откатить изменение, если печатная форма перестанет формироваться.
Перед написанием своего кода откройте глобальный поиск по слову «Прописью» в конфигураторе: в большинстве типовых конфигураций нужная функция уже существует, и доработка сводится к одному вызову и одному параметру в макете.
Что важно запомнить
Сумма прописью формируется в коде функцией ЧислоПрописью или типовыми функциями БСП и подставляется в параметр макета. Проверяйте совпадение имён параметров, округление суммы, перенос текста и склонение валюты. Доработку выполняйте через расширение на тестовой базе.
Частые вопросы
Почему сумма прописью не выводится, хотя параметр добавлен в макет?
Чаще всего имя параметра в макете не совпадает с именем в коде заполнения или ячейка имеет тип заполнения «Текст» вместо «Параметр»/«Шаблон». Также проверьте, что код заполнения параметра реально выполняется: поставьте точку останова в отладчике на строке присвоения параметра.
Как сделать, чтобы первая буква суммы прописью была заглавной?
Функция ЧислоПрописью возвращает строку с маленькой буквы. Примените конструкцию: ВРег(Лев(Строка,1)) + Сред(Строка,2). В типовых конфигурациях для этого есть готовые функции, например формирование строки сразу с заглавной буквы в модулях работы с суммами прописью.
Как вывести сумму прописью в валюте, например в долларах?
Передайте в ЧислоПрописью строку параметров для нужной валюты: «доллар, доллара, долларов, м, цент, цента, центов, м, 2». В типовых конфигурациях используйте функцию, принимающую ссылку на справочник валют, — параметры склонения подставятся автоматически из карточки валюты.
Можно ли вывести сумму прописью без изменения конфигурации?
Да, двумя способами: через расширение конфигурации (рекомендуемый вариант, поддержка не нарушается) или через внешнюю печатную форму, подключаемую механизмом дополнительных отчётов и обработок. Внешняя печатная форма вообще не требует правки конфигурации — макет и код хранятся в файле обработки.
Почему в прописи копейки не совпадают с суммой документа?
Причина почти всегда в отсутствии округления: сумма в документе хранится с большей точностью, чем два знака. Передайте в функцию Окр(Сумма, 2) и убедитесь, что цифровая сумма на форме выводится с тем же округлением — тогда оба представления совпадут.
Как вывести «без НДС» вместо нулевой суммы налога прописью?
Добавьте в код условие: если сумма НДС равна нулю, параметру присваивается фиксированная строка «без налога (НДС)», иначе — результат ЧислоПрописью для суммы налога. Это стандартный подход в типовых счетах и УПД.