У меня есть авторская конфигурация для учета путевой документации а автотранспортном предприятии (Автобусный парк), работает уже четвертый год, всех все устраивает, но написана была на 7.7. Решил улучшить - переписал под 8.3 и по ходу работы над ней изменил методику учета временных показателей. Раньше реквизиты учета времени (а их довольно много в конфигурации) были представлены просто в виде десятичного числа с точностью до сотых - два знака после запятой, т.е. время учитывалось в десятичной системе счисления, что визуально очень неудобно - например , сколько времени означает число 8.95. Очень неудобно. Поэтому решил это дело исправить. Сначала хотел изменить их на тип "Дата" с составом даты "Время" , но математика с таким реквизитом требует много лишних манипуляций, а кроме у этого реквизита типа "Дата" с составом даты "Время" есть непреодолимое ограничение значения - 23:59 , что в моем случае неприемлемо, т.к. автомобиль может находиться в рейсе свыше этого значения, например - 25:45. Ниже описан вариант решения.
Есть документ "Путевой лист". Для учета времени работы в наряде - созданы в данных документа два реквизита:
- "ВремяВНаряде" - Число 6.2 , формат"ЧЦ=5; ЧДЦ=2; ЧРД=:; ЧН=00:00"
- "ВремяВНарядеМинут" - Число 10
На форме документа размещен реквизит "ВремяВНаряде", в котором целая часть - это часы. а дробная - минуты. Ниже - процедура обработки события "ПриИзменении" этого реквизита:
&НаКлиенте
Процедура ВремяВНарядеПриИзменении(Элемент)
хВремяМинут = Объект.ВремяВНаряде - Цел(Объект.ВремяВНаряде);
Если хВремяМинут >= 0.6 Тогда
Объект.ВремяВНаряде = Цел(Объект.ВремяВНаряде) + 1 + хВремяМинут - 0.6;
КонецЕсли;
Объект.ВремяВНарядеМинут = Цел(Объект.ВремяВНаряде) * 60 + (Объект.ВремяВНаряде - Цел(Объект.ВремяВНаряде)) * 100;
КонецПроцедуры
Т.е. обработка выполняет корректность отображения реквизита "ВремяВНаряде" в виде "часы,минуты" и параллельно с этим выполняет запись количества минут в реквизит "ВремяВНарядеМинут".
Расчет суммы заработной платы за отработанное время в наряде - "СуммаВНаряде":
Документ.СуммаВНаряде = Документ.ВремяВНарядеМинут * Документ.ТарифВНаряде / 60;
, где "ТарифВНаряде" - тариф стоимости 1 часа работы.
При проведении документа в регистр накопления записываем значение реквизита "ВремяВНарядеМинут".
При формировании отчетов, где участвует этот реквизит, перед выводом его значения в качестве параметра на область печати, выполняется его модификация для представления в виде "часов,минут":
ВН = Выборка.ВремяВНарядеМинут;
ОбластьСтрока.Параметры.ВремяВНаряде = Цел(ВН/60) + (ВН-(Цел(ВН/60)*60))/100;
Благодаря учету временнЫх реквизитов в минутах очень удобно формировать запросы по учету времени , делать математические и статистические расчеты.
Вступайте в нашу телеграмм-группу Инфостарт