В процессе разработки часто возникают задачи, требующие проверки истории начислений сотрудника. В данном случае мы разберем ситуацию, когда требуется начислять «Оплату питания» в размере 30% от суммы только в течение первых трех месяцев с момента первого начисления данного вида расчета. После прохождения этого срока сотрудник должен оплачивать питание в полном объеме. Давайте детально разберем, как правильно подойти к этой задаче, какие ошибки могут возникнуть при написании запросов и почему важно выбирать архитектурно верные решения.
Частая проблема новичков при работе с РегистрРасчета.Начисления заключается в некорректном использовании параметров. Например, при попытке найти записи за прошлые периоды, автор темы столкнулся с тем, что записи не возвращались. Проанализируем основные причины:
ПланВидовРасчета. Запрос не найдет соответствие, если в базе хранится ссылка, а не строка. Используйте методы НайтиПоНаименованию() или НайтиПоКоду(), либо берите ссылку непосредственно из объекта документа.Начисления.ФизическоеЛицо.Наименование вместо ссылки на справочник ФизическиеЛица или Сотрудники ведет к ошибкам и низкой производительности.Рассмотрим пример правильного формирования запроса для проверки наличия начислений:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Начисления.ПериодРегистрации
|ИЗ
| РегистрРасчета.Начисления КАК Начисления
|ГДЕ
| Начисления.Сотрудник = &Сотрудник
| И Начисления.ВидРасчета = &ВидНачисления
| И Начисления.ПериодРегистрации < &ДатаНачала";
Запрос.УстановитьПараметр("Сотрудник", Объект.Сотрудник);
Запрос.УстановитьПараметр("ВидНачисления", ПредопределенныйВидРасчета);
Запрос.УстановитьПараметр("ДатаНачала", ТекущаяДата());
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
// Записей нет, применяем льготный период (30%)
КонецЕсли;
Хотя задачу можно решить «подменой» процедур в расширении, важно помнить о поддержке системы в будущем. Переписывание типовых процедур формы ОбработатьИзменениеПоказателейНаСервере затрудняет обновления. Профессиональный подход предполагает использование встроенных механизмов 1С:
1С:Зарплата и Управление Персоналом можно настроить показатели расчета зарплаты с периодичностью «Ежемесячно». Это избавит вас от необходимости внедряться в код документа.При реализации логики начисления всегда проверяйте, не является ли выбор «Оплаты питания» определяющим фактором. Если пользователь выбирает данный вид расчета, система должна автоматически инициировать проверку регистра.
Важные замечания:
ПланыВидовРасчета для идентификации видов начислений. Это гарантирует, что программа будет корректно находить записи даже при смене наименования вида расчета пользователем.ФизическоеЛицо, ВидРасчета и ПериодРегистрации в вашей выборке с реальными данными в базе.Плана видов расчета или использованием Показателей. Это сделает вашу разработку профессиональной и легко обслуживаемой.Используя приведенные методы, вы сможете корректно реализовать проверку периодов начислений, избежав при этом типичных архитектурных ошибок и сделав код устойчивым к обновлениям типовой конфигурации.