Как использовать встроенную функцию склонения словосочетаний с числительными в 1С

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

Долгое время разработчикам на платформе 1С:Предприятие приходилось прибегать к использованию внешних компонент, веб-сервисов (таких как «Морфер») или писать собственные громоздкие алгоритмы («велосипеды») для решения тривиальной задачи: корректного склонения существительных и прилагательных в зависимости от числа. Начиная с версии 8.3.15, в платформу был интегрирован мощный инструмент — функция ПолучитьСклонениеСтрокиПоЧислу. В этой статье мы подробно разберем, как работает этот механизм, какие параметры он принимает и как правильно настраивать форматные строки для получения идеального результата в печатных формах и отчетах.

Зачем отказываться от внешних сервисов?

Ранее для склонения ФИО или названий номенклатуры программисты часто использовали специализированные библиотеки. Однако такой подход имел ряд минусов:

  1. Зависимость от интернета: Веб-сервисы могут быть недоступны, что ломает формирование документов.
  2. Скорость работы: Вызов внешней компоненты или HTTP-запрос всегда медленнее, чем выполнение встроенного метода платформы.
  3. Сложность поддержки: Внешние библиотеки нужно обновлять и регистрировать на сервере.

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

Синтаксис и параметры функции

Рассмотрим структуру функции ПолучитьСклонениеСтрокиПоЧислу. Она доступна как на клиенте, так и на сервере.


Результат = ПолучитьСклонениеСтрокиПоЧислу(ИсходнаяФраза, Число, ПараметрыСклонения, ФорматнаяСтрока);

Разберем каждый параметр подробнее:

Работа с форматной строкой и кодами ЧС, ПД, ПЧ

Особое внимание стоит уделить параметру ФорматнаяСтрока. В обсуждениях на форумах часто возникают вопросы по поводу сокращений, которые кажутся неочевидными. Разберем основные коды:

  1. ЧС (Число Строкой): Позволяет вывести число прописью. Например, вместо "21" будет выведено "двадцать один".
  2. ПД (Представление Дательного/иного падежа): Это сама просклоняемая фраза.
  3. ПЧ (Представление Числа): Выводит число цифрами.
  4. ДП (Дробная Часть): Настройка отображения для дробных чисел.

Проанализируем практический пример формирования строки для отчета:


// Нам нужно получить строку: "пяти новых столов"
Результат = ПолучитьСклонениеСтрокиПоЧислу("новый стол", 5, "ПД=Родительный", "ЧС ПД");
// Результат: "пяти новых столов"

Учет рода и одушевленности

Система должна понимать, в каком роде склонять числительные «один» и «два». По умолчанию платформа пытается определить род автоматически, но для сложных случаев (например, аббревиатур или специфических товаров) рекомендуется указывать род явно в параметрах склонения. Это делается с помощью параметров ПЛ=Мужской, ПЛ=Женский или ПЛ=Средний.

Рассмотрим ситуацию с женским родом:


// Неправильно без указания рода:
Стр = ПолучитьСклонениеСтрокиПоЧислу("красивая машина", 2, , "ЧС ПД");
// Может вернуть: "два красивых машины" (если не распознает род)

// Правильно:
Стр = ПолучитьСклонениеСтрокиПоЧислу("красивая машина", 2, "ПЛ=Женский", "ЧС ПД");
// Результат: "две красивые машины"

Решение проблемы сложных наименований

Выясним причину, почему иногда автоматическое склонение может ошибаться. Алгоритмы 1С базируются на правилах лингвистики, но в русском языке огромное количество исключений. Как отмечали пользователи форума, даже в официальных примерах встречались неточности (например, склонение составных имен типа "Жан-Поль").

Если вы столкнулись с тем, что специфический термин склоняется неверно, можно использовать комбинацию функций или предварительную обработку строки. Однако в 95% случаев для стандартной номенклатуры и простых ФИО встроенный механизм справляется отлично.

Пример использования в печатной форме

Представим, что нам нужно вывести в подвале накладной общее количество упакованного товара. Выполним это по шагам:


КоличествоТовара = 21;
НаименованиеЕдиницы = "коробка";
Параметры = "ПЛ=Женский"; // Коробка - она моя
Формат = "ПЧ ПД"; // Выведем число цифрами и название в нужном падеже

ИтоговаяСтрока = ПолучитьСклонениеСтрокиПоЧислу(НаименованиеЕдиницы, КоличествоТовара, Параметры, Формат);
// На выходе получим: "21 коробка"

КоличествоТовара = 24;
ИтоговаяСтрока = ПолучитьСклонениеСтрокиПоЧислу(НаименованиеЕдиницы, КоличествоТовара, Параметры, Формат);
// На выходе получим: "24 коробки"

Сравнение с регулярными выражениями (RegExp)

В ходе обсуждения данного функционала многие разработчики задавались вопросом: «А не лучше ли было добавить в платформу поддержку регулярных выражений?». Специалисты 1С поясняют, что RegExp — это универсальный инструмент, который при неправильном использовании может привести к критическим ошибкам и падению производительности («выстрелить в ногу»). В то время как ПолучитьСклонениеСтрокиПоЧислу — это узкоспециализированный, оптимизированный и безопасный метод, предназначенный для решения конкретной бизнес-задачи.

Подведем итог: использование встроенного механизма склонения — это современный стандарт разработки на 1С. Это позволяет сократить объем кода, избавиться от внешних зависимостей и сделать логику программы более прозрачной. Мы рекомендуем пересмотреть свои старые обработки и отчеты, где используются самописные функции для склонения «рублей», «штук» или «человек», и заменить их на стандартную функцию платформы.

← На главную