Какие виртуальные таблицы есть у регистра накоплений?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Виртуальные таблицы регистра накоплений
Виртуальные таблицы регистра накоплений — это одно из самых важных и мощных возможностей 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С и повышает производительность приложения.