При настройке автоматического заполнения шаблонов файлов (договоров, актов, коммерческих предложений) в «1С:Документооборот» часто возникает необходимость вывести числовое значение не просто цифрами, а прописью с правильным склонением единицы измерения (например, рубли с копейками или тонны). Разберем, как правильно извлечь числовые данные из реквизитов документа или дополнительных реквизитов и преобразовать их в текстовую строку.
В механизме правил автозаполнения шаблонов для каждого поля замены можно указать тип заполнения. Если стандартного реквизита недостаточно или его нужно особым образом отформатировать, в настройке поля выбирается заполнение через Выражение на встроенном языке 1С или Скрипт автозаполнения.
Рассмотрим две ключевые задачи, с которыми приходится сталкиваться:
На практике для склонения чисел часто пытаются применить функцию общего модуля СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью, однако она возвращает число цифрами вместе со словом (например, «15 минут»). Если же нам необходимо получить полностью словесное описание числа (например, «триста восемьдесят рублей 76 копеек»), следует использовать встроенную функцию платформы ЧислоПрописью.
Проанализируем простейший случай, когда поле суммы или цены является стандартным реквизитом документа-владельца (например, Цена или Сумма). В выражении правила автозаполнения мы обращаемся к реквизиту через контекстную переменную (ФактическийВладелецФайла или ВладелецФайла).
Посмотрим на пример кода для выражения автозаполнения:
// Преобразование стандартного реквизита "Цена" в сумму прописью
РезультатОбработки = ЧислоПрописью(
ФактическийВладелецФайла.Цена,
"L=ru_RU; ДП=Истина",
"рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2"
);
Разберем подробнее параметры встроенной функции ЧислоПрописью:
L=ru_RU для русского или L=uk_UA для украинского языка) и режим вывода дробной части (ДП=Истина выводит дробную часть прописью, ДП=Ложь — цифрами)."рубль, рубля, рублей")."м" — мужской, "ж" — женский, "с" — средний)."копейка, копейки, копеек").2 для валют).Если число хранится в дополнительном реквизите (например, «Кількість тонн (АктБФ)»), мы не можем обратиться к нему через точку напрямую, как к стандартному реквизиту объекта. В этом случае данные необходимо извлечь из табличной части ДополнительныеРеквизиты с помощью запроса.
Разберем по шагам реализацию скрипта автозаполнения:
// 1. Инициализация запроса к табличной части дополнительных реквизитов
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВнутренниеДокументыДополнительныеРеквизиты.Значение КАК Значение
|ИЗ
| Справочник.ВнутренниеДокументы.ДополнительныеРеквизиты КАК ВнутренниеДокументыДополнительныеРеквизиты
|ГДЕ
| ВнутренниеДокументыДополнительныеРеквизиты.Ссылка = &Ссылка
| И ВнутренниеДокументыДополнительныеРеквизиты.Свойство = &Свойство";
// 2. Установка параметров запроса
// Важно передавать точное наименование свойства из Плана видов характеристик
СвойствоОбъекта = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Кількість тонн (АктБФ)");
Запрос.УстановитьПараметр("Свойство", СвойствоОбъекта);
Запрос.УстановитьПараметр("Ссылка", ФактическийВладелецФайла);
// 3. Выполнение запроса и обработка результата
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() Тогда
ЧисловоеЗначение = Выборка.Значение;
// Преобразуем число в строку прописью с указанием тонн
РезультатОбработки = ЧислоПрописью(
ЧисловоеЗначение,
"L=ru_RU; ДП=Ложь",
"тонна, тонны, тонн, ж, кг, кг, кг, м, 3"
);
Иначе
РезультатОбработки = "";
КонецЕсли;
ФактическийВладелецФайла, ВладелецФайла или Файл.ВладелецФайла. Если запрос возвращает пустой результат, проверьте в отладчике фактический тип и заполненность этой переменной.НайтиПоНаименованию ищет реквизит по строке. Убедитесь, что наименование свойства совпадает символ в символ с наименованием в справочнике/плане видов характеристик (включая скобки и пробелы). В типовых конфигурациях на БСП также можно использовать методы общего модуля УправлениеСвойствами.