При разработке и кастомизации систем расчета заработной платы в решениях на платформе «1С:Предприятие 8» (например, в «1С:Управление производственным предприятием 1.3» или «1С:Зарплата и управление персоналом 2.5/3.1») разработчики часто сталкиваются с виртуальными таблицами регистров расчета. Одним из ключевых полей, вызывающих вопросы у начинающих программистов, является поле РезультатБаза. Рассмотрим подробно, что это за поле, как оно вычисляется платформой и как правильно использовать его в запросах для получения корректных данных.
В платформе «1С:Предприятие 8» регистры расчета используются для реализации сложных периодических расчетов (начисление зарплаты, расчет надбавок, удержаний, больничных и т.д.). У каждого регистра расчета есть ресурсы — физические поля базы данных, в которых хранятся рассчитанные суммы (например, ресурс Результат).
Когда для расчета какого-либо начисления (например, квартальной премии, которая рассчитывается как процент от оклада) требуется получить сумму начислений за прошлые периоды, система обращается к механизму получения базовых данных. Для этого в запросах к регистрам расчета используются специальные виртуальные таблицы базовых данных, например, БазаОсновныеНачисленияРаботниковОрганизаций.
Поля этой виртуальной таблицы формируются платформой динамически по следующему правилу: к имени ресурса базового регистра расчета добавляется постфикс База. Таким образом:
Результат, то в виртуальной таблице базы появится поле РезультатБаза.ОтработаноДней, то в таблице базы появится поле ОтработаноДнейБаза.ТарифнаяСтавка, виртуальное поле будет называться ТарифнаяСтавкаБаза.Таким образом, полученное в результате запроса число (в примере автора темы — 48 300) — это не что иное, как суммарное значение ресурса Результат всех записей базовых видов расчета за определенный период времени для конкретного разреза (сотрудника, организации и т.д.).
Для того чтобы система выдала итоговое число 48 300 в поле РезультатБаза, платформа выполняет сложный алгоритм сопоставления метаданных и записей в базе данных. Проанализируем этот процесс по шагам:
Результат для всех найденных строк и возвращает итоговую сумму в виртуальное поле РезультатБаза.Рассмотрим практический пример написания запроса к виртуальной таблице базы регистра расчета. Обратите внимание на то, как передаются параметры в виртуальную таблицу. Это критически важно для получения корректных результатов без искажения данных.
ВЫБРАТЬ
ОсновныеНачисления.Сотрудник КАК Сотрудник,
ОсновныеНачисления.РезультатБаза КАК РезультатБаза,
ОсновныеНачисления.НомерСтроки КАК НомерСтроки
ИЗ
РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций.БазаОсновныеНачисленияРаботниковОрганизаций(
&ГраницаРегистрации,
&ГраницаРегистрации,
ВыразитьОбъектыИзмерения КАК ВыразитьОбъектыИзмерения,
ИзмеренияОсновногоРегистра.Сотрудник = ИзмеренияБазовогоРегистра.Сотрудник
) КАК ОсновныеНачисления
В данном запросе мы получаем таблицу базовых данных, связывая измерения основного и базового регистров по полю Сотрудник. Если этого не сделать, система вернет общую сумму окладов всех сотрудников предприятия, что приведет к грубой ошибке в расчетах.
Если в процессе разработки или анализа вы получили неожиданную цифру в поле РезультатБаза (например, число слишком большое или, наоборот, нулевое), рекомендуем проверить следующие моменты:
Очень частая проблема в 1С. Вместо ожидаемой суммы оклада сотрудника (например, 16 100 руб.) вы получаете утроенную сумму (48 300 руб.). Выясним основные причины этой аномалии:
ИзмеренияОсновногоРегистра.Сотрудник = ИзмеренияБазовогоРегистра.Сотрудник.Если запрос возвращает пустые значения или нули, хотя у сотрудника точно были начисления в базовом периоде, проанализируйте следующие параметры:
Таким образом, эффективная работа с механизмами расчета в 1С требует от разработчика строгого контроля связей таблиц, точной настройки планов видов расчета и детального понимания того, как платформа преобразует физические данные регистров в удобные виртуальные поля.