К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как вывести сумму в 1С: практическое руководство

Как вывести сумму в 1С: функция СуммаПрописью, форматирование чисел, итоги по документам и вывод суммы в печатных формах и отчётах. Пошаговые инструкции.

Задача «вывести сумму» в 1С возникает в нескольких разных ситуациях: нужно показать итог по документу, вывести сумму прописью в печатной форме, отформатировать число в отчёте или получить итоговое значение запросом. У каждого сценария свой инструмент — от встроенной функции ЧислоПрописью до конструкции ИТОГИ в языке запросов.

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

Определяем, какая именно задача стоит

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

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

Вывод суммы прописью функцией ЧислоПрописью

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

СуммаДокумента = 15240.50;

ФорматнаяСтрока = "Л=ru_RU; ДП=Ложь";

ПараметрыПрописи = "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2";

СуммаПрописью = ЧислоПрописью(СуммаДокумента, ФорматнаяСтрока, ПараметрыПрописи);

// Результат: "Пятнадцать тысяч двести сорок рублей 50 копеек"

Параметр ДП=Ложь означает, что дробная часть выводится числом (50 копеек), а не прописью. Если поставить ДП=Истина, копейки тоже будут написаны словами. Род и число в параметрах предмета исчисления («м» — мужской, «ж» — женский) влияют на склонение числительных: ошибка в этих параметрах даёт фразы вида «одна рубль».

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

bsl
СуммаПрописью = ЧислоПрописью(Сумма, "Л=ru_RU; ДП=Ложь", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");

Форматирование суммы числом: функция Формат

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

СтрокаСуммы = Формат(15240.5, "ЧДЦ=2; ЧРГ=' '; ЧН=0,00");

// Результат: "15 240,50"

Ключевые параметры: ЧДЦ — число десятичных знаков, ЧРГ — разделитель групп разрядов, ЧН — представление нуля. Если не задать ЧН, нулевая сумма выведется пустой строкой, что в печатных формах выглядит как ошибка. Для отрицательных значений полезен параметр ЧО, управляющий отображением знака.

В макетах табличных документов формат можно задать без кода: выделите ячейку, откройте палитру свойств и укажите формат в свойстве «Формат». Это удобно, когда сумма выводится в макет напрямую параметром и не требует дополнительной обработки.

Итог по табличной части документа

Чтобы получить сумму по табличной части документа (например, итог по колонке «Сумма» в товарах), используйте метод Итог табличной части:

ИтогоПоДокументу = ДокументОбъект.Товары.Итог("Сумма");

Метод работает и на клиенте, и на сервере, поскольку обращается к данным уже загруженного объекта, а не к базе. В форме документа итог часто выводят в поле надписи, обновляя его в обработчиках ПриИзменении полей табличной части и в ПослеУдаления. Не забудьте пересчитывать итог при изменении количества и цены, иначе пользователь увидит устаревшее значение.

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

Типичные ошибки
01
Суммирование колонки вручную в цикле вместо метода Итог — медленнее и легче допустить ошибку при фильтрации строк
02
Вывод суммы без параметра ЧН — нулевое значение отображается пустой строкой и выглядит как сбой
03
Неверный род валюты в ЧислоПрописью — получаются фразы вида «одна рубль»
04
Расчёт итога на клиенте запросом к базе — в тонком клиенте это приведёт к ошибке вызова сервера

Вывод суммы в запросах и отчётах

Когда сумму нужно получить из базы по множеству документов — например, обороты по контрагенту за период — используйте язык запросов. Итог по группировке получают агрегатной функцией СУММА, а общий итог — секцией ИТОГИ.

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Продажи.Контрагент КАК Контрагент,

| СУММА(Продажи.СуммаОборот) КАК Сумма

|ИЗ

| РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи

|СГРУППИРОВАТЬ ПО

| Продажи.Контрагент

|ИТОГИ

| СУММА(Сумма) ПО ОБЩИЕ";

Общий итог выбирается из результата запроса через Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам) — первая запись с типом ОбщийИтог содержит итоговую сумму. В отчётах на СКД итоги считаются автоматически: достаточно добавить поле суммы в ресурсы и включить вывод общих итогов в настройках отчёта.

