|
Проблема с таймером | ☑ | ||
---|---|---|---|---|
0
Enot_tut
13.01.16
✎
09:12
|
Добрый день столкнулся вот с такой проблемой Смотрим на скрин,
https://yadi.sk/i/RDHkBtxumrT3k если с (даты конца паузы"9:05:44") вычесть (дату начало паузы "9:03:32") то получается (0:02:12) а в моем случае получилось (0:02:10). если Пауза продолжила работать то погрешность еще увеличиваеться. как можно исправить данную ошибку? код программы вот, если нужна обработка то скину &НаКлиенте Процедура ПриОткрытии(Отказ) Станция="CHA01"; LU="02834"; SEND="080173"; ВПроцессе = Ложь; ПервыйЗапуск = Истина; КонецПроцедуры &НаКлиенте Процедура ПричинаПаузыПриИзменении(Элемент) Элементы.START.Доступность=Истина; КонецПроцедуры &НаКлиенте Процедура COMПриИзменении(Элемент) Элементы.VIN.Доступность=Истина; КонецПроцедуры &НаКлиенте Процедура VINПриИзменении(Элемент) Элементы.КолвоРаботниковПоста.Доступность=Истина; КонецПроцедуры &НаКлиенте Процедура КолвоРаботниковПостаОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) Элементы.START.Доступность=Истина; КонецПроцедуры &НаКлиенте Процедура Пауза() Пауза = Пауза + 1; КонецПроцедуры &НаКлиенте Процедура ТаймерСтарт() Таймер = Таймер + 1; КонецПроцедуры &НаКлиенте Процедура STOP(Команда) Таймер = 0; Пауза = 0; ОтключитьОбработчикОжидания("Пауза"); ОтключитьОбработчикОжидания("ТаймерСтарт"); ОтключитьОбработчикОжидания("УчетДатыИВремени"); Элементы.START.Доступность=Истина; НоваяСтрока = DATASTARTA.Добавить(); НоваяСтрока.ДатаЗапуска = ДатаЗапуска1; НоваяСтрока.ДатаОстановки = ТекущаяДата(); КонецПроцедуры &НаКлиенте Процедура Start(Команда) Если ПервыйЗапуск Тогда ПервыйЗапуск = Ложь; ПодключитьОбработчикОжидания("ТаймерСтарт", 1); ПодключитьОбработчикОжидания("УчетДатыИВремени", 1); ХранениеВремени= ТекущаяДата(); Элементы.START.Заголовок = "PAUSE"; ДатаЗапуска1 = ТекущаяДата(); Элементы.STOP.Доступность=Истина; Элементы.Группа9.Доступность=Ложь; Возврат; КонецЕсли; Если ВПроцессе Тогда ВПроцессе = Ложь; Элементы.START.Заголовок = "PAUSE"; ОтключитьОбработчикОжидания("Пауза"); ПодключитьОбработчикОжидания("ТаймерСтарт", 1); ПодключитьОбработчикОжидания("УчетДатыИВремени", 1); НоваяСтрока = УчетПаузы.Добавить(); НоваяСтрока.Станция = Станция; НоваяСтрока.КолвоРаботниковПоста = КолвоРаботниковПоста; НоваяСтрока.ПричинаПаузы = ПричинаПаузы; НоваяСтрока.ДатаНачалоПаузы = ХранениеВремени; НоваяСтрока.ДатаКонцаПаузы = ТекущаяДата(); НоваяСтрока.ВремяПаузы = Пауза; Элементы.Группа5.Видимость=Ложь; Иначе ВПроцессе = Истина; Элементы.START.Заголовок = "START"; ОтключитьОбработчикОжидания("ТаймерСтарт"); ОтключитьОбработчикОжидания("УчетДатыИВремени"); ПодключитьОбработчикОжидания("Пауза", 1); ХранениеВремени = ТекущаяДата(); Элементы.START.Доступность=Ложь; Элементы.Группа5.Видимость=Истина; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура УчетДатыИВремени() Время = Строка(Час(ТекущаяДата()))+":"+Строка(Минута(ТекущаяДата()))+":"+Строка(Секунда(ТекущаяДата())); ВыборкаРезультатовЗапроса = ВыходныеДни(); Если ВыборкаРезультатовЗапроса.ВидДня = ПредопределенноеЗначение("Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий") Тогда Если Время = ВыборкаРезультатовЗапроса.ВремяКонцаДня Тогда ОтключитьОбработчикОжидания("ТаймерСтарт"); ИначеЕсли Время = ВыборкаРезультатовЗапроса.ВремяВечернегоТехПерырыва Тогда НоваяСтрока = УчетПаузы.Добавить(); НоваяСтрока.Станция = Станция; НоваяСтрока.КолвоРаботниковПоста = КолвоРаботниковПоста; НоваяСтрока.ПричинаПаузы = "Технические перерыв"; НоваяСтрока.ДатаНачалоПаузы = ХранениеВремени; НоваяСтрока.ДатаКонцаПаузы = ТекущаяДата(); НоваяСтрока.ВремяПаузы = Пауза; ОтключитьОбработчикОжидания("Пауза"); ПодключитьОбработчикОжидания("ТаймерСтарт", 1); ИначеЕсли Время = ВыборкаРезультатовЗапроса.КонецВечернегоТехПерырыва Тогда ПодключитьОбработчикОжидания("Пауза", 1); ХранениеВремени = ТекущаяДата(); ОтключитьОбработчикОжидания("ТаймерСтарт"); ИначеЕсли Время = ВыборкаРезультатовЗапроса.ВремяНачалоОбеда Тогда НоваяСтрока = УчетПаузы.Добавить(); НоваяСтрока.Станция = Станция; НоваяСтрока.ПричинаПаузы = "Обеденный перерыв"; НоваяСтрока.ДатаНачалоПаузы = ХранениеВремени; НоваяСтрока.ДатаКонцаПаузы = ТекущаяДата(); НоваяСтрока.ВремяПаузы = Пауза; ОтключитьОбработчикОжидания("Пауза"); ПодключитьОбработчикОжидания("ТаймерСтарт", 1); ИначеЕсли Время = ВыборкаРезультатовЗапроса.ВремяКонцаОбеда Тогда ПодключитьОбработчикОжидания("Пауза", 1); ХранениеВремени = ТекущаяДата(); ОтключитьОбработчикОжидания("ТаймерСтарт"); ИначеЕсли Время = ВыборкаРезультатовЗапроса.ВремяТехническогоПерерыва Тогда НоваяСтрока = УчетПаузы.Добавить(); НоваяСтрока.Станция = Станция; НоваяСтрока.ПричинаПаузы = "Технические перерыв"; НоваяСтрока.ДатаНачалоПаузы = ХранениеВремени; НоваяСтрока.ДатаКонцаПаузы = ТекущаяДата(); НоваяСтрока.ВремяПаузы = Пауза; ОтключитьОбработчикОжидания("Пауза"); ПодключитьОбработчикОжидания("ТаймерСтарт", 1); ИначеЕсли Время = ВыборкаРезультатовЗапроса.ВремяКонцаТехническогоПерерыва Тогда ПодключитьОбработчикОжидания("Пауза", 1); ХранениеВремени = ТекущаяДата(); ОтключитьОбработчикОжидания("ТаймерСтарт"); ИначеЕсли Время = ВыборкаРезультатовЗапроса.ВремяНачалоДня Тогда НоваяСтрока = УчетПаузы.Добавить(); НоваяСтрока.Станция = Станция; НоваяСтрока.ПричинаПаузы = "Начало рабочего дня"; НоваяСтрока.ДатаНачалоПаузы = ТекущаяДата(); НоваяСтрока.ДатаКонцаПаузы = ТекущаяДата(); ПодключитьОбработчикОжидания("ТаймерСтарт", 1); КонецЕсли // //Предпраздничный //ИначеЕсли ВыборкаРезультатовЗапроса = ПредопределенноеЗначение("Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный") Тогда // Сообщить("Отдых"); // //Суббота //ИначеЕсли ВыборкаРезультатовЗапроса = ПредопределенноеЗначение("Перечисление.ВидыДнейПроизводственногоКалендаря.Суббота") Тогда // Сообщить("Суббота"); // //Праздник ИначеЕсли ВыборкаРезультатовЗапроса.ВидДня = ПредопределенноеЗначение("Перечисление.ВидыДнейПроизводственногоКалендаря.Праздник") Тогда ОтключитьОбработчикОжидания("Пауза"); ОтключитьОбработчикОжидания("ТаймерСтарт"); ИначеЕсли ВыборкаРезультатовЗапроса.ВидДня = ПредопределенноеЗначение("Перечисление.ВидыДнейПроизводственногоКалендаря.Воскресенье") Тогда ОтключитьОбработчикОжидания("Пауза"); ОтключитьОбработчикОжидания("ТаймерСтарт"); КонецЕсли; КонецПроцедуры &НаСервере Функция ВыходныеДни () ВыходныеДниДата = ТекущаяДата(); Запрос = Новый Запрос; Запрос.Текст ="ВЫБРАТЬ | РегламентированныйПроизводственныйКалендарь.ВремяНачалоДня, | РегламентированныйПроизводственныйКалендарь.ВремяТехническогоПерерыва, | РегламентированныйПроизводственныйКалендарь.ВремяНачалоОбеда, | РегламентированныйПроизводственныйКалендарь.ВремяВечернегоТехПерырыва, | РегламентированныйПроизводственныйКалендарь.ВремяКонцаТехническогоПерерыва, | РегламентированныйПроизводственныйКалендарь.ВремяКонцаОбеда, | РегламентированныйПроизводственныйКалендарь.КонецВечернегоТехПерырыва, | РегламентированныйПроизводственныйКалендарь.ВремяКонцаРабочегоДня, | РегламентированныйПроизводственныйКалендарь.ВидДня |ИЗ | РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь |ГДЕ | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря = &ДатаКалендаря" ; Запрос.УстановитьПараметр("ДатаКалендаря",ВыходныеДниДата); РезультатЗапроса = Запрос.Выполнить(); ВыборкаРезультатовЗапроса = РезультатЗапроса.Выбрать(); Результат = НеОпределено; Если ВыборкаРезультатовЗапроса.Следующий() Тогда Результат = Новый Структура; Результат.Вставить("ВидДня",ВыборкаРезультатовЗапроса.ВидДня); Результат.Вставить("ВремяНачалоДня",ВыборкаРезультатовЗапроса.ВремяНачалоДня); Результат.Вставить("ВремяТехническогоПерерыва",ВыборкаРезультатовЗапроса.ВремяТехническогоПерерыва); Результат.Вставить("ВремяНачалоОбеда",ВыборкаРезультатовЗапроса.ВремяНачалоОбеда); Результат.Вставить("ВремяВечернегоТехПерырыва",ВыборкаРезультатовЗапроса.ВремяВечернегоТехПерырыва); Результат.Вставить("ВремяКонцаТехническогоПерерыва",ВыборкаРезультатовЗапроса.ВремяКонцаТехническогоПерерыва); Результат.Вставить("ВремяКонцаОбеда",ВыборкаРезультатовЗапроса.ВремяКонцаОбеда); Результат.Вставить("КонецВечернегоТехПерырыва",ВыборкаРезультатовЗапроса.КонецВечернегоТехПерырыва); Результат.Вставить("ВремяКонцаДня",ВыборкаРезультатовЗапроса.ВремяКонцаРабочегоДня); КонецЕсли; Возврат Результат; КонецФункции //Элементы.Сфетофор.Картинка = БиблиотекаКартинок.Зеленый; |
|||
1
Lexey_
13.01.16
✎
09:19
|
(0) "если с (даты конца паузы"9:05:44") вычесть (дату начало паузы "9:03:32") то получается (0:02:12) а в моем случае получилось (0:02:10)"
ну так и вычитай напрямую, зачем переменная Пауза? |
|||
2
Enot_tut
13.01.16
✎
11:50
|
(1) но когда вычитаю теперь у меня становиться результат (132) результат как его перевести время чтобы было (0:02:12)
|
|||
3
FIXXXL
13.01.16
✎
11:52
|
(2) прибавь к НачалоДня(ТекущаяДата()) и через Формат получи что надо
|
|||
4
Enot_tut
14.01.16
✎
08:47
|
Все равно не получилось,как то по другому можно с числа преоброзовать время?
|
|||
5
vde69
14.01.16
✎
08:54
|
типа так:
часы = окр(число/24/60/60) мин = окр((число-часы246060)/60/60) сек = окр((число-мин246060)/60/60) время = дата(1,1,1,часы,мин,сек) |
|||
6
vde69
14.01.16
✎
08:55
|
часы = окр(число/24/60/60)
мин = окр((число-часы 24 60 60)/60/60) сек = окр((число-мин 60 * 60)/60/60) время = дата(1,1,1,часы,мин,сек) |
|||
7
НЕА123
14.01.16
✎
08:57
|
> Время = Строка(Час(ТекущаяДата()))+":"+Строка(Минута(ТекущаяДата()))+":"+Строка(Секунда(ТекущаяДата()));
разве так можно? |
|||
8
ЧеловекДуши
14.01.16
✎
09:02
|
(0) Отладчиком пройдись...
Бывает он помогает просветиться :) |
|||
9
Lexey_
14.01.16
✎
09:04
|
(4) а что именно не получилось? Показывай
|
|||
10
Enot_tut
14.01.16
✎
09:05
|
(7) да в данном случае он тока в реквизит записывает тока время.
(8) уже несколько раз прошелся. неечего в голову не может придти как реализовать |
|||
11
Fedor-1971
14.01.16
✎
09:07
|
(7)так исходной задачи то нет, может ТС хотел получить именно последнее значение часа, минуты и секунды. Особенно прикольный результат получится на границе час:59:59 - час старый, минута 59, а секунда уже может быть 01
(4) время=Дата(1,1,1)+Дата1-Дата2 - вот тебе чистое время, жуй его через Час() Минута() Секунда() |
|||
12
ЧеловекДуши
14.01.16
✎
09:08
|
ТекущаяДата() + Дата(1,1,1,0,0,10)
{(1)}: Преобразование значения к типу Число не может быть выполнено (10) Используй Запросы, в Конструкторе "Функции Работа с датой", там можно все. Читай до посинения http://helpme1c.ru/rabota-s-tipom-data-v-yazyke-1s-8-v-primerax Ты отладчиком не проходись, а просматривай Значения переменных. |
|||
13
Fedor-1971
14.01.16
✎
09:12
|
(10) Какое время? точно правильное?
Не извращайся сначала получи ТекущаяДата(), и только потом выкусывай компоненты времени |
|||
14
Serg_1960
14.01.16
✎
09:20
|
(0) Поиск по Мисте - сотни вариантов. Например:
Сообщить(Формат(НачалоДня(ТекущаяДата()) + (Дата(2016,01,13,09,05,44) - Дата(2016,01,13,09,03,32)), "ДЛФ=T")); |
|||
15
Enot_tut
14.01.16
✎
10:35
|
(14) (13) (12) (11) спасибо помогло
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |