К статье
Практический материал

Отчеты и Аналитика · 12 мин

Как получить остатки на дату в 1С

Как получить остатки на дату в 1С: оборотно-сальдовая ведомость, отчеты по складу, запрос с виртуальной таблицей Остатки, параметры периода и проверка результата.

Остатки на дату — одна из самых частых задач в 1С: бухгалтеру нужны сальдо по счетам, кладовщику — остатки товаров на складе, разработчику — данные из регистра накопления для отчета или обработки. Во всех типовых конфигурациях (Бухгалтерия, Управление торговлей, ERP, Комплексная автоматизация) задача решается штатными средствами, но способ зависит от того, кто и зачем получает данные.

Пользователю достаточно стандартных отчетов: оборотно-сальдовой ведомости, отчета «Остатки товаров на складах» или универсального отчета. Разработчику нужен запрос к виртуальной таблице «Остатки» регистра накопления или бухгалтерии с параметром периода. Важно понимать разницу между остатком «на начало дня» и «на конец дня» — именно из-за этого чаще всего возникают расхождения в цифрах.

Ниже разобраны оба подхода: работа через интерфейс без программирования и получение остатков программно, с примерами кода, типичными ошибками и способами проверить корректность результата.

Что такое остаток на дату и почему важна граница времени

Остаток на дату — это значение ресурса регистра (количество товара, сумма на счете, задолженность контрагента), рассчитанное на конкретный момент времени. Главная тонкость: момент времени может задаваться как дата без времени, как дата со временем и как граница «включая» или «исключая» указанную точку.

Если вы запрашиваете остаток на 15.03 без указания времени, платформа интерпретирует это как начало дня 00:00:00 — документы, проведенные 15 марта, в остаток не попадут. Если нужен остаток на конец дня, используют либо дату 15.03 23:59:59, либо конструкцию с объектом «Граница» и видом «Включая». Именно несовпадение границ — причина большинства ситуаций, когда «отчет не сходится с запросом».

Еще одно важное понятие — итоги регистра. Платформа хранит предрассчитанные итоги по месяцам, поэтому остаток на конец месяца получается быстро, а на произвольную дату внутри месяца — с досчетом по движениям. Если итоги рассчитаны не на текущий период, запросы к остаткам могут заметно замедляться.

Как получить остатки через отчеты без программирования

Для бухгалтерских остатков основной инструмент — оборотно-сальдовая ведомость (ОСВ). В 1С:Бухгалтерии она находится в разделе «Отчеты». Установите период: если нужен остаток на конкретную дату, укажите начало периода произвольно раньше, а конец периода — нужной датой. Колонка «Сальдо на конец периода» и будет остатком на дату. То же работает для ОСВ по счету, где видно остатки в разрезе субконто — контрагентов, договоров, номенклатуры.

Для складских остатков в Управлении торговлей и ERP используйте отчет «Остатки товаров на складах» (в разных версиях — «Ведомость по товарам на складах», «Остатки и доступность товаров»). В настройках отчета укажите дату, на которую нужны остатки, и отборы по складу или номенклатуре. Отчет покажет количество в единицах хранения, а при необходимости — резервы и доступный остаток.

Если типового отчета нет, подойдет «Универсальный отчет», который строится по любому регистру накопления. Выберите регистр (например, «Товары на складах»), вид остатков и дату — система сформирует таблицу без единой строки кода.

Получение остатков через ОСВ
  1. 1
    Откройте раздел «Отчеты» и выберите «Оборотно-сальдовая ведомость» или ОСВ по нужному счету
  2. 2
    Установите конец периода на дату, на которую нужны остатки
  3. 3
    Нажмите «Сформировать» и посмотрите колонку «Сальдо на конец периода»
  4. 4
    При необходимости добавьте отбор по организации, контрагенту или складу через кнопку «Настройки»
  5. 5
    Сверьте несколько контрольных позиций с первичными документами, если цифры вызывают сомнение

Как получить остатки запросом: виртуальная таблица Остатки

Программно остатки получают запросом к виртуальной таблице. Для регистра накопления с видом «Остатки» (например, «ТоварыНаСкладах») таблица называется РегистрНакопления.ТоварыНаСкладах.Остатки. Первый параметр в скобках — момент времени, на который считаются остатки, далее — условие отбора по измерениям.

