Погодаева Г.
Junior Member / Новичок
Участник № / Member № 192
отправлено / posted
Помогите, пожалуйста,решить мою проблему. Раз в сутки проверяется прибор на нуль и в канал Пр0 я записываю время его проверки (вещ. число), в Win2000 это время в сутках. А сервер док-ния работает с временем в сек. Мне в отчет надо напечатать или время проверки, или 00:00:00, если проверки не было. Меня еще запутывает время по Гринвичу (у нас разница в 8 час.).Какое выражение мне надо составить в отчете или что программно еще мне надо сделать? Заранее благодарна.
Сообщения / Posts 28 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Погодаева Г.
Junior Member / Новичок
Участник № / Member № 192
отправлено / posted
Для времени 00:00:00 я посылала в Пр0 - 0.00 , но в отчете печаталось 8:00:00. А для времени проверки, я вычисляла веществ. число = время проверки (переведенное в секунды) - 28800 (разница часовых поясов в секундах). В отчете это время печаталось как мне надо. Вывод на печать шел по такому формату: TIMESTR("%X",GETVAL(CHAN("Пр0",0,"medal"))). Я пробовала менять функции (использовать DTIME), но ничего хорошего не получилось: или идет ошибка, или не то время печатается.
Сообщения / Posts 28 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Рекомендую использовать более простой метод. Суть его в том, чтобы использовать для хранения времени проверки прибора атрибут время изменения канала. Допустим, что у Вас в проекте есть для этого канал ChannelTime. Тогда - при проведении проверки в этот канал Вам необходимо послать любое значение (значение роли не играет - главное, чтобы значение канала поменялось) для того, чтобы его атрибут Время Изменения зафиксировал текущее системное время. Это и будет время, которое мы будем использользовать в шаблоне документа. В шаблоне вывести данное время можно следующим выражением: TIMESTR( "%#x %X", GETVAL( CHAN( "ChannelTime", "TS", "NODE1") ) )Сообщения / Posts 17321 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Погодаева Г.
Junior Member / Новичок
Участник № / Member № 192
отправлено / posted
Я согласна, что и так можно напечатать нужное мне время. Но в 7 час. утра каждых суток я должна обнулить это время и как по вашему выражению напечатается 00:00:00 ? Что я должна подать на вход этого канала?
Сообщения / Posts 28 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
В таком случае Вам необходимо делать поправку на часовой пояс. Вы верно получаете значение 8:00:00 при нулевом значении в канале. Дело в том, что внутри - система работает с форматом времени по Гринвичу, а как Вы уже уточнили - у Вас разница по Гринвичу +8 часов. Поэтому в Вашем локальном времени значение 00:00:00 в канале должно учитывать эту поправку. Для времени проверки Вы эту поправку вводили (- 28800, разница часовых поясов в секундах), а вот при обнулении - не учитывали и получали как следствие время на 8 часов большее, чем необходимо! Кроме того - не рекомендуется использовать функции типа DTIME() или TIME() от значения Вашего канала, ведь Вы и так уже формируете время в том формате, в котором они его сами возвращают, иначе данные функции будут возвращать всегда текущее время системы!
Сообщения / Posts 17321 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Погодаева Г.
Junior Member / Новичок
Участник № / Member № 192
отправлено / posted
Извините, но для меня это уже пройденный этап. Дело в том, что функция TIMESTR() выдает ошибку, если в канале отрицательное число. Но я нашла выход -применила функцию IF(). При равенстве 0 значения канала я выдаю на печать пробелы: IF( GETVAL( CHAN( "Пр0_ВСГ", 0, "Medal")), '!=', 0, TIMESTR( "%X", GETVAL( CHAN( "Пр0_ВСГ", 0, "Medal")))," " ) Но теперь у меня пропали границы ячеек, где печатаются пробелы. Я не пойму, почему они пропадают. При просмотре пробного отчета- все нормально. Честно говоря, я уже достаточно намучилась с этими границами. Везде описано, как должно быть, и как надо делать, а непонятные ситуации нигде не описаны.
Сообщения / Posts 28 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Естественно система не понимает отрицательное значение! Ведь нижний предел - это ноль часов 1970 года. Как можно сместить время меньше этой границы? Это начало осчета - меньше быть не может и Trace Mode тут не при чем, так уж устроена вся вычислительная техника. Если Вы хотите обнулять время по 00:00:00 - то будте добры учитывать и остальные составляющие формата времени - это День, Месяц и Год! Вы забыли про них? Ведь 00 часов, 00 минут 00 секунд бывают в разные дни разных месяцев и разных лет! Поэтому при формировании нулевого времени про это нельзя забывать!
Сообщения / Posts 17321 | Из / From: Россия
| IP / IP: IP адрес / IP address |