Как исправить ошибку в печатной форме кассового ордера: сумма прописью округляется и теряются копейки?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

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

Такое расхождение недопустимо для бухгалтерского учета. В этой статье мы подробно разберем технические причины возникновения такой ошибки в платформе 1С:Предприятие и рассмотрим способы её устранения через Конфигуратор.

Почему возникает расхождение между цифрой и прописью?

Прежде чем приступать к правкам кода, давайте поймем логику работы программы. Система не «ошибается» в привычном смысле, она выполняет заложенный алгоритм преобразования числа в строку.

Проблема кроется в использовании встроенной функции языка 1С ЧислоПрописью или её оберток в типовых конфигурациях. Если этой функции не передать правильные параметры форматирования, она может вести себя следующим образом:

  1. Округление: Если форматная строка не настроена на вывод дробной части, система воспринимает задачу как «вывести целое число». В этом случае 251.95 округляется до ближайшего целого — 252.
  2. Отбрасывание дробной части: В некоторых случаях в коде может использоваться функция Цел() перед преобразованием, что просто удаляет копейки, оставляя 251. Но в описанном случае происходит именно округление, что указывает на настройки форматирования.

Поиск проблемного участка в Конфигураторе

Для исправления ситуации нам потребуется доступ к Конфигуратору. Поскольку печатные формы формируются программно, нам необходимо найти место, где происходит подготовка данных для макета.

Обычно код формирования печатных форм ПКО и РКО находится в Модуле менеджера документа или в Модуле объекта (в старых конфигурациях). Также в современных конфигурациях (например, 1С:Бухгалтерия 3.0, ERP) логика печати может быть вынесена в общие модули, связанные с печатью.

Давайте выполним поиск по следующим ключевым словам в модуле документа:

  1. ЧислоПрописью — стандартная функция платформы.
  2. СуммаПрописью — часто используемая функция общего модуля.
  3. РаботаСКартами.ПолучитьСуммуПрописью — встречается в механизмах эквайринга.

Настройка функции ЧислоПрописью

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

Синтаксис:


ЧислоПрописью(Число, ФорматнаяСтрока, ПараметрыПредметаИсчисления)

Где:

Анализ ошибки в параметрах

Если у вас выводится «Двести пятьдесят два рубля» для суммы 251.95, скорее всего, в параметре ФорматнаяСтрока отсутствует указание на вывод дробной части, либо параметр НП (Надо ли печатать дробную часть) установлен в Ложь.

Решение проблемы: корректировка кода

Чтобы сумма выводилась как «Двести пятьдесят один рубль 95 копеек», нам необходимо изменить вызов функции. Рассмотрим правильный вариант кода.

Мы должны явно указать в форматной строке параметр ДП=Истина (или DP=True), что означает «Дробную часть Показываем».

Пример правильного кода:


// Переменная СуммаДокумента содержит значение 251.95

СтрокаСуммы = ЧислоПрописью(СуммаДокумента, 
    "L=ru_RU; DP=True", 
    "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");

Давайте разберем параметры третьей части (ПараметрыПредметаИсчисления) в этом примере:

Если в вашем коде используется вызов функции из Общего Модуля, например:


ОбластьМакета.Параметры.СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаДокумента, ВалютаДокумента);

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

Альтернативный вариант: настройки макета

Иногда, особенно в старых или сильно кастомизированных конфигурациях, форматирование задается не в коде, а непосредственно в свойствах ячейки макета (файл с расширением .mxl, хранящийся внутри объекта конфигурации в ветке «Макеты»).

Если вы не нашли формирования строки в коде, давайте проверим макет:

  1. Откройте макет печатной формы (обычно он называется ПФ_MXL_КО2, КО1 или просто Макет).
  2. Найдите ячейку, в которую выводится сумма прописью.
  3. Нажмите на неё правой кнопкой мыши и выберите Свойства.
  4. В палитре свойств найдите поле Формат.
  5. Если там установлен какой-либо формат, нажмите на кнопку с тремя точками («...») и проверьте настройки.
  6. Убедитесь, что там не стоит принудительного округления или скрытия дробной части.

Однако, стоит отметить, что для вывода суммы прописью свойства ячейки используются редко, так как формат 1С в свойствах ячейки обычно управляет числовым представлением (например, «1 234,56»), а не текстовым. Поэтому вариант с правкой программного кода (Модуль менеджера) является основным.

Итоговый алгоритм действий

Подводя итог, чтобы исправить ошибку «252 рубля» вместо «251 рубль 95 копеек», выполним следующие действия:

  1. Открываем Конфигуратор и находим нужный документ (Приходный или Расходный кассовый ордер).
  2. Переходим в модуль, отвечающий за печать (обычно Модуль менеджера).
  3. Ищем функцию печати и строку, где заполняется параметр суммы прописью.
  4. Проверяем, используется ли там функция ЧислоПрописью.
  5. Меняем параметры функции так, чтобы форматная строка содержала DP=True (вывод дробной части), а параметры предмета исчисления корректно описывали рубли и копейки.
  6. Сохраняем конфигурацию и проверяем печатную форму в режиме Предприятия.

После этих действий система перестанет округлять сумму до целых рублей и будет корректно отображать копейки в печатных формах.

← На главную