Какие есть виртуальные таблицы у регистра расчётов?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Виртуальные таблицы регистра расчётов в 1С
Суть регистра расчётов
Регистр расчётов — это специальный регистр, предназначенный для хранения различных расчётных данных (зарплата, премии, налоги, удержания и т.д.) и обеспечивающий сложные многоуровневые вычисления.
Каждый регистр расчётов автоматически создаёт несколько виртуальных таблиц для работы с расчётными данными.
Основные виртуальные таблицы регистра расчётов
1. Таблица Основная (Base Table)
Это основная таблица регистра расчётов, в которой хранятся прямые записи расчётов.
// Для регистра расчётов "Зарплата"
Запрос = Новый Запрос();
Запрос.Текст = "
|ВЫБРАТЬ
| РегистрРасчётов.Сотрудник,
| РегистрРасчётов.Период,
| РегистрРасчётов.ВидРасчёта,
| РегистрРасчётов.Значение
|ИЗ РегистрРасчётов.Зарплата КАК РегистрРасчётов
|ГДЕ РегистрРасчётов.Период = &Период
";
Запрос.УстановитьПараметр("Период", Дата);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Колонки:
- Измерения (период, сотрудник, вид расчёта и т.д.)
- Ресурсы (значение расчёта)
- Признак корректировки (если регистр это поддерживает)
2. Таблица Остатки (Remaining Balances)
Содержит остатки (balance) по каждому расчёту на конец периода.
// Получить остатки по всем видам расчётов на конец месяца
Запрос = Новый Запрос();
Запрос.Текст = "
|ВЫБРАТЬ
| Остатки.Сотрудник,
| Остатки.ВидРасчёта,
| Остатки.Остаток КАК Значение
|ИЗ РегистрРасчётов.Зарплата.Остатки(&Конец) КАК Остатки
|ГДЕ Остатки.Остаток <> 0
|УПОРЯДОЧИТЬ ПО Остатки.Сотрудник
";
Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ТекущаяДата()));
РезультатЗапроса = Запрос.Выполнить();
Особенность: требует параметра даты для вычисления остатков.
3. Таблица Обороты (Turnovers/Movements)
Содержит суммы движений (обороты) по расчётам за период.
// Получить обороты по видам расчётов за период
Запрос = Новый Запрос();
Запрос.Текст = "
|ВЫБРАТЬ
| Обороты.Сотрудник,
| Обороты.ВидРасчёта,
| Обороты.ОборотРассчитано КАК Рассчитано,
| Обороты.ОборотПересчитано КАК Пересчитано
|ИЗ РегистрРасчётов.Зарплата.Обороты(&НачалоПериода, &КонцПериода) КАК Обороты
|ГДЕ Обороты.ОборотРассчитано <> 0
";
Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("КонцПериода", КонецМесяца(ТекущаяДата()));
РезультатЗапроса = Запрос.Выполнить();
Типы оборотов:
- ОборотРассчитано — обороты по "рассчитано"
- ОборотПересчитано — обороты по "пересчитано"
4. Таблица РасчётыПоДокументам (Calculations by Documents)
Содержит расчёты, сгруппированные по документам-источникам.
// Получить расчёты по каждому документу-источнику
Запрос = Новый Запрос();
Запрос.Текст = "
|ВЫБРАТЬ
| РасчётыПоДокументам.Сотрудник,
| РасчётыПоДокументам.ДокументИсточник,
| РасчётыПоДокументам.ВидРасчёта,
| РасчётыПоДокументам.Значение
|ИЗ РегистрРасчётов.Зарплата.РасчётыПоДокументам КАК РасчётыПоДокументам
|ГДЕ РасчётыПоДокументам.Период >= &ДатаНачало
";
Запрос.УстановитьПараметр("ДатаНачало", НачалоМесяца(ТекущаяДата()));
РезультатЗапроса = Запрос.Выполнить();
Использование: отслеживание, какой документ создал какой расчёт.
5. Таблица РасчётыПоЗависимостям (Calculations by Dependencies)
Иерархическое представление расчётов с их зависимостями.
// Получить расчёты с указанием зависимостей
Запрос = Новый Запрос();
Запрос.Текст = "
|ВЫБРАТЬ
| РасчётыПоЗависимостям.Сотрудник,
| РасчётыПоЗависимостям.ВидРасчётаИсточник,
| РасчётыПоЗависимостям.ВидРасчётаРезультат,
| РасчётыПоЗависимостям.Период
|ИЗ РегистрРасчётов.Зарплата.РасчётыПоЗависимостям КАК РасчётыПоЗависимостям
";
РезультатЗапроса = Запрос.Выполнить();
Пример: Премия зависит от оклада, отпуск зависит от премии.
6. Таблица УдержанияПоРасчётам (Deductions by Calculations)
Содержит информацию об удержаниях, связанных с расчётами.
// Получить удержания по типам расчётов
Запрос = Новый Запрос();
Запрос.Текст = "
|ВЫБРАТЬ
| УдержанияПоРасчётам.Сотрудник,
| УдержанияПоРасчётам.ВидРасчёта,
| УдержанияПоРасчётам.ВидУдержания,
| УдержанияПоРасчётам.Значение
|ИЗ РегистрРасчётов.Зарплата.УдержанияПоРасчётам КАК УдержанияПоРасчётам
|ГДЕ УдержанияПоРасчётам.ВидРасчёта = &ВидРасчёта
";
Запрос.УстановитьПараметр("ВидРасчёта", ПланыВидовРасчётов.Зарплата.Оклад);
РезультатЗапроса = Запрос.Выполнить();
Система базовых таблиц
РегистрРасчётов.Зарплата (основная таблица)
├── .Остатки(&ДатаКонца) — остатки на дату
├── .Обороты(&НачалоПериода, &КонцПериода) — обороты за период
├── .РасчётыПоДокументам — расчёты от документов
├── .РасчётыПоЗависимостям — иерархия расчётов
└── .УдержанияПоРасчётам — удержания и их расчёты
Практический пример: расчёт зарплаты
// 1. Получаем расчёты основные
Запрос1 = Новый Запрос();
Запрос1.Текст = "
|ВЫБРАТЬ
| Расчёты.Сотрудник,
| Расчёты.ВидРасчёта,
| Расчёты.Значение
|ИЗ РегистрРасчётов.Зарплата КАК Расчёты
|ГДЕ Расчёты.Период = &Период
";
// 2. Получаем обороты
Запрос2 = Новый Запрос();
Запрос2.Текст = "
|ВЫБРАТЬ
| Обороты.Сотрудник,
| Обороты.ОборотРассчитано
|ИЗ РегистрРасчётов.Зарплата.Обороты(&НачалоПериода, &КонцПериода) КАК Обороты
";
// 3. Объединяем и получаем итоги
Запрос3 = Новый Запрос();
Запрос3.Текст = "
|ВЫБРАТЬ
| Расчёты.Сотрудник,
| Расчёты.ВидРасчёта,
| Расчёты.Значение,
| Обороты.ОборотРассчитано
|ИЗ Расчёты КАК Расчёты
|ЛЕВОЕ СОЕДИНЕНИЕ Обороты КАК Обороты
| ПО Расчёты.Сотрудник = Обороты.Сотрудник
";
Производительность и оптимизация
Рекомендации:
- Остатки пересчитываются всегда — используй с фильтром по периодам
- Обороты агрегированы — быстрее для больших объёмов
- РасчётыПоДокументам — используй для аудита и откатов
- Кэшируй результаты остатков, если часто их запрашиваешь
// Оптимально: кэш остатков
КэшОстатков = Новая Соответствие();
КэшОстатков.Вставить(
"2026-01-31",
ПолучитьОстаткиНДату("2026-01-31")
);
// Позже просто берём из кэша
Остатки = КэшОстатков.Получить("2026-01-31");
Правильное использование виртуальных таблиц регистра расчётов критично для корректных и быстрых расчётов зарплаты и других сложных операций.