отображение даты
В мнемосхеме стоит панель, к которой привязан канал типа DataTime
на мониторе идёт отображение
причём команда DateTimeToStr выдаёт то "дата время", то "дата время время" вот пример правильного и неправильного формирования при одном и том же скрипте.
Чем это может быть вызвано и как с этим бороться???
Ответ
День добрый.
Штатное поведение функции DateTimeToStr - при преобразовании даты/времени в строку - если время равно 0:00:00 то будет выведена только дата.
http://www.delphibasics.ru/DateTimeToStr.php
Пришлите текст скрипта нам на почту для анализа.
Добрый день, смущает не выдача даты, а то что после даты и время ещё раз повторяется время просто при отображении TdataTime на панели и иногда в формируемом выпадающем списке.
Место формирования выделено в скрипте жирным подчёркнутым шрифтом.
Спасибо!
Var
begindate, enddate, date: TDateTime;
reccount,ryi,rvi,ry,rv: integer;
value: integer;
stream: TMemoryStream;
error: word;
ss,s:string;
masdv, masdy,masdr: array [0..1000] of TdateTime;
masvv,masvy: array [0..1000] of integer;
begin
begindate := ReadValue('дата нач');
// конечная дата
enddate := ReadValue('дата кон');
// считаем данные из БД в буфер
stream.clear;
error := StreamReadFromDatabase(begindate, enddate,'ваг вышли', stream);
ry := -1; // записей по выходу
if error = 0 then begin
reccount := GetCountRecordToStream(stream);
while GetValueFromStream(stream, date, value) do begin
inc(ry); if ry>1000 then ry:=1000;
masdy[ry]:=date; //дата выхода
masvY[ry]:=value; //номер вагонетки вышедшей
masdr[ry]:=0; //пока нет захода
end;
// дата начала
begindate := masdy[0]-1; // надо за 4 дня назад, пока 1 !!!
stream.clear;
error := StreamReadFromDatabase(begindate, enddate,'ваг вошли', stream);
rv := -1; //записей по входу
if error = 0 then begin
while GetValueFromStream(stream, date, value) do begin
inc(rv); if rv>1000 then rv:=1000;
masdv[rv]:=date; //дата заходаа
masvv[rv]:=value; //номер вагонетки зашедшей
end;
for ryi:=ry downto 0 do begin // поиск назад в вых
for rvi:=rv downto 0 do begin // поиск назад в заходе
if (masvy[ryi]=masvv[rvi]) then begin //найден заход
masdr[ryi]:=masdv[rvi];// когда заехала
break;
end;
end;
end;
end; //по заходу
end;// по выходу
ss:='';
for ryi:=ry downto 0 do begin// формирование списка
if masdr[ryi]=0 then s:='; Не вышел' else begin
s:=dateTimeToStr( masdy[ryi])+'; Всего:'+inttoStr(round((masdy[ryi]-masdr[ryi])*24*3600))+'сек';
end;
ss:=ss+intToStr(ryi+1)+' №'+IntToStr(masvy[ryi])+' '+DateTimeToStr(masdr[ryi])+'-'+s+',';
end;
SetComboBox('толчок22','ВыпадающийСписок',ss,0,true);
end.
Добрый вечер.
Не смогли у себя повторить такого поведения системы (какая версия СИМП установлена), давайте немного доработаем скрипт, и проверим:
var DTdy,DTdr: string; ... for ryi := ry downto 0 do
begin // формирование списка DTdy := dateTimeToStr(masdy[ryi]);
DTdr := dateTimeToStr(masdr[ryi]); if masdr[ryi] = 0 then
s := '; Не вышел'
else
begin
s := DTdy + '; Всего:' +
inttoStr(round((masdy[ryi] - masdr[ryi]) * 24 * 3600)) + 'сек';
end;
ss := ss + inttoStr(ryi + 1) + ' №' + inttoStr(masvY[ryi]) + ' ' +
DTdr + '-' + s + ',';
end;
Добрый день!
Та же ерунда - время повторяется дважды просто на панелях и при формировании списка. С вашими изменениями. Проект и инструкцию прикладываю
Запустить мнемо "толчок22",
нажать несколько раз (~10-12) кн "толчок"
Подождать несколько секунд для записи в БД
нажать кн "сейчас"
нажать кн."список вышедших"
убедиться в правильной записи в выпадающий список
выбрать строчку в списке
Нажать "диаграмма по вагонетке 1",
Повторить со "списка вышедших", убедиться в правильности списка.
На рис. все двойные отображения времени отмечены рамочками и стрелками.
"Список вышедших" запускает скрипт канала "Список"
День добрый.
Безусловно как задача будет решена, то мы выложим в общий доступ обновление.
Сервис поддержки клиентов работает на платформе UserEcho
День добрый.
Исправлено.
ver. 4.7.7.79