← Назад к вопросам

Какие виртуальные таблицы есть у регистра накоплений?

2.0 Middle🔥 141 комментариев
#Регистры#Запросы и оптимизация

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Виртуальные таблицы регистра накоплений

Виртуальные таблицы регистра накоплений — это одно из самых важных и мощных возможностей 1С для работы с накопленными данными. Расскажу подробно о каждой.

Что такое виртуальные таблицы

Виртуальные таблицы — это специальные таблицы 1С, которые создаёт автоматически для регистров накоплений. Они не хранятся в БД как обычные таблицы, а генерируются на лету на основе реальных данных.

Они позволяют:

  • Получить остатки товаров на определённую дату
  • Рассчитать движения между датами
  • Проанализировать турнет данных
  • Работать с регистром как с единым объектом

Основные виртуальные таблицы

1. Таблица "Остатки"

Назначение: Получить остатки (сальдо) на конкретную дату.

Как работает: Суммирует все движения до указанной даты и выдаёт итоговый остаток.

// Получение остатков на определённую дату
Запрос = Новый Запрос();
Запрос.Текст = 
    "ВЫБРАТЬ
    |    Остатки.Склад,
    |    Остатки.Товар,
    |    СУММА(Остатки.Количество) КАК ОстатокКоличество,
    |    СУММА(Остатки.Сумма) КАК ОстатокСумма
    |ИЗ
    |    РегистрНакопления.ОстаткиТоваров.Остатки(&ДатаНа) КАК Остатки
    |ГДЕ
    |    Остатки.Склад = &Склад
    |СГРУППИРОВАТЬ ПО
    |    Остатки.Склад,
    |    Остатки.Товар";

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

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

Параметр: Дата (обязателен).

Особенность: По умолчанию остатки берутся на конец дня (23:59:59).

2. Таблица "ОстаткиИДвижения"

Назначение: Получить остатки И движения в одном запросе.

Как работает: Выдаёт:

  • Остаток на начало периода
  • Все движения в период
  • Остаток на конец периода
// Получение остатков и движений в период
Запрос = Новый Запрос();
Запрос.Текст = 
    "ВЫБРАТЬ
    |    Данные.Период,
    |    Данные.Товар,
    |    Данные.Склад,
    |    Данные.ОстатокНачало,
    |    Данные.ОстатокКонец,
    |    Данные.ПриходКоличество,
    |    Данные.РасходКоличество
    |ИЗ
    |    РегистрНакопления.ОстаткиТоваров.ОстаткиИДвижения(&ДатаНачало, &ДатаКонец, , Товар) КАК Данные
    |ПОРЯДОК ПО
    |    Данные.Период";

Запрос.УстановитьПараметр("ДатаНачало", Дата(2024, 1, 1));
Запрос.УстановитьПараметр("ДатаКонец", Дата(2024, 1, 31));

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

Параметры:

  • ДатаНачало (обязателен)
  • ДатаКонец (обязателен)
  • ПериодичностьИтогов (Дата, День, Неделя, Месяц, Квартал, Год)
  • Аналитика (какие поля сгруппировать)

3. Таблица "Движения"

Назначение: Получить только движения (приход/расход), без остатков.

Как работает: Выдаёт все записи в регистр за период.

// Получение всех движений товара
Запрос = Новый Запрос();
Запрос.Текст = 
    "ВЫБРАТЬ
    |    Движения.Период,
    |    Движения.Товар,
    |    Движения.Склад,
    |    Движения.ВидДвижения,  // Приход или Расход
    |    Движения.Количество,
    |    Движения.Сумма
    |ИЗ
    |    РегистрНакопления.ОстаткиТоваров.Движения(&ДатаНачало, &ДатаКонец) КАК Движения
    |ГДЕ
    |    Движения.Товар = &Товар
    |ПОРЯДОК ПО
    |    Движения.Период";

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

Особенность: Выдаёт суммарные движения за каждый день.

4. Таблица "ТекущиеОстатки"