Для регистра бухгалтерии используется таблица РегистрБухгалтерии.Хозрасчетный.Остатки с параметрами: период, отбор по счету, список субконто и условие. Остатки по дебету и кредиту возвращаются отдельными полями (СуммаДтОстаток, СуммаКтОстаток), что важно для развернутого сальдо.

Обязательно накладывайте отбор по измерениям в параметрах виртуальной таблицы, а не в секции ГДЕ запроса. Отбор в параметрах выполняется до расчета остатков и работает на порядок быстрее, особенно на больших базах.

bsl
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.Склад КАК Склад,
| Остатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад = &Склад) КАК Остатки";
Запрос.УстановитьПараметр("Период", Новый Граница(КонецДня(ДатаОстатков), ВидГраницы.Включая));
Запрос.УстановитьПараметр("Склад", Склад);
Результат = Запрос.Выполнить().Выгрузить();

Обратите внимание на параметр периода: вместо простой даты здесь передан объект Граница с видом «Включая». Это гарантирует, что документы, проведенные в последнюю секунду дня, попадут в расчет. Если передать просто КонецДня(Дата), поведение аналогично, но граница дает явный и предсказуемый контроль.

Остатки и обороты: когда нужна таблица ОстаткиИОбороты

Таблица «Остатки» отвечает на вопрос «сколько сейчас», но не показывает динамику. Если нужно видеть начальный остаток, приход, расход и конечный остаток за период, используйте виртуальную таблицу «ОстаткиИОбороты». У нее параметры: начало периода, конец периода, периодичность (по дням, месяцам, по регистратору), метод дополнения и условие отбора.

Типичный сценарий — отчет, который показывает остатки на начало и конец периода с движениями внутри. Периодичность «Регистратор» позволяет развернуть обороты до документов, что удобно для расшифровки. Учтите: чем детальнее периодичность, тем тяжелее запрос.

Для регистра бухгалтерии аналог — «ОстаткиИОбороты» с параметрами по счетам и субконто. Именно на ней построена оборотно-сальдовая ведомость в типовых конфигурациях.

Какую таблицу выбрать

Остатки

Когда нужен только остаток на один момент времени. Самый быстрый вариант, минимум данных

ОстаткиИОбороты

Когда нужны начальное и конечное сальдо плюс приход и расход за период. Тяжелее, но заменяет несколько запросов

Обороты

Когда остатки не нужны вовсе — только движения за период, например сумма продаж

Остатки в СКД и отчетах на управляемых формах

В отчетах на системе компоновки данных остатки получают теми же виртуальными таблицами, но период задается через параметры СКД. Рекомендуемый прием: создать параметр «Период» типа «Дата» и в тексте запроса сослаться на него в параметре виртуальной таблицы. Чтобы пользователь мог не заполнять параметр вручную, используйте стандартную дату окончания или выражение на языке СКД.

Частая задача — остатки на каждую дату периода. Для этого в запросе СКД используют таблицу «ОстаткиИОбороты» с периодичностью «День» либо соединение с календарем (таблицей дат) и расчет остатков на каждую дату. Второй способ точнее, но требует аккуратности с производительностью на больших регистрах.

При работе в СКД не забывайте про роли полей: ресурсы остатков должны быть помечены как ресурсы отчета, иначе итоги по группировкам посчитаются некорректно.

Производительность и итоги регистров

Скорость получения остатков напрямую зависит от рассчитанных итогов. Платформа хранит итоги по месяцам до текущего периода; если текущий период итогов «отстает» (например, после загрузки данных за прошлые годы), запросы к остаткам будут пересчитывать большие объемы движений и выполняться медленно.

Проверить и сдвинуть период рассчитанных итогов можно в режиме «Управление итогами» (в клиент-серверной базе — через функции администрирования) или программно методом УстановитьПериодРассчитанныхИтогов менеджера регистра. После массовой загрузки документов задним числом пересчет итогов — обязательный шаг.

Еще один фактор — нерассчитанные регистры с включенным режимом разделения итогов и большие таблицы без отборов. Запрос остатков по всей номенклатуре без отбора по складу на крупной базе может выполняться минутами. Всегда сокращайте выборку параметрами виртуальной таблицы.

Типичные ошибки и как проверить результат

