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