Работа с регистрами накопления в 1С:Предприятие 8.3 — одна из самых востребованных задач как для бухгалтеров, так и для программистов. Эти объекты конфигурации хранят данные о движении товаров, денежных средств, расчетах с контрагентами и других количественных показателях. Однако многие пользователи сталкиваются с трудностями при попытке получить актуальный остаток по регистру — особенно когда речь идет о остатках на конкретную дату, по определенному складу или номенклатуре.

В этой статье мы разберем 5 проверенных способов получения остатков, включая стандартные отчеты, конструктор запросов, программный код на встроенном языке и нюансы работы с виртуальными таблицами. Материал будет полезен как начинающим 1С-никам, так и опытным специалистам, которые хотят оптимизировать свои решения. Все примеры приведены для актуальных версий платформы 1С:Предприятие 8.3 и типовых конфигураций (УТ 11, БП 3.0, КА 2).

1. Стандартные отчеты 1С: быстрый способ без программирования

Самый простой метод получить остатки — использовать встроенные отчеты конфигурации. Большинство типовых решений уже содержат готовые формы для анализа регистров накопления.

Для бухгалтерских конфигураций (БП 3.0, УНФ) подойдет отчет "Оборотно-сальдовая ведомость по счету", где можно выбрать счет учета (например, 10 "Материалы" или 41 "Товары") и получить остатки в разрезе субконто. Для торговых конфигураций (УТ 11, КА 2) актуальны отчеты:

  • 📊 "Ведомость по товарам на складах" — показывает остатки номенклатуры с детализацией по складам
  • 📈 "Анализ доступности товаров" — отображает остатки с учетом резервов и ожидаемых поступлений
  • 📋 "Обороты между складами" — полезен для анализа перемещений

