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

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

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

📊 Какой способ получения оборотов вы используете чаще?
Стандартные отчеты 1С
Запросы в консоли
Программный код (1С или SQL)
Выгрузка в Excel
Другой

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

Самый простой метод — использовать встроенные отчеты конфигурации. Почти все типовые решения содержат отчеты, которые автоматически формируют обороты по регистрам накопления. Например, в 1С:Бухгалтерия 3.0 это отчет Анализ субконто, а в 1С:Управление торговлейВедомость по товарам.

Чтобы получить обороты через стандартный отчет:

  • 📊 Откройте раздел Отчеты в главном меню вашей конфигурации.
  • 🔍 Найдите отчет, связанный с нужным регистром (например, Обороты по складам для регистра ТоварыНаСкладах).
  • ⚙️ В настройках отчета укажите период, организацию и другие фильтры.
  • 📤 Сформируйте отчет и при необходимости экспортируйте в Excel или PDF.

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

⚠️ Внимание: В некоторых конфигурациях (например, 1С:ERP 2.5) названия отчетов могут отличаться. Если не находите нужный отчет — проверьте раздел Все функции (клавиша F1 → поиск по ключевому слову, например, "обороты").

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

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

Пример запроса для получения оборотов по регистру ТоварыНаСкладах за месяц:

ВЫБРАТЬ

Товар КАК Товар,

Склад КАК Склад,

СУММА(Количество) КАК КоличествоПриход,

СУММА(Количество) КАК КоличествоРасход

ИЗ

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

&НачалоПериода,

&КонецПериода,

,

Товар, Склад

)

ГДЕ

Товар В (&СписокТоваров)

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

Товар,

Склад

Чтобы выполнить этот запрос:

  1. Откройте консоль запросов через меню Все функции (или нажмите Ctrl+Shift+Q в некоторых конфигурациях).
  2. Вставьте текст запроса и настройте параметры (&НачалоПериода, &КонецПериода, &СписокТоваров).
  3. Нажмите Выполнить и проанализируйте результат.

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

💡

Сохраняйте часто используемые запросы в текстовые файлы или в модуль внешней обработки. Это сэкономит время при повторном использовании.

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

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

Пример кода для получения оборотов по регистру ТоварыНаСкладах:

Процедура ПолучитьОборотыПоТоварам()

НачалоПериода = НачалоМесяца(ТекущаяДата());

КонецПериода = КонецМесяца(ТекущаяДата());

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

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

"ВЫБРАТЬ

| ТоварыНаСкладахОбороты.Товар КАК Товар,

| ТоварыНаСкладахОбороты.Склад КАК Склад,

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

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

|ИЗ

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

| &НачалоПериода,

| &КонецПериода,

| ,

| Товар, Склад

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

|ГДЕ

| ТоварыНаСкладахОбороты.Склад В (&СписокСкладов)

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

| ТоварыНаСкладахОбороты.Товар,

| ТоварыНаСкладахОбороты.Склад";

Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);

Запрос.УстановитьПараметр("КонецПериода", КонецПериода);

СписокСкладов = Новый Массив;

СписокСкладов.Добавить(Справочники.Склады.ОсновнойСклад);

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

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

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

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

Сообщить(СтрШаблон("Товар: %1, Склад: %2, Приход: %3, Расход: %4",

Выборка.Товар, Выборка.Склад, Выборка.Приход, Выборка.Расход));

КонецЦикла;

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

Этот код можно вставить в любой модуль (например, в модуль объекта или внешней обработки). Преимущества программного подхода:

  • 🔧 Полный контроль над логикой обработки данных.
  • 📊 Возможность интеграции с другими механизмами (например, отправка результатов по email).
  • 🔄 Автоматизация рутинных операций (например, ежемесячное формирование отчета).

Однако для новичков этот метод может показаться сложным. Если вы не уверены в своих навыках программирования — начните с консоли запросов или стандартных отчетов.

Как оптимизировать запрос для больших объемов данных?

Для ускорения работы с большими регистрами (например, с миллионами записей) используйте:

