отображение даты

Avatar
  • обновлен
  • Исправлен

В мнемосхеме стоит панель, к которой привязан канал типа DataTime

Image 1535

  на мониторе идёт отображение

Image 1536

  причём команда DateTimeToStr выдаёт то "дата время", то "дата время время"  вот пример правильного и неправильного формирования при одном и том же скрипте.

Image 1539

Image 1538

Чем это может быть вызвано и как с этим бороться???

Прикрепленные ответы
Avatar
СИМП Лайт (тех поддержка)
  • Ответ
  • Исправлен
Цитата от Ярослaв

Спасибо, жду!

День добрый.

Исправлено. 

ver. 4.7.7.79

Avatar
СИМП Лайт (тех поддержка)
  • На рассмотрении

День добрый.

Штатное поведение функции DateTimeToStr - при преобразовании даты/времени в строку - если время равно 0:00:00 то будет выведена только дата.

http://www.delphibasics.ru/DateTimeToStr.php

Пришлите текст скрипта нам на почту для анализа.

Avatar
Ярослaв

Добрый день, смущает не выдача даты, а то что после даты и время ещё раз повторяется время просто при отображении 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.

Avatar
Цитата от Ярослaв

Добрый день, смущает не выдача даты, а то что после даты и время ещё раз повторяется время просто при отображении 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;
Avatar
Цитата от Ярослaв

Добрый день, смущает не выдача даты, а то что после даты и время ещё раз повторяется время просто при отображении 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.

Добрый вечер.

Сможете проект на почту прислать? 

Avatar
Ярослaв
Цитата от СИМП Лайт (тех поддержка)

Добрый вечер.

Сможете проект на почту прислать? 

Добрый день!

Та же ерунда - время повторяется дважды просто на панелях и при формировании списка. С вашими изменениями. Проект и инструкцию прикладываю

Запустить мнемо "толчок22", 

нажать несколько раз (~10-12)  кн "толчок"

Подождать несколько секунд для записи в БД

нажать кн "сейчас"

нажать кн."список вышедших"

убедиться в правильной записи в выпадающий список

выбрать строчку в списке

Нажать "диаграмма по вагонетке 1", 

Повторить со "списка вышедших", убедиться в правильности списка.

На рис. все двойные отображения времени отмечены рамочками и стрелками.

"Список вышедших" запускает скрипт канала "Список"

Демо проект.slz 

Avatar
Цитата от Ярослaв

Добрый день!

Та же ерунда - время повторяется дважды просто на панелях и при формировании списка. С вашими изменениями. Проект и инструкцию прикладываю

Запустить мнемо "толчок22", 

нажать несколько раз (~10-12)  кн "толчок"

Подождать несколько секунд для записи в БД

нажать кн "сейчас"

нажать кн."список вышедших"

убедиться в правильной записи в выпадающий список

выбрать строчку в списке

Нажать "диаграмма по вагонетке 1", 

Повторить со "списка вышедших", убедиться в правильности списка.

На рис. все двойные отображения времени отмечены рамочками и стрелками.

"Список вышедших" запускает скрипт канала "Список"

Демо проект.slz 

День добрый.

Проблему локализовали, исправляем. 

Avatar
Anatoly
Цитата от СИМП Лайт (тех поддержка)

День добрый.

Проблему локализовали, исправляем. 

Симп, выложите пожалуйста её решение.

Avatar
Цитата от Anatoly

Симп, выложите пожалуйста её решение.

День добрый.

Безусловно как задача будет решена, то мы выложим в общий доступ обновление.

Avatar
Ярослaв

Спасибо, жду!

Avatar
СИМП Лайт (тех поддержка)
  • Ответ
  • Исправлен
Цитата от Ярослaв

Спасибо, жду!

День добрый.

Исправлено. 

ver. 4.7.7.79