При работе с печатными формами документов в 1С часто возникает необходимость вывести числовую сумму не только цифрами, но и текстом, то есть "прописью" — для этого есть редактор печатных форм с поддержкой вывода суммы прописью. Это особенно актуально для договоров, кассовых ордеров и других финансовых документов, где такой формат является обязательным. В этом материале мы подробно рассмотрим, как решить эту задачу в системе 1С, используя встроенные механизмы платформы.
Для преобразования числового значения в его текстовое представление прописью в 1С предназначена встроенная функция ЧислоПрописью() — задачу автоматизирует доработка для программного вывода данных в печатную форму. Это мощный инструмент, который позволяет гибко настраивать вывод суммы для различных языков и с учетом особенностей склонения денежных единиц.
Давайте разберем синтаксис этой функции и ее параметры, чтобы использовать ее максимально эффективно.
Функция ЧислоПрописью() имеет следующий синтаксис:
ЧислоПрописью(<Число>, <ФорматнаяСтрока>, <ПараметрыПредметаИсчисления>)
Рассмотрим каждый параметр более детально:
Это обязательный параметр, который представляет собой числовое значение, которое мы хотим преобразовать в строку прописью. Например, это может быть сумма договора, сумма к оплате или любая другая числовая величина.
Необязательный строковый параметр, который содержит различные параметры форматирования, разделенные точкой с запятой (;). Именно здесь мы определяем язык вывода и другие важные опции. Рассмотрим наиболее важные из них:
Л (или L): Код локализации. Этот параметр указывает язык, на котором будет формироваться пропись. Например, для русского языка используем ru_RU, для английского – en_US (поможет инструмент для автоматического перевода печатных форм 1С), для белорусского – be_BY и так далее. Если этот параметр не указан, по умолчанию используется код локализации, установленный в операционной системе.ДП (или FS): Определяет, как форматировать дробную часть. Если установлено значение Истина, дробная часть будет выведена прописью. Если Ложь – числом. По умолчанию этот параметр равен Ложь. Например, для вывода "пятьдесят тысяч рублей 00 копеек" или "пятьдесят тысяч рублей ноль копеек".НП (или SN): Определяет, включать ли название предмета исчисления (например, "рублей"). Это булево значение, по умолчанию Истина. Если установить в Ложь, получим "одна тысяча пятьсот" вместо "одна тысяча пятьсот рублей".НД (или FN): Определяет, включать ли название десятичных частей предмета исчисления (например, "копеек"). Это булево значение, по умолчанию Истина.Этот параметр также необязательный и представляет собой строку, которая определяет параметры предмета исчисления (валюты) и ее дробной части. Формат этой строки зависит от кода локализации, указанного в форматной строке. Рассмотрим его для русского и белорусского языков, как наиболее часто используемых в 1С на территории СНГ:
Для русского и белорусского языков (ru_RU, be_BY) строка выглядит следующим образом:
"рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2"
Разберем каждую часть этой строки:
рубль, рубля, рублей: Это склонения для целой части предмета исчисления (валюты). Они указываются в следующем порядке:
м: Род предмета исчисления. Здесь м означает мужской род, ж – женский, с – средний. Для рубля это мужской род.копейка, копейки, копеек: Аналогично склонениям для целой части, это склонения для дробной части предмета исчисления (копеек). Порядок тот же: именительный падеж ед.ч., родительный падеж ед.ч., родительный падеж мн.ч.ж: Род дробной части. Для копейки это женский род.2: Количество разрядов дробной части. По умолчанию это 2, что соответствует копейкам. Мы можем изменить это значение, например, на 0, если не хотим выводить копейки прописью вовсе.Давайте рассмотрим несколько практических примеров, чтобы лучше понять, как применять эту функцию.
Предположим, у нас есть сумма 1500, и мы хотим вывести ее прописью на русском языке.
ЧислоПрописью(1500, "Л=ru_RU;ДП=Истина;")
Этот код вернет строку "одна тысяча пятьсот". Обратите внимание, что без указания параметров предмета исчисления, название валюты не будет добавлено.
Наиболее частый сценарий — это вывод денежной суммы с указанием валюты и ее дробной части (копеек).
В нашем случае, когда автор темы запрашивал "...составляет 50 000 рублей (Пятьдесят тысяч рублей)...", нам нужно вывести и целую, и дробную часть, а также название валюты.
Рассмотрим, как это сделать для суммы, например, 50000:
СуммаДоговора = 50000;
ФормСтрока = "Л = ru_RU; ДП = Истина"; // Язык русский, дробная часть прописью
ПарПредмета = "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2"; // Параметры для рублей и копеек
ПрописьЧисла = ЧислоПрописью(СуммаДоговора, ФормСтрока, ПарПредмета);
// ПрописьЧисла будет содержать "Пятьдесят тысяч рублей ноль копеек"
Если мы хотим, чтобы копейки не выводились прописью, а были просто числом (например, "Пятьдесят тысяч рублей 00 копеек"), или если нам нужно убрать копейки совсем, мы можем изменить параметр ДП или количество разрядов.
Чтобы копейки не выводились прописью, а выводились числом (поведение по умолчанию для ДП=Ложь, но лучше указать явно):
СуммаДоговора = 50000;
ФормСтрока = "Л = ru_RU; ДП = Ложь"; // Язык русский, дробная часть числом
ПарПредмета = "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2"; // Параметры для рублей и копеек
ПрописьЧисла = ЧислоПрописью(СуммаДоговора, ФормСтрока, ПарПредмета);
// ПрописьЧисла будет содержать "Пятьдесят тысяч рублей 00 копеек"
Чтобы копейки не выводились вовсе:
СуммаДоговора = 50000;
ФормСтрока = "Л = ru_RU; ДП = Истина"; // Язык русский, дробная часть прописью (но ее не будет)
ПарПредмета = "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 0"; // Указываем 0 разрядов для дробной части
ПрописьЧисла = ЧислоПрописью(СуммаДоговора, ФормСтрока, ПарПредмета);
// ПрописьЧисла будет содержать "Пятьдесят тысяч рублей"
Часто возникает ситуация, когда в одном документе (например, договоре) необходимо вывести несколько разных числовых сумм прописью. Функция ЧислоПрописью() вызывается для каждой суммы отдельно, а результаты присваиваются соответствующим параметрам макета.
Рассмотрим пример из обсуждаемой темы, где нужно вывести сумму гонорара и половину этой суммы прописью:
// Предположим, мы находимся в процедуре формирования печатной формы
// и у нас уже есть объект Макет.
// *** Первое число прописью (СуммаГонорара) ***
СуммаГонорара = 12345.67; // Пример исходной суммы
// Получаем числовое значение для первой суммы
СуммаАвторам = СуммаГонорара;
// Устанавливаем параметры форматирования
ФормСтрока = "Л = ru_RU; ДП = Истина"; // Русский язык, дробная часть прописью
ПарПредмета = "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2"; // Рубли и копейки
// Вызываем функцию ЧислоПрописью() для первой суммы
ПрописьЧислаГонорара = ЧислоПрописью(СуммаГонорара, ФормСтрока, ПарПредмета);
// Присваиваем полученную строку параметру макета
Макет.Параметры.СуммаПрописьюГонорара = ПрописьЧислаГонорара;
// Например, "Двенадцать тысяч триста сорок пять рублей шестьдесят семь копеек"
// *** Второе число прописью (СуммаПополам) ***
// Вычисляем вторую сумму (половина гонорара, округленная до 2 знаков)
СуммаПополам = СуммаГонорара / 2;
СуммаПополам = Окр(СуммаПополам, 2); // Округляем до копеек
// Устанавливаем параметры форматирования (могут быть те же или другие)
// ФормСтрока = "Л = ru_RU; ДП = Истина"; // Можно переиспользовать или определить заново
// ПарПредмета = "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2"; // Можно переиспользовать или определить заново
// Вызываем функцию ЧислоПрописью() для второй суммы
ПрописьЧислаПополам = ЧислоПрописью(СуммаПополам, ФормСтрока, ПарПредмета);
// Присваиваем полученную строку другому параметру макета
Макет.Параметры.СуммаДолиПрописью = ПрописьЧислаПополам;
// Например, "Шесть тысяч сто семьдесят два рубля тридцать четыре копейки"
Как видим, для каждой суммы мы отдельно вызываем функцию ЧислоПрописью() и присваиваем результат разным параметрам макета. Это позволяет гибко управлять выводом различных сумм в одном документе.
Теперь, когда мы понимаем, как использовать функцию ЧислоПрописью(), давайте выясним, где размещать этот код и как связать его с печатной формой.
Код с вызовом функции ЧислоПрописью() обычно размещается в модуле объекта документа (например, в модуле документа "Договор") или во внешней печатной форме (обработке), в той процедуре, которая отвечает за формирование данных для макета. Это может быть процедура Печать() или аналогичная.
Для того чтобы сумма прописью появилась в печатной форме, необходимо выполнить следующие шаги — пригодится конструктор для создания печатных форм без программирования.
СуммаПрописью.СуммаДокумента = Объект.СуммаДоговора;.ЧислоПрописью(), как мы рассмотрели выше, чтобы преобразовать число в текстовую строку. Например:
Пропись = ЧислоПрописью(СуммаДокумента, "Л=ru_RU;ДП=Истина", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
Макет.Параметры.СуммаПрописью = Пропись;
Если вы используете области макета, то это будет выглядеть так:
ОбластьМакета.Параметры.СуммаПрописью = Пропись;
ТабличныйДокумент.Вывести(ОбластьМакета);
При работе с функцией ЧислоПрописью() и формированием печатных форм, обратите внимание на следующие рекомендации:
Окр() перед передачей числа в ЧислоПрописью().ЧислоПрописью(), ее параметрах, а также примеры использования для разных языков и сценариев. Просто нажмите F1, когда курсор находится на имени функции.Таким образом, использование функции ЧислоПрописью() в 1С является стандартным и наиболее эффективным способом для вывода числовых сумм прописью в печатных формах. Следуя этим шагам и рекомендациям, вы сможете легко реализовать необходимый функционал в ваших решениях.