Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 сен 2024, 03:14

Создать отсчет времени.

Автор Ученик65037, 30 июн 2014, 14:48

0 Пользователей и 1 гость просматривают эту тему.

Ученик65037

Добрый день.
Подскажите как можно сделать отсчет времени до обеда от начала дня.
При помощи конструкции:

&НаКлиенте
Процедура Команда1(Команда)
     ПодключитьОбработчикОжидания("Команда2", 1);
КонецПроцедуры

  &НаКлиенте
  Процедура Команда2()
     Дата1 = ТекущаяДата();
     НачалоДня = Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy");
ДоОбеда=ТекущаяДата()-НачалоДня;-не работает.
    Сообщить (ТекущаяДата());
   
  КонецПроцедуры   
p.s.:Заранее спасибо. Новичек.

mixqn

Цитата: Ученик65037 от 30 июн 2014, 14:48НачалоДня = Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy");
Вот тут вы строку получаете и потом из даты пытаетесь вычесть строку.
чтобы получить начало дня от даты используйте функцию НачалоДня.

Добавлено: 30 июн 2014, 17:08


Ну и еще понятие "до обеда" надо четко описать.
например, если обед начинается в 13-00, тогда время обеда можно вычислить так:
ТекВремя = ТекущаяДата();
ВремяОбеда = НачалоДня(ТекВремя) + 60*60*13;
Если ТекВремя = ВремяОбеда Тогда
Сообщить("Пора обедать!");
КонецЕсли;

на всякий случай, чтоб было понятно: 60*60*13 - это я прибавил 13 часов, переведенные в секунды (если к дате прибавить число, прибавляются именно секунды)

Ученик65037

Цитата: mixqn от 30 июн 2014, 17:05
Цитата: Ученик65037 от 30 июн 2014, 14:48НачалоДня = Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy");
Вот тут вы строку получаете и потом из даты пытаетесь вычесть строку.
чтобы получить начало дня от даты используйте функцию НачалоДня.

Добавлено: 30 июн 2014, 17:08


Ну и еще понятие "до обеда" надо четко описать.
например, если обед начинается в 13-00, тогда время обеда можно вычислить так:
ТекВремя = ТекущаяДата();
ВремяОбеда = НачалоДня(ТекВремя) + 60*60*13;
Если ТекВремя = ВремяОбеда Тогда
Сообщить("Пора обедать!");
КонецЕсли;

на всякий случай, чтоб было понятно: 60*60*13 - это я прибавил 13 часов, переведенные в секунды (если к дате прибавить число, прибавляются именно секунды)
Спасибо. Конструкция интересная. Только она ничего не выводит, никакого сообщения. По идеи она ко времени прибавляет время когда должен быть обед. Но у меня задача сделать в виде таймера.Чтобы от текущего времени шел отсчет времени по секундно до начала обеденного времени.

LexaK

да вроде все просто

//считаем что обед в 13:00
СекундДоОбеда = НачалоДня(ТекущаяДата()) + 3600 * 13 - ТекущаяДата();
если помогло нажмите: Спасибо!

Ученик65037

Цитата: LexaK от 01 июл 2014, 10:03
да вроде все просто

//считаем что обед в 13:00
СекундДоОбеда = НачалоДня(ТекущаяДата()) + 3600 * 13 - ТекущаяДата();
Поле вобще пропало.

LexaK

Шеф!!! Все пропало! Все пропало! :lol:
(прикольно)
если помогло нажмите: Спасибо!

Ученик65037

Цитата: LexaK от 01 июл 2014, 10:41
Шеф!!! Все пропало! Все пропало! :lol:
(прикольно)

Перем мСчет;

// нажание на старт
Процедура СтартНажатие(Элемент)
мСчет = 0;
ПодключитьОбработчикОжидания("Отсчет",1);
КонецПроцедуры

// нажатие на стоп
Процедура СтопНажатие(Элемент)
ОтключитьОбработчикОжидания("Отсчет");
КонецПроцедуры

// обработчик ожидания
Процедура Отсчет()
мСчет = мСчет + 1;
ЭлементыФормы.НадписьТаймер.Заголовок = Время(мСчет);
КонецПроцедуры

// функция преобразования числа во время
Функция Время(Значение)
Если Значение < 60 Тогда
  Возврат Строка(Значение) + " сек.";
ИначеЕсли Значение >= 60 и Значение < 60*60 Тогда
Возврат Строка(Цел(Значение/60)) + " мин. " + Строка(Значение-Цел(Значение/60)*60) + " сек.";
ИначеЕсли Значение >= 60*60 и Значение < 60*60*24 Тогда
Возврат Строка(Цел(Значение/(60*60))) + " час. "
+  Строка(Цел((Значение - (Цел(Значение/(60*60))*60*60))/60)) + " мин. "
+ Строка(Значение-Цел(Значение/60)*60) + " сек.";
КонецЕсли;
КонецФункции
// конец


Попробовал так. Но выдает ошибки в синтаксисе.:fdbsdfbsd:

LexaK

