При подготовке шаблонов договоров в 1С:Документооборот часто возникает задача автоматического заполнения полей, связанных со сроками. Обычного вывода числа (например, «5») недостаточно — юридические стандарты требуют дублирования суммы или срока прописью, а в некоторых случаях и склонения числительного (например, «не позднее шестого дня»).
В этой статье мы подробно разберем, как с помощью скриптов автозаполнения реализовать вывод количества дней в нужном формате, проанализируем работу встроенных функций платформы и выясним, как справляться со сложными случаями склонения.
Для преобразования числового значения в текстовое в платформе 1С предусмотрена стандартная функция ЧислоПрописью. Рассмотрим ее синтаксис и параметры, которые критически важны для корректного вывода «дней».
Синтаксис функции выглядит так:
ЧислоПрописью(Число, ФорматнаяСтрока, ПараметрыПредметаИсчисления)
Рассмотрим по шагам, как настроить параметры для вывода количества дней:
Число()."ДП=Ложь" указывает системе, что первую букву не нужно делать заглавной."день, дня, дней, м, , , , , 0".Пример кода в скрипте автозаполнения:
КоличествоДней = 5; // Здесь должен быть ваш реквизит
ФормСтрока = "Л = ru_RU; ДП = Ложь";
ПарПредмета = "день, дня, дней, м, , , , , 0";
РезультатОбработки = ЧислоПрописью(КоличествоДней, ФормСтрока, ПарПредмета);
// Результат: "пять дней"
В договорах часто требуется объединить само число и его текстовую расшифровку в скобках. Проанализируем ситуацию: нам нужно взять строковое представление числа, добавить скобку, вызвать функцию прописи (желательно с большой буквы или наоборот со строчной) и закрыть скобку.
Для реализации такого формата используем следующий алгоритм:
ЧислоДней = 5; // Пример значения
Пропись = ЧислоПрописью(ЧислоДней, "ДП=Ложь", ",,,,,,,,0");
РезультатОбработки = Строка(ЧислоДней) + " (" + НРег(Пропись) + ")";
// Результат: "5 (пять)"
Здесь функция НРег используется для того, чтобы пропись всегда начиналась с маленькой буквы, независимо от настроек форматной строки, что хорошо подходит для текста внутри скобок.
Если задача стоит не просто вывести пропись, а корректно согласовать число с существительным в зависимости от количества (так называемая плюрализация), в 1С:Документооборот (особенно версий 2.1 и 3.0) можно использовать функции БСП (Библиотеки стандартных подсистем) или функцию СтрокаСЧислом.
Рассмотрим пример с использованием СтрокаСЧислом. Эта функция позволяет задать шаблоны для разных количественных состояний:
ДнейОсталось = 7;
РезультатОбработки = СтрокаСЧислом(";%1 день;;%1 дня;%1 дней;%1 дня",
ДнейОсталось,
ВидЧисловогоЗначения.Количественное,
"L=ru");
// Результат для 7: "7 дней"
Если в вашей конфигурации доступна БСП, рекомендуется использовать программный интерфейс общих модулей, например:
ФизическиеЛицаВызовСервера.СклонятьЧислительное(Колво, "день", "дня", "дней", "м")
Важный нюанс, который часто вызывает трудности у разработчиков: стандартная функция ЧислоПрописью работает только с количественными числительными (один, два, три). Она не умеет штатно преобразовывать число в порядковое (первый, второй, шестой).
Если вам необходимо вывести в шаблоне фразу «не позднее шестого календарного дня», рассмотрим варианты решения:
// Пример логики (зависит от настроек вашей базы)
РезультатОбработки = РаботаСМорфером.Просклонять("шесть", "Родительный");
При написании кода непосредственно в настройках заполнения файлов 1С:Документооборот, следует придерживаться нескольких правил, чтобы избежать ошибок при формировании документов:
Проверка на пустое значение: Всегда проверяйте, заполнено ли исходное число. Если передать в ЧислоПрописью пустое значение или Неопределено, скрипт может вызвать ошибку при формировании файла.
Если ЗначениеЗаполнено(Файл.ВладелецФайла.СрокИсполненияДней) Тогда
ЧислоДней = Файл.ВладелецФайла.СрокИсполненияДней;
// Код преобразования...
Иначе
РезультатОбработки = "";
КонецЕсли;
Контекст исполнения: Помните, что скрипты автозаполнения выполняются на сервере. Убедитесь, что все используемые вами функции и общие модули доступны в серверном контексте.
Таким образом, мы проанализировали основные инструменты 1С для работы с текстом и числами. Комбинируя стандартную функцию ЧислоПрописью с функциями форматирования строк, можно решить большинство задач по оформлению юридически значимых документов в системе электронного документооборота.