Как в 1С вывести число прописью с правильным склонением номенклатуры?

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

При формировании печатных форм документов (договоров, актов, накладных) часто возникает задача вывести количество товара или услуг прописью, причем так, чтобы связанное с ним существительное (номенклатура или единица измерения) было согласовано в правильном падеже и числе. Например, для числа 2 система должна выводить "два шкафа", а для 10 — "десять шкафов". Подобная задача часто ставит в тупик начинающих разработчиков, которые пытаются решить её громоздкими конструкциями Если... Тогда... ИначеЕсли.

В этой статье мы подробно разберем четыре различных способа решения этой задачи: от классического использования встроенной функции платформы ЧислоПрописью до современных интеллектуальных методов платформы 8.3.14+ и механизмов Библиотеки стандартных подсистем (БСП).

Способ 1. Использование встроенной функции ЧислоПрописью()

Самый простой, надежный и проверенный временем способ — использовать встроенную функцию платформы ЧислоПрописью(). Платформа 1С:Предприятие обладает мощным встроенным механизмом локализации и склонения чисел. Главное — правильно передать ей параметры предмета исчисления в третьем параметре функции.

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

  1. Форма для числа 1 (именительный падеж, единственное число) — например, "шкаф", "коробка".
  2. Форма для числа 2 (родительный падеж, единственное число) — например, "шкафа", "коробки".
  3. Форма для числа 5 (родительный падеж, множественное число) — например, "шкафов", "коробок".
  4. Род существительного — "м" (мужской), "ж" (женский) или "с" (средний). Это критически важно, чтобы числительные "один/одна" и "два/две" принимали верную форму.
  5. Параметры дробной части (аналогично первому, второму и третьему параметрам для целой части, если требуется выводить дробную часть словами).
  6. Разрядность дробной части (число знаков после запятой).

Разберем конкретный пример кода для мужского рода (номенклатура "шкаф"):


Количество = 2;
ФорматПредмета = "шкаф, шкафа, шкафов, м, , , , , 0";
Результат = ЧислоПрописью(Количество, "Л=ru_RU", ФорматПредмета);
// Результат: "Два шкафа"

Количество = 10;
Результат = ЧислоПрописью(Количество, "Л=ru_RU", ФорматПредмета);
// Результат: "Десять шкафов"

А теперь посмотрим, как это будет работать для женского рода, например, для единицы измерения "коробка":


Количество = 21;
ФорматПредмета = "коробка, коробки, коробок, ж, , , , , 0";
Результат = ЧислоПрописью(Количество, "Л=ru_RU", ФорматПредмета);
// Результат: "Двадцать одна коробка"

Для того чтобы сделать этот механизм динамическим, параметры склонения целесообразно хранить непосредственно в справочнике КлассификаторЕдиницИзмерения. Добавив туда соответствующие реквизиты (НаименованиеОдин, НаименованиеДва, НаименованиеПять, Род), мы сможем формировать форматную строку "на лету" для любой номенклатурной позиции.

Способ 2. Современный метод платформы ПолучитьСклоненияСтрокиПоЧислу()

Начиная с версии платформы 8.3.14, разработчикам стал доступен встроенный системный метод ПолучитьСклоненияСтрокиПоЧислу(). Этот метод позволяет полностью отказаться от ручного прописывания окончаний и хранения форм слов в базе данных.

Платформа автоматически обращается к системному словарю склонений и формирует грамматически верное словосочетание. Посмотрим, как использовать этот метод на практике:


// Для числа 2
Результат2 = ПолучитьСклоненияСтрокиПоЧислу("шкаф", 2, , "ЧС=Количественное", "ПД=Именительный; ПЧ=ЧислоПрописью")[0];
// Результат: "два шкафа"

// Для числа 10
Результат10 = ПолучитьСклоненияСтрокиПоЧислу("шкаф", 10, , "ЧС=Количественное", "ПД=Именительный; ПЧ=ЧислоПрописью")[0];
// Результат: "десять шкафов"

Проанализируем ключевые параметры этого метода:

Данный метод работает "из коробки", поддерживает сложные словосочетания (например, "новый шкаф" превратится в "два новых шкафа") и избавляет программиста от рутинной работы со словарями.

Способ 3. Склонение с использованием механизмов БСП

Если вы работаете в типовой конфигурации 1С (например, 1С:ERP, 1С:Управление торговлей или 1С:Бухгалтерия), то в вашем распоряжении есть готовые функции Библиотеки стандартных подсистем (БСП). В современных версиях БСП для корректного вывода чисел с существительными применяется мультиязычный подход.

Для этих целей используется функция СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(). Она работает на основе шаблонов ICU (International Components for Unicode). Посмотрим на пример реализации:


Шаблон = ";%1 шкаф;;%1 шкафа;%1 шкафов;%1 шкафа";
Количество = 5;
Результат = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(Шаблон, Количество);
// Результат: "5 шкафов"

Если же вам требуется получить исключительно текстовое представление числа прописью вместе с единицей измерения, в БСП часто используется интеграция со встроенным сервисом склонения представлений объектов. Это позволяет централизованно управлять падежами и склонениями в рамках всей информационной системы.

Способ 4. Обходной путь (Нормализация структуры предложения)

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

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

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

Почему это важно: поучительная история о "пяти кочергах"

Для демонстрации того, насколько коварным может быть русский язык при склонении существительных с числительными, в сообществе разработчиков 1С часто вспоминают классический рассказ Михаила Зощенко "Кочерга". В нем директор учреждения пытался составить требование на получение пяти инструментов и столкнулся с непреодолимым препятствием: как правильно написать — "пять кочерг", "пять кочерёг" или "пять кочерыжек"?

В итоге, чтобы обойти сложнейшее лингвистическое препятствие, юридический отдел составил документ хитрым образом: "До сего времени наше учреждение, имея шесть печей, обходилось всего лишь одной кочергой. В силу этого просьба выдать еще пять штук, для того чтобы на каждую печку имелась бы одна самостоятельная кочерга...".

Использование современных встроенных функций 1С, таких как ПолучитьСклоненияСтрокиПоЧислу() или правильно настроенных параметров в ЧислоПрописью(), позволяет современному программисту не повторять ошибок героев Зощенко и решать подобные задачи за считанные минуты.

← На главную