у меня полчилось!!!! создал общую форму, общую команду, в форме написал такой код. Все работает! Прикольно, так работаешь себе, а тебе там где-то в форме тикает время сколько осталось до обеда!!! МОЖНО ПОЙТИ ДАЛЬШЕ!!! После обеда, в той же форме паказывать время до окончания рабочего дня!!!!
Так весь рабочий день в два счетчика и будет укладываться в счетчик до обеда и в счетчик до ухода с работы.


вот код в форме


&НаКлиенте
Процедура ПриОткрытии(Отказ)
//Вставить содержимое обработчика
ПодключитьОбработчикОжидания("Отсчет",1);
КонецПроцедуры

&НаКлиенте
Процедура Отсчет()

Секунд = НачалоДня(ТекущаяДата()) + 3600 * 13 - ТекущаяДата();
Час = Цел(Секунд / 60 / 60);
Мин = Цел((Секунд % 3600) / 60);
Сек = Цел(Секунд % 60);
Текст = ?(час > 0, строка(час) + " час ", "") + ?(мин > 0, строка(мин) + " мин ", "") + ?(сек > 0, строка(сек) + " сек", "");

Элементы.Надпись.Заголовок = "До обеда: " + Текст;

КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
ОтключитьОбработчикОжидания("Отсчет");
КонецПроцедуры
если помогло нажмите: Спасибо!

Ученик65037

Цитата: LexaK от 01 июл 2014, 12:03
у меня полчилось!!!! создал общую форму, общую команду, в форме написал такой код. Все работает! Прикольно, так работаешь себе, а тебе там где-то в форме тикает время сколько осталось до обеда!!! МОЖНО ПОЙТИ ДАЛЬШЕ!!! После обеда, в той же форме паказывать время до окончания рабочего дня!!!!
Так весь рабочий день в два счетчика и будет укладываться в счетчик до обеда и в счетчик до ухода с работы.


вот код в форме


&НаКлиенте
Процедура ПриОткрытии(Отказ)
//Вставить содержимое обработчика
ПодключитьОбработчикОжидания("Отсчет",1);
КонецПроцедуры

&НаКлиенте
Процедура Отсчет()

Секунд = НачалоДня(ТекущаяДата()) + 3600 * 13 - ТекущаяДата();
Час = Цел(Секунд / 60 / 60);
Мин = Цел((Секунд % 3600) / 60);
Сек = Цел(Секунд % 60);
Текст = ?(час > 0, строка(час) + " час ", "") + ?(мин > 0, строка(мин) + " мин ", "") + ?(сек > 0, строка(сек) + " сек", "");

Элементы.Надпись.Заголовок = "До обеда: " + Текст;

КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
ОтключитьОбработчикОжидания("Отсчет");
КонецПроцедуры



Добрый вечер всем. Получилось реализовать этот код.
&НаКлиенте
Процедура Команда1(Команда)
     ПодключитьОбработчикОжидания("Команда2", 1);
КонецПроцедуры
  &НаКлиенте
  Процедура Команда2()
    Дата1 = ТекущаяДата();
    ДоОбедаОсталосьЧасов = Цел(((НачалоДня(ТекущаяДата()) + 3600 * 13) - ТекущаяДата())/3600);
    ОсталосьМинут =((НачалоДня(ТекущаяДата()) + 3600 * 13) - ТекущаяДата())%3600;
    ДоОбедаОсталосьМинут = Цел(ОсталосьМинут/60);
     ДоОбедаОсталосьСекунд =((НачалоДня(ТекущаяДата()) + 3600 * 13) - ТекущаяДата())%60;
     Элементы.Декорация1.Заголовок= "До обеда: "+Строка(ДоОбедаОсталосьЧасов)+":"+Строка(ДоОбедаОсталосьМинут)+":"+Строка(ДоОбедаОсталосьСекунд);
ДоКонцаРабочегоДняОсталосьЧасов = Цел(((НачалоДня(ТекущаяДата()) + 3600 * 20) - ТекущаяДата())/3600);
    ОсталосьМинут =((НачалоДня(ТекущаяДата()) + 3600 * 20) - ТекущаяДата())%3600;
    ДоКонцаРабочегоДняОсталосьМинут = Цел(ОсталосьМинут/60);
     ДоКонцаРабочегоДняОсталосьСекунд =((НачалоДня(ТекущаяДата()) + 3600 * 20) - ТекущаяДата())%60;
     Элементы.Декорация2.Заголовок= "Конец дня: "+Строка(ДоКонцаРабочегоДняОсталосьЧасов)+":"+Строка(ДоКонцаРабочегоДняОсталосьМинут)+":"+Строка(ДоКонцаРабочегоДняОсталосьСекунд);
  КонецПроцедуры

Пользуйтесь на здоровье!!!


Теперь у меня    другой вопрос. Как можно вывести реквизит с документа на общую форму как реквизит в форме надписи: К примеру поле ИМЯ. Заранее благодарен.     

Похожие темы (5)

Рейтинг@Mail.ru

Поиск