Работа с регистрами накопления в 1С запросы виртуальные таблицы и лучшие практики

Разбираем структуру движений Прихода/Расхода и магию виртуальных таблиц. Освойте регистры накопления 1С для крутых отчетов и быстрых запросов!

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

Описание

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

В данной статье подробно разбираются: структура хранения движений, виртуальные таблицы для получения остатков и оборотов, особенности поля ВидДвижения, а также типичные ошибки и лучшие практики написания запросов. Информация актуальна на для платформы 1С:Предприятие 8.3 (актуальные релизы).

Официальный сайт и нормативная база

  • Официальный сайт платформы: https://1c.ru
  • Документация по языку запросов (Синтакс-помощник): Доступен встроено в Конфигураторе (F1) или онлайн на портале ИТС (раздел «Технологическая платформа» → «Документация» → «Язык запросов»).
  • Стандартные подсистемы (БСП): Примеры работы с регистрами в типовых конфигурациях (ERP, КА, УТ, БП).

Горячая линия / Сообщество экспертов (Аналог поддержки)

Официальной телефонной «горячей строки» по синтаксису запросов не существует, однако сообщество 1С-разработчиков выступает в этой роли наиболее эффективно:

  • Форум Инфостарт: infostart.ru — крупнейшее сообщество, раздел «Программирование», теги «Регистры накопления», «Запросы».
  • Форум 1С (forum.1c.ru): Официальный форум фирмы 1С, разделы для технических специалистов.
  • Хабр Q&A / Toster: Раздел «1С» для точечных вопросов по синтаксису и оптимизации.
  • Telegram-чаты: «1С Программисты», «1С Запросы и Отчеты», «БСП и Типовые конфигурации».

Контакты для обращений (Ресурсы для изучения)

Поскольку тема техническая, «контактами» являються ключевые учебные ресурсы:

  1. Курсы «Специалист 1С:Платформа»: Официальные курсы фирмы 1С (модуль «Язык запросов», «Регистры накопления»).
  2. CORS Academy / Образовательные центры 1С: Практикумы по виртуальным таблицам и оптимизации.
  3. Книга «1С:Предприятие 8.3. Практика разработки» (Радченко, Киров): Главы про регистры накопления и виртуальные таблицы.

Личный кабинет разработчика (Инструменты работы)

Ваш «личный кабинет» для работы с запросами — это среда разработки:

  • Консоль запросов (в Конфигураторе / В предприятии): Основной инструмент отладки. Позволяет выполнять запросы, смотреть план запроса, временные таблицы.
  • Синтакс-помощник (F1): Справочник по виртуальным таблицам Обороты, Остатки, ОстаткиИОбороты.
  • План запроса (Анализ производительности): Вкладка «План» в консоли запросов — главный инструмент поиска узких мест (Full Scan, отсутствие индексов).

График приема (Когда применять те или иные виртуальные таблицы)

Задача Виртуальная таблица Параметры периода Особенности Приход/Расход
Текущие остатки на момент времени Регистр.Остатки(&Момент, ...) Момент времени (Точка) Автоматически: Приход (+), Расход (-). Поле ВидДвижения не нужно.
Обороты за период (Приход/Расход отдельно) Регистр.Обороты(&Нач, &Кон, , ...) Начало и Конец периода Возвращает поля: ПриходКоличество, РасходКоличество, ПриходСумма, РасходСумма.
И остатки, и обороты сразу Регистр.ОстаткиИОбороты(...) Момент остатков + Период оборотов Оптимально для отчетов «Ведомость товаров».
Анализ детальных движений (проводок) Регистр.Движения (физическая таблица) Фильтр по Периоду/Регистратору Есть поле ВидДвижения (Приход/Расход). Нужен для ручного расчета или корректировок.

Отделы (Классификация регистров и типов движений)

Регистры остатков (Балансовые)

Хранят текущее состояние (остаток). Движения имеют явный признак направления.

  • Приход (ВидДвиженияНакопления.Приход): Увеличивает ресурсы (Количество, Сумма).
  • Расход (ВидДвиженияНакопления.Расход): Уменьшает ресурсы.
  • Уникальность записи: Регистратор + НомерСтроки + ВидДвижения + Измерения.

Регистры оборотов

Не хранят остатки, только историю изменений. Поля Приход/Расход (ВидДвижения) НЕТ.

  • Все записи считаются «Приходом» (положительным приращением).
  • Для учета расхода используется отрицательное значение ресурса (например, Количество = -5).
  • В запросе Обороты по такому регистру вернет приходы в полях Приход..., а расходы (отрицательные значения) — в полях Расход... автоматически.

Регистры с измерением «Вид операции» (Альтернатива ВидДвижения)

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

Руководство (Ключевые концепции и лучшие практики)

Принцип «Пиши в Сумму/Количество, а не в Приход/Расход»

При программном создании движений (в модуле объекта документа, процедуре ОбработкаПроведения) заполняйте ресурсы напрямую:

Движение = Движения.ОстаткиТоваров.Добавить;
Движение.Период = Дата;
Движение.Номенклатура = Стр.Номенклатура;
Движение.Склад = Стр.Склад;
// Для Прихода:
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Количество = Стр.Количество; // Положительное
// Для Расхода:
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Количество = Стр.Количество; // Тоже положительное! Платформа сама вычтет.

