#INCLUDE "rwmake.ch" /*/ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±± ±±ºPrograma ³ PREFECT2 º Autor ³ Microsiga º Data ³ 25/10/11 º±± ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±± ±±ºDescricao ³ Imprime resultado do pré-fechamento º±± ±±º ³ º±± ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±± ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß /*/ User Function PREFECT2() Local aOS := ParamIXB1 //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³ Declaracao de Variaveis ³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Local cDesc1 := "Este programa tem como objetivo imprimir relatorio " Local cDesc2 := "de acordo com os parametros informados pelo usuario." Local cDesc3 := "Pré-Fechamento" Local cPict := "" Local titulo := "Pré-Fechamento" Local nLin := 80 Local Cabec1 := "" Local Cabec2 := "" Local imprime := .T. Local aOrd := {} Private lEnd := .F. Private lAbortPrint := .F. Private limite := 80 Private tamanho := "P" Private nomeprog := "PREFECT2" // Coloque aqui o nome do programa para impressao no cabecalho Private nTipo := 18 Private aReturn := { "Zebrado", 1, "Administracao", 2, 2, 1, "", 1} Private nLastKey := 0 Private cbtxt := Space(10) Private cbcont := 00 Private CONTFL := 01 Private m_pag := 01 Private wnrel := "PREFECT2" // Coloque aqui o nome do arquivo usado para impressao em disco Private cString := "VOO" dbSelectArea("VOO") dbSetOrder(1) //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³ Monta a interface padrao com o usuario... ³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ wnrel := SetPrint(cString,NomeProg,"",@titulo,cDesc1,cDesc2,cDesc3,.F.,aOrd,.F.,Tamanho,,.F.) If nLastKey == 27 Return Endif SetDefault(aReturn,cString) If nLastKey == 27 Return Endif nTipo := If(aReturn4==1,15,18) //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³ Processamento. RPTSTATUS monta janela com a regua de processamento. ³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ RptStatus({|| RunReport(Cabec1,Cabec2,Titulo,nLin,aOS) },Titulo) Return /*/ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±± ±±ºFun‡„o ³RUNREPORT º Autor ³ AP6 IDE º Data ³ 10/07/12 º±± ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±± ±±ºDescri‡„o ³ Funcao auxiliar chamada pela RPTSTATUS. A funcao RPTSTATUS º±± ±±º ³ monta a janela com a regua de processamento. º±± ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±± ±±ºUso ³ Programa principal º±± ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±± ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß /*/ Static Function RunReport(Cabec1,Cabec2,Titulo,nLin,aOS) Local nCntFor Local nCntFor2 Local aValPec Local aValSer Local cCliCod Local cCliLoj Local cCGC Local dDataDis Local aTotaliz := {} SetRegua(Len(aOS)) For nCntFor := 1 to Len(aOS) aTotaliz := {} Aadd( aTotaliz , { 0 , 0 } ) // 1 - Totaliza Servicos Aadd( aTotaliz , { 0 , 0 } ) // 2 - Totaliza Pecas Aadd( aTotaliz , { 0 , 0 } ) // 3 - Totaliza OS e Descontos aValPec := FMX_CALPEC( aOSnCntFor,01, aOSnCntFor,02, , , .f., .t., .f., .f., .t., .f., .f. ) aValSer := FMX_CALSER( aOSnCntFor,01, aOSnCntFor,02, , , .f., .t., .f., .t., .f., .f. ) If Len(aValPec) == 0 .and. Len(aValSer) == 0 Loop EndIf If Len(aValPec) <> 0 cCliCod := aValPec1,15 cCliLoj := aValPec1,16 dDataDis := aValPec1,17 Else cCliCod := aValSer1,20 cCliLoj := aValSer1,21 dDataDis := aValSer1,22 EndIf VO1->(dbSetOrder(1)) VO1->(MsSeek(xFilial("VO1") + aOSnCntFor,01 )) SA1->(dbSetOrder(1)) SA1->(MsSeek(xFilial("SA1") + cCliCod + cCliLoj )) VAI->(dbSetOrder(1)) VAI->(MsSeek(xFilial("VAI") + VO1->VO1_FUNABE )) VV1->(dbSetOrder(1)) VV1->(dbSeek(xFilial("VV1") + VO1->VO1_CHAINT )) VE1->(dbSetOrder(1)) VE1->(dbSeek(xFilial("VE1") + VV1->VV1_CODMAR )) VV2->(dbSetOrder(1)) VV2->(dbSeek(xFilial("VV2") + VV1->VV1_CODMAR + VV1->VV1_MODVEI )) //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³ Verifica o cancelamento pelo usuario... ³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ If lAbortPrint @nLin,00 PSAY "*** CANCELADO PELO OPERADOR ***" Exit Endif //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³ Impressao do cabecalho do relatorio. . . ³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ If nLin > 55 // Salto de Página. Neste caso o formulario tem 55 linhas... Cabec1 := "Ordem de Serviço: " + AllTrim(VO1->VO1_NUMOSV) + " - Emissão: " + DtoC(VO1->VO1_DATABE) + " - Liberação : "+DtoC(dDataDis) Cabec2 := "Consultor: " + AllTrim(VO1->VO1_FUNABE) + " " + AllTrim(VAI->VAI_NOMTEC) Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo) nLin := 8 cCGC := TRANSFORM(SA1->A1_CGC,PicPes(SA1->A1_PESSOA)) @ ++nLin,00 PSAY "Cliente.: " + PadR(SA1->A1_COD + "" + SA1>A1_LOJA +" "+SA1->A1_NOME,38) + "| Placa..: " + TRANSFORM(VV1->VV1_PLAVEI,"@R XXX-9999") @ ++nLin,00 PSAY "Endereco: " + PadR(SA1->A1_END,38) + "| Modelo.: " + PadR(VV2->VV2_DESMOD,17) @ ++nLin,00 PSAY "Bairro..: " + PadR(SA1->A1_BAIRRO,38) + "| Marca..: " + PadR(VE1->VE1_DESMAR,17) @ ++nLin,00 PSAY "Cidade..: " + PadR(SA1->A1_MUN,38) + "| Chassi.: " + PadR(ALLTRIM(VV1->VV1_CHASSI),17) @ ++nLin,00 PSAY "Telefone: " + PadR(SA1->A1_TEL,38) + "| Ano....: " + TRANSFORM(VV1->VV1_FABMOD,"@R 9999/9999") @ ++nLin,00 PSAY "CNPJ/CPF: " + PadR(cCGC,38) + "| Odomet.: " + TRANSFORM(VO1->VO1_KILOME,"@E 999,999,999") @ ++nLin,00 PSAY "Insc....: " + PadR(SA1->A1_INSCR,38) + "| Frota..: " + PadR(VV1->VV1_CODFRO,15) @ ++nLin,00 PSAY "Contato.: " + PadR(SA1->A1_CONTATO,38) + "| Motoris: " + PadR(VO1->VO1_CODMOT,15) @ ++nLin,00 PSAY PadC(" Venda Zero ",80,"-") @ ++nLin,00 PSAY "Revend..: " + PadR(VV1->VV1_CODCON,38) + "| Data...: " + TRANSFORM(VV1->VV1_DATVEN,"@D") @ ++nLin,00 PSAY Replicate("-",80) nLin++ @ ++nLin,00 PSAY PadC("OS Preventiva ( ) OS Corretiva ( )",80) nLin++ Endif If Len(aValSer) <> 0 @ ++nLin,00 PSAY Repl("-",80) @ ++nLin,00 PSAY "Serviços Executados Vlr. Total" @ ++nLin,00 PSAY Repl("-",80) For nCntFor2 := 1 to Len(aValSer) If nLin > 55 // Salto de Página. Neste caso o formulario tem 55 linhas... Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo) nLin := 8 EndIf @ ++nLin,00 PSAY PadR( AllTrim(aValSernCntFor2,01) + " " + AllTrim(aValSernCntFor2,02) + " " + AllTrim(aValSernCntFor2,15) , 69 ) If aValSernCntFor2,06 == "0" // VOK_INCMOB - Mao de Obra Gratuita @ nLin , 71 PSAY "Cortesia" Else @ nLin , 70 PSAY Transform(aValSernCntFor2,07,"@E 999,999.99") EndIf aTotaliz1,1 += aValSernCntFor2,07 aTotaliz1,2 += aValSernCntFor2,08 aTotaliz3,1 += aValSernCntFor2,07 aTotaliz3,2 += aValSernCntFor2,08 Next nCntFor2 @ ++nLin,00 PSAY Repl("-",80) @ ++nLin,43 PSAY "Sub-Total de Serviços: " + Transform( aTotaliz1,1 , "@E 999,999,999.99") @ ++nLin,43 PSAY "Descontos............: " + Transform( aTotaliz1,2 , "@E 999,999,999.99") @ ++nLin,43 PSAY "Total de Serviços....: " + Transform( aTotaliz1,1 - aTotaliz1,2 , "@E 999,999,999.99") EndIf If Len(aValPec) <> 0 @ ++nLin,00 PSAY Repl("-",80) @ ++nLin,00 PSAY "Peças Utilizadas UM Qtde Vlr. Unit. Vlr. Total" @ ++nLin,00 PSAY Repl("-",80) SB1->(dbSetOrder(7)) For nCntFor2 := 1 to Len(aValPec) If nLin > 55 // Salto de Página. Neste caso o formulario tem 55 linhas... Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo) nLin := 8 EndIf SB1->(dbSeek( xFilial("SB1") + aValPecnCntFor2,01 + aValPecnCntFor2,02 )) @ ++nLin,00 PSAY PadR( aValPecnCntFor2,01 + " " + AllTrim(aValPecnCntFor2,02) + " " + AllTrim(SB1->B1_DESC) , 45 ) + " " + SB1->B1_UM + " " + Transform(aValPecnCntFor2,05,"@R 999.99") + " " + Transform(aValPecnCntFor2,09,"@E 999,999.99") + " " + Transform(aValPecnCntFor2,10,"@E 999,999.99") aTotaliz2,1 += aValPecnCntFor2,10 aTotaliz2,2 += aValPecnCntFor2,07 aTotaliz3,1 += aValPecnCntFor2,10 aTotaliz3,2 += aValPecnCntFor2,07 Next nCntFor2 @ ++nLin,00 PSAY Repl("-",80) @ ++nLin,43 PSAY "Sub-Total de Peças...: " + Transform( aTotaliz2,1 , "@E 999,999,999.99") @ ++nLin,43 PSAY "Descontos............: " + Transform( aTotaliz2,2 , "@E 999,999,999.99") @ ++nLin,43 PSAY "Total de Peças.......: " + Transform( aTotaliz2,1 - aTotaliz2,2 , "@E 999,999,999.99") EndIf If nLin > 55 // Salto de Página. Neste caso o formulario tem 55 linhas... Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo) nLin := 8 EndIf nLin++ @ ++nLin,00 PSAY Replicate("=",80) @ ++nLin,43 PSAY "Total Peças/Serviços.: " + Transform(aTotaliz3,1 - aTotaliz3,2,"@E 999,999,999.99") @ ++nLin,00 PSAY Replicate("=",80) nLin+=3 @ ++nLin,03 PSAY Replicate("",25) + space(23) + Replicate("",25) @ ++nLin,11 PSAY "Consultor" + space(37) + "Administração" nLin := 100 Next nCntFor //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³ Finaliza a execucao do relatorio... ³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ SET DEVICE TO SCREEN //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³ Se impressao em disco, chama o gerenciador de impressao... ³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ If aReturn5==1 dbCommitAll() SET PRINTER TO OurSpool(wnrel) Endif MS_FLUSH() Return |