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

Документы и Печать · 12 мин

Как посчитать сумму по документу в 1С

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

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

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

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

Как 1С считает сумму документа автоматически

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

Общий итог документа обычно отображается в подвале табличной части или в отдельном поле «Всего» рядом с суммой НДС. Это значение не хранится как самостоятельный реквизит во всех конфигурациях: часто оно вычисляется на форме суммированием колонки. Поэтому при выгрузке данных или построении отчёта надёжнее считать итог заново, а не искать готовое поле.

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

Как посчитать сумму в интерфейсе без программирования

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

Для быстрой проверки суммы выделенных строк выделите нужные строки табличной части (через Ctrl или Shift) и посмотрите итог по выделению — в ряде конфигураций он показывается в строке состояния. Если такой возможности нет, выделенные строки можно скопировать в табличный документ или Excel и просуммировать там, но это крайняя мера.

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

Проверка итога документа в интерфейсе
  1. 1
    Откройте документ и убедитесь, что табличная часть заполнена полностью, без пустых строк с нулевыми суммами
  2. 2
    Проверьте валюту документа и ставки НДС в строках — они влияют на итог
  3. 3
    Посмотрите поле «Всего» в подвале табличной части
  4. 4
    Сравните итог с бумажным документом или счётом поставщика
  5. 5
    При расхождении проверьте скидки, ручную правку сумм строк и округление цен

Как получить сумму документа программно

Простейший способ — метод табличной части Итог(). Он принимает имя колонки и возвращает сумму по всем строкам. Метод работает и на клиенте, и на сервере, не требует запроса к базе данных и использует уже загруженные данные объекта.

// Объект документа уже получен

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

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

// Для ссылки на документ — сначала получить объект

ДокОбъект = СсылкаНаДокумент.ПолучитьОбъект();

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

Обращение через ПолучитьОбъект() читает весь документ целиком, что медленно при массовой обработке. Если нужно просуммировать много документов — используйте запрос: он выполняется на сервере СУБД и работает на порядки быстрее.

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

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

"ВЫБРАТЬ

| СУММА(РеализацияТовары.Сумма) КАК СуммаИтог

|ИЗ

| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТовары

|ГДЕ

| РеализацияТовары.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", СсылкаНаДокумент);

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() Тогда

Итог = Выборка.СуммаИтог;

КонецЕсли;

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

Расчёт суммы с учётом НДС, скидок и валюты

Итог по колонке «Сумма» не всегда равен сумме к оплате. В зависимости от настройки «Цена включает НДС» итог документа может включать налог или требовать его прибавления: сумма к оплате = Итог("Сумма") + Итог("СуммаНДС") при НДС сверху, либо просто Итог("Сумма") при НДС внутри. Признак хранится в реквизите документа (например, «ЦенаВключаетНДС» или «СуммаВключаетНДС»).

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

В валютных документах сумма хранится в валюте документа, а в учётную сумму пересчитывается по курсу на дату документа при проведении. Суммируя данные запросом по нескольким валютным документам, нельзя складывать валютные суммы напрямую — берите регистровые (рублёвые) суммы из движений или пересчитывайте по курсу каждого документа.

Как вывести сумму в печатную форму и отчёт

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

В отчётах на СКД сумма по документу получается группировкой: ресурс «Сумма» с агрегатной функцией Сумма, сгруппированный по полю «Ссылка». Для итога по выборке документов добавьте отбор по списку ссылок. В консоли запросов тот же результат даёт конструкция СУММА() с группировкой ИТОГИ ПО.

Если печатная форма показывает итог, отличающийся от суммы на форме документа, чаще всего в модуле печати используется другая колонка (например, «Всего» вместо «Сумма») или другой порядок учёта НДС. Сверяйте не числа, а формулу: какие поля и в каком порядке складываются.

Способы получения суммы документа

Итог() по табличной части

Быстро и просто для одного открытого объекта; не подходит для массовой обработки сотен документов

Запрос с СУММА()

Оптимально для выборок и отчётов; требует знания структуры табличной части

Данные регистров (движения)

Дают учётные суммы с НДС и в рублях; отражают только проведённые документы

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

Для ручной проверки пользователем; не доступен программно вне формы

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

