Записываем процедуру «ПриОткрытии».
Синтаксис «ПриЗаписиПерепроводить(1)» устанавливает режим
обязательного перепроведения при записи ранее проведенного документа.
Рис.5.31.Окно «Модуль формы документа»
Процедура «ПриВводеСтроки» в соответствии с рис.5.32 предусмотрена для того, чтобы контролировать действия пользователя, то есть означает: если пользователь начинает вводить Сотрудника, но при этом ранее не выбрал Календарь, то программа должна сделать предупреждение: «Не выбран календарь!», если же Календарь выбран, но не заполнен, то выходит предупреждение «Не заполнен календарь!». Это необходимо для того, чтобы программа могла посчитать отработанное время согласно календарю предприятия. И пока не будет заполнен и выбран календарь, ввод строки невозможен.
Рис.5.32. Процедура «ПриВводеСтроки»
Создаем процедуру для расчета одного сотрудника по строкам:
Сотрудник, тариф, отработанные дни, отработанные часы, дни ремонта, часы ремонта, часы сверхнормы все эти показатели берутся из соответствующих справочников и граф, для подсчета суммы общей, суммы ремонта, суммы сверхнормы. Создавая эту процедуру мы учитываем, что если неизвестен какой либо показатель, то он может заменяться каким-нибудь из справочника: например, если неизвестен тариф водителя, то оплата его труда может рассчитываться по окладу, а оклад берется из Справочника «Сотрудники», где он и указан. Если у водителя отсутствуют дни и часы сверхнормы или дни и часы ремонта (в данном случае они будут равны 0), то процедура предусматривает не брать такие показатели для расчета общей суммы.
Написание процедуры в «Модуле документа»:
Процедура РасчетОдного()
Если Сотрудник.Выбран()=1 Тогда
Если Тариф<>0 Тогда
ТекТариф=Тариф/ЧасовПоНорме;
Иначе
Если
глФормаТрудаПоТарифуОкладу(Сотрудник.ФормаТруда.Получить(ДатаДок)) = "Оклад"
Тогда
ТекТариф=глПолучитьСуммуИзРеквизита(Сотрудник.Оклад.Получить
(ДатаДок),ДатаДок)//ЧасовПоНорме;
Тариф=глПолучитьСуммуИзРеквизита(Сотрудник.Оклад.Получить(ДатаДок)
,ДатаДок);
Иначе
ТекТариф=глПолучитьСуммуИзРеквизита(Сотрудник.Оклад.Получить
(ДатаДок),ДатаДок);
Тариф=ТекТариф*ЧасовПоНорме;
КонецЕсли;
КонецЕсли;
Если ОтрЧасов<>0 Тогда
Сумма=ТекТариф*ОтрЧасов;
Иначе
Если ОтрДней <>0 Тогда
ОтрЧасов=ОтрДней *8;
Сумма=ТекТариф*ОтрЧасов;
КонецЕсли;
КонецЕсли;
Если РемЧасов<>0 Тогда
СумРем=ТекТариф*РемЧасов;
Если РемДней <>0 Тогда
РемЧасов=РемДней *8;
СумРем=ТекТариф*РемЧасов;
КонецЕсли;
КонецЕсли;
Если СверхЧасов<>0 Тогда
ПоловинаЧасов=СверхЧасов/2;
ЗаПервыеЧасы=ПоловинаЧасов*ТекТариф*(Константа.КоэффициентОплатыСверхУрочных
ЧасовНачальный-1);
ЗаПоследующиеЧасы=ПоловинаЧасов*ТекТариф*
(Константа.КоэффициентОплатыСверхУрочныхЧасовПоследующих-1);
СуммаСверх=ЗаПервыеЧасы+ЗаПоследующиеЧасы;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура «ПриОкончанииРедактированияСтроки» подразумевает, что по окончании ввода показателей отработанного времени по строке они будут подсчитываться автоматически в соответствии с рис.5.33.
Рис.5.33. Процедура «ПриОкончанииРедактированияСтроки»
Создаем процедуру «ЧасовПоНорме», она подразумевает, что данные по часам рабочих будут заноситься в журнал расчетов «Зарплата» и часы по норме должны соответствовать выбранному календарю для данной категории работников в соответствии с рис.5.34.
Рис.5.34. Процедура «ЧасовПоНорме»
Составляем процедуры по работе с кнопками «Сортировка» и «Дубль» в соответствии с рис.5.35. Так как задан параметр «Сортировать по алфавиту», то соответственно в процедуре указываем этот параметр. Для этого выбираем строки, по необходимости редактируем, то есть выбираем по убыванию или по возрастанию и активизируем данный режим. Весь порядок действий указываем в процедуре.
Процедура «Дубль» должна быть тоже расписана. В ней предусматривается то, что при повторяющихся записях сотрудников нет необходимости постоянного внесения одних и тех же фамилий, достаточно при выборе дублирующего сотрудника нажать кнопку «Дубль» в «Форме документа. Водители». И фамилия сотрудника запишется в новой строке еще раз.