Подсчёт количества товаров, документов и строк в 1С
Содержание
Посчитать количество в 1С можно тремя путями: быстрый остаток по товару берут из оборотно-сальдовой ведомости, число документов или элементов видно прямо в форме списка, а подсчёт по произвольному условию делают запросом с функцией КОЛИЧЕСТВО. Выбор зависит от того, что именно считаете — номенклатуру на складе, строки в документе или записи в базе.
Бухгалтеру хватает готовых отчётов: они берут данные из проведённых документов и регистров. Аналитику и разработчику нужнее консоль запросов и язык запросов — там считают по любому отбору, с группировкой и исключением дублей. Разберём оба подхода, от кнопки в интерфейсе до КОЛИЧЕСТВО(РАЗЛИЧНЫЕ …).
Остатки и обороты по количеству в стандартных отчётах
Самый частый вопрос — сколько товара на складе. Для этого не нужны запросы, достаточно оборотно-сальдовой ведомости по счёту.
В «1С:Бухгалтерии 3.0» откройте Отчёты → Оборотно-сальдовая ведомость по счёту, выберите счёт 41 (товары) или 10 (материалы). Затем нажмите Показать настройки и на вкладке Показатели поставьте галочку Количество. Отчёт покажет остаток и обороты не только в рублях, но и в штуках по каждой номенклатуре.
💡 Если нужен остаток строго на дату, а не обороты за период, в тех же настройках выбирайте тип данных «Остатки» — ведомость свернёт движения и покажет сальдо.
Когда важно увидеть количество в разрезе конкретной номенклатуры или партии, разверните нужный счёт по субконто: двойной щелчок по строке откроет детализацию до документа. Так из общего сальдо видно, из каких приходов сложился остаток и сколько штук дал каждый.
В «1С:Управлении торговлей 11» складские остатки удобнее смотреть в отдельном блоке: Склад и доставка → Отчёты по складу. Там есть ведомости по товарам на складах и отчёт по остаткам — они изначально считают количество в единицах хранения, рубли подключаются опционально.
Сравнение, какой отчёт брать под задачу:
| Что считаете | Отчёт | Где искать |
|---|---|---|
| Остаток товара в штуках | Оборотно-сальдовая ведомость по счёту 41 | Отчёты (БП) |
| Движение материалов | ОСВ по счёту 10 | Отчёты (БП) |
| Остатки на складах | Ведомость по товарам на складах | Склад и доставка (УТ) |
| Произвольный срез | Универсальный отчёт | Отчёты |
Как сосчитать документы и элементы прямо в списке
Когда нужно просто узнать, сколько накладных за месяц или сколько позиций в справочнике, отчёт заводить незачем — число берут из самой формы списка.
Отберите нужные строки фильтром: в шапке списка задайте период или поиск по контрагенту. После этого выделите все строки сочетанием Ctrl+A. В статусной строке внизу формы 1С покажет количество выделенных элементов.
Второй способ точнее и даёт цифру, которую можно скопировать. В командной панели списка нажмите Ещё → Вывести список. 1С предложит выгрузить данные в табличный документ. В нём выделите любую колонку целиком — в строке состояния табличного документа появятся «Сумма», «Количество» и «Среднее» по выделенным ячейкам, как в табличном редакторе.
Вывести список переносит ровно те строки, что видны после отбора. Если список подгружается динамически (прокрутка длинного журнала), сначала убедитесь, что отбор сузил выборку, иначе выгрузится не весь период.
Если в списке есть настройка группировки, её тоже можно задействовать: в настройках формы списка добавьте группировку по полю (например, по контрагенту), и список свернётся в группы, у каждой из которых видно, сколько документов внутри. Это удобно для журналов, где важно не общее число, а разбивка.
Для регулярного подсчёта по дням, складам или ответственным удобнее один раз настроить группировку в отчёте, чем каждый раз выгружать список вручную.
Универсальный отчёт: подсчёт по любому объекту
Универсальный отчёт — инструмент для тех случаев, когда готового отчёта под задачу нет, а запрос писать не хочется. Он строит выборку по любой таблице базы: документу, справочнику или регистру.
Откройте Отчёты → Универсальный отчёт. Сверху выберите тип объекта и сам объект — например, документ «Реализация товаров и услуг» или его табличную часть «Товары».
Дальше порядок такой:
- Нажмите
Настройкии перейдите к расширенному режиму. - На вкладке
Группировкидобавьте поле, по которому хотите разбить данные (контрагент, организация, склад). - На вкладке
Поля и сортировкидобавьте нужное количественное поле. - Сформируйте отчёт — 1С свернёт строки по группировкам и подсчитает итоги.
Чтобы получить именно число записей, а не сумму по колонке, добавьте в поля любой реквизит и задайте ему свёртку «Количество». Тогда отчёт покажет, сколько документов или строк попало в каждую группу.
💡 Универсальный отчёт удобно сохранять: после настройки нажмите сохранить вариант, и в следующий раз он откроется с готовыми группировками.
Возможностей универсального отчёта хватает для большинства подсчётов по одной таблице. Как только требуется соединить две таблицы (например, документы с их строками и отобрать по реквизиту строки), проще перейти к запросу — в интерфейсе такие связи настраивать неудобно.
Подсчёт запросом в консоли запросов
Когда условие сложное — посчитать только проведённые документы, уникальных контрагентов или строки с конкретной ставкой НДС, — берут язык запросов. Для разовых проверок используют консоль запросов: это обработка, которую 1С распространяет отдельно, она открывается через Файл → Открыть как внешняя обработка.
Базовый подсчёт количества записей делает функция КОЛИЧЕСТВО(*):
ВЫБРАТЬ
КОЛИЧЕСТВО(*) КАК ЧислоДокументов
ИЗ
Документ.РеализацияТоваровУслуг
ГДЕ
Проведен = ИСТИНА
Запрос вернёт одно число — сколько проведённых реализаций в базе. Условие в ГДЕ отбирает только нужные записи до подсчёта.
Чтобы посчитать не все записи, а уникальные значения, добавляют слово РАЗЛИЧНЫЕ:
ВЫБРАТЬ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагент) КАК ЧислоКлиентов
ИЗ
Документ.РеализацияТоваровУслуг
ГДЕ
Проведен = ИСТИНА
Разница принципиальна: КОЛИЧЕСТВО(*) считает строки, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагент) — сколько разных контрагентов встретилось. Если один клиент сделал десять покупок, в первом случае получите 10, во втором — 1.
Подсчёт с разбивкой по группам даёт СГРУППИРОВАТЬ ПО:
ВЫБРАТЬ
Организация КАК Организация,
КОЛИЧЕСТВО(*) КАК ЧислоДокументов
ИЗ
Документ.РеализацияТоваровУслуг
ГДЕ
Проведен = ИСТИНА
СГРУППИРОВАТЬ ПО
Организация
Результат — таблица: строка на каждую организацию и число её документов.
Подсчёт можно использовать и как фильтр. Если нужны только те контрагенты, у кого больше десяти документов, добавьте секцию ИМЕЮЩИЕ — она отбирает уже по итогу группировки:
ВЫБРАТЬ
Контрагент КАК Контрагент,
КОЛИЧЕСТВО(*) КАК ЧислоДокументов
ИЗ
Документ.РеализацияТоваровУслуг
ГДЕ
Проведен = ИСТИНА
СГРУППИРОВАТЬ ПО
Контрагент
ИМЕЮЩИЕ
КОЛИЧЕСТВО(*) > 10
ГДЕ фильтрует строки до подсчёта, ИМЕЮЩИЕ — после: сначала платформа сгруппировала и посчитала, затем отсекла группы с малым числом. Перепутать их — ещё одна причина неверного количества в отчёте.
Объектная таблица (Документ.РеализацияТоваровУслуг) содержит и непроведённые документы. Если вам важны только отражённые в учёте движения, либо фильтруйте по Проведен = ИСТИНА, либо считайте по таблице регистра, а не документа.
Количество остатков по регистру
Склад, касса, взаиморасчёты в 1С хранятся не в документах, а в регистрах накопления. Поэтому «сколько товара на складе» правильнее считать по регистру остатков, а не пересчётом движений вручную — платформа уже свернула приход и расход.
У регистра остатков есть виртуальная таблица Остатки, которая на заданный момент времени возвращает готовое сальдо. В «Управлении торговлей» склад ведёт регистр ТоварыНаСкладах:
ВЫБРАТЬ
Номенклатура КАК Номенклатура,
Склад КАК Склад,
КоличествоОстаток КАК Остаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, )
Параметр &Дата задаёт момент, на который нужен остаток. Второе место в скобках — условие отбора; оставьте его пустым, чтобы получить все остатки, или подставьте отбор по складу.
Чтобы узнать не сами остатки, а сколько номенклатуры их имеет (сколько позиций в наличии), оберните результат подсчётом уникальных значений:
ВЫБРАТЬ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура) КАК ПозицийВНаличии
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, )
ГДЕ
КоличествоОстаток > 0
У суффикса виртуальной таблицы есть варианты: Остатки — сальдо на момент, Обороты — приход и расход за период, ОстаткиИОбороты — всё вместе. Для вопроса «сколько сейчас» берут Остатки, для «сколько продали за месяц» — Обороты.
Такой подсчёт всегда согласован со стандартными отчётами: и ведомость, и запрос по регистру читают один источник, поэтому цифры совпадут до штуки. Пересчитывать остаток суммированием приходов и расходов из документов не нужно и опасно — легко пропустить корректировку или перемещение, и результат разойдётся с учётом.
Количество строк и итоги в табличной части
Отдельная задача — посчитать строки внутри одного документа или сумму по колонке табличной части. Здесь работают и запрос, и встроенный язык.
В запросе к табличной части обращаются через точку после имени документа:
ВЫБРАТЬ
КОЛИЧЕСТВО(*) КАК ЧислоСтрок
ИЗ
Документ.РеализацияТоваровУслуг.Товары
ГДЕ
Ссылка = &Документ
В программном коде число строк табличной части возвращает метод Количество():
ЧислоСтрок = Документ.Товары.Количество();
А сумму по колонке — метод Итог() с именем реквизита:
ВсегоШтук = Документ.Товары.Итог("Количество");
Здесь важно не путать две вещи: число строк (сколько позиций номенклатуры в документе) и итог по колонке «Количество» (сколько штук суммарно). Это разные числа, и подменять одно другим — самая частая ошибка в отчётах по продажам.
Простой пример. В реализации пять строк: ручки — 100 шт., бумага — 50 шт., папки — 30 шт., скрепки — 200 шт., маркеры — 20 шт. Метод Количество() вернёт 5 (позиций), а Итог("Количество") — 400 (штук). Если в накладной написать «отгружено 5», клиент будет прав, возмутившись: отгрузили 400 единиц, пять — это число наименований.
Какой инструмент выбрать под конкретную задачу:
Ctrl+A, либо Ещё → Вывести список и подсчёт в табличном документе.КОЛИЧЕСТВО(*) для строк, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ поле) для уникальных.Товары.Количество() и Товары.Итог("Количество"); то же запросом по табличной части.Нюансы, из-за которых цифры не сходятся
Подсчёт в 1С редко ошибается технически — расходятся обычно из-за того, что считают не то или не там. Несколько ловушек, которые сбивают результат:
- 🔢 Строки против штук.
Количество()даёт число позиций,Итог("Количество")— сумму по колонке. В отчёте «10 строк» и «250 штук» — оба верны, но отвечают на разные вопросы. - 🧮 Дубли при соединениях. Если в запросе соединяете документ с его табличной частью, шапка «размножается» по числу строк.
КОЛИЧЕСТВО(*)тогда посчитает строки, а не документы — используйтеКОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ссылка). - ⚠️ NULL не считается.
КОЛИЧЕСТВО(Поле)пропускает записи, где поле пустое (NULL после левого соединения). Если нужно посчитать все строки независимо от значения — толькоКОЛИЧЕСТВО(*). - 📦 Единицы измерения. В товарных отчётах количество бывает в единице хранения и в единице отчётов. При коэффициенте пересчёта (упаковка = 12 штук) цифры будут разными — сверяйтесь, в какой единице построен отчёт.
- 🗂 Проведённые и непроведённые. Регистры хранят движения только проведённых документов, объектная таблица — все. Подсчёт по регистру и по документу даст разные числа, и это нормально.
Если два отчёта показывают разное количество по одной теме, сначала проверьте период, отбор и единицу измерения — почти всегда расхождение там, а не в арифметике платформы. Полезно привести оба источника к одной дате и одному набору документов: когда условия совпадают, совпадают и числа.
Частые вопросы
Чем `КОЛИЧЕСТВО(*)` отличается от `КОЛИЧЕСТВО(Поле)`?
КОЛИЧЕСТВО(*) считает все строки выборки. КОЛИЧЕСТВО(Поле) считает только строки, где это поле не пустое (не NULL). По полному полю результаты совпадут, по полю с пропусками — нет.Как посчитать количество документов за период без запроса?
Ctrl+A — число появится в статусной строке. Либо Ещё → Вывести список и посмотрите количество в табличном документе.Почему в запросе документов получается больше, чем их есть?
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ссылка).Как узнать число строк в табличной части из кода?
Количество() у табличной части: Документ.Товары.Количество(). Для суммы по колонке — Документ.Товары.Итог("Количество").Где взять консоль запросов?
Файл → Открыть в режиме «1С:Предприятие». Для разовых подсчётов подходит и универсальный отчёт — без установки обработки.