Важно: В поле ресурса (Количество, Сумма) всегда пишется абсолютное положительное значение. Направление определяет только ВидДвижения.

Как правильно вычесть Расход из Прихода в Запросе (Best Practice)

Не нужно вручную делать ВЫБОР КОГДА ВидДвижения = Приход ТОГДА Сумма ИНАЧЕ -Сумма КОНЕЦ над физической таблицей движений. Используйте виртуальную таблицу Обороты:

ВЫБРАТЬ
 Товары.Номенклатура,
 СУММА(Товары.ПриходКоличество) КАК ВсегоПриход,
 СУММА(Товары.РасходКоличество) КАК ВсегоРасход,
 СУММА(Товары.ПриходКоличество) ⸺ СУММА(Товары.РасходКоличество) КАК ЧистыйПрирост
ИЗ
 РегистрНакопления.ОстаткиТоваров.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК Товары
СГРУППИРОВАТЬ ПО
 Товары.Номенклатура

Платформа сама разделит движения по полю ВидДвижения и предоставит готовые колонки Приход... и Расход... для каждого ресурса.

Особенность: Приход по расходному документу (Взаиморасчеты)

Частая логическая ошибка новичков: «Приходная накладная — это всегда Приход».

  • Регистр «Товары на складах»: Приходная накладная = Приход. Расходная накладная = Расход.
  • Регистр «Взаиморасчеты с покупателями»: Реализация (Расходная накладная) = Приход задолженности (покупатель должен нам). Поступление оплаты = Расход задолженности.

Всегда смотрите на экономический смысл ресурса регистра, а не на имя документа.

Личный прием (Разбор типичных ошибок «на приеме»)

Ошибка 1: Использование физической таблицы вместо виртуальной

Плохо: `ИЗ РегистрНакопления.ОстаткиТоваров КАК Движения … ГДЕ Движения.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)`

Проблема: Полный скан таблицы движений, отсутствие индексов по периоду, ручной расчет остатков.

Хорошо: `ИЗ РегистрНакопления.ОстаткиТоваров.Остатки(&Момент, ) КАК Остатки`

Ошибка 2: Игнорирование поля «НомерСтроки» при соединении

При соединении движений регистра с табличной частью документа-регистратора обязательно используйте НомерСтроки:

ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваров.Товары КАК ТЧ
ПО Движения.Регистратор = ТЧ.Ссылка
 И Движения.НомерСтроки = ТЧ.НомерСтроки

Иначе при наличии нескольких одинаковых номенклатур в одном документе получится декартово произведение.

Ошибка 3: Параметр «Авто» в виртуальных таблицах

Вторым параметром у Обороты и Остатки идет Условие отбора по измерениям.

  • Авто — платформа сама подставит отборы из внешнего запроса (если есть соединение) или не наложит отбор. Рекомендуется по умолчанию.
  • Склад = &Склад — явный отбор. Используйте, если нужно жестко ограничить выборку до соединения.

Отзывы (Best Practices от сообщества / Экспертные советы)

Совет от форума Инфостарт (2025): «Всегда используйте Обороты(..., Авто, ) с пустым условием отбора (последний параметр), если делаете отбор в ГДЕ внешнего запроса. Оптимизатор 1С (и СУБД) лучше отработает отбор на уровне виртуальной таблицы, чем после объединения. Но если отбор сложный (функции, подзапросы) — пишите в условие виртуальной таблицы явно».

Опыт Хабр / Статья «Что происходит в СУБД при записи регистра» (2023): «При записи движений платформа генерирует MERGE (UPSERT) запросы. Для регистров остатков — это обновление таблицы остатков (Insert/Update/Delete) и запись в таблицу движений. Понимание этого объясняет, почему массовая запись через НаборЗаписей быстрее поодиночного Записать в цикле — меньше round-trip’ов к СУБД».

Правило «Золотого молотка» (Курсы-по-1С.рф): «Не пытайтесь сделать «универсальный регистр» для всего. Разделяйте: ОстаткиТоваров (Остатки), Взаиморасчеты (Остатки), ОборотыПродаж (Обороты). Тип регистра диктует логику Приход/Расход и доступные виртуальные таблицы».

Резюме: Чек-лист правильного запроса

  1. Определите тип регистра (Остатки / Обороты).
  2. Выберите виртуальную таблицу: Остатки (точка), Обороты (период), ОстаткиИОбороты (оба).
  3. Для регистров остатков: не используйте ВидДвижения в выборке/группировке виртуальных таблиц — платформа уже свернула данные в Приход... / Расход....
  4. Для детального анализа проводок (аудит, корректировка) — используйте физическую таблицу Движения с фильтром по ВидДвижения.
  5. Всегда указывайте Период (или Момент) — это главный индекс.
  6. Проверяйте План запроса на предмет «Full Scan» по таблице движений.

Статья подготовлена на основе актуальной документации 1С:Предприятие 8.3, материалов ИТС, форумов Инфостарт, Forum.1c.ru, Хабр и практики разработки типовых конфигураций (ERP, КА, УТ, БП). Дата актуализации: .