Как в правилах автозаполнения шаблонов файлов 1С вывести числовые поля и дополнительные реквизиты прописью?

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот IT и автоматизация бизнеса
← На главную

При настройке автоматического заполнения шаблонов файлов (договоров, актов, коммерческих предложений) в «1С:Документооборот» часто возникает необходимость вывести числовое значение не просто цифрами, а прописью с правильным склонением единицы измерения (например, рубли с копейками или тонны). Разберем, как правильно извлечь числовые данные из реквизитов документа или дополнительных реквизитов и преобразовать их в текстовую строку.

Анализ задачи и механизмов преобразования

В механизме правил автозаполнения шаблонов для каждого поля замены можно указать тип заполнения. Если стандартного реквизита недостаточно или его нужно особым образом отформатировать, в настройке поля выбирается заполнение через Выражение на встроенном языке 1С или Скрипт автозаполнения.

Рассмотрим две ключевые задачи, с которыми приходится сталкиваться:

  1. Получение числового значения (как из стандартного реквизита, так и из табличной части дополнительных реквизитов).
  2. Форматирование полученного числа прописью с правильным указанием предмета исчисления и склонений.

На практике для склонения чисел часто пытаются применить функцию общего модуля СтроковыеФункцииКлиентСервер.ЧислоЦифрамиПредметИсчисленияПрописью, однако она возвращает число цифрами вместе со словом (например, «15 минут»). Если же нам необходимо получить полностью словесное описание числа (например, «триста восемьдесят рублей 76 копеек»), следует использовать встроенную функцию платформы ЧислоПрописью.

Вариант 1. Вывод стандартного числового реквизита прописью

Проанализируем простейший случай, когда поле суммы или цены является стандартным реквизитом документа-владельца (например, Цена или Сумма). В выражении правила автозаполнения мы обращаемся к реквизиту через контекстную переменную (ФактическийВладелецФайла или ВладелецФайла).

Посмотрим на пример кода для выражения автозаполнения:


// Преобразование стандартного реквизита "Цена" в сумму прописью
РезультатОбработки = ЧислоПрописью(
    ФактическийВладелецФайла.Цена, 
    "L=ru_RU; ДП=Истина", 
    "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2"
);

Разберем подробнее параметры встроенной функции ЧислоПрописью:

  1. Число: исходное числовое значение.
  2. Форматная строка: задает параметры локализации (например, L=ru_RU для русского или L=uk_UA для украинского языка) и режим вывода дробной части (ДП=Истина выводит дробную часть прописью, ДП=Ложь — цифрами).
  3. Параметры предмета исчисления: строка из 9 параметров, разделенных запятыми:
    • Наименование целой части для 1, 2 и 5 единиц (например: "рубль, рубля, рублей").
    • Род целой части ("м" — мужской, "ж" — женский, "с" — средний).
    • Наименование дробной части для 1, 2 и 5 единиц (например: "копейка, копейки, копеек").
    • Род дробной части.
    • Разрядность дробной части (обычно 2 для валют).

Вариант 2. Получение и вывод дополнительного реквизита через запрос

Если число хранится в дополнительном реквизите (например, «Кількість тонн (АктБФ)»), мы не можем обратиться к нему через точку напрямую, как к стандартному реквизиту объекта. В этом случае данные необходимо извлечь из табличной части ДополнительныеРеквизиты с помощью запроса.

Разберем по шагам реализацию скрипта автозаполнения:


// 1. Инициализация запроса к табличной части дополнительных реквизитов
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ВнутренниеДокументыДополнительныеРеквизиты.Значение КАК Значение
    |ИЗ
    |	Справочник.ВнутренниеДокументы.ДополнительныеРеквизиты КАК ВнутренниеДокументыДополнительныеРеквизиты
    |ГДЕ
    |	ВнутренниеДокументыДополнительныеРеквизиты.Ссылка = &Ссылка
    |	И ВнутренниеДокументыДополнительныеРеквизиты.Свойство = &Свойство";

// 2. Установка параметров запроса
// Важно передавать точное наименование свойства из Плана видов характеристик
СвойствоОбъекта = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Кількість тонн (АктБФ)");

Запрос.УстановитьПараметр("Свойство", СвойствоОбъекта);
Запрос.УстановитьПараметр("Ссылка", ФактическийВладелецФайла);

// 3. Выполнение запроса и обработка результата
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Если Выборка.Следующий() Тогда
    ЧисловоеЗначение = Выборка.Значение;
    
    // Преобразуем число в строку прописью с указанием тонн
    РезультатОбработки = ЧислоПрописью(
        ЧисловоеЗначение, 
        "L=ru_RU; ДП=Ложь", 
        "тонна, тонны, тонн, ж, кг, кг, кг, м, 3"
    );
Иначе
    РезультатОбработки = "";
КонецЕсли;

Важные практические рекомендации и нюансы отладки

  1. Контекст владельца файла: В зависимости от версии конфигурации и места выполнения обработчика ссылка на документ может передаваться через переменные ФактическийВладелецФайла, ВладелецФайла или Файл.ВладелецФайла. Если запрос возвращает пустой результат, проверьте в отладчике фактический тип и заполненность этой переменной.
  2. Поиск свойств: Метод НайтиПоНаименованию ищет реквизит по строке. Убедитесь, что наименование свойства совпадает символ в символ с наименованием в справочнике/плане видов характеристик (включая скобки и пробелы). В типовых конфигурациях на БСП также можно использовать методы общего модуля УправлениеСвойствами.
  3. Отладка в режиме «1С:Предприятие»: Для проверки корректности формирования текста запроса и получаемых значений используйте внешнюю обработку «Консоль запросов». Это позволит быстро проверить условия отбора без постоянного перезапуска формирования файла шаблона.
  4. Безопасный режим: Если база работает в распределенном режиме или в сервисе с профилями безопасности, убедитесь, что выполнение произвольного кода в правилах автозаполнения разрешено правами доступа и настройками конфигурации.
← На главную