Для разовой проверки суммы без написания отчёта удобна консоль запросов или стандартный отчёт «Универсальный отчёт» в типовых конфигурациях. Это безопасный способ, не требующий изменения конфигурации.

Порядок действий: сумма прописью в печатной форме
  1. 1
    Откройте модуль менеджера или объекта документа, где формируется печатная форма
  2. 2
    Найдите место, где заполняются параметры макета (Параметры.ИмяПараметра)
  3. 3
    Вычислите итоговую сумму: Товары.Итог("Сумма") или готовая процедура пересчёта
  4. 4
    Преобразуйте сумму через ЧислоПрописью с параметрами валюты
  5. 5
    Передайте результат в параметр макета и выведите область
  6. 6
    Сформируйте печатную форму на тестовом документе и проверьте склонение и копейки

Вывод суммы в печатной форме

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

ОбластьМакета = Макет.ПолучитьОбласть("Итого");

ОбластьМакета.Параметры.СуммаПрописью =

ЧислоПрописью(ИтогоПоДокументу, "Л=ru_RU; ДП=Ложь",

"рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");

ТабличныйДокумент.Вывести(ОбластьМакета);

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

Проверка результата и типичные ограничения

После реализации проверьте вывод на граничных значениях: нулевая сумма, сумма без копеек, сумма с одной копейкой, крупное значение с миллионами, отрицательное значение (сторно). Функция ЧислоПрописью корректно обрабатывает большие числа, но параметры предмета исчисления должны быть заданы правильно, иначе склонение «сломается» именно на редких сочетаниях вроде «одна тысяча».

Учитывайте ограничение точности: в 1С числа хранятся с фиксированной точностью, и при сложении множества сумм с копейками возможны расхождения в копейках из-за округления промежуточных расчётов. Округляйте результат до двух знаков функцией Окр перед выводом и сравнением.

Контрольные точки

Как проверить результат

Сумма прописью на тестовом документе
Норма

Числительные склоняются правильно, копейки указаны числом

Тревожный признак

Фразы вида «одна рубль», пропущенные копейки

Нулевая сумма в печатной форме
Норма

Выводится «0,00» или «Ноль рублей 00 копеек»

Тревожный признак

Пустая строка вместо суммы

Итог по документу
Норма

Совпадает с суммой по строкам табличной части

Тревожный признак

Расхождение на копейки, устаревшее значение после правки строк

FAQ

Как вывести сумму прописью на украинском или английском языке?

В форматной строке функции ЧислоПрописью измените параметр локализации: «Л=uk_UA» для украинского, «Л=en_US» для английского. Параметры предмета исчисления также нужно задать на соответствующем языке с правильными формами склонения.

Почему ЧислоПрописью выводит сумму без копеек?

Проверьте последний параметр в строке предмета исчисления — он задаёт число разрядов дробной части. Если он равен 0, копейки не выводятся. Укажите 2 и убедитесь, что перечислены формы слова «копейка».

Как вывести итог по колонке динамического списка?

Динамический список не имеет встроенного метода Итог. Получите итог отдельным запросом с теми же отборами и периодом или используйте элемент формы «Итоги» для таблицы, если источник — таблица значений, а не динамический список.

Чем отличается Формат от ПредставлениеЧисла?

Формат — универсальная функция с гибкой форматной строкой для любых типов. ПредставлениеЧисла — специализированная функция для чисел, но её возможности уже. На практике почти всегда используют Формат с параметрами ЧДЦ, ЧРГ и ЧН.

Как безопасно изменить типовую печатную форму?

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

Почему сумма в отчёте расходится с суммой документов на копейки?

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

Итог

Что важно запомнить

Сумма прописью выводится функцией ЧислоПрописью с правильными параметрами валюты, форматирование числа — функцией Формат с ЧДЦ и ЧН, итог по табличной части — методом Итог, а итоги по базе — запросом с СУММА и ИТОГИ. Проверяйте нулевые значения, склонение и копейки, а типовые модули меняйте через расширения.