Categorias

Utilizando SQL Query dentro de programas

Veja em exemplo prático Programa RDMAKE para execução de Queries

//Funcao     R170IMP  
//Descricao  Chamada do Relatorio                                       
// Uso       MATR170                                                    

Function R170Imp
dbSelectArea("SE2")
dbSetOrder(8)
cQuery := "SELECT E2_NATUREZ, E2_VENCREA, E2_NOMFOR, E2_PREFIXO, "
cQuery := cQuery + " E2_NUM, E2_PARCELA, E2_VENCTO, E2_FORNECE, E2_LOJA," 
cQuery := cQuery + " E2_VALOR, E2_SALDO, E2_TIPO, E2_BAIXA, E2_EMISSAO"
cQuery := cQuery + ‘ FROM RetSqlName("SE1") ‘   
cQuery := cQuery + " WHERE E2_FILIAL = '" + xFilial("SE2") + "'"
cQuery := cQuery + " AND  D_E_L_E_T_ = ' ' "
cQuery := cQuery + " AND  E2_NATUREZ >= '"+ MV_PAR01 +"' AND E2_NATUREZ <= '"+mv_par02+"'"
cQuery := cQuery + " AND  E2_VENCREA >= '"+DTOS(mv_par03)+"' AND E2_VENCREA <= '"+DTOS(mv_par04)+"'"
cQuery := cQuery + " AND  E2_FORNECE >= '"+mv_par07+"' And E2_FORNECE <= '"+mv_par08+"'"
cQuery := cQuery + " AND  E2_EMISSAO >= '"+DTOS(mv_par09)+"' AND E2_EMISSAO <= '"+DTOS(mv_par10)+"'"
cQuery := cQuery + " AND  E2_TIPO <> 'AB-'"   
cQuery := cQuery + " ORDER BY E2_NATUREZ, E2_VENCREA, E2_NOMFOR"

cQuery := ChangeQuery(cQuery)

TCQUERY cQuery Alias TRB New
dbSelectArea("TRB")
nCont := 0
SetRegua(15000)
//====================================================================
// Faz manualmente porque nao chama a funcao Cabec()                 
//====================================================================
_nTotGer := 0
li       := 60
cabec(titulo,cabec1,cabec2,nomeprog,tamanho,1)
li := 06

While !Eof() 

IncRegua()

If li >56
	cabec(titulo,cabec1,cabec2,nomeprog,tamanho,1)
End   
_cNatur :=TRB->E2_NATUREZ
dbSelectArea("SED")
dbSetOrder(1)
dbSeek(xFilial() + _cNatur)
_cDescNat := SED->ED_DESCRIC
li := li + 1
@ li, 001  PSAY "Natureza..: "+AllTrim(_cNatur) + " - " + _cDescNat
li := li + 2
dbSelectArea("TRB")
_nTotNat := 0

While !Eof() .And. TRB->E2_NATUREZ == _cNatur

	// Loop por Data
	_dVenc   := TRB->E2_VENCREA
	_nTotDia := 0

	While !Eof() .And. TRB->E2_VENCREA  == _dVenc .And. ;
		TRB->E2_NATUREZ == _cNatur
		IncRegua()
		IF !Empty(TRB->E2_BAIXA) .and. TRB->E2_BAIXA <= DTOS(dDataBase) .and.;
		TRB->E2_SALDO == 0
			dbSkip()
			Loop
		EndIF


		nAbatimentos:= 0
		_nTotAbat	:= 0
		nSaldo		:= 0
		_nSaldoT		:= 0

		_nTotAbat:= nAbatimentos
		// ------------------------ Calcula o Saldo ----------------------// 
		fSaldoTit() 
		_nSaldoT := nSaldo
		_nValor  := _nSaldoT - _nTotAbat

		//----------------------------------------------------//
		If _nValor <= 0
			dbSelectArea("TRB")
			dbSkip()
			Loop
		End
		//--------------------------- Imprime ---------------------//
		dbSelectArea("SA2")
		dbSetOrder(1)
		dbSeek(xFilial() + TRB->E2_FORNECE + TRB->E2_LOJA)
		dbSelectArea("TRB")
		@ li, 001 PSAY TRB->E2_FORNECE
		@ li, 008 PSAY SUBSTR(SA2->A2_NOME,1,20)
		@ li, 029 PSAY TRB->E2_PREFIXO
		@ li, 033 PSAY TRB->E2_NUM
		@ li, 040 PSAY TRB->E2_PARCELA
		@ li, 042 PSAY TRB->E2_TIPO
		@ li, 045 PSAY SUBST(TRB->E2_EMISSAO,7,2)+"/"+SUBST(TRB->E2_EMISSAO,5,2)+"/"+SUBST(TRB->E2_EMISSAO,3,2)
		@ li, 055 PSAY SUBST(TRB->E2_VENCREA,7,2)+"/"+SUBST(TRB->E2_VENCREA,5,2)+"/"+SUBST(TRB->E2_VENCREA,3,2)
		@ li, 064 PSAY _nValor        Picture"@E 9,999,999.99"
		@ li, 078 PSAY Iif((Val(Dtos(DDATABASE))-Val(TRB->E2_VENCREA))<=0,0,Val(Dtos(DDATABASE))-Val(TRB->E2_VENCREA))  Picture"@R 999"
		_nTotDia := _nTotDia + _nValor
		dbSkip()
		li := li + 1
		If li >56
			cabec(titulo,cabec1,cabec2,nomeprog,tamanho,1)
			li := li + 1
			@ li, 001  PSAY "Natureza..: "+AllTrim(_cNatur) + " - " + SED->ED_DESCRIC + "   (continuacao)"
			li := li + 2
		End   
	End
	If _nTotDia > 0
		li := li + 1
		@ li, 010 PSAY "Total do Dia.....: "
		@ li, 064 PSAY _nTotDia  Picture"@E 9,999,999.99"
		li := li + 2
		_nTotNat := _nTotNat + _nTotDia
	Endif	
End
li := li + 3
@ li, 010 PSAY "Tot.Natureza " + AllTrim(_cNatur) + " - " + AllTrim(_cDescNat)
@ li, 064 PSAY _nTotNat        Picture"@E 9,999,999.99"
_nTotGer := _nTotGer + _nTotNat
li := 58
End
@ li, 010 PSAY "Total do Relatorio..:"
@ li, 062 PSAY _nTotGer        Picture"@E 999,999,999.99"
EJECT

dbSelectArea("TRB")
dbCloseArea()
RetIndex("SE2")
dbSetOrder(1)
Set device to Screen
If aReturn[5] == 1
Set Printer TO
dbcommitAll()
ourspool(wnrel)
Endif
MS_FLUSH()
__Return()