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

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

2.0 Middle🔥 251 комментариев
#Объекты метаданных#Регистры

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

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

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

Виртуальные таблицы регистра расчётов в 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");

Правильное использование виртуальных таблиц регистра расчётов критично для корректных и быстрых расчётов зарплаты и других сложных операций.