При работе в системе 1С:Документооборот 8 КОРП часто возникает необходимость автоматизировать заполнение печатных форм и договоров. Одной из типичных задач является вывод числовых значений (например, срока действия договора или количества дней отпуска) в формате "5 (пять) дней". В этой статье мы подробно разберем, как реализовать такую логику без изменения конфигурации, используя встроенные механизмы скриптов и функций платформы 1С.
Рассмотрим ситуацию: у нас есть готовый шаблон документа MS Word с полями для автозаполнения. Нам нужно, чтобы при формировании документа по шаблону программа сама брала число из реквизитов и дописывала рядом его текстовое представление в скобках. Для этого в 1С:Документооборот предусмотрен мощный механизм "Настройка заполнения файлов".
Для решения задачи мы можем пойти двумя путями:
Поскольку нам нужно специфическое форматирование "число + пропись", вариант со скриптом является наиболее гибким и предпочтительным.
Прежде всего, подготовим сам файл шаблона. В современных версиях 1С:Документооборот рекомендуется использовать текстовые теги. Проанализируем, где именно в тексте должно появиться значение. Вместо пустых мест или нижних подчеркиваний вставим конструкцию вида {{СрокДнейПрописью}}. Программа при обработке найдет этот тег и заменит его на результат выполнения нашего скрипта.
Теперь перейдем в интерфейс 1С:Документооборот и выполним следующие действия:
СрокДнейПрописью.Рассмотрим подробнее код скрипта. Основным инструментом для нас будет глобальная функция 1С ЧислоПрописью. Проанализируем синтаксис этой функции:
ЧислоПрописью(Число, ПараметрыПредметаИсчисления, ФорматнаяСтрока)
Для корректного склонения слова "день" нам нужно правильно составить строку параметров предмета исчисления. Выясним, как она строится. Строка состоит из названий единиц измерения в разных падежах. Для дней это будет выглядеть так: "день, дня, дней, м, , , , , 0".
Разберем пример кода, который можно вставить в редактор скрипта в 1С:Документооборот:
// 1. Получаем значение из реквизита документа (владельца файла)
ЧислоДней = Файл.ВладелецФайла.СрокИсполнения;
// 2. Проверяем, заполнено ли число, чтобы избежать ошибок
Если ЧислоДней = 0 Или ЧислоДней = Неопределено Тогда
Результат = "___ (__________) дней";
Иначе
// 3. Формируем текстовое представление числа
ТекстЧислом = Формат(ЧислоДней, "ЧГ=0");
// 4. Формируем пропись с учетом морфологии (род, падежи)
// Параметры: "L=ru_RU" - локализация, далее правила для слова "день"
ТекстПрописью = ЧислоПрописью(ЧислоДней, "L=ru_RU", "день, дня, дней, м, , , , , 0");
// 5. Собираем итоговую строку
Результат = ТекстЧислом + " (" + ТекстПрописью + ")";
КонецЕсли;
Важно понимать, почему мы используем именно такие параметры в ЧислоПрописью. Функция ожидает 9 полей, разделенных запятыми:
Если нам нужно вывести просто слово "пять" без привязки к "дням", скрипт упрощается:
Число = 5;
Пропись = ЧислоПрописью(Число, "L=ru_RU", ", , , , , , , , 0");
// Результат будет: "Пять "
Проанализируем процесс проверки. В окне настройки скрипта в 1С:Документооборот есть кнопка "Проверить". При её нажатии система предложит выбрать конкретный документ-объект. Мы сможем сразу увидеть, какой текст сформировал наш код. Это очень удобно, так как не нужно каждый раз генерировать файл Word для поиска ошибок.
Обратите внимание: если вы используете версию КОРП, вы также можете использовать механизм "Вычисляемые поля" в схемах компоновки данных, но для простых шаблонов Word встроенные скрипты заполнения являются самым быстрым и надежным способом.
Если в вашей базе подключена Библиотека стандартных подсистем (БСП), вы можете использовать функции общих модулей. Например, в модуле РаботаСКурсамиВалют часто встречаются обертки над функцией ЧислоПрописью, которые позволяют более гибко работать с валютами и суммами. Однако для обычного подсчета дней стандартной функции платформы более чем достаточно.
Таким образом, мы выяснили, что для автоматизации заполнения шаблонов в 1С:Документооборот не требуется создание сложных внешних обработок. Достаточно базовых знаний встроенного языка 1С и умения работать с конструктором заполнения файлов.