1 (edited by Xexrby Tdutybq 2016-04-25 11:57:49)

Topic: Прошу помощи в программе

Вот уже месяц бьюсь и не могу понять причину некоректного отображения данных.
Вся работа с программой базируется на 1 таблице kash.
в ней 16 полей - вещественное число иа пара вспомогательных (дата и ссылка на другую таблицу).

Простейшая выборка в отчет
select
*
from kash

(реализовано в - Отчет по АЗС на дату (Excel))

отражает данные по разному - где разделитем точка а где разделитем запятая.
используя
UPDATE kash SET Z_A80 = REPLACE(Z_A80, ',', '.') - (применительно ко всем полям)
или UPDATE kash SET Z_A80 = REPLACE(Z_A80, '.', ',') - (применительно ко всем полям)
пытался привести данные к единообразию по всей таблице.
но результат все равно прежний. по каким то колонкам отражабтся данные с точнокй а по каким то полям с запятой.
вроде ничего страшного когда выгружаю в ексель, но вот при работе с другими отчетами это вылазит боком.
агрегатные функции типа AVG в FastReport упорно не дают  формировать отчет где разделитем отражаются точки в первом отчете.

Помогите разобраться почему так отражаются данные

Post's attachments

Attachment icon Нефтепродукты.rar 620.54 kb, 388 downloads since 2016-04-25 

Чучкин Евгений

Re: Прошу помощи в программе

Приветствую,


Действительно присутствует странная работа SQLite драйвера, на который я к сожалению не могу повлиять. Получается что если в колонке первое значение равно NULL, то далее в этой колонке форматирование числа в соотвествии с региональными настройками не происходит, иначе происходит.


Могу предложить такой SQL запрос чтобы избежать этого:

SELECT
CAST( IFNULL(R_A80,0) as REAL) as r80,
CAST( IFNULL(R_AI92,0) as REAL) as r92,
CAST( IFNULL(R_AI93,0) as REAL) as r93,
CAST( IFNULL(R_AI95,0) as REAL) as r95,
CAST( IFNULL(R_Drive,0) as REAL) as rDr,
CAST( IFNULL(R_AI98,0) as REAL) as r98,
CAST( IFNULL(R_Disel,0) as REAL) as rDi,
CAST( IFNULL(R_Gaz,0) as REAL) as rg,
CAST( IFNULL(Z_A80,0) as REAL) as z80,
CAST( IFNULL(Z_AI92,0) as REAL) as z92,
CAST( IFNULL(Z_AI93,0) as REAL) as z93,
CAST( IFNULL(Z_AI95,0) as REAL) as z95,
CAST( IFNULL(Z_Drive,0) as REAL) as zDr,
CAST( IFNULL(Z_AI98,0) as REAL) as z98,
CAST( IFNULL(Z_Disel,0) as REAL) as zDi,
CAST( IFNULL(Z_Gaz,0) as REAL) as zg,

strftime('%d.%m.%Y',{dataot}) as dateot,
strftime('%d.%m.%Y',kash.date) as datekash,
MO.name as MO,
org.name as ORG,
azs.name as AZS

FROM kash
left outer join azs on azs.id=kash.id_azs
left outer join org on org.id=azs.id_org
left outer join MO on MO.id=azs.id_MO
WHERE date(kash.date)=date({dataot})
order by mo.kod, org.name
Dmitry.

Re: Прошу помощи в программе

спасибо попробую

Чучкин Евгений

Re: Прошу помощи в программе

К сожалению это то от чего я отходил изначально.
Вы предложили вместо пустого места использовать нули.
Я же НУЛИ изначально удалял так как они влияют на расчет MIN и AVG.
Можно наверно вернуть НУЛИ в данные но вот построение всей отчетности будет требовать конкретного пересмотра.
В самом то SQL запросе это вроде не составит труда используя SUM и COUNT *** FROM *** WHERE *** >0
Но вот поставить этот метод в расчете средней по группе в FastReport - тут думалки у меня пока не хватает - там как то ограничен синтаксис при расчете агрегатных функций.
Но все равно спасибо - буду думать.

Чучкин Евгений