|
Bem Vindo, Visitante
|
Todos os Fórums
ADVPL
|
Imprimir
Enviar Para um Amigo Precisa estar Logado
|
|
|
Assunto: |
Gerar Resultado da Query em TXT |
|
Versão: |
12.1.7 |
|
Plataforma: |
Microsoft |
Complemento: |
|
|
DB: |
SQL Server |
Complemento: |
|
|
|
|
|
Mensagem do
SHISUI19
em 05/03/2019, 14:43 h
Local: SP Registro: 30/01/2019 Postagens: 3 |
Boa tarde pessoal , sou novo em advpl e estou aprendendo sozinho . Estou com dificuldades para gerar o resultado de uma query em TXT , por não conhecer muito bem a sintaxe de linguagem não sei onde estou errando , vou postar o codigo que tenho até agora , por favor vejam se conseguem me ajudar .
#include "protheus.ch"
#include "topconn.ch"
user function FDEMGS()
Local _cPerg := ‘FDEMGS‘
Local cQuery
CriaSx1(_cPerg)
If Pergunte(_cPerg,.T.)
GetCq2()
endif
Static function GetCq2()
Local _lRet := .T.
Local nH
Local cFile := "C:\temp\arquivo.txt"
Local cTab
nH := fCreate(cFile)
If nH == -1
MsgStop("Falha ao criar arquivo - erro "+str(ferror()))
Return
Endif
cQuery := "SELECT DISTINCT CQ2_CONTA AS LOCALACCOU, "+Space(9)+" ( "
cQuery += " SELECT CT1_Z_HFM FROM CT1020 CT1 "
cQuery += " WHERE CT1.D_E_L_E_T_ = ‘‘ "
cQuery += " AND CT1_CONTA = CQ2_CONTA) AS ACCOUNT, "
cQuery += " ‘EP10231‘ AS ENTITY, "
cQuery += " CQ2_CCUSTO AS LOCALCOST,( "
cQuery += " SELECT CTT_Z_HFM FROM CTT020 CTT "
cQuery += " WHERE CQ2_CCUSTO = CTT_CUSTO
cQuery += " AND CTT.D_E_L_E_T_ = ‘‘) AS COSTCTR, "
cQuery += " SUBSTRING (CQ2_DATA,1,6)+‘00‘ AS TIMEM, "
cQuery += " CASE "
cQuery += " WHEN SUBSTRING(CQ2_CONTA,1,1) = ‘3‘ THEN ‘BA404‘ "
cQuery += " ELSE ‘BA001‘ "
cQuery += " END as BUSAREA, "
cQuery += " SUM(CQ2_DEBITO - CQ2_CREDIT) AS PERAMT, "
cQuery += " CASE "
cQuery += " WHEN SUBSTRING(CQ2_CONTA,1,1) IN (‘3‘,‘4‘) "
cQuery += " THEN ( "
cQuery += " SELECT SUM (CQ2_DEBITO - CQ2_CREDIT) FROM CQ2020 CQ21 "
cQuery += " WHERE CQ2_DATA BETWEEN ‘"+Dtos(mv_par01)+"‘ AND ‘"+Dtos(mv_par02)+"‘ "
cQuery += " AND CQ21.D_E_L_E_T_ = ‘‘ "
cQuery += " AND CQ2.CQ2_CONTA = CQ21.CQ2_CONTA "
cQuery += " AND CQ2.CQ2_CCUSTO = CQ21.CQ2_CCUSTO "
cQuery += " AND CQ21.CQ2_MOEDA = ‘01‘ "
cQuery += " GROUP BY CQ21.CQ2_CONTA, CQ21.CQ2_CCUSTO) "
cQuery += " ELSE SUM(CQ2_DEBITO - CQ2_CREDIT) "
cQuery += " END AS AMOUNTY, ( "
cQuery += " SELECT CASE "
cQuery += " WHEN CT1_Z_INTE = ‘‘ THEN ‘NON_INTERCO‘ "
cQuery += " ELSE CT1_Z_INTE "
cQuery += " END FROM CT1020 CT1 "
cQuery += " WHERE CT1.D_E_L_E_T_ = ‘‘ "
cQuery += " AND CT1_CONTA = CQ2_CONTA)AS INTCO, CASE "
cQuery += " WHEN SUBSTRING(CQ2_CONTA,1,1) = ‘3‘ THEN ‘F_NET_INCOME‘ "
cQuery += " WHEN SUBSTRING(CQ2_CONTA,1,1) = ‘4‘ THEN ‘F_NET_INCOME‘ "
cQuery += " ELSE ‘F_CLO‘ "
cQuery += " END as FLO, "
cQuery += " ‘GLDETAIL‘ AS LEDGER "
cQuery += " FROM CQ2020 CQ2 "
cQuery += " WHERE CQ2_DATA = ‘"+Dtos(mv_par02)+"‘ "
cQuery += " AND CQ2.D_E_L_E_T_ = ‘‘ "
cQuery += " AND CQ2_MOEDA = ‘01‘ "
cQuery += " AND SUBSTRING(CQ2_CONTA,1,1) NOT IN (‘1‘,‘2‘) "
cQuery += " GROUP BY CQ2_CONTA, CQ2_CCUSTO, CQ2_DATA "
cQuery += " UNION "
cQuery += " SELECT CT1_CONTA AS LOCALACCOU , "
cQuery += " CT1_Z_HFM AS ACCOUNT, "
cQuery += " ‘EP10231‘ AS ENTITY , "
cQuery += " ‘NO_COST_CENTER‘ AS LOCALCOST, "
cQuery += " ‘NO_COST_CENTER‘ AS COSTCTR, "
cQuery += " SUBSTRING (CQ0_DATA,1,6)+‘00‘ AS TIMEM, CASE "
cQuery += " WHEN SUBSTRING(CQ0_CONTA,1,1) = ‘3‘ THEN ‘BA404‘ "
cQuery += " ELSE ‘BA001‘ "
cQuery += " END as BUSAREA,
cQuery += " (CQ0_DEBITO - CQ0_CREDIT) AS PERAMT, CASE "
cQuery += " WHEN SUBSTRING(CQ0_CONTA,1,1) IN (‘3‘,‘4‘) THEN ( "
cQuery += " SELECT SUM (CQ0_DEBITO - CQ0_CREDIT) FROM CQ0020 CQ01 "
cQuery += " WHERE CQ0_DATA BETWEEN ‘"+Dtos(mv_par01)+"‘ AND ‘"+Dtos(mv_par02)+"‘ "
cQuery += " AND CQ01.D_E_L_E_T_ = ‘‘ "
cQuery += " AND CT1_CONTA = CQ01.CQ0_CONTA "
cQuery += " AND CQ01.CQ0_MOEDA = ‘01‘ "
cQuery += " GROUP BY CQ01.CQ0_CONTA) "
cQuery += " ELSE (CQ0_DEBITO - CQ0_CREDIT) "
cQuery += " END AS AMOUNTY, CASE "
cQuery += " WHEN CT1_Z_INTE = ‘‘ THEN ‘NON_INTERCO‘ "
cQuery += " ELSE CT1_Z_INTE "
cQuery += " END AS INTCO, CASE
cQuery += " WHEN SUBSTRING(CQ0_CONTA,1,1) = ‘3‘ THEN ‘F_NET_INCOME‘ "
cQuery += " WHEN SUBSTRING(CQ0_CONTA,1,1) = ‘4‘ THEN ‘F_NET_INCOME‘ "
cQuery += " ELSE ‘F_CLO‘ "
cQuery += " END as FLO, "
cQuery += " ‘GLDETAIL‘ AS LEDGER "
cQuery += " FROM CQ0020 CQ0, CT1020 CT1 "
cQuery += " WHERE CQ0_DATA = ‘"+Dtos(mv_par02)+"‘ "
cQuery += " AND CQ0.D_E_L_E_T_ = ‘‘ "
cQuery += " AND CT1.D_E_L_E_T_ = ‘‘ "
cQuery += " AND CT1_CONTA = CQ0_CONTA "
cQuery += " AND CQ0_CONTA NOT IN (SELECT CQ2_CONTA FROM CQ2020 WHERE CQ2_DATA = ‘"+Dtos(mv_par02)+"‘ AND SUBSTRING(CQ2_CONTA,1,1) NOT IN (‘1‘,‘2‘) AND CQ2_MOEDA = ‘01‘) AND CQ0_MOEDA = ‘01‘ "
DbUseArea(.T.,"TOPCONN",TCGenQry(,,cQuery),"TRB" ,.T. , .F. )
fWrite(nH,Temp + chr(13)+chr(10) )
fClose(nH)
Msginfo("Arquivo criado :" + cFile)
Return _lRet
Return
Static Function CriaSx1(_cPerg)
Local _aAreaSX1 := SX1->(GetArea())
DbSelectArea(‘SX1‘)
SX1->(DbGoTop())
SX1->(DbSetOrder(1))
If !SX1->(DbSeek(_cPerg))
PutSX1(_cPerg,‘01‘,‘Dt Inicial ?‘ ,‘Dt Inicial ?‘ ,‘Dt Inicial ?‘ ,‘mv_ch1‘,‘D‘,08,0,,‘G‘,,,,,‘mv_par01‘,,,,,,,,,,,,,,,,,{‘Informe a Data inicial‘})
PutSX1(_cPerg,‘02‘,‘Dt Final ?‘ ,‘Dt Final ?‘ ,‘Dt Final ?‘ ,‘mv_ch2‘,‘D‘,30,0,,‘G‘,,,,,‘mv_par02‘,,,,,,,,,,,,,,,,,{‘Informe a Data final‘})
EndIf
RestArea(_aAreaSX1)
Return
onde estou errando ?
sempre trabalhei com outras linguagens estou com muita dificuldades nessa
Desde já agradeço |
|
|
Mensagem do
RRO.OLIVEI
em 05/03/2019, 19:59 h
Local: SP Registro: 25/08/2016 Postagens: 24 |
Boa Noite, amigo blz?
Pelo que notei, na linha abaixo você executou a query mais precisa pegar o resultado que pode ser 1 ou mais dados e gravar no txt.
No seu caso o resultado está no objeto TRB
DbUseArea(.T.,"TOPCONN",TCGenQry(,,cQuery),"TRB" ,.T. , .F. )
DBSELECTAREA("TRB")
IF TRB->(EOF())
Alert("Não foi localizado nenhum registro.")
TRB->(DBCLOSEAREA())
Return
ENDIF
WHILE TRB->(!EOF())
FSeek(nH, 0, FS_END)//Posiciona no final do arquivo
fWrite(nH,TRB->LOCALACCOU ) //Peguei a coluna da sua query
TRB->(DBSKIP())//Vai para o próximo registro
ENDDO
TRB->(DBCLOSEAREA()) |
|
|
Mensagem do
SHISUI19
em 06/03/2019, 09:09 h
Local: SP Registro: 30/01/2019 Postagens: 3 |
RRO.OLIVEI,
Muito obrigado cara, era extamente isso apenas na linha" FSeek(nH, 0, FS_END)"
troquei o "FS_END" por "2" que é a representação do FS_END ,
Muito Obrigado |
|
Para postar no Fórum você precisa efetuar o seu login ou se registrar
|
|