Назначение: Получить остатки на текущий момент времени.

Как работает: Аналогично Остаткам, но без указания даты (используется текущая дата и время).

// Получение текущих остатков
Запрос = Новый Запрос();
Запрос.Текст = 
    "ВЫБРАТЬ
    |    Остатки.Товар,
    |    Остатки.Склад,
    |    СУММА(Остатки.Количество) КАС ОстатокКоличество
    |ИЗ
    |    РегистрНакопления.ОстаткиТоваров.ТекущиеОстатки() КАК Остатки
    |СГРУППИРОВАТЬ ПО
    |    Остатки.Товар,
    |    Остатки.Склад";

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

5. Таблица "ОстаткиЛюбойМомент"

Назначение: Получить остатки на любой момент времени с точностью до секунды.

Как работает: Позволяет узнать остатки в конкретное время дня, а не только на конец дня.

// Остатки в конкретный момент
Запрос = Новый Запрос();
Запрос.Текст = 
    "ВЫБРАТЬ
    |    Остатки.Товар,
    |    Остатки.Склад,
    |    СУММА(Остатки.Количество) КАК ОстатокКоличество
    |ИЗ
    |    РегистрНакопления.ОстаткиТоваров.ОстаткиЛюбойМомент(&МоментВремени) КАК Остатки
    |СГРУППИРОВАТЬ ПО
    |    Остатки.Товар,
    |    Остатки.Склад";

Запрос.УстановитьПараметр("МоментВремени", Дата(2024, 1, 15, 10, 30, 45));

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

Поля в виртуальных таблицах

Стандартные поля для всех таблиц:

  • Период
  • Все измерения регистра
  • Все ресурсы регистра

Дополнительные поля для ОстаткиИДвижения:

  • ОстатокНачало (остаток на начало периода)
  • ОстатокКонец (остаток на конец периода)
  • ПриходКоличество (сумма приходов)
  • ПриходСумма
  • РасходКоличество (сумма расходов)
  • РасходСумма

Пример комплексной аналитики

// Анализ товаров с отрицательным остатком
Запрос = Новый Запрос();
Запрос.Текст = 
    "ВЫБРАТЬ
    |    Остатки.Товар КАК Товар,
    |    Остатки.Склад КАК Склад,
    |    Товары.Наименование КАК ТоварНаименование,
    |    СУММА(Остатки.Количество) КАК ОстатокКоличество,
    |    СУММА(Остатки.Сумма) КАК ОстатокСумма
    |ИЗ
    |    РегистрНакопления.ОстаткиТоваров.Остатки(&ДатаНа) КАК Остатки
    |    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Товары КАК Товары
    |    ПО Остатки.Товар = Товары.Ссылка
    |СГРУППИРОВАТЬ ПО
    |    Остатки.Товар,
    |    Остатки.Склад,
    |    Товары.Наименование
    |ИМЕЯ
    |    СУММА(Остатки.Количество) < 0";

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

Результат = Запрос.Выполнить().Выгрузить();
Если РезультатТовары.Количество() > 0 Тогда
    ЗаписатьОшибку("Найдены товары с отрицательным остатком!");
КонецЕсли;

Практические рекомендации

Выбор правильной таблицы:

  • Остатки — если нужны только финальные остатки
  • ОстаткиИДвижения — для анализа с начало и конец
  • Движения — для учёта всех операций
  • ТекущиеОстатки — для online запросов остатков

Оптимизация:

  • Всегда указывайте аналитику для сокращения объёма данных
  • Используйте фильтры в WHERE перед СГРУППИРОВАТЬ
  • Не получайте все данные разом — используйте постраничную выборку

Заключение

Виртуальные таблицы регистра накоплений — это мощный инструмент для:

  • Быстрого получения аналитики
  • Анализа остатков и движений
  • Построения отчётов
  • Автоматизации расчётов

Правильное использование этих таблиц значительно упрощает разработку в 1С и повышает производительность приложения.

Какие виртуальные таблицы есть у регистра накоплений? | PrepBro