Разработка и Конфигурация · 10 мин
Как вывести сумму в 1С: практическое руководство
Как вывести сумму в 1С: функция СуммаПрописью, форматирование чисел, итоги по документам и вывод суммы в печатных формах и отчётах. Пошаговые инструкции.
Задача «вывести сумму» в 1С возникает в нескольких разных ситуациях: нужно показать итог по документу, вывести сумму прописью в печатной форме, отформатировать число в отчёте или получить итоговое значение запросом. У каждого сценария свой инструмент — от встроенной функции ЧислоПрописью до конструкции ИТОГИ в языке запросов.
Ниже разобраны основные способы с конкретными примерами кода на встроенном языке 1С, указанием типичных ошибок и проверкой результата. Примеры ориентированы на платформу 1С:Предприятие 8.3 и типовые конфигурации, но большинство приёмов работает и в более ранних версиях платформы.
Определяем, какая именно задача стоит
Прежде чем писать код, уточните, где должна появиться сумма: в печатной форме документа, в отчёте, в сообщении пользователю или в поле формы. От этого зависит выбор механизма. Например, для печатной формы счёта обычно требуется сумма прописью, а для отчёта по продажам — итог с группировкой по периодам или контрагентам.
Также важно, где выполняется код: на клиенте или на сервере. Работа с данными информационной базы (запросы, итоги регистров) доступна только на сервере, а форматирование уже полученного числа можно выполнять где угодно. При доработке типовой конфигурации учитывайте, что часть функций вынесена в общие модули — например, в конфигурациях на БСП есть готовые функции формирования суммы прописью.
Вывод суммы прописью функцией ЧислоПрописью
Стандартный способ вывести сумму прописью — встроенная функция ЧислоПрописью. Она принимает число, форматную строку с параметрами локализации и строку параметров предмета исчисления (единицы и дробной части).
СуммаДокумента = 15240.50;
ФорматнаяСтрока = "Л=ru_RU; ДП=Ложь";
ПараметрыПрописи = "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2";
СуммаПрописью = ЧислоПрописью(СуммаДокумента, ФорматнаяСтрока, ПараметрыПрописи);
// Результат: "Пятнадцать тысяч двести сорок рублей 50 копеек"
Параметр ДП=Ложь означает, что дробная часть выводится числом (50 копеек), а не прописью. Если поставить ДП=Истина, копейки тоже будут написаны словами. Род и число в параметрах предмета исчисления («м» — мужской, «ж» — женский) влияют на склонение числительных: ошибка в этих параметрах даёт фразы вида «одна рубль».
В типовых конфигурациях на базе Библиотеки стандартных подсистем есть готовая функция РаботаСКурсамиВалют.СформироватьСуммуПрописью (в старших версиях — аналогичные методы), которая учитывает валюту документа. Перед написанием собственного варианта проверьте, нет ли в вашей конфигурации готового механизма — это сэкономит время и упростит обновление.
СуммаПрописью = ЧислоПрописью(Сумма, "Л=ru_RU; ДП=Ложь", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");Форматирование суммы числом: функция Формат
Если нужно вывести сумму числом с разделителями разрядов и фиксированным количеством знаков после запятой, используйте функцию Формат. Она принимает значение и форматную строку.
СтрокаСуммы = Формат(15240.5, "ЧДЦ=2; ЧРГ=' '; ЧН=0,00");
// Результат: "15 240,50"
Ключевые параметры: ЧДЦ — число десятичных знаков, ЧРГ — разделитель групп разрядов, ЧН — представление нуля. Если не задать ЧН, нулевая сумма выведется пустой строкой, что в печатных формах выглядит как ошибка. Для отрицательных значений полезен параметр ЧО, управляющий отображением знака.
В макетах табличных документов формат можно задать без кода: выделите ячейку, откройте палитру свойств и укажите формат в свойстве «Формат». Это удобно, когда сумма выводится в макет напрямую параметром и не требует дополнительной обработки.
Итог по табличной части документа
Чтобы получить сумму по табличной части документа (например, итог по колонке «Сумма» в товарах), используйте метод Итог табличной части:
ИтогоПоДокументу = ДокументОбъект.Товары.Итог("Сумма");
Метод работает и на клиенте, и на сервере, поскольку обращается к данным уже загруженного объекта, а не к базе. В форме документа итог часто выводят в поле надписи, обновляя его в обработчиках ПриИзменении полей табличной части и в ПослеУдаления. Не забудьте пересчитывать итог при изменении количества и цены, иначе пользователь увидит устаревшее значение.
Если нужен итог с учётом скидок, НДС или других расчётных колонок, лучше не суммировать вручную в цикле, а вызывать штатные процедуры пересчёта документа (в типовых это обычно процедуры вида РассчитатьСуммуДокумента в модуле объекта или общем модуле). Ручной пересчёт легко рассинхронизируется с логикой конфигурации.
Вывод суммы в запросах и отчётах
Когда сумму нужно получить из базы по множеству документов — например, обороты по контрагенту за период — используйте язык запросов. Итог по группировке получают агрегатной функцией СУММА, а общий итог — секцией ИТОГИ.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Продажи.Контрагент КАК Контрагент,
| СУММА(Продажи.СуммаОборот) КАК Сумма
|ИЗ
| РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи
|СГРУППИРОВАТЬ ПО
| Продажи.Контрагент
|ИТОГИ
| СУММА(Сумма) ПО ОБЩИЕ";
Общий итог выбирается из результата запроса через Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам) — первая запись с типом ОбщийИтог содержит итоговую сумму. В отчётах на СКД итоги считаются автоматически: достаточно добавить поле суммы в ресурсы и включить вывод общих итогов в настройках отчёта.
Для разовой проверки суммы без написания отчёта удобна консоль запросов или стандартный отчёт «Универсальный отчёт» в типовых конфигурациях. Это безопасный способ, не требующий изменения конфигурации.
- 1Откройте модуль менеджера или объекта документа, где формируется печатная форма
- 2Найдите место, где заполняются параметры макета (Параметры.ИмяПараметра)
- 3Вычислите итоговую сумму: Товары.Итог("Сумма") или готовая процедура пересчёта
- 4Преобразуйте сумму через ЧислоПрописью с параметрами валюты
- 5Передайте результат в параметр макета и выведите область
- 6Сформируйте печатную форму на тестовом документе и проверьте склонение и копейки
Вывод суммы в печатной форме
Типовой сценарий: в макете табличного документа есть параметр, например СуммаПрописью, а в коде формирования печатной формы этот параметр заполняется значением. Найдите процедуру печати (в модуле менеджера документа для типовых конфигураций), добавьте вычисление суммы и присвойте параметру макета.
ОбластьМакета = Макет.ПолучитьОбласть("Итого");
ОбластьМакета.Параметры.СуммаПрописью =
ЧислоПрописью(ИтогоПоДокументу, "Л=ru_RU; ДП=Ложь",
"рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
ТабличныйДокумент.Вывести(ОбластьМакета);
При доработке типовой печатной формы предпочтительнее использовать механизм внешних печатных форм или расширения конфигурации, а не прямое изменение модулей. Тогда обновление конфигурации не затрёт ваши изменения. Прямая правка типового модуля — частая причина проблем при обновлении.
Проверка результата и типичные ограничения
После реализации проверьте вывод на граничных значениях: нулевая сумма, сумма без копеек, сумма с одной копейкой, крупное значение с миллионами, отрицательное значение (сторно). Функция ЧислоПрописью корректно обрабатывает большие числа, но параметры предмета исчисления должны быть заданы правильно, иначе склонение «сломается» именно на редких сочетаниях вроде «одна тысяча».
Учитывайте ограничение точности: в 1С числа хранятся с фиксированной точностью, и при сложении множества сумм с копейками возможны расхождения в копейках из-за округления промежуточных расчётов. Округляйте результат до двух знаков функцией Окр перед выводом и сравнением.
Как проверить результат
Числительные склоняются правильно, копейки указаны числом
Фразы вида «одна рубль», пропущенные копейки
Выводится «0,00» или «Ноль рублей 00 копеек»
Пустая строка вместо суммы
Совпадает с суммой по строкам табличной части
Расхождение на копейки, устаревшее значение после правки строк
FAQ
Как вывести сумму прописью на украинском или английском языке?
В форматной строке функции ЧислоПрописью измените параметр локализации: «Л=uk_UA» для украинского, «Л=en_US» для английского. Параметры предмета исчисления также нужно задать на соответствующем языке с правильными формами склонения.
Почему ЧислоПрописью выводит сумму без копеек?
Проверьте последний параметр в строке предмета исчисления — он задаёт число разрядов дробной части. Если он равен 0, копейки не выводятся. Укажите 2 и убедитесь, что перечислены формы слова «копейка».
Как вывести итог по колонке динамического списка?
Динамический список не имеет встроенного метода Итог. Получите итог отдельным запросом с теми же отборами и периодом или используйте элемент формы «Итоги» для таблицы, если источник — таблица значений, а не динамический список.
Чем отличается Формат от ПредставлениеЧисла?
Формат — универсальная функция с гибкой форматной строкой для любых типов. ПредставлениеЧисла — специализированная функция для чисел, но её возможности уже. На практике почти всегда используют Формат с параметрами ЧДЦ, ЧРГ и ЧН.
Как безопасно изменить типовую печатную форму?
Используйте расширение конфигурации или механизм внешних печатных форм (в конфигурациях на БСП — справочник «Дополнительные отчеты и обработки»). Прямая правка типового модуля затрётся при обновлении и усложнит поддержку.
Почему сумма в отчёте расходится с суммой документов на копейки?
Обычно причина в округлении промежуточных расчётов в документах или в разных способах расчёта НДС. Сверьте методику расчёта в отчёте и документах и округляйте результат до двух знаков функцией Окр перед сравнением.
Что важно запомнить
Сумма прописью выводится функцией ЧислоПрописью с правильными параметрами валюты, форматирование числа — функцией Формат с ЧДЦ и ЧН, итог по табличной части — методом Итог, а итоги по базе — запросом с СУММА и ИТОГИ. Проверяйте нулевые значения, склонение и копейки, а типовые модули меняйте через расширения.