Самая частая причина расхождения на копейки — округление. Цена с НДС, умноженная на дробное количество, даёт сумму с большим числом знаков, чем хранит реквизит. Разные конфигурации округляют по-разному: в строке до точности реквизита или только в итоге. Менять точность реквизитов самостоятельно не следует — это затрагивает все документы базы.

Вторая причина — строки с ручной правкой суммы. Признак: цена в строке имеет «неудобное» значение с длинной дробной частью. Найдите такие строки и пересчитайте их штатно: очистите сумму, измените количество или цену — обработчик пересчитает строку по формуле.

Третья группа причин — различия в составе данных: в документ попали строки со сторно, возвратами или нулевым количеством, а в первичном документе их нет (или наоборот). Здесь помогает построчная сверка через выгрузку табличной части в табличный документ и сравнение с исходником.

Типичные ошибки при подсчёте суммы
01
Складывать колонку «Сумма» и забыть про НДС сверху — итог меньше суммы к оплате
02
Суммировать валютные суммы разных документов без пересчёта по курсу — итог бессмысленный
03
Использовать ПолучитьОбъект() в цикле по тысяче документов — обработка идёт часами вместо секунд запроса
04
Менять точность реквизита «Сумма» ради копеечного расхождения — ломается вся историческая база
05
Писать сумму в реквизит напрямую, минуя пересчёт НДС и скидок — движения расходятся с табличной частью

Как проверить правильность расчёта

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

Вторая проверка — отчёт по взаиморасчётам или оборотно-сальдовая ведомость по счёту: сумма документа должна участвовать в оборотах за период. Если документ есть, а в отчёте его суммы нет, проверьте, проведён ли он и не помечен ли на удаление.

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

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

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

Итог табличной части и сумма в движениях
Норма

Значения совпадают с точностью до копеек

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

Расхождение — документ проведён с ошибкой или изменён после проведения

Сумма к оплате с учётом НДС
Норма

Итог + НДС (при НДС сверху) равен сумме в счёте/накладной

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

Разница на сумму налога — неверно учтён признак «цена включает НДС»

Результат Итог() и запроса на одном документе
Норма

Оба способа дают одинаковое число

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

Запрос завышает сумму — лишнее соединение таблиц

Документ в отчётах за период
Норма

Сумма видна в оборотах по регистрам/счетам

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

Документ не проведён или помечен на удаление

Итог

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

Для одного документа используйте Итог("Сумма") по табличной части, для выборок — запрос с СУММА(). Всегда учитывайте, включает ли сумма НДС, и не складывайте валютные суммы без пересчёта. Расхождения ищите в округлении, ручной правке строк и составе табличной части, а правильность подтверждайте сверкой с движениями документа.

Частые вопросы о расчёте суммы документа в 1С

Почему сумма строки не пересчитывается при изменении цены?

Чаще всего сумма в строке была введена или изменена вручную, и обработчик формы больше не пересчитывает её автоматически, либо в конфигурации изменён порядок пересчёта. Очистите колонку «Сумма» и измените количество — строка пересчитается по формуле. Если не помогает, проверьте, не доработана ли форма документа.

Как посчитать сумму только по выделенным строкам табличной части?

Программно — пройдите циклом по выделенным строкам элемента формы и сложите значения колонки: для каждой строки из Элементы.Товары.ВыделенныеСтроки получайте данные через НайтиПоИдентификатору и суммируйте. В интерфейсе без доработки такой итог доступен не во всех конфигурациях — иногда проще скопировать строки в табличный документ.

Чем отличается колонка «Сумма» от колонки «Всего» в документе?

«Сумма» — стоимость строки без учёта того, как показывать налог, а «Всего» обычно равно сумме с НДС независимо от настройки «цена включает НДС». Итог к оплате удобнее контролировать по колонке «Всего», если она есть в табличной части.

Как получить сумму всех документов за период одним действием?

Используйте запрос к табличной части документа с отбором по дате и агрегацией СУММА, либо универсальный отчёт по регистру, в который документ делает движения. Запрос по регистру предпочтительнее: он учитывает только проведённые документы и сразу даёт учётные (рублёвые) суммы.

Почему запрос возвращает сумму больше реальной?

Типичная причина — соединение табличной части с другой таблицей (например, со шапкой или с регистром), из-за которого строки размножаются, и СУММА считает их несколько раз. Уберите лишние соединения или сначала сгруппируйте табличную часть во временную таблицу, а потом соединяйте.

Можно ли изменить точность округления суммы в документе?

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