Итог по столбцу в 1С: от выделения ячеек до запроса
Содержание
Самый быстрый способ сложить суммы колонки в 1С — выделить мышью нужные ячейки в сформированном отчёте: в типовых конфигурациях (БП 3.0, ЗУП 3.1, УТ 11) сумма выделенного сразу появляется в поле над отчётом. Если нужен постоянный итог, его задают в настройках отчёта на СКД, а для разработчика — через Итог() у таблицы или агрегат СУММА в запросе.
Какой способ выбрать, зависит от того, где лежат цифры. В готовом отчёте хватает выделения. В списке документов или справочника сначала выгружают данные в табличный документ. В табличной части документа итог показывает подвал формы, а в своей обработке сумму считают кодом.
| Где цифры | Способ | Нужен Конфигуратор |
|---|---|---|
| Сформированный отчёт | Выделить ячейки, смотреть поле суммы | Нет |
| Список документов, справочник | Ещё → Вывести список → табличный документ или Excel | Нет |
| Отчёт на СКД, нужен итог всегда | Ресурсы, группировки, общие итоги в настройках | Нет |
| Нужна своя формула (сумма с НДС, доля) | Пользовательское поле в настройках отчёта | Нет |
| Табличная часть документа | Подвал колонки на форме | Да |
| Обработка, внешний отчёт | Итог(), СУММА в запросе, ИТОГИ | Да |
Сумма выделенных ячеек в режиме предприятия
Этот способ работает в любом отчёте, который построен на библиотеке стандартных подсистем (БСП). К ним относятся почти все отчёты типовых конфигураций: оборотно-сальдовая ведомость, анализ субконто, универсальный отчёт, отчёты по продажам и зарплате.
Как посчитать
- Сформируйте отчёт кнопкой
Сформировать. - Зажмите левую кнопку мыши на первой ячейке колонки и протяните до последней.
- Чтобы добавить несмежные ячейки, удерживайте
Ctrlи щёлкайте по ним по одной. - Посмотрите на поле суммы в верхней части формы отчёта, справа от командной панели.
Рядом с полем суммы есть выпадающий список. В нём можно переключить показатель: сумма, количество ячеек, среднее, минимум, максимум. Среднее и количество удобны, когда надо быстро прикинуть средний чек или число строк без пересчёта вручную.
Если выделить строку итогов вместе с детальными строками, сумма удвоится: итог посчитается дважды. Выделяйте только детальные строки или только итоговые.
Что учитывается при выделении
- 🔢 Только ячейки с числами. Текстовые ячейки, заголовки и пустые клетки пропускаются.
- 🧮 Отрицательные значения вычитаются из суммы, а не складываются по модулю.
Если поля суммы нет
Поле суммы не появляется в табличном документе, который открыт сам по себе — например, после команды Вывести список или в старой нетиповой обработке. Тогда выручат два варианта:
- 📋 Скопируйте выделенные ячейки (
Ctrl+C) и вставьте в Excel или LibreOffice — внизу окна таблицы сразу видна сумма. - 💾 Сохраните табличный документ в файл
.xlsxчерез кнопку сохранения на панели (дискета) или главное меню формы и сложите колонку формулой=СУММ(D2:D150).
Для пары чисел есть встроенный калькулятор платформы: его вызывают сочетанием Ctrl+F2. Результат из калькулятора можно скопировать и вставить в числовое поле.
Как сложить колонку списка документов или справочника
Динамический список (журнал документов , справочник номенклатуры) сам итоги не показывает. Колонку «Сумма» в журнале счетов или поступлений не выделить так, чтобы программа её сложила.
Выгрузка через «Вывести список»
- Откройте список, например журнал поступлений.
- Отберите нужное: период, контрагент, организация. Отбор задаётся через поиск или
Ещё → Настроить список. - Выберите
Ещё → Вывести список. - В открывшемся окне оставьте флажки только у нужных колонок и нажмите
ОК. - Платформа сформирует табличный документ. Сохраните его в Excel или скопируйте колонку и сложите там.
Вывести список выгружает строки, которые подходят под текущий отбор. Если отбор по периоду не задан, в сумму попадут документы за все годы. Проверьте отбор до выгрузки.
Когда лучше взять отчёт
Если сумма нужна регулярно, выгрузка списка — лишняя работа. Почти под каждую задачу в типовой есть отчёт, где итог уже считается:
| Что сложить | Где искать в БП 3.0 |
|---|---|
| Сумма поступлений от поставщика | ОСВ по счёту 60 или «Анализ субконто» по контрагенту |
| Выручка за период | ОСВ по счёту 90.01 |
| Сумма оплат покупателей | ОСВ по счёту 62 |
| Начисления сотруднику | Отчёты раздела Зарплата и кадры |
Отчёты открываются из раздела Отчёты. В них итог по колонке уже есть, а детализацию до документа даёт расшифровка двойным щелчком.
Итоги по колонке в отчёте на СКД
Большинство отчётов в 1С 8.3 построены на системе компоновки данных (СКД). Сумма колонки в таком отчёте — это ресурс. Итог по нему выводится в строках группировок и в общей строке внизу.
Как включить общие итоги
- В форме отчёта нажмите
Настройки. - Переключите вид настроек на расширенный, если он доступен в этом отчёте.
- Проверьте, что в структуре отчёта есть группировка (например, по контрагенту или номенклатуре). Итоги считаются именно по группировкам.
- В параметрах вывода найдите расположение общих итогов — внизу, вверху или нигде. Выберите вариант, где итоги выводятся.
- Нажмите
Закрыть и сформировать.
Если колонка в отчёте числовая, но итога по ней нет, скорее всего, поле не объявлено ресурсом в схеме. Это исправляется только в Конфигураторе или в копии отчёта: в схеме компоновки на вкладке Ресурсы поле добавляют с выражением Сумма(Поле).
Агрегатные функции ресурсов
| Функция | Что считает | Пример |
|---|---|---|
Сумма | Сложение значений | Сумма продаж по клиенту |
Количество | Число записей | Сколько документов |
Количество(Различные …) | Число уникальных значений | Сколько разных покупателей |
Среднее | Среднее арифметическое | Средняя цена |
Максимум, Минимум | Крайние значения | Самая крупная отгрузка |
Для цены не используйте Сумма: сложенные цены ничего не значат. Цену в итогах считают как Сумма(Сумма) / Сумма(Количество) — то есть средневзвешенную.
Своя формула: пользовательское поле в настройках отчёта
Иногда нужна не готовая колонка, а сумма с расчётом: сумма без НДС, разница между планом и фактом, доля в процентах. Такую колонку бухгалтер собирает сам, без программиста.
Пошагово
- Откройте
Настройкиотчёта и перейдите в расширенный режим. - На вкладке с полями найдите команду добавления нового поля и выберите тип
Выражение. - Задайте заголовок, например «Сумма без НДС».
- В выражении детальных записей напишите формулу, например
[Сумма] - [Сумма НДС]. Поля вставляются из списка доступных, в квадратных скобках. - В выражении итоговых записей укажите агрегат:
Сумма([Сумма]) - Сумма([Сумма НДС]). - Добавьте новое поле в выбранные поля отчёта и сформируйте его.
Если оставить выражение итоговых записей пустым, в строках группировок и в общем итоге поле будет пустым, хотя по строкам расчёт виден. Это самая частая причина вопроса «почему не считается итог по моей колонке».
Примеры выражений
| Задача | Детальные записи | Итоговые записи |
|---|---|---|
| Сумма без НДС | [Сумма] - [Сумма НДС] | Сумма([Сумма]) - Сумма([Сумма НДС]) |
| Отклонение от плана | [Факт] - [План] | Сумма([Факт]) - Сумма([План]) |
| Процент выполнения | ВЫБОР КОГДА [План] = 0 ТОГДА 0 ИНАЧЕ [Факт] / [План] * 100 КОНЕЦ | то же выражение с Сумма() вокруг полей |
Процент нельзя складывать по строкам: сумма процентов не даёт процент. Поэтому в итоговой записи делят сумму факта на сумму плана, а не суммируют готовые проценты.
Проверка деления на ноль через ВЫБОР обязательна. Без неё отчёт упадёт на строке, где план не задан.
Итог табличной части документа и подвал формы
В документах вроде Реализация (акт, накладная) итог под колонкой «Сумма» уже выводится. Если вы делаете свой документ или дорабатываете форму, подвал настраивают в Конфигураторе.
Настройка подвала в управляемой форме
- Откройте форму документа в Конфигураторе.
- Выделите элемент-таблицу табличной части и в свойствах включите
Подвал. - Выделите колонку, по которой нужен итог.
- В свойстве
ПутьКДаннымПодвалаукажитеОбъект.Товары.ИтогСумма, гдеТовары— имя табличной части,Сумма— имя реквизита. - Обновите конфигурацию и откройте документ: под колонкой появится сумма, которая пересчитывается при изменении строк.
Для числовых реквизитов табличной части платформа сама даёт путь к итогу вида ИтогИмяРеквизита. Писать обработчики пересчёта для подвала не нужно.
Правку типовой формы делайте в расширении конфигурации, а не снимая конфигурацию с поддержки. Иначе следующее обновление релиза станет заметно труднее.
Программный подсчёт суммы колонки: Итог() и запросы
Когда сумма нужна в коде (проверка лимита, заполнение реквизита, вывод в печатную форму), есть два пути: посчитать по уже загруженной коллекции или получить итог запросом из базы.
Метод Итог() у таблицы значений и табличной части
// Сумма колонки табличной части документа
ВсегоПоДокументу = Объект.Товары.Итог("Сумма");
// Сумма колонки таблицы значений
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура");
ТЗ.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Строка = ТЗ.Добавить();
Строка.Сумма = 1500;
Строка = ТЗ.Добавить();
Строка.Сумма = 2700;
Сообщить("Итого: " + Формат(ТЗ.Итог("Сумма"), "ЧДЦ=2"));
// Итого: 4 200,00
Колонке таблицы значений лучше сразу задать тип Число, как в примере. Итог по колонке без типа и со смешанными значениями даст не то, что вы ждёте.
Сумма с условием циклом
Итог() складывает всю колонку. Если надо сложить только часть строк, пройдите циклом:
СуммаСНДС20 = 0;
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
Если СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
СуммаСНДС20 = СуммаСНДС20 + СтрокаТЧ.Сумма;
КонецЕсли;
КонецЦикла;
Для таблицы значений есть и другой путь: ТЗ.Свернуть("СтавкаНДС", "Сумма") сворачивает строки по ставке и складывает сумму внутри каждой группы. Метод меняет саму таблицу, поэтому при необходимости сворачивайте копию.
Сумма колонки в запросе
Если данные лежат в базе, складывать их на сервере СУБД быстрее, чем тянуть все строки в память:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| ЕСТЬNULL(СУММА(Товары.Сумма), 0) КАК Сумма
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК Товары
|ГДЕ
| Товары.Ссылка.Дата МЕЖДУ &Начало И &Конец
| И Товары.Ссылка.Проведен
|СГРУППИРОВАТЬ ПО
| Товары.Номенклатура
|ИТОГИ
| СУММА(Сумма)
|ПО
| ОБЩИЕ";
Запрос.УстановитьПараметр("Начало", НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("Конец", КонецДня(ДатаОкончания));
Конструкция ИТОГИ … ПО ОБЩИЕ добавляет в результат строку общего итога. Её удобно обходить через Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам). Если нужна только одна цифра, уберите поле Номенклатура и группировку — запрос вернёт одну строку с суммой.
Текст запроса проще всего проверить в консоли запросов, прежде чем вставлять в модуль.
Почему сумма не сходится и как это исправить
Приёмы, которые экономят время
- 🗂 Сохраните вариант отчёта с нужными колонками и итогами (команда сохранения варианта в меню
Ещёформы отчёта), чтобы не настраивать его каждый раз заново. - 🔍 Проверяйте сумму вторым способом: выделение в отчёте против ОСВ по счёту. Совпало — цифре можно верить.
- ⚡ На больших базах считайте итог запросом с группировкой, а не циклом по выборке всех документов: разница во времени заметна уже на десятках тысяч строк.
- 🧾 Для суммы денег используйте тип
Числос 2 знаками после запятой, для количества — с 3. Тогда округление на итоге не преподнесёт сюрпризов.