1. Индексы — убедитесь, что в регистре настроены индексы по измерениям, которые вы используете в WHERE.

2. Виртуальные таблицы — вместо полного перебора данных используйте виртуальные таблицы оборотов (как в примере выше).

3. Пакетную обработку — если нужно обработать данные за большой период, разбейте запрос на несколько более коротких интервалов.

4. Внешние обработки и отчеты: готовые решения от сообщества

Если вам нужно быстро получить обороты без глубокого погружения в программирование — обратите внимание на внешние обработки. Многие разработчики и энтузиасты выкладывают готовые решения для типичных задач.

Где искать внешние обработки:

  • 🌐 Infostart — крупнейший портал с бесплатными и платными обработками.
  • 📦 Пortal ITS — официальные и партнерские решения от .
  • 💬 Сообщества в Telegram или VK (например, "1С Программисты").

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

Название обработки Назначение Поддерживаемые конфигурации
Универсальный отчет по регистрам накопления Позволяет получить обороты и остатки по любому регистру с гибкой настройкой отбора 1С:Бухгалтерия, УТ 11, ERP 2
Анализ движений документа Показывает, какие документы сформировали обороты по регистру Любые конфигурации на базе 1С:Предприятие 8.3
Сверка регистров накопления Сравнивает обороты между двумя регистрами или периодами 1С:Управление торговлей, ERP

Преимущества внешних обработок:

  • ⚡ Быстрое решение без написания кода.
  • 🔧 Часто содержат дополнительные функции (экспорт в Excel, графики, сравнение периодов).
  • 📱 Можно адаптировать под свои нужды (если есть исходный код).
⚠️ Внимание: Перед использованием внешней обработки проверьте её на тестовой базе. Некоторые решения могут содержать ошибки или конфликтовать с вашей конфигурацией. Также обращайте внимание на лицензию — некоторые обработки распространяются платно.

5. Прямой доступ к базе данных: SQL для опытных пользователей

Для администраторов и разработчиков, работающих с на SQL-сервере (например, Microsoft SQL Server или PostgreSQL), есть возможность получить обороты напрямую из базы данных. Этот метод самый быстрый, но требует знаний SQL и прав доступа к серверу.

Пример SQL-запроса для получения оборотов по регистру ТоварыНаСкладах:

SELECT

T1._Fld1234 AS Товар, -- Замените на реальный ID поля "Товар"

T1._Fld5678 AS Склад, -- Замените на реальный ID поля "Склад"

SUM(CASE WHEN T1._RecKind = 1 THEN T1._Fld9101 ELSE 0 END) AS Приход,

SUM(CASE WHEN T1._RecKind = 2 THEN T1._Fld9101 ELSE 0 END) AS Расход

FROM

_AccumRg1234 T1 -- _AccumRg{ID регистра} - таблица регистра

WHERE

T1._Period BETWEEN '2026-01-01' AND '2026-01-31'

GROUP BY

T1._Fld1234, T1._Fld5678

Чтобы выполнить этот запрос:

  1. Подключитесь к базе данных через SQL Server Management Studio или pgAdmin.
  2. Найдите таблицу регистра накопления (имя начинается с _AccumRg, заканчивается ID регистра).
  3. Замените псевдонимы полей (_Fld1234) на реальные идентификаторы из вашей базы.
  4. Выполните запрос и экспортируйте результаты.

Предупреждения при работе с SQL:

  • 🔐 Никогда не изменяйте данные напрямую в таблицах — это может нарушить целостность базы.
  • 📊 Структура таблиц может меняться при обновлении конфигурации.
  • 🔄 После прямых запросов рекомендуется выполнить Тестирование и исправление базы в .
⚠️ Внимание: Прямой доступ к базе данных может нарушать условия лицензионного соглашения . Используйте этот метод только если вы администратор системы и понимаете риски.

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

При работе с оборотами по регистрам накопления даже опытные пользователи допускают ошибки. Вот самые распространённые из них и способы их предотвращения:

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

