Работа с регистрами накопления в 1С:Предприятие 8.3 — одна из самых востребованных задач как для бухгалтеров, так и для программистов. Эти объекты конфигурации хранят данные о движении товаров, денежных средств, расчетах с контрагентами и других количественных показателях. Однако многие пользователи сталкиваются с трудностями при попытке получить актуальный остаток по регистру — особенно когда речь идет о остатках на конкретную дату, по определенному складу или номенклатуре.
В этой статье мы разберем 5 проверенных способов получения остатков, включая стандартные отчеты, конструктор запросов, программный код на встроенном языке и нюансы работы с виртуальными таблицами. Материал будет полезен как начинающим 1С-никам, так и опытным специалистам, которые хотят оптимизировать свои решения. Все примеры приведены для актуальных версий платформы 1С:Предприятие 8.3 и типовых конфигураций (УТ 11, БП 3.0, КА 2).
1. Стандартные отчеты 1С: быстрый способ без программирования
Самый простой метод получить остатки — использовать встроенные отчеты конфигурации. Большинство типовых решений уже содержат готовые формы для анализа регистров накопления.
Для бухгалтерских конфигураций (БП 3.0, УНФ) подойдет отчет "Оборотно-сальдовая ведомость по счету", где можно выбрать счет учета (например, 10 "Материалы" или 41 "Товары") и получить остатки в разрезе субконто. Для торговых конфигураций (УТ 11, КА 2) актуальны отчеты:
- 📊 "Ведомость по товарам на складах" — показывает остатки номенклатуры с детализацией по складам
- 📈 "Анализ доступности товаров" — отображает остатки с учетом резервов и ожидаемых поступлений
- 📋 "Обороты между складами" — полезен для анализа перемещений
Чтобы открыть отчет:
- Перейдите в раздел
Отчетыосновного меню - Выберите нужный отчет (например, "Ведомость по товарам")
- В настройках отчета укажите:
- Период (дату, на которую нужны остатки)
- Организацию (если ведется учет по нескольким юрлицам)
- Склад (при необходимости)
- Группировки (например, по номенклатуре или характеристикам)
СформироватьЕсли в отчете не хватает колонок (например, нужно вывести дополнительные реквизиты номенклатуры), используйте кнопку "Настройки" → "Дополнительные поля" для добавления нужных полей.
⚠️ Внимание: В некоторых конфигурациях (например, УТ 11.4) стандартные отчеты могут не показывать остатки по регистрам накопления напрямую, а использовать агрегированные данные. Для точного анализа лучше использовать методы, описанные в следующих разделах.
2. Конструктор запросов: универсальный инструмент для любых регистров
Конструктор запросов в 1С:Предприятие позволяет гибко получать данные из регистров накопления без написания кода. Этот метод подходит для пользователей, которые не владеют программированием, но нуждаются в нестандартных отчетах.
Алгоритм работы:
- Откройте
Все функции(кнопка в правом верхнем углу или через менюСервис) - Выберите
Конструктор запросов(в некоторых конфигурациях путь может отличаться:Отчеты → Конструктор запросов) - В открывшемся окне:
- Добавьте таблицу с нужным регистром накопления (например,
РегистрНакопления.ТоварыНаСкладах) - Выберите виртуальную таблицу
ОстаткиилиОстаткиИОбороты - Укажите параметры отбора (дату, склад, номенклатуру)
- Добавьте нужные поля в результат (номенклатура, количество, сумма)
- Добавьте таблицу с нужным регистром накопления (например,
Пример настройки конструктора для получения остатков товаров:
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество,
ТоварыНаСкладахОстатки.СуммаОстаток КАК Сумма
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(
&ДатаОтчета,
Склад = &ТекущийСклад
) КАК ТоварыНаСкладахОстатки
Указан корректный регистр накопления|
Выбрана виртуальная таблица "Остатки" или "ОстаткиИОбороты"|
Задана дата, на которую нужны остатки|
Указаны параметры отбора (склад, номенклатура и т.д.)|
Поля результата соответствуют требуемой информации-->
| Виртуальная таблица | Что содержит | Когда использовать |
|---|---|---|
Остатки |
Только остатки на указанную дату | Когда нужны актуальные остатки без истории движений |
ОстаткиИОбороты |
Остатки + обороты за период | Для анализа изменений остатков за период |
Обороты |
Только обороты за период | Когда нужны данные о движениях без остатков |
СрезПоследних |
Последние записи по измерениям | Для регистров сведений, а не накопления |
3. Программный код: получение остатков через встроенный язык
Для программистов и опытных пользователей самый гибкий способ — написание кода на встроенном языке 1С. Этот метод позволяет получать остатки с любой детализацией и дополнительной обработкой.
Основные методы работы с регистрами накопления:
- 🔹 Метод
Получить()— для чтения текущих записей - 🔹 Виртуальные таблицы — через запрос с использованием
РегистрНакопления.Имя.Остатки() - 🔹 Агрегатные функции —
СУММА(),МАКСИМУМ()в запросах - 🔹 Прямое обращение — через
РегистрыНакопления.Имя
Пример кода для получения остатков товаров на складе:
// Получение остатков через виртуальную таблицу
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество,
| ТоварыНаСкладахОстатки.СуммаОстаток КАК Сумма
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| &ДатаОтчета,
| Склад = &ТекущийСклад
| ) КАК ТоварыНаСкладахОстатки";
Запрос.УстановитьПараметр("ДатаОтчета", ТекущаяДата());
Запрос.УстановитьПараметр("ТекущийСклад", Склад);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Строка(Выборка.Номенклатура) + ": " +
Выборка.Количество + " шт., " +
Выборка.Сумма + " руб.");
КонецЦикла;
Для регистров с дополнительными измерениями (например, ПартииТоваров) код будет аналогичным, но с указанием дополнительных полей:
Запрос.Текст =
"ВЫБРАТЬ
| ПартииТоваровОстатки.Номенклатура,
| ПартииТоваровОстатки.Партия,
| ПартииТоваровОстатки.КоличествоОстаток,
| ПартииТоваровОстатки.СуммаОстаток
|ИЗ
| РегистрНакопления.ПартииТоваров.Остатки(&ДатаОтчета) КАК ПартииТоваровОстатки";
Как ускорить выполнение запроса к большим регистрам?
Для оптимизации запросов к регистрам накопления с большим объемом данных (более 100 000 записей) используйте:
1. Индексирование по измерениям регистра (настраивается в конфигураторе)
2. Ограничение периода выборки (указывайте точную дату вместо диапазона)
3. Использование предопределенных отборов (например, по конкретному складу)
4. Разбиение большого запроса на несколько меньших с последующим объединением результатов
5. Применение временных таблиц для промежуточных расчетов
⚠️ Внимание: При работе с регистрами накопления в управляемом приложении (тонкий клиент, веб-клиент) некоторые методы могут быть недоступны. В этом случае используйте серверные процедуры или HTTP-сервисы для выполнения тяжелых запросов.
4. Отчет "Анализ субконто": скрытые возможности для бухгалтеров
Малоизвестный, но крайне полезный инструмент для бухгалтеров — отчет "Анализ субконто". Он позволяет получить остатки по регистрам накопления, которые связаны со счетами бухгалтерского учета (например, регистр БухгалтерияХозрасчетный в БП 3.0).
Преимущества этого метода:
- 📌 Показывает остатки в разрезе субконто (номенклатура, контрагенты, договора)
- 📌 Поддерживает многомерный анализ (можно добавить несколько уровней детализации)
- 📌 Интегрирован с бухгалтерскими счетами (удобно для сверки с балансом)
- 📌 Позволяет выгружать данные в Excel с сохранением структуры
Инструкция по использованию:
- Откройте раздел
Бухгалтерия→Отчеты - Выберите
Анализ субконто - В настройках отчета:
- Укажите счет (например, 10 "Материалы" или 41 "Товары")
- Выберите вид субконто (номенклатура, склады и т.д.)
- Установите период и организацию
- Добавьте дополнительные группировки при необходимости
Сформировать и проанализируйте остаткиОсобенность этого отчета — он показывает не только количественные остатки, но и суммовые оценки, что важно для бухгалтерского учета. Например, можно увидеть остатки товаров одновременно в штуках и в рублевом эквиваленте.
5. Работа с остатками через внешние обработки
Когда стандартных средств 1С недостаточно, на помощь приходят внешние обработки. Это отдельные файлы с расширением .epf или .erf, которые можно подключать к базе для выполнения специфических задач.
Популярные обработки для работы с остатками:
- 🔧 "Универсальный отчет по регистрам" — позволяет строить произвольные отчеты по любым регистрам накопления
- 📊 "Анализ остатков и оборотов" — расширенная версия стандартных отчетов с дополнительными фильтрами
- 🔄 "Сверка остатков между регистрами" — помогает находить расхождения в данных
- 📈 "Динамика остатков" — показывает изменение остатков в разрезе времени
Где взять обработки:
- Официальный каталог 1С (
1С:Предприятие → Справка → Каталог решений) - Сайт its.1c.ru (раздел "Обработки")
- Специализированные форумы (например, infostart.ru)
- Готовые решения от партнеров 1С
Пример подключения внешней обработки:
- Скачайте файл обработки (например,
АнализОстатков.epf) - В 1С откройте
Файл → Открыть - Выберите скачанный файл и нажмите
Открыть - В открывшемся окне обработки укажите необходимые параметры и выполните формирование отчета
⚠️ Внимание: При использовании внешних обработок из ненадежных источников существует риск заражения базы вредоносным кодом. Перед подключением проверяйте файлы антивирусом и анализируйте код в конфигураторе (если есть такие навыки).
Внешние обработки позволяют решать нестандартные задачи без модификации конфигурации, что особенно важно для типовых решений, где изменения конфигурации запрещены.
6. Особенности работы с остатками в распределенных базах
Если вы работаете с распределенной информационной базой (РИБ) или 1С:Предприятие в режиме Файловый/Клиент-серверный с удаленными узлами, получение остатков имеет свои нюансы.
Основные проблемы и их решения:
| Проблема | Причина | Решение |
|---|---|---|
| Разные остатки в узлах РИБ | Не синхронизированы документы | Выполнить обмен данными и проверить логи синхронизации |
| Медленное формирование отчетов | Большой объем данных в удаленных узлах | Использовать серверные процедуры или выгружать данные порциями |
| Ошибки при обращении к регистрам | Недостаточные права у пользователя | Настроить права на уровне РИБ для соответствующих ролей |
| Расхождения в суммовых остатках | Разные курсы валют в узлах | Настроить синхронизацию курсов валют перед обменом |
Для корректной работы с остатками в РИБ рекомендуется:
- Перед формированием отчетов выполнять полную синхронизацию данных
- Использовать
Планы обменадля контроля актуальности данных - Настраивать фоновые задания для тяжелых отчетов
- Применять механизм версий данных для отслеживания изменений
Пример кода для проверки актуальности данных в РИБ:
// Проверка даты последнего обмена
ПоследнийОбмен = ПланыОбмена.ОсновнойПланОбмена.ПолучитьПоследнююДатаОбмена();
Если ТекущаяДата() - ПоследнийОбмен > 1 Тогда
Сообщить("Данные не синхронизированы! Последний обмен: " + ПоследнийОбмен);
КонецЕсли;
7. Типичные ошибки и как их избежать
При работе с остатками регистров накопления пользователи часто сталкиваются с типичными ошибками, которые приводят к некорректным данным или сбоям в работе системы.
Рассмотрим наиболее распространенные проблемы:
- 🚫 Неуказанная дата в запросе — если не передать параметр даты в виртуальную таблицу
Остатки(), система вернет остатки на текущую дату, что может быть неожиданно - 🚫 Игнорирование прав доступа — попытка получить остатки по регистру, к которому у пользователя нет прав, приведет к ошибке
- 🚫 Неправильный выбор виртуальной таблицы — использование
ОборотывместоОстаткидаст неверные результаты - 🚫 Отсутствие отборов по измерениям — запрос без фильтра по складу или организации может вернуть миллионы записей
- 🚫 Неучет особенностей периодических регистров — некоторые регистры (например,
ВзаиморасчетыСКонтрагентами) требуют указания периода
Пример ошибочного и корректного запроса:
Ошибочный вариант (без даты):
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура,
ТоварыНаСкладахОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки() КАК ТоварыНаСкладахОстатки
Корректный вариант:
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура,
ТоварыНаСкладахОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета) КАК ТоварыНаСкладахОстатки
⚠️ Внимание: В конфигурациях с включенным механизмом "Управление по партиям" (например, УТ 11.4) остатки по региструТоварыНаСкладахмогут отличаться от данных в регистреПартииТоваров. Всегда уточняйте, какой именно регистр нужно анализировать для вашей задачи.
FAQ: Ответы на частые вопросы
Как получить остатки по регистру накопления на конкретную дату в прошлом?
Используйте виртуальную таблицу Остатки() с указанием нужной даты в параметрах. Пример:
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура,
ТоварыНаСкладахОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки('2023-12-31') КАК ТоварыНаСкладахОстатки
Для даты в прошлом убедитесь, что в базе есть движения регистра на эту дату (иначе остатки будут нулевые).
Почему остатки в отчете и через запрос отличаются?
Разница может возникать по нескольким причинам:
- В отчете используются дополнительные фильтры или группировки
- Запрос обращается к другому регистру (например, к
ПартииТовароввместоТоварыНаСкладах) - В конфигурации настроены разные права доступа для отчетов и программного кода
- Отчет использует кэшированные данные, а запрос — актуальные
Для проверки сравните SQL-запросы, которые генерирует 1С в обоих случаях (включите режим отладки SQL).
Можно ли получить остатки по регистру накопления в мобильном приложении 1С?
Да, но с ограничениями:
- В мобильном клиенте доступны только те отчеты, которые адаптированы для мобильной платформы
- Сложные запросы к регистрам могут не выполняться из-за ограничений производительности
- Рекомендуется использовать публикуемые отчеты или HTTP-сервисы для получения данных
Пример публикации отчета для мобильного доступа:
// В модуле управляемого приложения
Процедура ОпубликоватьОтчетПоОстаткам() Экспорт
Отчет = Отчеты.ВедомостьПоТоварам.Создать();
Возврат Отчет;
КонецПроцедуры
Как ускорить запрос к большому регистру накопления (более 1 млн записей)?
Оптимизация запросов к большим регистрам:
- Используйте индексы по измерениям регистра (настраивается в конфигураторе)
- Ограничивайте период выборки (указывайте точную дату вместо диапазона)
- Применяйте промежуточные таблицы для сложных расчетов
- Используйте
РАЗРЕШИТЬ КЭШИРОВАНИЕв тексте запроса - Для регулярных отчетов настройте фоновое выполнение в нерабочее время
Пример оптимизированного запроса:
ВЫБРАТЬ РАЗРЕШИТЬ КЭШИРОВАНИЕ
Первые 1000
ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК Количество
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОтчета, Склад = &ТекущийСклад) КАК ТоварыНаСкладахОстатки
СГРУППИРОВАТЬ ПО
ТоварыНаСкладахОстатки.Номенклатура
Какие регистры накопления чаще всего используются для анализа остатков?
В типовых конфигурациях 1С наиболее востребованные регистры:
| Конфигурация | Регистр накопления | Назначение |
|---|---|---|
| УТ 11, КА 2 | ТоварыНаСкладах |
Остатки номенклатуры на складах |
| УТ 11, КА 2 | ПартииТоваров |
Остатки с учетом партий (серий, сроков годности) |
| БП 3.0 | БухгалтерияХозрасчетный |
Остатки по бухгалтерским счетам |
| БП 3.0, УТ 11 | ВзаиморасчетыСКонтрагентами |
Дебиторская и кредиторская задолженность |
| ЗУП 3.1 | НачисленияЗарплаты |
Остатки по начислениям и удержаниям |
Для нетиповых конфигураций names регистров могут отличаться — уточняйте в конфигураторе (Объекты → Регистры накопления).