Имя: Пароль:
1C
 
Проблема с таймером
,
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) спасибо помогло
Основная теорема систематики: Новые системы плодят новые проблемы.