Ещё несколько советов для избежания ошибок:

  • 🔍 Всегда проверяйте период в запросе — даже один лишний день может исказить результаты.
  • 📋 Если используете СУММА — убедитесь, что суммируете правильный ресурс (например, Количество, а не Сумма).
  • 🔄 При работе с большими регистрами тестируйте запросы на тестовой базе.

☑️ Проверка корректности оборотов

Выполнено: 0 / 4

Сравнение методов: какой выбрать?

Чтобы помочь вам определиться с оптимальным способом получения оборотов, мы составили таблицу соответствия методов и типичных задач:

Задача Стандартный отчет Консоль запросов Программный код Внешняя обработка SQL-запрос
Быстро получить обороты по стандартному регистру ⚠️
Получить обороты с нестандартной детализацией
Автоматизировать формирование отчета ⚠️
Проанализировать большие объемы данных ⚠️
Нужен экспорт в Excel с форматированием ⚠️

Легенда:

  • ✅ — оптимальный метод
  • ⚠️ — возможен, но с ограничениями
  • ❌ — не подходит

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

💡

Для большинства бухгалтерских задач достаточно стандартных отчетов или консоли запросов. Программный код и SQL нужны только для сложных или нестандартных сценариев.

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

Как узнать имя регистра накопления для запроса?

Имя регистра можно посмотреть в конфигураторе (Конфигуратор → Объекты конфигурации → Регистры накопления) или через меню Все функции (в пользовательском режиме). Также имя регистра часто отображается в подсказках при наборе текста запроса в консоли.

Почему в запросе обороты не совпадают с отчетом?

Наиболее частые причины:

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

Чтобы найти разницу, сравните текст запроса отчета (можно посмотреть через Все действия → Изменить вариант отчета → Запрос) с вашим запросом.

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

Да, для этого нужно использовать виртуальную таблицу РегистрНакопления.ИмяРегистра.ОборотыИОстатки или РегистрНакопления.ИмяРегистра.ОборотыСДетками. Пример:

ВЫБРАТЬ

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

ТоварыНаСкладахОбороты.Товар КАК Товар,

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

ИЗ

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

&НачалоПериода,

&КонецПериода,

Документ,

Товар

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

ГДЕ

ТоварыНаСкладахОбороты.Регистратор = &НужныйДокумент

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

ТоварыНаСкладахОбороты.Регистратор,

ТоварыНаСкладахОбороты.Товар

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

Скорость выполнения запроса зависит от нескольких факторов:

  • 📌 Индексы: Убедитесь, что в регистре настроены индексы по тем измерениям, которые вы используете в условии ГДЕ.
  • 📅 Период: Разбейте большой период на более мелкие интервалы (например, помесячно).
  • 🔍 Фильтры: Максимально сузьте выборку с помощью параметров (например, по конкретному складу или номенклатуре).
  • 🖥️ Аппаратные ресурсы: Если запрос выполняется на сервере , убедитесь, что у него достаточно оперативной памяти.

Также можно использовать ПЛАН ВЫПОЛНЕНИЯ для анализа узких мест:

ОБЪЯСНИТЬ

ВЫБРАТЬ ...

ИЗ РегистрНакопления.ИмяРегистра.Обороты(...)

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

Да, принципы те же, но регистры будут другими. Например, для анализа начислений и удержаний используется регистр НачисленияУдержанияРасчеты. Пример запроса:

ВЫБРАТЬ

НачисленияОбороты.Сотрудник КАК Сотрудник,

НачисленияОбороты.ВидНачисления КАК ВидНачисления,

СУММА(НачисленияОбороты.Сумма) КАК Сумма

ИЗ

РегистрНакопления.НачисленияУдержанияРасчеты.Обороты(

&НачалоПериода,

&КонецПериода,

,

Сотрудник, ВидНачисления

) КАК НачисленияОбороты

ГДЕ

НачисленияОбороты.ВидНачисления = &НужныйВидНачисления

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

НачисленияОбороты.Сотрудник,

НачисленияОбороты.ВидНачисления

В 1С:ЗУП также есть стандартные отчеты, такие как Анализ начислений или Свод по зарплате, которые можно использовать вместо ручных запросов.