Самая частая ошибка — неверная граница даты: запрос на «ДатаОстатков» без времени возвращает остатки на начало дня, и цифры не сходятся с ОСВ, сформированной на конец дня. Вторая — отбор в секции ГДЕ вместо параметров виртуальной таблицы, что и медленно, и иногда дает неверные итоги в группировках. Третья — игнорирование отрицательных остатков: они сигнализируют о списаниях «в минус» и требуют разбора первички, а не корректировки отчета.

Проверять программный результат проще всего сверкой с типовым отчетом: сформируйте ОСВ или отчет по складу на ту же дату с теми же отборами и сравните несколько контрольных позиций. Если цифры совпали по выборке из 5–10 позиций, включая позиции с движениями в последний день, запрос написан корректно.

Типичные ошибки
01
Передача даты без времени — остаток получается на начало дня, а не на конец, возникают расхождения с отчетами
02
Отбор по измерениям в секции ГДЕ вместо параметров виртуальной таблицы — запрос работает в разы медленнее
03
Игнорирование нерассчитанных итогов после загрузки данных задним числом — остатки считаются долго или отчеты «тормозят»
04
Смешение остатков по дебету и кредиту в регистре бухгалтерии без учета развернутого сальдо — искажается задолженность по контрагентам
Контрольные точки

Как проверить результат

Совпадение с типовым отчетом
Норма

Остатки из запроса равны ОСВ или складскому отчету на ту же дату и границу

Тревожный признак

Расхождения на сумму движений последнего дня — неверная граница периода

Отрицательные остатки
Норма

Отсутствуют или объяснены особенностями учета

Тревожный признак

Массовые «минусы» — списания без поступления, нужно разбирать документы

Скорость выполнения
Норма

Запрос с отбором выполняется за секунды

Тревожный признак

Запрос «висит» — проверьте итоги и наличие отборов в параметрах

FAQ: частые вопросы об остатках на дату

Как получить остаток на конец дня, а не на начало?

Передайте в параметр виртуальной таблицы либо КонецДня(Дата), либо объект Граница с видом «Включая»: Новый Граница(КонецДня(Дата), ВидГраницы.Включая). Второй вариант надежнее, так как явно фиксирует включение документов граничной секунды.

Почему запрос к остаткам выполняется очень долго?

Наиболее вероятные причины: не рассчитаны итоги до текущего периода, отборы заданы в секции ГДЕ вместо параметров виртуальной таблицы, либо запрашиваются остатки по всем измерениям без отборов на большом регистре. Проверьте период итогов и перенесите условия в параметры таблицы.

Можно ли получить остатки на каждую дату периода одним запросом?

Да. Используйте таблицу «ОстаткиИОбороты» с периодичностью «День» — она вернет остатки на конец каждого дня. Альтернатива — соединение с таблицей дат и расчет остатков на каждую дату, но это тяжелее по ресурсам.

Чем отличаются остатки в регистре бухгалтерии от регистра накопления?

Регистр бухгалтерии возвращает остатки по дебету и кредиту отдельно (СуммаДтОстаток, СуммаКтОстаток) и требует указания счета и списка субконто в параметрах. Регистр накопления возвращает единое значение ресурса по измерениям. Для развернутого сальдо по контрагентам нужны оба поля бухгалтерского регистра.

Что делать, если остатки в отчете и в запросе не совпадают?

Сначала сравните границы периода: отчет обычно строится на конец дня, а запрос без времени — на начало. Затем проверьте отборы (организация, склад, счет) и убедитесь, что в запросе нет лишних соединений, дублирующих строки. Сверяйте по конкретной позиции с расшифровкой до документов.

Нужно ли восстанавливать последовательности для получения остатков?

Для самого расчета остатков — нет: виртуальные таблицы считаются по движениям независимо от последовательностей. Но нарушенная последовательность означает, что документы проведены не в хронологическом порядке, из-за чего возможны отрицательные остатки на промежуточные даты и ошибки в учете партий или НДС.

Итог

Что важно запомнить

Остатки на дату получают через типовые отчеты (ОСВ, отчеты по складам) или запросом к виртуальной таблице Остатки с параметром периода. Ключ к правильному результату — корректная граница даты (конец дня, вид «Включая») и отборы в параметрах таблицы, а не в ГДЕ. Проверяйте программный результат сверкой с типовым отчетом и следите за рассчитанными итогами регистров.