Документы и Печать · 12 мин
Как посчитать сумму по документу в 1С
Как посчитать сумму по документу в 1С: автоматический расчёт итогов, ручной ввод, формулы в запросе и на встроенном языке, проверка расхождений и типичные ошибки.
Под «суммой по документу» в 1С обычно понимают итог табличной части: сумму всех строк товаров, услуг или оплат. В типовых конфигурациях (Управление торговлей, Бухгалтерия, ERP) этот итог считается автоматически, но на практике регулярно возникают ситуации, когда сумму нужно пересчитать вручную, проверить расхождение с первичным документом, получить её программно или вывести в печатную форму.
Способ расчёта зависит от задачи. Пользователю чаще всего достаточно штатных механизмов формы документа: колонка «Сумма» считается как количество, умноженное на цену, а итог отображается внизу табличной части. Разработчику или внедренцу нужны запросы, обращение к методу Итог() и формулы с учётом НДС, скидок и валюты.
В материале разобраны оба подхода: работа в интерфейсе без изменения конфигурации и программный расчёт на встроенном языке. Отдельно рассмотрены типичные причины расхождений итогов и способы их проверки.
Как 1С считает сумму документа автоматически
В типовых конфигурациях расчёт суммы строки зашит в обработчики изменения полей табличной части. Когда вы вводите количество или цену, срабатывает процедура, которая перемножает эти значения и записывает результат в колонку «Сумма». Если в документе есть скидки, НДС или пересчёт в валюту, они применяются в той же цепочке обработчиков.
Общий итог документа обычно отображается в подвале табличной части или в отдельном поле «Всего» рядом с суммой НДС. Это значение не хранится как самостоятельный реквизит во всех конфигурациях: часто оно вычисляется на форме суммированием колонки. Поэтому при выгрузке данных или построении отчёта надёжнее считать итог заново, а не искать готовое поле.
Важно понимать, что сумма строки может быть изменена вручную. В этом случае цена пересчитывается обратно от суммы, и при нецелом количестве возникают копеечные расхождения в цене. Это штатное поведение, но оно частая причина вопросов «почему цена стала с тремя знаками после запятой».
Как посчитать сумму в интерфейсе без программирования
Если итог не отображается или выглядит неочевидно, проверьте настройки формы. В большинстве документов нижняя панель показывает «Всего» и «Всего НДС». Если панель скрыта, её возвращают через меню «Ещё» формы либо изменением настроек формы (пункт «Изменить форму» в управляемом интерфейсе).
Для быстрой проверки суммы выделенных строк выделите нужные строки табличной части (через Ctrl или Shift) и посмотрите итог по выделению — в ряде конфигураций он показывается в строке состояния. Если такой возможности нет, выделенные строки можно скопировать в табличный документ или Excel и просуммировать там, но это крайняя мера.
Для пересчёта всей табличной части после массовой загрузки данных используйте штатные команды: «Пересчитать» в форме документа, обработку группового изменения реквизитов или заполнение по ценам из соглашения/прайса. После любой массовой операции итог следует сверить с источником.
- 1Откройте документ и убедитесь, что табличная часть заполнена полностью, без пустых строк с нулевыми суммами
- 2Проверьте валюту документа и ставки НДС в строках — они влияют на итог
- 3Посмотрите поле «Всего» в подвале табличной части
- 4Сравните итог с бумажным документом или счётом поставщика
- 5При расхождении проверьте скидки, ручную правку сумм строк и округление цен
Как получить сумму документа программно
Простейший способ — метод табличной части Итог(). Он принимает имя колонки и возвращает сумму по всем строкам. Метод работает и на клиенте, и на сервере, не требует запроса к базе данных и использует уже загруженные данные объекта.
// Объект документа уже получен
СуммаДокумента = ДокументОбъект.Товары.Итог("Сумма");
СуммаНДС = ДокументОбъект.Товары.Итог("СуммаНДС");
// Для ссылки на документ — сначала получить объект
ДокОбъект = СсылкаНаДокумент.ПолучитьОбъект();
Итог = ДокОбъект.Товары.Итог("Сумма");
Обращение через ПолучитьОбъект() читает весь документ целиком, что медленно при массовой обработке. Если нужно просуммировать много документов — используйте запрос: он выполняется на сервере СУБД и работает на порядки быстрее.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(РеализацияТовары.Сумма) КАК СуммаИтог
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТовары
|ГДЕ
| РеализацияТовары.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаДокумент);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Итог = Выборка.СуммаИтог;
КонецЕсли;
СуммаДокумента = ДокументОбъект.Товары.Итог("Сумма");Расчёт суммы с учётом НДС, скидок и валюты
Итог по колонке «Сумма» не всегда равен сумме к оплате. В зависимости от настройки «Цена включает НДС» итог документа может включать налог или требовать его прибавления: сумма к оплате = Итог("Сумма") + Итог("СуммаНДС") при НДС сверху, либо просто Итог("Сумма") при НДС внутри. Признак хранится в реквизите документа (например, «ЦенаВключаетНДС» или «СуммаВключаетНДС»).
Скидки в торговых конфигурациях применяются до расчёта суммы строки автоматическими механизмами. Если скидка введена вручную в отдельной колонке, проверьте, в какой последовательности она вычитается: от цены или от суммы строки. Разная последовательность даёт разный итог при округлении.
В валютных документах сумма хранится в валюте документа, а в учётную сумму пересчитывается по курсу на дату документа при проведении. Суммируя данные запросом по нескольким валютным документам, нельзя складывать валютные суммы напрямую — берите регистровые (рублёвые) суммы из движений или пересчитывайте по курсу каждого документа.
Как вывести сумму в печатную форму и отчёт
В печатных формах итог выводится либо готовым параметром из макета (в типовых макетах область «Итого» уже содержит вычисленные параметры), либо суммированием в цикле по строкам перед выводом. При доработке макета надёжнее считать итог в модуле менеджера печати и передавать в параметр, чем складывать значения прямо в табличном документе.
В отчётах на СКД сумма по документу получается группировкой: ресурс «Сумма» с агрегатной функцией Сумма, сгруппированный по полю «Ссылка». Для итога по выборке документов добавьте отбор по списку ссылок. В консоли запросов тот же результат даёт конструкция СУММА() с группировкой ИТОГИ ПО.
Если печатная форма показывает итог, отличающийся от суммы на форме документа, чаще всего в модуле печати используется другая колонка (например, «Всего» вместо «Сумма») или другой порядок учёта НДС. Сверяйте не числа, а формулу: какие поля и в каком порядке складываются.
Способы получения суммы документа
Быстро и просто для одного открытого объекта; не подходит для массовой обработки сотен документов
Оптимально для выборок и отчётов; требует знания структуры табличной части
Дают учётные суммы с НДС и в рублях; отражают только проведённые документы
Для ручной проверки пользователем; не доступен программно вне формы
Почему итог не сходится и как найти причину
Самая частая причина расхождения на копейки — округление. Цена с НДС, умноженная на дробное количество, даёт сумму с большим числом знаков, чем хранит реквизит. Разные конфигурации округляют по-разному: в строке до точности реквизита или только в итоге. Менять точность реквизитов самостоятельно не следует — это затрагивает все документы базы.
Вторая причина — строки с ручной правкой суммы. Признак: цена в строке имеет «неудобное» значение с длинной дробной частью. Найдите такие строки и пересчитайте их штатно: очистите сумму, измените количество или цену — обработчик пересчитает строку по формуле.
Третья группа причин — различия в составе данных: в документ попали строки со сторно, возвратами или нулевым количеством, а в первичном документе их нет (или наоборот). Здесь помогает построчная сверка через выгрузку табличной части в табличный документ и сравнение с исходником.
Как проверить правильность расчёта
Контрольная точка номер один — равенство итога табличной части и суммы в движениях документа. Откройте проведённый документ, перейдите к движениям по регистрам (кнопка «Движения» или «Показать проводки») и сравните оборот по регистру продаж или взаиморасчётов с итогом табличной части. Совпадение означает, что документ проведён корректно.
Вторая проверка — отчёт по взаиморасчётам или оборотно-сальдовая ведомость по счёту: сумма документа должна участвовать в оборотах за период. Если документ есть, а в отчёте его суммы нет, проверьте, проведён ли он и не помечен ли на удаление.
Для программного расчёта полезен контрольный тест: посчитайте сумму двумя независимыми способами (Итог() и запросом) на одном документе. Значения должны совпасть до копейки. Расхождение указывает на ошибку в тексте запроса — например, на соединение, размножающее строки.
Контрольные точки
Значения совпадают с точностью до копеек
Расхождение — документ проведён с ошибкой или изменён после проведения
Итог + НДС (при НДС сверху) равен сумме в счёте/накладной
Разница на сумму налога — неверно учтён признак «цена включает НДС»
Оба способа дают одинаковое число
Запрос завышает сумму — лишнее соединение таблиц
Сумма видна в оборотах по регистрам/счетам
Документ не проведён или помечен на удаление
Что важно запомнить
Для одного документа используйте Итог("Сумма") по табличной части, для выборок — запрос с СУММА(). Всегда учитывайте, включает ли сумма НДС, и не складывайте валютные суммы без пересчёта. Расхождения ищите в округлении, ручной правке строк и составе табличной части, а правильность подтверждайте сверкой с движениями документа.
Частые вопросы о расчёте суммы документа в 1С
Почему сумма строки не пересчитывается при изменении цены?
Чаще всего сумма в строке была введена или изменена вручную, и обработчик формы больше не пересчитывает её автоматически, либо в конфигурации изменён порядок пересчёта. Очистите колонку «Сумма» и измените количество — строка пересчитается по формуле. Если не помогает, проверьте, не доработана ли форма документа.
Как посчитать сумму только по выделенным строкам табличной части?
Программно — пройдите циклом по выделенным строкам элемента формы и сложите значения колонки: для каждой строки из Элементы.Товары.ВыделенныеСтроки получайте данные через НайтиПоИдентификатору и суммируйте. В интерфейсе без доработки такой итог доступен не во всех конфигурациях — иногда проще скопировать строки в табличный документ.
Чем отличается колонка «Сумма» от колонки «Всего» в документе?
«Сумма» — стоимость строки без учёта того, как показывать налог, а «Всего» обычно равно сумме с НДС независимо от настройки «цена включает НДС». Итог к оплате удобнее контролировать по колонке «Всего», если она есть в табличной части.
Как получить сумму всех документов за период одним действием?
Используйте запрос к табличной части документа с отбором по дате и агрегацией СУММА, либо универсальный отчёт по регистру, в который документ делает движения. Запрос по регистру предпочтительнее: он учитывает только проведённые документы и сразу даёт учётные (рублёвые) суммы.
Почему запрос возвращает сумму больше реальной?
Типичная причина — соединение табличной части с другой таблицей (например, со шапкой или с регистром), из-за которого строки размножаются, и СУММА считает их несколько раз. Уберите лишние соединения или сначала сгруппируйте табличную часть во временную таблицу, а потом соединяйте.
Можно ли изменить точность округления суммы в документе?
Технически точность реквизита меняется в конфигураторе, но делать это в рабочей базе без крайней необходимости не стоит: изменение затрагивает все существующие документы и может вызвать расхождения с уже выданной первичкой. Копеечные расхождения правильнее решать настройкой порядка расчёта НДС и цен, а не точностью реквизита.