Чтобы открыть отчет:

  1. Перейдите в раздел Отчеты основного меню
  2. Выберите нужный отчет (например, "Ведомость по товарам")
  3. В настройках отчета укажите:
    • Период (дату, на которую нужны остатки)
    • Организацию (если ведется учет по нескольким юрлицам)
    • Склад (при необходимости)
    • Группировки (например, по номенклатуре или характеристикам)
  • Нажмите Сформировать
  • 💡

    Если в отчете не хватает колонок (например, нужно вывести дополнительные реквизиты номенклатуры), используйте кнопку "Настройки" → "Дополнительные поля" для добавления нужных полей.

    ⚠️ Внимание: В некоторых конфигурациях (например, УТ 11.4) стандартные отчеты могут не показывать остатки по регистрам накопления напрямую, а использовать агрегированные данные. Для точного анализа лучше использовать методы, описанные в следующих разделах.

    2. Конструктор запросов: универсальный инструмент для любых регистров

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

    Алгоритм работы:

    1. Откройте Все функции (кнопка в правом верхнем углу или через меню Сервис)
    2. Выберите Конструктор запросов (в некоторых конфигурациях путь может отличаться: Отчеты → Конструктор запросов)
    3. В открывшемся окне:
      • Добавьте таблицу с нужным регистром накопления (например, РегистрНакопления.ТоварыНаСкладах)
      • Выберите виртуальную таблицу Остатки или ОстаткиИОбороты
      • Укажите параметры отбора (дату, склад, номенклатуру)
      • Добавьте нужные поля в результат (номенклатура, количество, сумма)
  • Выполните запрос и сохраните результат в Excel или печатную форму
  • Пример настройки конструктора для получения остатков товаров:

    ВЫБРАТЬ
    

    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,

    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество,

    ТоварыНаСкладахОстатки.СуммаОстаток КАК Сумма

    ИЗ

    РегистрНакопления.ТоварыНаСкладах.Остатки(

    &ДатаОтчета,

    Склад = &ТекущийСклад

    ) КАК ТоварыНаСкладахОстатки

    Указан корректный регистр накопления|

    Выбрана виртуальная таблица "Остатки" или "ОстаткиИОбороты"|

    Задана дата, на которую нужны остатки|

    Указаны параметры отбора (склад, номенклатура и т.д.)|

    Поля результата соответствуют требуемой информации-->

    Виртуальная таблица Что содержит Когда использовать
    Остатки Только остатки на указанную дату Когда нужны актуальные остатки без истории движений
    ОстаткиИОбороты Остатки + обороты за период Для анализа изменений остатков за период
    Обороты Только обороты за период Когда нужны данные о движениях без остатков
    СрезПоследних Последние записи по измерениям Для регистров сведений, а не накопления

    3. Программный код: получение остатков через встроенный язык

    Для программистов и опытных пользователей самый гибкий способ — написание кода на встроенном языке . Этот метод позволяет получать остатки с любой детализацией и дополнительной обработкой.

    Основные методы работы с регистрами накопления:

    • 🔹 Метод Получить() — для чтения текущих записей
    • 🔹 Виртуальные таблицы — через запрос с использованием РегистрНакопления.Имя.Остатки()
    • 🔹 Агрегатные функцииСУММА(), МАКСИМУМ() в запросах
    • 🔹 Прямое обращение — через РегистрыНакопления.Имя

    Пример кода для получения остатков товаров на складе:

    // Получение остатков через виртуальную таблицу
    

    Запрос = Новый Запрос;

    Запрос.Текст =

    "ВЫБРАТЬ

    | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,

    | ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество,

    | ТоварыНаСкладахОстатки.СуммаОстаток КАК Сумма

    |ИЗ

    | РегистрНакопления.ТоварыНаСкладах.Остатки(

    | &ДатаОтчета,

    | Склад = &ТекущийСклад

    | ) КАК ТоварыНаСкладахОстатки";

    Запрос.УстановитьПараметр("ДатаОтчета", ТекущаяДата());

    Запрос.УстановитьПараметр("ТекущийСклад", Склад);

    РезультатЗапроса = Запрос.Выполнить();

    Выборка = РезультатЗапроса.Выбрать();

    Пока Выборка.Следующий() Цикл

    Сообщить(Строка(Выборка.Номенклатура) + ": " +

    Выборка.Количество + " шт., " +

    Выборка.Сумма + " руб.");

    КонецЦикла;

    Для регистров с дополнительными измерениями (например, ПартииТоваров) код будет аналогичным, но с указанием дополнительных полей:

    Запрос.Текст =
    

    "ВЫБРАТЬ

    | ПартииТоваровОстатки.Номенклатура,

    | ПартииТоваровОстатки.Партия,

    | ПартииТоваровОстатки.КоличествоОстаток,

    | ПартииТоваровОстатки.СуммаОстаток

    |ИЗ

    | РегистрНакопления.ПартииТоваров.Остатки(&ДатаОтчета) КАК ПартииТоваровОстатки";

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

    Для оптимизации запросов к регистрам накопления с большим объемом данных (более 100 000 записей) используйте:

    1. Индексирование по измерениям регистра (настраивается в конфигураторе)

    2. Ограничение периода выборки (указывайте точную дату вместо диапазона)

    3. Использование предопределенных отборов (например, по конкретному складу)

    4. Разбиение большого запроса на несколько меньших с последующим объединением результатов

    5. Применение временных таблиц для промежуточных расчетов

    ⚠️ Внимание: При работе с регистрами накопления в управляемом приложении (тонкий клиент, веб-клиент) некоторые методы могут быть недоступны. В этом случае используйте серверные процедуры или HTTP-сервисы для выполнения тяжелых запросов.

    4. Отчет "Анализ субконто": скрытые возможности для бухгалтеров

    Малоизвестный, но крайне полезный инструмент для бухгалтеров — отчет "Анализ субконто". Он позволяет получить остатки по регистрам накопления, которые связаны со счетами бухгалтерского учета (например, регистр БухгалтерияХозрасчетный в БП 3.0).

    Преимущества этого метода:

    • 📌 Показывает остатки в разрезе субконто (номенклатура, контрагенты, договора)
    • 📌 Поддерживает многомерный анализ (можно добавить несколько уровней детализации)
    • 📌 Интегрирован с бухгалтерскими счетами (удобно для сверки с балансом)
    • 📌 Позволяет выгружать данные в Excel с сохранением структуры

    Инструкция по использованию:

    1. Откройте раздел БухгалтерияОтчеты
    2. Выберите Анализ субконто
    3. В настройках отчета:
      • Укажите счет (например, 10 "Материалы" или 41 "Товары")
      • Выберите вид субконто (номенклатура, склады и т.д.)
      • Установите период и организацию
      • Добавьте дополнительные группировки при необходимости
  • Нажмите Сформировать и проанализируйте остатки
  • Особенность этого отчета — он показывает не только количественные остатки, но и суммовые оценки, что важно для бухгалтерского учета. Например, можно увидеть остатки товаров одновременно в штуках и в рублевом эквиваленте.

    📊 Какой метод получения остатков вы используете чаще всего?
    Стандартные отчеты 1С
    Конструктор запросов
    Программный код на встроенном языке
    Отчет "Анализ субконто"
    Другой способ

    5. Работа с остатками через внешние обработки

    Когда стандартных средств недостаточно, на помощь приходят внешние обработки. Это отдельные файлы с расширением .epf или .erf, которые можно подключать к базе для выполнения специфических задач.

    Популярные обработки для работы с остатками:

    • 🔧 "Универсальный отчет по регистрам" — позволяет строить произвольные отчеты по любым регистрам накопления
    • 📊 "Анализ остатков и оборотов" — расширенная версия стандартных отчетов с дополнительными фильтрами
    • 🔄 "Сверка остатков между регистрами" — помогает находить расхождения в данных
    • 📈 "Динамика остатков" — показывает изменение остатков в разрезе времени

    Где взять обработки:

    1. Официальный каталог (1С:Предприятие → Справка → Каталог решений)
    2. Сайт its.1c.ru (раздел "Обработки")
    3. Специализированные форумы (например, infostart.ru)
    4. Готовые решения от партнеров

    Пример подключения внешней обработки:

    1. Скачайте файл обработки (например, АнализОстатков.epf)
    2. В откройте Файл → Открыть
    3. Выберите скачанный файл и нажмите Открыть
    4. В открывшемся окне обработки укажите необходимые параметры и выполните формирование отчета
    ⚠️ Внимание: При использовании внешних обработок из ненадежных источников существует риск заражения базы вредоносным кодом. Перед подключением проверяйте файлы антивирусом и анализируйте код в конфигураторе (если есть такие навыки).
    💡

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

    6. Особенности работы с остатками в распределенных базах

    Если вы работаете с распределенной информационной базой (РИБ) или 1С:Предприятие в режиме Файловый/Клиент-серверный с удаленными узлами, получение остатков имеет свои нюансы.

    Основные проблемы и их решения:

    Проблема Причина Решение
    Разные остатки в узлах РИБ Не синхронизированы документы Выполнить обмен данными и проверить логи синхронизации
    Медленное формирование отчетов Большой объем данных в удаленных узлах Использовать серверные процедуры или выгружать данные порциями
    Ошибки при обращении к регистрам Недостаточные права у пользователя Настроить права на уровне РИБ для соответствующих ролей
    Расхождения в суммовых остатках Разные курсы валют в узлах Настроить синхронизацию курсов валют перед обменом

    Для корректной работы с остатками в РИБ рекомендуется:

    1. Перед формированием отчетов выполнять полную синхронизацию данных
    2. Использовать Планы обмена для контроля актуальности данных
    3. Настраивать фоновые задания для тяжелых отчетов
    4. Применять механизм версий данных для отслеживания изменений

    Пример кода для проверки актуальности данных в РИБ:

    // Проверка даты последнего обмена
    

    ПоследнийОбмен = ПланыОбмена.ОсновнойПланОбмена.ПолучитьПоследнююДатаОбмена();

    Если ТекущаяДата() - ПоследнийОбмен > 1 Тогда

    Сообщить("Данные не синхронизированы! Последний обмен: " + ПоследнийОбмен);

    КонецЕсли;

    7. Типичные ошибки и как их избежать

    При работе с остатками регистров накопления пользователи часто сталкиваются с типичными ошибками, которые приводят к некорректным данным или сбоям в работе системы.

    Рассмотрим наиболее распространенные проблемы:

    • 🚫 Неуказанная дата в запросе — если не передать параметр даты в виртуальную таблицу Остатки(), система вернет остатки на текущую дату, что может быть неожиданно
    • 🚫 Игнорирование прав доступа — попытка получить остатки по регистру, к которому у пользователя нет прав, приведет к ошибке
    • 🚫 Неправильный выбор виртуальной таблицы — использование Обороты вместо Остатки даст неверные результаты
    • 🚫 Отсутствие отборов по измерениям — запрос без фильтра по складу или организации может вернуть миллионы записей
    • 🚫 Неучет особенностей периодических регистров — некоторые регистры (например, ВзаиморасчетыСКонтрагентами) требуют указания периода

    Пример ошибочного и корректного запроса:

    Ошибочный вариант (без даты):

    ВЫБРАТЬ
    

    ТоварыНаСкладахОстатки.Номенклатура,

    ТоварыНаСкладахОстатки.КоличествоОстаток

    ИЗ

    РегистрНакопления.ТоварыНаСкладах.Остатки() КАК ТоварыНаСкладахОстатки

    Корректный вариант:

    ВЫБРАТЬ
    

    ТоварыНаСкладахОстатки.Номенклатура,

    ТоварыНаСкладахОстатки.КоличествоОстаток

    ИЗ

    РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета) КАК ТоварыНаСкладахОстатки

    ⚠️ Внимание: В конфигурациях с включенным механизмом "Управление по партиям" (например, УТ 11.4) остатки по регистру ТоварыНаСкладах могут отличаться от данных в регистре ПартииТоваров. Всегда уточняйте, какой именно регистр нужно анализировать для вашей задачи.

    FAQ: Ответы на частые вопросы

    Как получить остатки по регистру накопления на конкретную дату в прошлом?

    Используйте виртуальную таблицу Остатки() с указанием нужной даты в параметрах. Пример:

    ВЫБРАТЬ
    

    ТоварыНаСкладахОстатки.Номенклатура,

    ТоварыНаСкладахОстатки.КоличествоОстаток

    ИЗ

    РегистрНакопления.ТоварыНаСкладах.Остатки('2023-12-31') КАК ТоварыНаСкладахОстатки

    Для даты в прошлом убедитесь, что в базе есть движения регистра на эту дату (иначе остатки будут нулевые).

    Почему остатки в отчете и через запрос отличаются?

    Разница может возникать по нескольким причинам:

    • В отчете используются дополнительные фильтры или группировки
    • Запрос обращается к другому регистру (например, к ПартииТоваров вместо ТоварыНаСкладах)
    • В конфигурации настроены разные права доступа для отчетов и программного кода
    • Отчет использует кэшированные данные, а запрос — актуальные

    Для проверки сравните SQL-запросы, которые генерирует 1С в обоих случаях (включите режим отладки SQL).

    Можно ли получить остатки по регистру накопления в мобильном приложении 1С?

    Да, но с ограничениями:

    • В мобильном клиенте доступны только те отчеты, которые адаптированы для мобильной платформы
    • Сложные запросы к регистрам могут не выполняться из-за ограничений производительности
    • Рекомендуется использовать публикуемые отчеты или HTTP-сервисы для получения данных

    Пример публикации отчета для мобильного доступа:

    // В модуле управляемого приложения
    

    Процедура ОпубликоватьОтчетПоОстаткам() Экспорт

    Отчет = Отчеты.ВедомостьПоТоварам.Создать();

    Возврат Отчет;

    КонецПроцедуры

    Как ускорить запрос к большому регистру накопления (более 1 млн записей)?

    Оптимизация запросов к большим регистрам:

    1. Используйте индексы по измерениям регистра (настраивается в конфигураторе)
    2. Ограничивайте период выборки (указывайте точную дату вместо диапазона)
    3. Применяйте промежуточные таблицы для сложных расчетов
    4. Используйте РАЗРЕШИТЬ КЭШИРОВАНИЕ в тексте запроса
    5. Для регулярных отчетов настройте фоновое выполнение в нерабочее время

    Пример оптимизированного запроса:

    ВЫБРАТЬ РАЗРЕШИТЬ КЭШИРОВАНИЕ
    

    Первые 1000

    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,

    СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК Количество

    ИЗ

    РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета, Склад = &ТекущийСклад) КАК ТоварыНаСкладахОстатки

    СГРУППИРОВАТЬ ПО

    ТоварыНаСкладахОстатки.Номенклатура

    Какие регистры накопления чаще всего используются для анализа остатков?

    В типовых конфигурациях наиболее востребованные регистры:

    Конфигурация Регистр накопления Назначение
    УТ 11, КА 2 ТоварыНаСкладах Остатки номенклатуры на складах
    УТ 11, КА 2 ПартииТоваров Остатки с учетом партий (серий, сроков годности)
    БП 3.0 БухгалтерияХозрасчетный Остатки по бухгалтерским счетам
    БП 3.0, УТ 11 ВзаиморасчетыСКонтрагентами Дебиторская и кредиторская задолженность
    ЗУП 3.1 НачисленияЗарплаты Остатки по начислениям и удержаниям

    Для нетиповых конфигураций names регистров могут отличаться — уточняйте в конфигураторе (Объекты → Регистры накопления).