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

#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

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 := {}
Local nCntFor

// Salva Negociacao ...
If !OX100SNEG(.f.)
Return .F.
EndIf

For nCntFor := 1 to Len(aVetTTP)
// Procura o TTP Marcado para Fechamento
If !aVetTTPnCntFor,ATT_VETSEL
Loop
EndIf
//

AADD( aOSPreFec , { aVetTTP[ nCntFor, ATT_NUMOSV ] , aVetTTPnCntFor,ATT_TIPTEM } )

Next nCntFor

ExecBlock("PREFECT2",.F.,.F.,{aOSPreFec})

Return

Variáveis

Programa Fonte

OFIXX100.PRW