При разработке или доработке печатных форм в среде 1С:Предприятие часто возникает необходимость вывода денежных сумм прописью. Однако при попытке передать значение, полученное из запроса, в специализированные функции форматирования, разработчики сталкиваются с критической ошибкой: Преобразование значения к типу Число не может быть выполнено. Давайте детально разберем, почему это происходит и как правильно реализовать вывод суммы прописью.
Основная причина ошибки заключается в том, что переменная, которую вы пытаетесь превратить в «пропись», не является числом. В 1С функции работы с числами очень требовательны к типу данных. Ошибка возникает в следующих случаях:
ТаблицуЗначений или РезультатЗапроса, вместо конкретного поля из строки.NULL (например, если в запросе поле не заполнено и используется левое соединение).Строка, содержащая цифры, и платформа не может автоматически привести её к числу.Чтобы избежать ошибок, важно понимать, что результат запроса — это набор строк. Работать с данными нужно внутри цикла Для Каждого. Рассмотрим, как правильно обращаться к полю СуммаЗаРаботу, полученному в запросе:
// Предположим, РезультатыЗапроса — это результат выполнения запроса
Для Каждого СтрокаДанных Из РезультатыЗапроса Цикл
// Обращаемся к полю через имя строки, полученной в цикле
СуммаЧислом = СтрокаДанных.СуммаЗаРаботу;
// Проверяем, что число существует и не является пустым
Если ЗначениеЗаполнено(СуммаЧислом) Тогда
// Дальнейшая обработка
КонецЕсли;
КонецЦикла;
Прежде чем передавать значение в функцию СформироватьСуммуПрописью или ЧислоПрописью, необходимо принудительно преобразовать данные к типу Число. Для этого используется встроенная функция Число(). Если вы подозреваете, что в сумме могут быть «лишние» символы или формат строки, используйте конструкцию Окр() для округления до двух знаков после запятой:
// Приведение значения к числу с последующим округлением
ЧисловоеЗначение = Окр(Число(СуммаЧислом), 2);
После того как мы убедились, что переменная является числом, можно использовать один из двух подходов. Первый — через штатные методы конфигурации (например, РаботаСКурсамиВалют.СформироватьСуммуПрописью), второй — через универсальную функцию ЧислоПрописью, которая доступна во всех конфигурациях 1С.
Рассмотрим универсальный способ:
// Настройка параметров прописи: валюта и дробная часть
ПараметрыПрописи = "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2";
СуммаПрописью = ЧислоПрописью(ЧисловоеЗначение, "ВЛ=руб.коп.", ПараметрыПрописи);
// Вставка полученного значения в структуру данных для печатной формы
ДанныеПечати.Вставить("СуммаПрописью", СуммаПрописью);
Если ошибка сохраняется, выполните следующие действия для локализации проблемы:
СуммаЗаРаботу действительно существует в объекте ДанныеПечати.NULL: Если сумма может быть не заполнена в договоре, в запросе используйте функцию ЕСТЬNULL(ДоговорРаботыУслуги.Сумма, 0) КАК СуммаЗаРаботу. Это гарантированно избавит вас от проблем с отсутствующими значениями.Следуя этим простым шагам, вы сможете корректно выводить суммы прописью в печатных формах любой сложности, обеспечивая стабильную работу вашего кода в 1С:Предприятие.