Fórum Erro em cálculo na procedure. #58214
25/04/2007
0
Colegas.. tenho um relatório que é gerado a partir dos dados de uma procedure...é um relatório bem simples de estatística de propostas de serviço..
segue o código..
O relatório roda direitinho.. só tem um problema.. os dados de percentual (campos com PERC no nome) retonam sempre 0, mas existem dados para o cálculo..
alguém sabe o que está acontecendo ???
Agradeço a todos antecipadamente.
um abraço..
segue o código..
CREATE PROCEDURE RELATORIO_DESEMPENHO_COMERCIAL( I_DATA_INICIO DATE, I_DATA_FIM DATE, I_DESC_EMPRESA VARCHAR(100), I_COD_EMPRESA CHAR(3)) RETURNS ( C_COUNT_EMITIDAS INTEGER, C_DESC_EMPRESA VARCHAR(100), C_DATA_FIM DATE, C_COUNT_TOTAL_APROVADAS INTEGER, C_PERC_APROVADAS_TOTAL FLOAT, C_COUNT_TOTAL_CANCELADAS INTEGER, C_PERC_CANCELADAS_TOTAL FLOAT, C_COD_GRUPO CHAR(2), C_DESC CHAR(7), C_PERC_EMITIDAS_TOTAL FLOAT, C_COD_SUB_GRUPO CHAR(2), C_PERC_CONVERT_SUB_GRUPO FLOAT, C_COUNT_APROVADAS INTEGER, C_COUNT_TOTAL_EMITIDAS INTEGER, C_COUNT_CANCELADAS INTEGER, C_DATA_INICIO DATE) AS begin C_DATA_INICIO = :I_DATA_INICIO; C_DATA_FIM = :I_DATA_FIM; if (RTrim(LTrim(:I_DESC_EMPRESA)) = ´´) then begin C_DESC_EMPRESA = ´Todas as Empresas´; select count(C_COD_PROPOSTA) from PO0100 where C_DTA_EMISSAO_PROPOSTA between :I_DATA_INICIO and :I_DATA_FIM into :C_COUNT_TOTAL_EMITIDAS; select count(C_COD_PROPOSTA) from PO0100 where C_DTA_EMISSAO_PROPOSTA between :I_DATA_INICIO and :I_DATA_FIM and C_COD_STATUS = ´AP´ into :C_COUNT_TOTAL_APROVADAS; select count(C_COD_PROPOSTA) from PO0100 where C_DTA_EMISSAO_PROPOSTA between :I_DATA_INICIO and :I_DATA_FIM and C_COD_STATUS = ´CA´ into :C_COUNT_TOTAL_CANCELADAS; for select distinct C_COD_GRUPO, C_COD_SUB_GRUPO from PO0100 into :C_COD_GRUPO, :C_COD_SUB_GRUPO do begin C_DESC = :C_COD_GRUPO || ´ - ´ || :C_COD_SUB_GRUPO; select count(C_COD_PROPOSTA) from PO0100 where C_DTA_EMISSAO_PROPOSTA between :I_DATA_INICIO and :I_DATA_FIM and C_COD_SUB_GRUPO = :C_COD_SUB_GRUPO into :C_COUNT_EMITIDAS; select count(C_COD_PROPOSTA) from PO0100 where C_COD_STATUS = ´AP´ and C_DTA_EMISSAO_PROPOSTA between :I_DATA_INICIO and :I_DATA_FIM and C_COD_SUB_GRUPO = :C_COD_SUB_GRUPO into :C_COUNT_APROVADAS; select count(C_COD_PROPOSTA) from PO0100 where C_COD_STATUS = ´CA´ and C_DTA_EMISSAO_PROPOSTA between :I_DATA_INICIO and :I_DATA_FIM and C_COD_SUB_GRUPO = :C_COD_SUB_GRUPO into :C_COUNT_CANCELADAS; C_PERC_CONVERT_SUB_GRUPO = 0; if (:C_COUNT_EMITIDAS > 0) then begin C_PERC_CONVERT_SUB_GRUPO = (:C_COUNT_APROVADAS / :C_COUNT_EMITIDAS) * 100; end C_PERC_EMITIDAS_TOTAL = 0; if (:C_COUNT_TOTAL_EMITIDAS > 0) then begin C_PERC_EMITIDAS_TOTAL = (:C_COUNT_EMITIDAS / :C_COUNT_TOTAL_EMITIDAS) * 100; end C_PERC_APROVADAS_TOTAL = 0; if (:C_COUNT_TOTAL_APROVADAS > 0) then begin C_PERC_APROVADAS_TOTAL = (:C_COUNT_APROVADAS / :C_COUNT_TOTAL_APROVADAS) * 100; end C_PERC_CANCELADAS_TOTAL = 0; if (:C_COUNT_TOTAL_CANCELADAS > 0) then begin C_PERC_CANCELADAS_TOTAL = (:C_COUNT_CANCELADAS / :C_COUNT_TOTAL_CANCELADAS) * 100; end suspend; end end else begin C_DESC_EMPRESA = :I_DESC_EMPRESA; select count(C_COD_PROPOSTA) from PO0100 where C_DTA_EMISSAO_PROPOSTA between :I_DATA_INICIO and :I_DATA_FIM and C_COD_EMPRESA = :I_COD_EMPRESA into :C_COUNT_TOTAL_EMITIDAS; select count(C_COD_PROPOSTA) from PO0100 where C_DTA_EMISSAO_PROPOSTA between :I_DATA_INICIO and :I_DATA_FIM and C_COD_STATUS = ´AP´ and C_COD_EMPRESA = :I_COD_EMPRESA into :C_COUNT_TOTAL_APROVADAS; select count(C_COD_PROPOSTA) from PO0100 where C_DTA_EMISSAO_PROPOSTA between :I_DATA_INICIO and :I_DATA_FIM and C_COD_STATUS = ´CA´ and C_COD_EMPRESA = :I_COD_EMPRESA into :C_COUNT_TOTAL_CANCELADAS; for select distinct C_COD_GRUPO, C_COD_SUB_GRUPO from PO0100 into :C_COD_GRUPO, :C_COD_SUB_GRUPO do begin C_DESC = :C_COD_GRUPO || ´ - ´ || :C_COD_SUB_GRUPO; select count(C_COD_PROPOSTA) from PO0100 where C_DTA_EMISSAO_PROPOSTA between :I_DATA_INICIO and :I_DATA_FIM and C_COD_SUB_GRUPO = :C_COD_SUB_GRUPO and C_COD_EMPRESA = :I_COD_EMPRESA into C_COUNT_EMITIDAS; select count(C_COD_PROPOSTA) from PO0100 where C_COD_STATUS = ´AP´ and C_DTA_EMISSAO_PROPOSTA between :I_DATA_INICIO and :I_DATA_FIM and C_COD_SUB_GRUPO = :C_COD_SUB_GRUPO and C_COD_EMPRESA = :I_COD_EMPRESA into C_COUNT_APROVADAS; select count(C_COD_PROPOSTA) from PO0100 where C_COD_STATUS = ´CA´ and C_DTA_EMISSAO_PROPOSTA between :I_DATA_INICIO and :I_DATA_FIM and C_COD_SUB_GRUPO = :C_COD_SUB_GRUPO and C_COD_EMPRESA = :I_COD_EMPRESA into C_COUNT_CANCELADAS; C_PERC_CONVERT_SUB_GRUPO = 0; if (:C_COUNT_EMITIDAS > 0) then begin C_PERC_CONVERT_SUB_GRUPO = (:C_COUNT_APROVADAS / :C_COUNT_EMITIDAS) * 100; end C_PERC_EMITIDAS_TOTAL = 0; if (:C_COUNT_TOTAL_EMITIDAS > 0) then begin C_PERC_EMITIDAS_TOTAL = (:C_COUNT_EMITIDAS / :C_COUNT_TOTAL_EMITIDAS) * 100; end C_PERC_APROVADAS_TOTAL = 0; if (:C_COUNT_TOTAL_APROVADAS > 0) then begin C_PERC_APROVADAS_TOTAL = (:C_COUNT_APROVADAS / :C_COUNT_TOTAL_APROVADAS) * 100; end C_PERC_CANCELADAS_TOTAL = 0; if (:C_COUNT_TOTAL_CANCELADAS > 0) then begin C_PERC_CANCELADAS_TOTAL = (:C_COUNT_CANCELADAS / :C_COUNT_TOTAL_CANCELADAS) * 100; end suspend; end end end
O relatório roda direitinho.. só tem um problema.. os dados de percentual (campos com PERC no nome) retonam sempre 0, mas existem dados para o cálculo..
alguém sabe o que está acontecendo ???
Agradeço a todos antecipadamente.
um abraço..
Cabelo
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)