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