Definir alfa xCursorPrin; Definir alfa xCursorItensNf; Definir Numero nStatusProcesso; Definir alfa aMensagemProcesso; Definir Alfa aAspaDupla; Definir Numero nParam_CodEmp; Definir Numero nParam_CodFil; Definir Numero nParam_NumOcp; Definir Alfa aParam_ChvNel; Definir Numero nParam_CodFor; Definir Numero nSql_Param_Codemp; Definir Numero nSql_Param_Codfil; Definir Numero nSql_Param_Codfor; Definir Numero nSql_Param_Codgre; Definir Numero nSql_E420ocp_Codemp; Definir Numero nSql_E420ocp_Codfil; Definir Numero nSql_E420ocp_Numocp; Definir Data dSql_E420ocp_Datemi; Definir Data dSql_E420ocp_Datger; Definir Numero nSql_E420ocp_Codusu; Definir Numero nSql_E420ocp_Codfor; Definir Alfa aSql_E420ocp_Obsocp; Definir Numero nSql_E420ocp_Codtra; Definir Alfa aSql_E420ocp_Ciffob; Definir Alfa aSql_E095for_Nomfor; Definir Alfa aSql_E095for_Apefor; Definir Alfa aSql_E095for_Tipfor; Definir Alfa aSql_E095for_Tipmer; Definir Alfa aSql_E095for_Codram; Definir Numero nSql_E095for_Cgccpf; Definir Numero nSql_E095for_Codgre; Definir Numero nSql_E420ipo_Seqipo; Definir Alfa aSql_E420ipo_Codpro; Definir Alfa aSql_E420ipo_Codder; Definir Alfa aSql_E420ipo_Cplipo; Definir Alfa aSql_E420ipo_Profor; Definir Alfa aSql_E420ipo_Desfor; Definir Alfa aSql_E420ipo_Unifor; Definir Numero nSql_E420ipo_Qtdped; Definir Numero nSql_E420ipo_Qtdrec; Definir Numero nSql_E420ipo_Qtdcan; Definir Numero nSql_E420ipo_Qtdabe; Definir Alfa aSql_E420ipo_Unimed; Definir Alfa aSql_E420ipo_Codtpr; Definir Numero nSql_E420ipo_Preuni; Definir Numero nSql_E420ipo_Vlrbru; Definir Funcao IniciaProcessamento(); Definir Funcao CarregaDadosViaParametros(); Definir Funcao MontaResposta(); Definir Funcao BuscaDadosOrdensCompra(); Definir Funcao BuscaItensOrdensCompra(); Definir Funcao AddOrdemCompraToResposta(); Definir Funcao AddItensOrdemCompraToResposta(); aAspaDupla = "\""; IniciaProcessamento(); @------------------------------------------------------------------------------@ @----Função para iniciar a distribuição do processamento das informações-------@ @------------------------------------------------------------------------------@ Funcao IniciaProcessamento();{ nStatusProcesso = 1; aMensagemProcesso ="Processamento realizado com sucesso."; nParam_CodEmp=ListarOrdensCompraViaNota.CodEmp; nParam_CodFil=ListarOrdensCompraViaNota.CodFil; nParam_NumOcp=ListarOrdensCompraViaNota.NumOcp; aParam_ChvNel=ListarOrdensCompraViaNota.ChvNel; nParam_CodFor=ListarOrdensCompraViaNota.CodFor; nParam_OffSet=ListarOrdensCompraViaNota.OffSet; nParam_Limit =ListarOrdensCompraViaNota.Limit; LimpaEspacos(aParam_ChvNel); /* aParam_ChvNel = "31250517469701018467550000000045681019599804"; nParam_CodFor = 3686; nParam_NumOcp = 65809; */ nParam_CodEmp=1; nParam_CodFil=1; Se((nParam_CodFor=0) e (aParam_ChvNel="") e (nParam_NumOcp=0)){ nStatusProcesso = 0; aMensagemProcesso ="Necessário informar pelo menos um dos parâmetros(NumOcp ou ChvNel ou CodFor) para prosseguir."; } Se(nParam_Limit=0){ nParam_Limit = 99999999; } Se(nStatusProcesso=1){ CarregaDadosViaParametros(); } Se(nStatusProcesso=1){ BuscaDadosOrdensCompra(); } MontaResposta(); } @--Função que devolve o resultado do processamento dos dados de entrada--------@ Funcao MontaResposta();{ ListarOrdensCompraViaNota.StatusProcesso = nStatusProcesso; ListarOrdensCompraViaNota.MensagemProcesso = aMensagemProcesso; } Funcao CarregaDadosViaParametros();{ SQL_Criar(xCursorPrin); SQL_UsarAbrangencia(xCursorPrin,0); SQL_UsarSQLSenior2(xCursorPrin,0); SQL_DefinirComando(xCursorPrin,"select \ E070fil_codemp,\ E070fil_codfil,\ E095for_codfor,\ e095for_codgre \ from ( \ select \ E070fil.codemp as E070fil_Codemp,\ E070fil.codfil as E070fil_Codfil,\ E095for.codfor as E095for_Codfor,\ e095for.codgre as E095for_Codgre \ from E000nfc \ inner join ( \ select numcgc, codemp, codfil,nomfil, \ row_number() over (partition by numcgc order by codemp, codfil) as prioridade_filial \ from e070fil \ ) e070fil \ on e070fil.numcgc = e000nfc.cgcfil \ and e070fil.prioridade_filial = 1 \ inner join (select codfor,cgccpf,nomfor,apefor,codgre, \ row_number() over (partition by cgccpf order by codfor ) as prioridade_fornecedor \ from e095for) e095for \ on e095for.cgccpf = e000nfc.cgcfor \ and e095for.prioridade_fornecedor = 1 \ where E000nfc.tipnfe in (1) \ and (E070fil.codemp = :nParam_CodEmp or :nParam_CodEmp=0 )\ and (E070fil.codfil = :nParam_CodFil or :nParam_CodFil=0 )\ and (E095for.codfor = :nParam_CodFor or :nParam_CodFor=0 )\ and (E000nfc.chvnel = :aParam_ChvNel) \ union \ select \ 1 as E070fil_Codemp,\ 1 as E070fil_Codfil,\ E095for.codfor as E095for_Codfor,\ e095for.codgre as E095for_Codgre \ from e095for \ where (E095for.codfor = :nParam_CodFor and :nParam_CodFor<>0 ) \ union \ select \ e420ocp.codemp as E070fil_Codemp,\ e420ocp.codfil as E070fil_Codfil,\ E095for.codfor as E095for_Codfor,\ e095for.codgre as E095for_Codgre \ from e420ocp \ inner join e095for \ on e095for.codfor = e420ocp.codfor \ and (e420ocp.codemp = :nParam_CodEmp or :nParam_CodEmp=0 )\ and (e420ocp.codfil = :nParam_CodFil or :nParam_CodFil=0 )\ and (e420ocp.codfor = :nParam_CodFor and :nParam_CodFor<>0 )\ ) origem \ group by \ E070fil_codemp,\ E070fil_codfil,\ E095for_codfor,\ E095for_codgre "); SQL_DefinirInteiro(xCursorPrin,"nParam_CodEmp",nParam_CodEmp); SQL_DefinirInteiro(xCursorPrin,"nParam_CodFil",nParam_CodFil); SQL_DefinirInteiro(xCursorPrin,"nParam_CodFor",nParam_CodFor); SQL_DefinirAlfa (xCursorPrin,"aParam_ChvNel",aParam_ChvNel); SQL_AbrirCursor (xCursorPrin); bEncontrouDadosViaParam = 0; Enquanto(SQL_EOF(xCursorPrin)=0){ SQL_RetornarInteiro (xCursorPrin,"E070fil_Codemp",nSql_Param_Codemp); SQL_RetornarInteiro (xCursorPrin,"E070fil_Codfil",nSql_Param_Codfil); SQL_RetornarInteiro (xCursorPrin,"E095for_Codfor",nSql_Param_Codfor); SQL_RetornarInteiro (xCursorPrin,"E095for_Codgre",nSql_Param_Codgre); SQL_Proximo(xCursorPrin); bEncontrouDadosViaParam = 1; } SQL_FecharCursor(xCursorPrin); SQL_Destruir(xCursorPrin); Se(bEncontrouDadosViaParam = 0){ nStatusProcesso = 0; aMensagemProcesso ="Não foi encontrado um fornecedor correspondente aos parâmetros recebidos."; } } Funcao BuscaDadosOrdensCompra();{ SQL_Criar(xCursorPrin); SQL_UsarAbrangencia(xCursorPrin,0); SQL_UsarSQLSenior2(xCursorPrin,0); SQL_DefinirComando(xCursorPrin, "select \ e420ocp.codemp as e420ocp_codemp,\ e420ocp.codfil as e420ocp_codfil,\ e420ocp.numocp as e420ocp_numocp,\ e420ocp.datemi as e420ocp_datemi,\ e420ocp.datger as e420ocp_datger,\ e420ocp.codusu as e420ocp_codusu,\ e420ocp.codfor as e420ocp_codfor,\ e420ocp.obsocp as e420ocp_obsocp,\ e420ocp.codtra as e420ocp_codtra,\ e420ocp.ciffob as e420ocp_ciffob,\ e095for.nomfor as e095for_nomfor,\ e095for.apefor as e095for_apefor,\ e095for.tipfor as e095for_tipfor,\ e095for.tipmer as e095for_tipmer,\ e095for.codram as e095for_codram,\ e095for.cgccpf as e095for_cgccpf,\ e095for.codgre as e095for_codgre \ from e420ocp \ inner join e095for \ on e095for.codfor = e420ocp.codfor \ where e420ocp.sitocp IN (1,2) \ and e420ocp.obrctr = 'N'\ and (e420ocp.codemp = :nSql_Param_Codemp)\ and (e420ocp.codfil = :nSql_Param_Codfil)\ and (e420ocp.numocp = :nParam_NumOcp or :nParam_NumOcp=0)\ and (e420ocp.codfor = :nSql_Param_Codfor or (e095for.codgre=:nSql_Param_Codgre and :nSql_Param_Codgre<>0))\ and EXISTS(SELECT 1 FROM e420ipo\ WHERE e420ipo.sitipo IN (1,2) \ AND e420ocp.codemp = e420ipo.codemp \ AND e420ocp.codfil = e420ipo.codfil \ AND e420ocp.numocp = e420ipo.numocp) \ order by e420ocp.datemi,e420ocp.numocp\ OFFSET :nParam_OffSet ROWS FETCH NEXT :nParam_Limit ROWS ONLY "); SQL_DefinirInteiro(xCursorPrin,"nSql_Param_Codemp",nSql_Param_Codemp); SQL_DefinirInteiro(xCursorPrin,"nSql_Param_Codfil",nSql_Param_Codfil); SQL_DefinirInteiro(xCursorPrin,"nSql_Param_Codfor",nSql_Param_Codfor); SQL_DefinirInteiro(xCursorPrin,"nSql_Param_Codgre",nSql_Param_Codgre); SQL_DefinirInteiro(xCursorPrin,"nParam_NumOcp",nParam_NumOcp); SQL_DefinirInteiro(xCursorPrin,"nParam_OffSet",nParam_OffSet); SQL_DefinirInteiro(xCursorPrin,"nParam_Limit",nParam_Limit); SQL_AbrirCursor (xCursorPrin); Enquanto(SQL_EOF(xCursorPrin)=0){ SQL_RetornarInteiro (xCursorPrin,"E420ocp_Codemp",nSql_E420ocp_Codemp); SQL_RetornarInteiro (xCursorPrin,"E420ocp_Codfil",nSql_E420ocp_Codfil); SQL_RetornarInteiro (xCursorPrin,"E420ocp_Numocp",nSql_E420ocp_Numocp); SQL_RetornarData (xCursorPrin,"E420ocp_Datemi",dSql_E420ocp_Datemi); SQL_RetornarData (xCursorPrin,"E420ocp_Datger",dSql_E420ocp_Datger); SQL_RetornarInteiro (xCursorPrin,"E420ocp_Codusu",nSql_E420ocp_Codusu); SQL_RetornarInteiro (xCursorPrin,"E420ocp_Codfor",nSql_E420ocp_Codfor); SQL_RetornarAlfa (xCursorPrin,"E420ocp_Obsocp",aSql_E420ocp_Obsocp); SQL_RetornarInteiro (xCursorPrin,"E420ocp_Codtra",nSql_E420ocp_Codtra); SQL_RetornarAlfa (xCursorPrin,"E420ocp_Ciffob",aSql_E420ocp_Ciffob); SQL_RetornarAlfa (xCursorPrin,"E095for_Nomfor",aSql_E095for_Nomfor); SQL_RetornarAlfa (xCursorPrin,"E095for_Apefor",aSql_E095for_Apefor); SQL_RetornarAlfa (xCursorPrin,"E095for_Tipfor",aSql_E095for_Tipfor); SQL_RetornarAlfa (xCursorPrin,"E095for_Tipmer",aSql_E095for_Tipmer); SQL_RetornarAlfa (xCursorPrin,"E095for_Codram",aSql_E095for_Codram); SQL_RetornarFlutuante(xCursorPrin,"E095for_Cgccpf",nSql_E095for_Cgccpf); SQL_RetornarInteiro (xCursorPrin,"E095for_Codgre",nSql_E095for_Codgre); AddOrdemCompraToResposta(); BuscaItensOrdensCompra(); SQL_Proximo(xCursorPrin); } SQL_FecharCursor(xCursorPrin); SQL_Destruir(xCursorPrin); } Funcao BuscaItensOrdensCompra();{ SQL_Criar(xCursorItensNf); SQL_UsarAbrangencia(xCursorItensNf,0); SQL_UsarSQLSenior2(xCursorItensNf,0); SQL_DefinirComando(xCursorItensNf,"select \ e420ipo.seqipo as e420ipo_seqipo,\ e420ipo.codpro as e420ipo_codpro,\ e420ipo.codder as e420ipo_codder,\ e420ipo.cplipo as e420ipo_cplipo,\ e420ipo.profor as e420ipo_profor,\ e420ipo.desfor as e420ipo_desfor,\ e420ipo.unifor as e420ipo_unifor,\ e420ipo.qtdped as e420ipo_qtdped,\ e420ipo.qtdrec as e420ipo_qtdrec,\ e420ipo.qtdcan as e420ipo_qtdcan,\ e420ipo.qtdabe as e420ipo_qtdabe,\ e420ipo.unimed as e420ipo_unimed,\ e420ipo.codtpr as e420ipo_codtpr,\ e420ipo.preuni as e420ipo_preuni,\ e420ipo.vlrbru as e420ipo_vlrbru \ from e420ipo \ WHERE e420ipo.sitipo IN (1,2) \ and (e420ipo.codemp = :nSql_E420ocp_Codemp)\ and (e420ipo.codfil = :nSql_E420ocp_Codfil)\ and (e420ipo.numocp = :nSql_E420ocp_Numocp)\ order by e420ipo.seqipo "); SQL_DefinirInteiro(xCursorItensNf,"nSql_E420ocp_Codemp",nSql_E420ocp_Codemp); SQL_DefinirInteiro(xCursorItensNf,"nSql_E420ocp_Codfil",nSql_E420ocp_Codfil); SQL_DefinirInteiro(xCursorItensNf,"nSql_E420ocp_Numocp",nSql_E420ocp_Numocp); SQL_AbrirCursor (xCursorItensNf); Enquanto(SQL_EOF(xCursorItensNf)=0){ SQL_RetornarInteiro (xCursorItensNf,"E420ipo_Seqipo",nSql_E420ipo_Seqipo); SQL_RetornarAlfa (xCursorItensNf,"E420ipo_Codpro",aSql_E420ipo_Codpro); SQL_RetornarAlfa (xCursorItensNf,"E420ipo_Codder",aSql_E420ipo_Codder); SQL_RetornarAlfa (xCursorItensNf,"E420ipo_Cplipo",aSql_E420ipo_Cplipo); SQL_RetornarAlfa (xCursorItensNf,"E420ipo_Profor",aSql_E420ipo_Profor); SQL_RetornarAlfa (xCursorItensNf,"E420ipo_Desfor",aSql_E420ipo_Desfor); SQL_RetornarAlfa (xCursorItensNf,"E420ipo_Unifor",aSql_E420ipo_Unifor); SQL_RetornarFlutuante(xCursorItensNf,"E420ipo_Qtdped",nSql_E420ipo_Qtdped); SQL_RetornarFlutuante(xCursorItensNf,"E420ipo_Qtdrec",nSql_E420ipo_Qtdrec); SQL_RetornarFlutuante(xCursorItensNf,"E420ipo_Qtdcan",nSql_E420ipo_Qtdcan); SQL_RetornarFlutuante(xCursorItensNf,"E420ipo_Qtdabe",nSql_E420ipo_Qtdabe); SQL_RetornarAlfa (xCursorItensNf,"E420ipo_Unimed",aSql_E420ipo_Unimed); SQL_RetornarAlfa (xCursorItensNf,"E420ipo_Codtpr",aSql_E420ipo_Codtpr); SQL_RetornarFlutuante(xCursorItensNf,"E420ipo_Preuni",nSql_E420ipo_Preuni); SQL_RetornarFlutuante(xCursorItensNf,"E420ipo_Vlrbru",nSql_E420ipo_Vlrbru); AddItensOrdemCompraToResposta(); SQL_Proximo(xCursorItensNf); } SQL_FecharCursor(xCursorItensNf); SQL_Destruir(xCursorItensNf); } Funcao AddOrdemCompraToResposta();{ ListarOrdensCompraViaNota.OrdensCompra.CriarLinha(); ListarOrdensCompraViaNota.OrdensCompra.CodEmp = nSql_E420ocp_Codemp; ListarOrdensCompraViaNota.OrdensCompra.CodFil = nSql_E420ocp_Codfil; ListarOrdensCompraViaNota.OrdensCompra.NumOcp = nSql_E420ocp_Numocp; ListarOrdensCompraViaNota.OrdensCompra.CodFor = nSql_E420ocp_Codfor; ListarOrdensCompraViaNota.OrdensCompra.NomFor = aSql_E095for_Nomfor; ListarOrdensCompraViaNota.OrdensCompra.CgcCpf = nSql_E095for_Cgccpf; ListarOrdensCompraViaNota.OrdensCompra.DatEmi = dSql_E420ocp_Datemi; ListarOrdensCompraViaNota.OrdensCompra.ObsOcp = aSql_E420ocp_Obsocp; ListarOrdensCompraViaNota.OrdensCompra.DatGer = dSql_E420ocp_Datger; ListarOrdensCompraViaNota.OrdensCompra.CodGre = nSql_E095for_Codgre; } Funcao AddItensOrdemCompraToResposta();{ ListarOrdensCompraViaNota.OrdensCompra.Itens.CriarLinha(); ListarOrdensCompraViaNota.OrdensCompra.Itens.SeqIpo = nSql_E420ipo_Seqipo; ListarOrdensCompraViaNota.OrdensCompra.Itens.CodPro = aSql_E420ipo_Codpro; ListarOrdensCompraViaNota.OrdensCompra.Itens.CodDer = aSql_E420ipo_Codder; ListarOrdensCompraViaNota.OrdensCompra.Itens.CplIpo = aSql_E420ipo_Cplipo; ListarOrdensCompraViaNota.OrdensCompra.Itens.Qtdped = nSql_E420ipo_Qtdped; ListarOrdensCompraViaNota.OrdensCompra.Itens.Qtdrec = nSql_E420ipo_QtdRec; ListarOrdensCompraViaNota.OrdensCompra.Itens.QtdCan = nSql_E420ipo_QtdCan; ListarOrdensCompraViaNota.OrdensCompra.Itens.QtdAbe = nSql_E420ipo_Qtdabe; ListarOrdensCompraViaNota.OrdensCompra.Itens.Unimed = aSql_E420ipo_Unimed; ListarOrdensCompraViaNota.OrdensCompra.Itens.Preuni = nSql_E420ipo_Preuni; ListarOrdensCompraViaNota.OrdensCompra.Itens.Unifor = aSql_E420ipo_Unifor; }