Histórico da Página
Descrição | Localizado na rotina de Fechamento de Os Modelo 2 (OFIXA100), este ponto de entrada é utilizado para a impressão do formulário de pré-fechamento. |
---|---|
Observações | |
Exemplos | // ÉÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍ» // º Versao º 2 º // ÈÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍͼ #INCLUDE "rwmake.ch" /*/ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±± ±±ºPrograma ³ PREFECT2 º Autor ³ Microsiga º Data ³ 25/10/11 º±± ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±± ±±ºDescricao ³ Imprime resultado do pré-fechamento º±± ±±º ³ º±± ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±± ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß /*/ User Function PREFECT2() Local oReport Private aOS := ParamIXB[1 |
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ 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
] Private cTitulo := "Pré-Fechamento" oReport := ReportDef() // Nesta função nós definimos a estrutura do relatório, por exemplo as seções, campos, totalizadores e etc. oReport:PrintDialog() // Essa função serve para disparar a impressão do TReport, ela que faz com que seja exibida a tela de configuração de impressora e os botões de parâmetros. Return /*/ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±± ±±ºFun‡„o ³REPORTDEF º Autor ³ AP6 IDE º Data ³ 11/12/19 º±± ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±± ±±ºDescri‡„o ³ Funcao de montagem do padrão de impressão das informações º±± ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±± ±±ºUso ³ Programa principal º±± ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±± ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß /*/ Static Function ReportDef() Local cDesc := "" Local oReport Local oSection1 Local oSection2 cOS := cEmi := cLib := "" cCon := cCP := cTT := "" cCli := cPla := cEnd := cMod := "" cBai := cMar := cCid := cCha := "" cTel := cAno := cCPF := cOdo := "" cIns := cFro := cCon := cMot := "" cRev := cDat := "" cOSP := cOSC := "" cSer := cSVl := cSCt := "" cPec := cPUM := cQtd := cPVU := cPVl := "" cTot := cTVl := "" // Descrição cDesc := "Este programa tem como objetivo imprimir relatorio de acordo com os parametros informados pelo usuario. Pré-Fechamento" // TReport oReport := TReport():New( ; "PREFECT2", ; cTitulo, ; , ; {|oReport| RunReport(oReport)},; cDesc) // Cabeçalho oSection1 := TRSection():New(oReport, "oCabecalho") oSection1:SetLineStyle() // Define se imprime as células da seção em linhas oSection1:SetLinesBefore(0) // Define a quantidade de linhas que serão saltadas antes da impressão da seção oSection1:SetCols(3) // Define a quantidade de colunas impressas por linha oSection1:SetHeaderPage() // Define se imprime o cabeçalho da seção no topo da página oSection1:SetHeaderBreak() // Define se imprime o cabeçalho da seção na quebra de impressão (TRBreak) oSection1:SetPageBreak() // Define se quebra página após a impressão do totalizador TRCell():New(oSection1, "oOS" ,, "Ordem de Serviço" , "@!", 33,, {|| cOS },,,,,,,,, .t.) // Ordem de Serviço TRCell():New(oSection1, "oEmi",, "Emissão" , "@!", 33,, {|| cEmi },,,,,,,,, .t.) // Emissão TRCell():New(oSection1, "oLib",, "Liberação" , "@!", 33,, {|| cLib },,,,,,,,, .t.) // Liberação TRCell():New(oSection1, "oCon",, "Consultor" , "@!", 33,, {|| cCon },,,,,,,,, .t.) // Consultor TRCell():New(oSection1, "oCP" ,, "Condição de Pagamento", "@!", 33,, {|| cCP },,,,,,,,, .t.) // Condição de Pagamento TRCell():New(oSection1, "oTT" ,, "Tipo de Tempo" , "@!", 33,, {|| cTT },,,,,,,,, .t.) // Tipo de Tempo // Dados Complemento oSection2 := TRSection():New(oReport, "oDadosComp") oSection2:SetLineStyle() // Define se imprime as células da seção em linhas oSection2:SetLinesBefore(2) // Define a quantidade de linhas que serão saltadas antes da impressão da seção oSection2:SetCols(2) // Define a quantidade de colunas impressas por linha TRCell():New(oSection2, "oCli",, "Cliente.", "@!", 50,, {|| cCli },,,,,,,,,) // Cliente TRCell():New(oSection2, "oPla",, "Placa.." , "@!", 50,, {|| cPla },,,,,,,,,) // Placa TRCell():New(oSection2, "oEnd",, "Endereço", "@!", 50,, {|| cEnd },,,,,,,,,) // Endereço TRCell():New(oSection2, "oMod",, "Modelo." , "@!", 50,, {|| cMod },,,,,,,,,) // Modelo TRCell():New(oSection2, "oBai",, "Bairro..", "@!", 50,, {|| cBai },,,,,,,,,) // Bairro TRCell():New(oSection2, "oMar",, "Marca.." , "@!", 50,, {|| cMar },,,,,,,,,) // Marca TRCell():New(oSection2, "oCid",, "Cidade..", "@!", 50,, {|| cCid },,,,,,,,,) // Cidade TRCell():New(oSection2, "oCha",, "Chassi." , "@!", 50,, {|| cCha },,,,,,,,,) // Chassi TRCell():New(oSection2, "oTel",, "Telefone", "@!", 50,, {|| cTel },,,,,,,,,) // Telefone TRCell():New(oSection2, "oAno",, "Ano...." , "@!", 50,, {|| cAno },,,,,,,,,) // Ano TRCell():New(oSection2, "oCPF",, "CNPJ/CPF", "@!", 50,, {|| cCPF },,,,,,,,,) // CNPJ/CPF TRCell():New(oSection2, "oOdo",, "Odomet." , "@!", 50,, {|| cOdo },,,,,,,,,) // Odomet. TRCell():New(oSection2, "oIns",, "Insc....", "@!", 50,, {|| cIns },,,,,,,,,) // Insc. TRCell():New(oSection2, "oFro",, "Frota.." , "@!", 50,, {|| cFro },,,,,,,,,) // Frota TRCell():New(oSection2, "oCon",, "Contato.", "@!", 50,, {|| cCon },,,,,,,,,) // Contato TRCell():New(oSection2, "oMot",, "Motoris" , "@!", 50,, {|| cMot },,,,,,,,,) // Motoris // Dados (Venda Zero) oSection3 := TRSection():New(oReport, "oDadosVZero") oSection3:SetLineStyle() // Define se imprime as células da seção em linhas oSection3:SetLinesBefore(1) // Define a quantidade de linhas que serão saltadas antes da impressão da seção oSection3:SetCols(2) // Define a quantidade de colunas impressas por linha TRCell():New(oSection3, "oRev",, "Revend..", "@!", 50,, {|| cRev },,,,,,,,,) // Revend. TRCell():New(oSection3, "oDat",, "Data..." , "@!", 50,, {|| cDat },,,,,,,,,) // Data // Tipo de OS oSection4 := TRSection():New(oReport, "oTipoOS") oSection4:SetLineStyle() // Define se imprime as células da seção em linhas oSection4:SetLinesBefore(3) // Define a quantidade de linhas que serão saltadas antes da impressão da seção oSection4:SetLeftMargin(50) // Define o tamanho da margem a esquerda TRCell():New(oSection4, "oOSP",, "", "@!", 50,, {|| cOSP },,,,,,,,,) // OS Preventiva TRCell():New(oSection4, "oOSC",, "", "@!", 50,, {|| cOSC },,,,,,,,,) // OS Corretiva // Serviços oSection5 := TRSection():New(oReport, "oServicos") oSection5:SetLinesBefore(2) // Define a quantidade de linhas que serão saltadas antes da impressão da seção oSection5:SetLeftMargin(3) // Define o tamanho da margem a esquerda oSection5:SetHeaderBreak() // Define se imprime o cabeçalho da seção na quebra de impressão (TRBreak) TRCell():New(oSection5, "oSer",, "Serviços Executados", "@!" , 150,, {|| cSer },,, ,,,,,,) // Serviços Executados TRCell():New(oSection5, "oSCt",, "Cortesia?" , "@!" , 50,, {|| cSCt },,, ,,,,,,) // Cortesia TRCell():New(oSection5, "oSVl",, "Vlr. Total" , "@E 999,999.99", 100,, {|| cSVl },,, "RIGHT",,,,,,) // Vlr. Total // Peças oSection6 := TRSection():New(oReport, "oPecas") oSection6:SetLinesBefore(2) // Define a quantidade de linhas que serão saltadas antes da impressão da seção oSection6:SetLeftMargin(3) // Define o tamanho da margem a esquerda oSection6:SetHeaderBreak() // Define se imprime o cabeçalho da seção na quebra de impressão (TRBreak) TRCell():New(oSection6, "oPec",, "Peças Utilizadas", "@!" , 100,, {|| cPec },,, ,,,,,,) // Peças Utilizadas TRCell():New(oSection6, "oPUM",, "UM" , "@!" , 10,, {|| cPUM },,, ,,,,,,) // UM TRCell():New(oSection6, "oQtd",, "Qtde" , "@R 999.99" , 25,, {|| cQtd },,, "RIGHT",,,,,,) // Qtde TRCell():New(oSection6, "oPVU",, "Vlr. Unit." , "@E 999,999.99", 25,, {|| cPVU },,, "RIGHT",,,,,,) // Vlr. Unit. TRCell():New(oSection6, "oPVl",, "Vlr. Total" , "@E 999,999.99", 40,, {|| cPVl },,, "RIGHT",,,,,,) // Vlr. Total // Totais oSection7 := TRSection():New(oReport, "oTotais") oSection7:SetLineStyle() // Define se imprime as células da seção em linhas oSection7:SetLinesBefore(1) // Define a quantidade de linhas que serão saltadas antes da impressão da seção oSection7:SetLeftMargin(116) // Define o tamanho da margem a esquerda TRCell():New(oSection7, "oTot",, "", "@!" , 25,, {|| cTot },,, ,,,,,,) // Descrições TRCell():New(oSection7, "oTVl",, "", "@E 999,999,999.99", 20,, {|| cTVl },,, "RIGHT",,,,,,) // Valores Return(oReport) /*/ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±± ±±ºFun‡„o ³RUNREPORT º Autor ³ AP6 IDE º Data ³ 10/07/12 º±± ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±± ±±ºDescri‡„o ³ Funcao de retorno das informações do banco de dados º±± ±±º ³ a serem impressas º±± ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±± ±±ºUso ³ Programa principal º±± ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±± ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß /*/ Static Function RunReport(oReport) Local oSection1 := oReport:Section(1) Local oSection2 := oReport:Section(2) Local oSection3 := oReport:Section(3) Local oSection4 := oReport:Section(4) Local oSection5 := oReport:Section(5) Local oSection6 := oReport:Section(6) Local oSection7 := oReport:Section(7) Local oSection8 := oReport:Section(8) Local nCntFor Local nCntFor2 Local aValPec Local aValSer Local cCliCod Local cCliLoj Local cCGC Local dDataDis Local aTotaliz := {} Local cDescri Local nTamDesc // OS por Tipo de Tempo For nCntFor := 1 to Len(aOS) aTotaliz := {} Aadd(aTotaliz, {0, 0}) // 1 - Totaliza Serviços Aadd(aTotaliz, {0, 0}) // 2 - Totaliza Peças Aadd(aTotaliz, {0, 0}) // 3 - Totaliza OS e Descontos aValPec := FMX_CALPEC(aOS[nCntFor, 1], aOS[nCntFor, 2],,, .f., .t., .t., .f., .t., .f., .f.,,,, .f.) aValSer := FMX_CALSER(aOS[nCntFor, 1], aOS[nCntFor, 2],,, .f., .t., .f., .t., .f., .f.) If Len(aValPec) == 0 .And. Len(aValSer) == 0 Loop EndIf If Len(aValPec) <> 0 cTT := aValPec[1, 3] // Tipo de Tempo cCliCod := aValPec[1, 15] // Cliente cCliLoj := aValPec[1, 16] // Loja dDataDis := aValPec[1, 17] // Data Liberação Else cTT := aValSer[1, 4] // Tipo de Tempo cCliCod := aValSer[1, 20] // Cliente cCliLoj := aValSer[1, 21] // Loja dDataDis := aValSer[1, 22] // Data Liberação EndIf VO1->(dbSetOrder(1)) VO1->(MsSeek(xFilial("VO1") + aOS[nCntFor, 1])) 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)) dbSelectArea("VOO") dbSetOrder(1) dbSeek(xFilial("VOO") + aOs[nCntFor, 1] + aOs[nCntFor, 2]) dbSelectArea("SE4") dbSetOrder(1) dbSeek(xFilial("SE4") + VOO->VOO_CONDPG) cCGC := TRANSFORM(SA1->A1_CGC, PicPes(SA1->A1_PESSOA)) // CNPJ/CPF // Cabeçalho oSection1:Init() cOS := AllTrim(VO1->VO1_NUMOSV) // Ordem de Serviço cEmi := DtoC(VO1->VO1_DATABE) // Emissão cLib := DtoC(dDataDis) // Liberação cCon := AllTrim(VO1->VO1_FUNABE) + " " + AllTrim(VAI->VAI_NOMTEC) // Consultor cCP := SE4->E4_DESCRI // Condição de Pagamento oSection1:PrintLine() oReport:ThinLine() oSection1:Finish() // Dados Complemento oSection2:Init() cCli := PadR(SA1->A1_COD + "-" + SA1->A1_LOJA + " " + SA1->A1_NOME, 38) // Cliente cPla := TRANSFORM(VV1->VV1_PLAVEI, "@R !!!-!!!!") // Placa cEnd := PadR(SA1->A1_END, 38) // Endereço cMod := PadR(VV2->VV2_DESMOD, 17) // Modelo cBai := PadR(SA1->A1_BAIRRO, 38) // Bairro cMar := PadR(VE1->VE1_DESMAR, 17) // Marca cCid := PadR(SA1->A1_MUN, 38) // Cidade cCha := PadR(ALLTRIM(VV1->VV1_CHASSI), 17) // Chassi cTel := PadR(SA1->A1_TEL, 38) // Telefone cAno := TRANSFORM(VV1->VV1_FABMOD, "@R 9999/9999") // Ano cCPF := PadR(cCGC, 38) // CNPJ/CPF cOdo := TRANSFORM(VO1->VO1_KILOME, "@E 999,999,999") // Odomet. cIns := PadR(SA1->A1_INSCR, 38) // Insc. cFro := PadR(VV1->VV1_CODFRO, 15) // Frota cCon := PadR(SA1->A1_CONTATO, 38) // Contato cMot := PadR(VO1->VO1_CODMOT, 15) // Motoris oSection2:PrintLine() oReport:ThinLine() oSection2:Finish() oReport:SkipLine(1) oReport:PrtCenter("Venda Zero") oReport:SkipLine(1) // Dados (Venda Zero) oSection3:Init() cRev := PadR(VV1->VV1_CODCON, 38) // Contato cDat := TRANSFORM(VV1->VV1_DATVEN, "@D") // Motoris oSection3:PrintLine() oReport:ThinLine() oSection3:Finish() // Tipo de OS oSection4:Init() cOSP := "OS Preventiva ( )" // OS Preventiva cOSC := "OS Corretiva ( )" // OS Corretiva oSection4:PrintLine() oReport:SkipLine(2) oReport:ThinLine() oSection4:Finish() // Serviços If Len(aValSer) <> 0 // Serviços oSection5:Init() For nCntFor2 := 1 to Len(aValSer) cSer := PadR(AllTrim(aValSer[nCntFor2, 1]) + " " + AllTrim(aValSer[nCntFor2, 2]) + " " + AllTrim(aValSer[nCntFor2, 15]), 69) // Serviço If aValSer[nCntFor2, 6] == "0" // VOK_INCMOB - Mão de Obra Gratuíta cSVl := "0,00" // Vlr. Total cSCt := "Sim" // Cortesia Else cSVl := aValSer[nCntFor2, 7] // Vlr. Total cSCt := "" // Cortesia EndIf oSection5:PrintLine() // Total Serviços aTotaliz[1, 1] += aValSer[nCntFor2, 7] aTotaliz[1, 2] += aValSer[nCntFor2, 8] // Total Geral aTotaliz[3, 1] += aValSer[nCntFor2, 7] aTotaliz[3, 2] += aValSer[nCntFor2, 8] Next oReport:ThinLine() oSection5:Finish() // Totais (Serviços) oSection7:Init() cTot := "Sub-Total de Serviços:" cTVl := aTotaliz[1, 1] // Sub-Total de Serviços oSection7:PrintLine() cTot := "Descontos............:" cTVl := aTotaliz[1, 2] // Descontos oSection7:PrintLine() cTot := "Total de Serviços....:" cTVl := aTotaliz[1, 1] - aTotaliz[1, 2] // Total de Serviços oSection7:PrintLine() oReport:ThinLine() oSection7:Finish() EndIf // Peças If Len(aValPec) <> 0 // Peças oSection6:Init() SB1->(dbSetOrder(7)) For nCntFor2 := 1 to Len(aValPec) SB1->(dbSeek(xFilial("SB1") + aValPec[nCntFor2, 1] + aValPec[nCntFor2, 2])) cPec := PadR(aValPec[nCntFor2, 1] + " " + AllTrim(aValPec[nCntFor2, 2]) + " " + AllTrim(SB1->B1_DESC), 45) // Peças Utilizadas cPUM := SB1->B1_UM // UM cQtd := aValPec[nCntFor2, 5] // Qtde cPVU := aValPec[nCntFor2, 9] // Vlr. Unit. cPVl := aValPec[nCntFor2, 10] // Vlr. Total oSection6:PrintLine() // Total Peças aTotaliz[2, 1] += aValPec[nCntFor2, 10] aTotaliz[2, 2] += aValPec[nCntFor2, 7] // Total Geral aTotaliz[3, 1] += aValPec[nCntFor2, 10] aTotaliz[3, 2] += aValPec[nCntFor2, 7] Next nCntFor2 oReport:ThinLine() oSection6:Finish() // Totais (Peças) oSection7:Init() cTot := "Sub-Total de Peças...:" cTVl := aTotaliz[2, 1] // Sub-Total de Peças oSection7:PrintLine() cTot := "Descontos............:" cTVl := aTotaliz[2, 2] // Descontos oSection7:PrintLine() cTot := "Total de Peças.......:" cTVl := aTotaliz[2, 1] - aTotaliz[2, 2] // Total de Peças oSection7:PrintLine() oReport:ThinLine() oSection7:Finish() EndIf // Totais (Peças / Serviços) oSection7:Init() cTot := "Total Peças/Serviços.:" cTVl := aTotaliz[3, 1] - aTotaliz[3, 2] // Total de Peças / Serviços oSection7:PrintLine() oReport:ThinLine() oSection7:Finish() oReport:SkipLine(1) oReport:PrintText(Space(3) + "Obs:") // Observação DbSelectArea("SYP") DbSetOrder(1) DbSeek(xFilial("SYP") + VOO->VOO_OBSMNF) While !Eof() .And. xFilial("SYP") == SYP->YP_FILIAL .And. SYP->YP_CHAVE == VOO->VOO_OBSMNF cDescri := Alltrim(SYP->YP_TEXTO) nTamDesc := AT("\13\10", cDescri) If nTamDesc > 0 cDescri := SubSTR(cDescri, 1, nTamDesc - 1) Else cDescri := SubSTR(cDescri, 1, Len(cDescri)) EndIf If nTamDesc > 0 nTamDesc-- Else nTamDesc := Len(cDescri) EndIf oReport:PrintText(Space(7) + cDescri) DbSelectArea("SYP") DbSkip() EndDo oReport:SkipLine(5) oReport:PrintText(Space(40) + "_______________________________" + Space(30) + "_______________________________") oReport:PrintText(Space(51) + "Consultor" + Space(50) + "Administração") Next |
---|
Return |
---|
Preview | |
---|---|
Veja também | |
Idioma | Português(Brasil) |
Versões | Todas |
Sistemas Operacionais Suportados | Todos |
Compatível com as Bases de Dados | Todas |
Updates | |
Parâmetros | aOSPreFec - Matriz com as OS/TT (no formato 1 - Numero da OS , 2 - Tipo de Tempo) selecionados para fechamento. |
Retorno | |
Eventos de chamada do Ponto de Entrada | Static Function OX100IMPPF() Local aOSPreFec := {} // Salva Negociacao ... For nCntFor := 1 to Len(aVetTTP) AADD( aOSPreFec , { aVetTTP[ nCntFor, ATT_NUMOSV ] , aVetTTPnCntFor,ATT_TIPTEM } ) Next nCntFor ExecBlock("PREFECT2",.F.,.F.,{aOSPreFec}) Return |
Variáveis | |
---|---|
Programa Fonte | OFIXX100.PRW |