Описание
Работа с регистрами накопления — это фундамент учета в любой конфигурации на платформе 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С (модуль «Язык запросов», «Регистры накопления»).
- CORS Academy / Образовательные центры 1С: Практикумы по виртуальным таблицам и оптимизации.
- Книга «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С.рф): «Не пытайтесь сделать «универсальный регистр» для всего. Разделяйте: ОстаткиТоваров (Остатки), Взаиморасчеты (Остатки), ОборотыПродаж (Обороты). Тип регистра диктует логику Приход/Расход и доступные виртуальные таблицы».
Резюме: Чек-лист правильного запроса
- Определите тип регистра (Остатки / Обороты).
- Выберите виртуальную таблицу:
Остатки(точка),Обороты(период),ОстаткиИОбороты(оба). - Для регистров остатков: не используйте
ВидДвиженияв выборке/группировке виртуальных таблиц — платформа уже свернула данные вПриход.../Расход.... - Для детального анализа проводок (аудит, корректировка) — используйте физическую таблицу
Движенияс фильтром поВидДвижения. - Всегда указывайте Период (или Момент) — это главный индекс.
- Проверяйте План запроса на предмет «Full Scan» по таблице движений.
Статья подготовлена на основе актуальной документации 1С:Предприятие 8.3, материалов ИТС, форумов Инфостарт, Forum.1c.ru, Хабр и практики разработки типовых конфигураций (ERP, КА, УТ, БП). Дата актуализации: .