logoff | Дата: Пятница, 07.06.2013, 12:29 | Сообщение # 1 |
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
| Обсуждаем тут Анализатор CF. Хотелось бы выслушать ваши предложения/пожелания/критику по данной утилите.
Планы на ближайшее будущее: Вывод в csv, для возможности экпорта в Excel - выполнено Попытка найти путь к udl файлу клиента CyberFleet (поиск в реестре) - выполнено Выбор udl файла пользователем через диалоговое окно - выполнено Расширение списка отчетов до 10 - будет релизовая версия - выполнено. Релизация указания периода для запуска скриптов - выполнено --------------------- выпуск релиза v 1.0.1 ------------------- Фильтр по ТС группы и/или Фирмы - выполнено Разработка скрипта "единого окна" информации о ТС - прошу высказываться!
|
|
| |
logoff | Дата: Понедельник, 09.09.2013, 08:46 | Сообщение # 47 |
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
| С подачи Кирила в разработке скрипт вывода данных о ТС "на одном листе", т.е. вывести максимум информации о ТС, дабы пользователю не приходилось открывать массу окон для ее поиска и контроля.
примерный состав информации (не полный)
Цитата ************************** Номер АТ/Гос номер ТС/Гаражный номер/Организация 00088888/о001то70/001/ООО "ААА" Последние валиданые данные: 16.08.2013 50.1234,42.1236 Марка:Запорожец Водители: - Пупкин - Дрюпкин Числится в группах: - ААА - Группа ТС - Еще одна группа ТС Датчики аналоговые Номер=Название {Тип датчика} [мин-макс значения](значение/по тарировке (ед)/дата последнего): - 18=Топливный {Топливо (сводный отчет)} [0-500л] (569/18л/16.08.2013) -- Порог заправки/слива: 20/20л -- Еще какие-то параметры -- Тарировка [18=Топливный] начало --- 1-10/0-10 л --- 10-600/10-20 л -- Тарировка [18=Топливный] окончание - 6=Напряжение [0-40в](12/12в/16.08.2013) -- Тарировка [6=Напряжение] начало -- Тарировка [6=Напряжение] окончание - 5=Время дрочки водителя (756/8/16.08.2013) -- Тарировка [6=Напряжение] начало -- Тарировка [6=Напряжение] окончание
Датчики цифровые (посл. срабатывание за 30 дней) - 1=тревожная кнопка (16.08.2013)/Бак [18=Топливный] - 3=зажигание (16.08.2013) - 5=двери (16.08.2013) ****00088888/о001то70/001/ООО "ААА"**** Тестовый результат уже можно оценить скриптом Код /****** Скрипт для команды SelectTopNRows из среды SSMS ******/ declare @ObjectID int, @DeviceID int, @c int declare @snum int, @sdesc varchar(128), @sClassName varchar(256), @stele_time datetime, @sMinValue float, @sMaxValue float, @sSensValue float, @sIsAlarm tinyint, @sid int ,@sDischargeThreshold float, @sRefuelingThreshold float ,@sRefuelingTimeThreshold int, @sDischargeTimeThreshold int use BN select @ObjectID=ObjectID from [dbo].[FLEET_Object] where ObjectGarNum like '%720%'
select @DeviceID=Device_ID from [dbo].[FLEET_Object] where ObjectID=@ObjectID print @DeviceID
create table #t (num float, string varchar(256) null)
insert into #t (num,string) select 10,'Номер АТ/Гос номер ТС/Гаражный номер/Организация' union select 20,d.code+'/'+o.ObjectGosNum+'/'+o.ObjectGarNum+'/'+Org.ShortName FROM [dbo].[FLEET_Object] as O left join [dbo].[SYS_DEV_Device] as D on D.id=O.Device_ID left join [dbo].[SYS_OrgRequisite] as Org on Org.id=O.OrganizationId where ObjectID=@ObjectID
union select 30,'Последние валиданые данные: '+convert(varchar(32),cd.tele_time,120)+' ('+cd.TextHistory+')'+' ['+replace(str(cd.lat,10,6),' ','')+' '+replace(str(cd.long,10,6),' ','')+']' from [dbo].[SYS_DEV_CurrentData] as CD where ObjectID=@ObjectID union select 40,'Марка: '+isnull(m.MarkCarName,'') from [dbo].[FLEET_Object] as O left join [dbo].[FLEET_MarkCar] as M on M.MarkCarID=O.MarkCarID where ObjectID=@ObjectID union select 60,'Водители: '+isnull([dbo].[FLEET_GetPersonalFIO](O.Personal1_ID),'')+'/'+isnull([dbo].[FLEET_GetPersonalFIO](O.Perconal2_ID),'') from [dbo].[FLEET_Object] as O where ObjectID=@ObjectID union select 70,'Числится в группах: ' union select 80+(0.0000+ ROW_NUMBER() OVER(ORDER BY g. [ObjectGroupeName]DESC)/100), '- '+g. [ObjectGroupeName]from [dbo].[FLEET_ObjectRelation] as Orel inner join [dbo].[FLEET_ObjectGroupe] as G on G.[ObjectGroupeID]=Orel.
[ObjectGroupeID]where ObjectID=@ObjectID union select 90,'Датчики аналоговые Номер=Название {Тип датчика} [мин-макс] (значение/по тарировке (ед)/дата последнего):'
declare cur_AnaloSen cursor local for select s.[num],s.[description],lm.[message_text], s.tele_time,s.MinValue, S.MaxValue,S.SensValue,S.IsAlarm,S.id, s.DischargeThreshold, s.RefuelingThreshold,s.RefuelingTimeThreshold, s.DischargeTimeThreshold from [dbo].[SYS_DEV_Sensor] as S inner join [dbo].SYS_DEV_SensorClassification as Cl on cl.Id=S.SensorClassificationId inner join [dbo].[SYS_LangMessages] as LM on LM.ident=cl.name and lang_id=1 where device_id=@DeviceID and sensor_type_id=0 and SensorActive=1 order by s.num set @c=0 open cur_AnaloSen while 1=1 begin fetch next from cur_AnaloSen into @snum, @sdesc, @sClassName, @stele_time, @sMinValue, @sMaxValue, @sSensValue, @sIsAlarm, @Sid ,@sDischargeThreshold, @sRefuelingThreshold,@sRefuelingTimeThreshold, @sDischargeTimeThreshold if @@FETCH_STATUS!=0 break insert into #t (num,string) values (0.000+100+(0.000+@c)/1000, '-'+cast(@snum as varchar(3))+'='+@sdesc+' {'+@sClassName+'} ['+isnull(replace(str(@sMinValue,10,3),' ',''),'')+'-'+isnull(replace(str(@sMaxValue,10,3),' ',''),'')+'] ('+cast(round(@sSensValue,10,3) as varchar)+'/'+cast(round([dbo].[SYS_GetTareValue](@sid,@ssensValue),1) as varchar(128)))
insert into #t (num,string) values (0.000+100+(0.1+@c)/1000, '--Пороги Заправки/слива: '+cast(@sRefuelingThreshold as varchar)+'л.-'+cast(@sRefuelingTimeThreshold as varchar) +'м/'+cast(@sDischargeThreshold as varchar)+'л.-'+cast(@sDischargeTimeThreshold as varchar) +'м') if exists (select * from [dbo].[FLEET_AnalogTarirovka] where [IDSensor]=@sid) begin insert into #t (num,string) values (0.000+100+(0.2+@c)/1000, '--тарировка ['+cast(@snum as varchar(3))+'='+@sdesc +'] начало') insert into #t (num,string) select (0.000+100+((0.3+@c)+ROW_NUMBER() OVER(ORDER BY [MinValue_Real] DESC)/1000)/1000), '---'+cast([MinValue_Real] as varchar)+'-'+cast([MaxValue_Real] as varchar)+'='+ cast([MinValue_Tar] as varchar)+'-'+cast([MaxValue_Tar] as varchar) from [dbo].[FLEET_AnalogTarirovka] where [IDSensor]=@sid order by [MinValue_Real]
insert into #t (num,string) values (0.000+100+(0.4+@c)/1000, '--тарировка ['+cast(@snum as varchar(3))+'='+@sdesc +'] окончание') end
set @c=@c+1 end -- while 1=1 close cur_AnaloSen deallocate cur_AnaloSen
insert into #t (num,string) select 110,'Датчики цифровые:' insert into #t (num,string) select 199,'*****'+d.code+'/'+o.ObjectGosNum+'/'+o.ObjectGarNum+'/'+Org.ShortName+'*****' FROM [dbo].[FLEET_Object] as O left join [dbo].[SYS_DEV_Device] as D on D.id=O.Device_ID left join [dbo].[SYS_OrgRequisite] as Org on Org.id=O.OrganizationId where ObjectID=@ObjectID
select * from #t order by num drop table #t
пока только по одному ТС. Гаражный номер ТС задается в строке 7.
Пример вывода - в приложении
Планируется: 1. Обработка списка ТС (работа с фильтрами по фирме, группе, части гос номера ТС, коду прибора) 2. Вывод большего количество данных о ТС в одном списке. Так как это достаточно кропотливо, то в первую очередь от вас хочется услышать какие именно параметры нужны.
Есть у кого какие предложения?
PS: Вышел с отпуска
|
|
| |
logoff | Дата: Понедельник, 16.09.2013, 11:23 | Сообщение # 48 |
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
| Обновленная версия скрипта
Цитата /****** Скрипт для команды SelectTopNRows из среды SSMS ******/ declare @ObjectID int, @DeviceID int, @c int declare @snum int, @sdesc varchar(128), @sClassName varchar(256), @stele_time datetime, @sMinValue float, @sMaxValue float, @sSensValue float, @sIsAlarm tinyint, @sid int ,@sDischargeThreshold float, @sRefuelingThreshold float, @sunits VarChar(24) ,@sRefuelingTimeThreshold int, @sDischargeTimeThreshold int declare @TankSensorNum int,@TankSensorName varchar(128),@SensFuelConsWin float, @SensFuelConsSum float use BN select @ObjectID=ObjectID from [dbo].[FLEET_Object] where ObjectGarNum like '%448%'
select @DeviceID=Device_ID from [dbo].[FLEET_Object] where ObjectID=@ObjectID print @DeviceID
create table #t (num float, string varchar(256) null)
insert into #t (num,string) select 10,'Номер АТ/Гос номер ТС/Гаражный номер/Организация' union select 20,d.code+'/'+o.ObjectGosNum+'/'+o.ObjectGarNum+'/'+Org.ShortName FROM [dbo].[FLEET_Object] as O left join [dbo].[SYS_DEV_Device] as D on D.id=O.Device_ID left join [dbo].[SYS_OrgRequisite] as Org on Org.id=O.OrganizationId where ObjectID=@ObjectID
union select 30,'Последние валиданые данные: '+convert(varchar(32),cd.tele_time,120)+' ['+replace(str(cd.lat,10,6),' ','')+' '+replace(str(cd.long,10,6),' ','')+']'+' '+cd.TextHistory+'' from [dbo].[SYS_DEV_CurrentData] as CD where ObjectID=@ObjectID union select 40,'Марка: '+isnull(m.MarkCarName,'') from [dbo].[FLEET_Object] as O left join [dbo].[FLEET_MarkCar] as M on M.MarkCarID=O.MarkCarID where ObjectID=@ObjectID union select 60,'Водители: '+isnull([dbo].[FLEET_GetPersonalFIO](O.Personal1_ID),'')+'/'+isnull([dbo].[FLEET_GetPersonalFIO](O.Perconal2_ID),'') from [dbo].[FLEET_Object] as O where ObjectID=@ObjectID union select 70,'Числится в группах: ' union select 80+(0.0000+ ROW_NUMBER() OVER(ORDER BY g. [ObjectGroupeName]DESC)/100), '- '+g. [ObjectGroupeName]from [dbo].[FLEET_ObjectRelation] as Orel inner join [dbo].[FLEET_ObjectGroupe] as G on G.[ObjectGroupeID]=Orel.
[ObjectGroupeID]where ObjectID=@ObjectID union select 81,'Расход 100/км [Зима/Лето]: '+cast(isnull([ObjectFuelConsWin],'') as varchar) +'/'+cast(isnull([ObjectFuelConsSum],'') as varchar)+' '+ case [ObjectNormChargeType]when 1 then '[по пробегу]' when 2 then '[по нормочасу]' else '[комбинированный]' end from [dbo].[FLEET_Object] as O where ObjectID=@ObjectID union select 90,'Датчики аналоговые Номер=Название {Тип датчика} [мин-макс] (значение/по тарировке (ед)/дата последнего):'
declare cur_AnaloSen cursor local for select s.[num],s.[description],isnull(lm.[message_text],''), s.tele_time,s.MinValue, S.MaxValue,S.SensValue,S.IsAlarm,S.id, s.DischargeThreshold, s.RefuelingThreshold,s.RefuelingTimeThreshold, s.DischargeTimeThreshold,isnull(s.units,'л?') from [dbo].[SYS_DEV_Sensor] as S inner join [dbo].SYS_DEV_SensorClassification as Cl on cl.Id=S.SensorClassificationId inner join [dbo].[SYS_LangMessages] as LM on LM.ident=cl.name and lang_id=1 where device_id=@DeviceID and sensor_type_id=0 and SensorActive=1 order by s.num set @c=0 open cur_AnaloSen while 1=1 begin fetch next from cur_AnaloSen into @snum, @sdesc, @sClassName, @stele_time, @sMinValue, @sMaxValue, @sSensValue, @sIsAlarm, @Sid, @sDischargeThreshold, @sRefuelingThreshold,@sRefuelingTimeThreshold, @sDischargeTimeThreshold,@sunits if @@FETCH_STATUS!=0 break insert into #t (num,string) values (0.000+100+(0.000+@c)/1000, '-'+cast(@snum as varchar(3))+'='+@sdesc+' {'+@sClassName+'} ['+isnull(replace(str(@sMinValue,10,3),' ',''),'')+'-'+isnull(replace(str(@sMaxValue,10,3),' ',''),'')+ '] ('+cast(round(@sSensValue,10,3) as varchar)+'/'+cast(round([dbo].[SYS_GetTareValue](@sid,@ssensValue),1) as varchar(128))+@sunits+'/'+convert(varchar(30),@stele_time,120)+')')
insert into #t (num,string) values (0.000+100+(0.1+@c)/1000, '--Пороги Заправки/слива: '+cast(@sRefuelingThreshold as varchar)+@sunits+'-'+cast(@sRefuelingTimeThreshold as varchar) +'м/'+cast(@sDischargeThreshold as varchar)+@sunits+'-'+cast(@sDischargeTimeThreshold as varchar) +'м') if exists (select * from [dbo].[FLEET_AnalogTarirovka] where [IDSensor]=@sid) begin insert into #t (num,string) select 0.000+100+(0.2+@c)/1000, '--тарировка ['+cast(@snum as varchar(3))+'='+@sdesc +'] начало ['+cast(min([MinValue_Real]) as varchar)+'-'+cast(max([MaxValue_Real]) as varchar)+'=' +cast(min([MinValue_Tar]) as varchar)+'-'+cast(max([MaxValue_Tar]) as varchar)+@sunits+']' from [dbo].[FLEET_AnalogTarirovka] where [IDSensor]=@sid
insert into #t (num,string) select (0.000+100+((0.3+@c)+ROW_NUMBER() OVER(ORDER BY [MinValue_Real] DESC)/1000)/1000), '---'+cast([MinValue_Real] as varchar)+'-'+cast([MaxValue_Real] as varchar)+'='+ cast([MinValue_Tar] as varchar)+'-'+cast([MaxValue_Tar] as varchar)+@sunits from [dbo].[FLEET_AnalogTarirovka] where [IDSensor]=@sid order by [MinValue_Real]
insert into #t (num,string) values (0.000+100+(0.4+@c)/1000, '--тарировка ['+cast(@snum as varchar(3))+'='+@sdesc +'] окончание') end
set @c=@c+1 end -- while 1=1 close cur_AnaloSen deallocate cur_AnaloSen
insert into #t (num,string) select 110,'Датчики цифровые: Номер=Название {Тип} Тревога? [Бак] (дата посл.)'
declare cur_DigitSen cursor local for select s.[num],s.[description],isnull(lm.[message_text],''), S.IsAlarm,S.id,st.num,st.description, s.SensFuelConsWin,s. [SensFuelConsSum]from [dbo].[SYS_DEV_Sensor] as S left join [dbo].SYS_DEV_SensorClassification as Cl on cl.Id=S.SensorClassificationId left join [dbo].[SYS_LangMessages] as LM on LM.ident=cl.name and lang_id=1 left join [dbo].[SYS_DEV_Sensor] as ST on ST.id=S.TankSensorID where s.device_id=@DeviceID and s.sensor_type_id=1 and s.SensorActive=1 order by s.num open cur_DigitSen set @c=0 while 1=1 begin fetch next from cur_DigitSen into @snum, @sdesc, @sClassName, @sisAlarm, @sid,@TankSensorNum,@TankSensorName,@SensFuelConsWin, @SensFuelConsSum if @@FETCH_STATUS!=0 break insert into #t (num,string) select 0.00+110+@c/1000, '- '+cast(@snum as varchar(5))+'='+@sdesc+' {'+@sClassName+'}'+ case when @sisAlarm=1 then ' /Тревожный' else '' end +case when @TankSensorNum is not null then '['+cast(@TankSensorNum as varchar(5))+'='+@TankSensorName+' зима/лето='+isnull (cast(@SensFuelConsWin as varchar),'0')+'/'+isnull (cast(@SensFuelConsSum as varchar),'0')+'] ' else '' end set @c=@c+1 print @c end
close cur_DigitSen deallocate cur_DigitSen insert into #t (num,string) select 199,'*****'+d.code+'/'+o.ObjectGosNum+'/'+o.ObjectGarNum+'/'+Org.ShortName+'*****' FROM [dbo].[FLEET_Object] as O left join [dbo].[SYS_DEV_Device] as D on D.id=O.Device_ID left join [dbo].[SYS_OrgRequisite] as Org on Org.id=O.OrganizationId where ObjectID=@ObjectID
select * from #t order by num drop table #t
|
|
| |