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()