Árvore de páginas

Ponto de Entrada

Descrição:

Este ponto de entrada está localizado na rotina Cancela Venda (OFIOM220) e tem por finalidade realizar a validação do cancelamento da nota fiscal. Desta forma o usuário poderá criar suas próprias verificações no momento de cancelar a nota fiscal e, se for o caso, abortar o cancelamento quando a condição não for atendida.

Localização:

Atualizações / Mov. Peças / Cancela Venda (OFIOM220)

Eventos:

/*

ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±

±±³Funcao ³FS_CANCELA³ Autor ³ Andre ³ Data ³ 23/10/00 ³±±

±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±

±±³Descricao ³ Cancelamento da Venda de Pecas ³±±

±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±

±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß

*/

Function FS_CANCELA()

 

Local i := 0

Local aRegSD2 := {}

Local aRegSE1 := {}

Local aRegSE2 := {}

Local cPrefix := &(GetNewPar("MV_1DUPREF","cSerie"))

Local lCupom := VS1->VS1_SERNFI == GetNewPar("MV_SERCUP","CUP")

Local cont := 0

Local lNFeCancel := SuperGetMV('MV_CANCNFE',.F.,.F.) .AND. SF2->(FieldPos("F2_STATUS")) > 0

 

if Alltrim(cPrefix) == ""

cPrefix := iif(VS1->VS1_SERNFI <> GetNewPar("MV_SERCUP","CUP"),VS1->VS1_SERNFI,GetNewPar("MV_SERCUP","CUP"))

Endif

 

DbSelectArea("SE1")

DBSetOrder(1)

//If SE1->(DBSeek(xFilial('SE1')+cPrefix+cNota))

If SE1->(DBSeek(xFilial('SE1')+cPrefix+space(TamSx3("E1_PREFIXO")[1]-Len(cPrefix))+cNota))

While !Eof() .and. SE1->E1_FILIAL == xFilial('SE1') .and. SE1->E1_PREFIXO == cPrefix+space(TamSx3("E1_PREFIXO")[1]-Len(cPrefix)) .and. SE1->E1_NUM == cNota

if VS1->VS1_SERNFI <> GetNewPar("MV_SERCUP","CUP") .and. SE1->E1_PREFORI != GetNewPar("MV_PREFBAL","BAL")

DBSkip()

loop

endif

If !Empty(SE1->E1_BAIXA) .or. SE1->E1_SALDO != SE1->E1_VALOR

MsgInfo(STR0019,STR0020) //Ha titulos baixados referentes a esta Venda..###Atencao

Return(.f.)

EndIf

DbSelectArea("SE1")

DbSkip()

Enddo

EndIf

 

// Transmite o Cancelamento para o SEFAZ automaticamente

If lNFeCancel

If !FGX_STATF2("D",VS1->VS1_SERNFI,VS1->VS1_NUMNFI,VS1->VS1_CLIFAT,VS1->VS1_LOJA,"S") // verifica se NF foi Deletada

 

dbSelectArea("SF2")

dbSetOrder(1)

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

//³ Verifica se o estorno do documento de saída pode ser feito ³

//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

If MaCanDelF2("SF2",SF2->(RecNo()),@aRegSD2,@aRegSE1,@aRegSE2)

/*Alias da Tabela SF2,Recno do SF2, Array com os registro do SD2, Array com os registro do SE1, Array com os registro do SE2 ) */

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

//³ Estorna o documento de saida ³

//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

PERGUNTE("MTA521",.f.)

If !SF2->(MaDelNFS(aRegSD2,aRegSE1,aRegSE2,(mv_par01 == 1), (mv_par02 == 1), (mv_par03 == 1), (mv_par04 == 1)))

lMsErroAuto:= .T.

Endif

Else

lMsErroAuto:= .T.

EndIf

 

If lMsErroAuto

Return(.f.)

EndIf

 

If !FGX_STATF2("V",VS1->VS1_SERNFI,VS1->VS1_NUMNFI,VS1->VS1_CLIFAT,VS1->VS1_LOJA,"S") /// Verifica STATUS da NF no SEFAZ

Return .f.

EndIf

Endif

EndIf

 

Begin Transaction

 

if ( ExistBlock("OFM220IN") )

lRet := ExecBlock("OFM220IN",.f.,.f.)

if !lRet

DisarmTransaction()

Break

Return(.f.)

Endif

EndIf

 

If !lNFeCancel

 

dbSelectArea("SF2")

dbSetOrder(1)

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

//³ Verifica se o estorno do documento de saída pode ser feito ³

//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

If MaCanDelF2("SF2",SF2->(RecNo()),@aRegSD2,@aRegSE1,@aRegSE2)

/*Alias da Tabela SF2,Recno do SF2, Array com os registro do SD2, Array com os registro do SE1, Array com os registro do SE2 ) */

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿

//³ Estorna o documento de saida ³

//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

PERGUNTE("MTA521",.f.)

SF2->(MaDelNFS(aRegSD2,aRegSE1,aRegSE2,(mv_par01 == 1), (mv_par02 == 1), (mv_par03 == 1), (mv_par04 == 1)))

Else

//Nao pode ser excluida.

lMsErroAuto:= .T.

EndIf

 

If lMsErroAuto

DisarmTransaction()

Break

EndIf

 

Endif

 

//Exclui Pedido

ProcRegua(1)

IncProc(STR0023) //Cancelando Pedido...

If lAbortPrint

DisarmTransaction()

Break

Else

lAbortPrint := .F.

EndIf

 

lMsErroAuto := .f.

 

dbSelectArea("SC5")

dbSetOrder(1)

if dbSeek(xFilial("SC5")+cNumPed)

aMata410Cab := {{"C5_NUM" , cNumPed,Nil}} //Numero do pedido SC5

aMata410Itens := {{"C6_NUM" , cNumPed,Nil}} //Numero do Pedido SC6

 

//Exclui Pedido

SC9->(dbSetOrder(1))

SC9->(dbSeek(xFilial("SC9")+cNumPed))

While !SC9->(Eof()) .And. xFilial('SC9') == SC9->C9_FILIAL .and. cNumPed == SC9->C9_PEDIDO

SC9->(a460Estorna())

SC9->(dbSkip())

EndDo

 

MSExecAuto({|x,y,z|Mata410(x,y,z)},aMata410Cab,{aMata410Itens},5)

Endif

 

If lMsErroAuto == .t.

DisarmTransaction()

Break

EndIf

 

// Inicio do Cancelamento dos Titulos a Receber

If Empty(VS1->VS1_CTCDCI)

aParcelas := {}

DbSelectArea("SE1")

SE1->(DBSetOrder(1))

If SE1->(DBSeek(xFilial('SE1')+cPrefix+space(TamSx3("E1_PREFIXO")[1]-Len(cPrefix))+cNota))

while ! Eof() .and. SE1->E1_FILIAL == xFilial('SE1') .and. SE1->E1_PREFIXO == cPrefix+space(TamSx3("E1_PREFIXO")[1]-Len(cPrefix)) .and. SE1->E1_NUM == cNota

if VS1->VS1_SERNFI <> GetNewPar("MV_SERCUP","CUP") .and. SE1->E1_PREFORI != GetNewPar("MV_PREFBAL","BAL")

DBSkip()

loop

endif

AADD(aParcelas,{ {"E1_PREFIXO",E1_PREFIXO,nil},{"E1_NUM",E1_NUM,nil},{"E1_PARCELA",E1_PARCELA,nil},;

{"E1_TIPO",E1_TIPO,nil},{"E1_NATUREZA",E1_NATUREZA,nil},{"E1_CLIENTE",E1_CLIENTE,nil},;

{"E1_LOJA",E1_LOJA,nil},{"E1_EMISSAO",E1_EMISSAO,nil},{"E1_VENCTO",E1_VENCTO,nil},;

{"E1_VENCREA",E1_VENCREA,nil},{"E1_VALOR",E1_VALOR,nil} })

 

DbSelectArea("SE1")

DbSkip()

Enddo

 

ProcRegua(1)

IncProc(STR0024) //Excluindo Titulos...

If lAbortPrint

DisarmTransaction()

Break

Else

lAbortPrint := .F.

EndIf

pergunte("FIN040",.F.)

For i = 1 to len(aParcelas)

MSExecAuto({|x,y| FINA040(x,y)},aParcelas[i],5)

If LMsErroAuto

MostraErro()

DisarmTransaction()

Break

EndIf

Next

 

DbSelectArea("VSE")

DbSetOrder(1)

If DbSeek( xFilial("VSE") + "OR"+VS1->VS1_NUMORC + ' B' )

while !eof() .and. xFilial("VSE") == VSE->VSE_FILIAL .and. VSE->VSE_NUMIDE+VSE->VSE_TIPOPE == "OR"+VS1->VS1_NUMORC+" B"

If !RecLock("VSE",.f.,.t.)

DisarmTransaction()

Break

EndIf

DbDelete()

MsUnlock()

WriteSx2("VSE")

DbSkip()

Enddo

EndIf

EndIf

Else

//Exclui Financiamento CDCI

ExTitCDCI(VS1->VS1_CTCDCI)

ExContCDCI(VS1->VS1_CTCDCI)

EndIf

 

cRecno := AllTrim(VS1->VS1_TITNCC)

cStr := AllTrim(VS1->VS1_TITNCC)

nTot := 0

if Len(AllTrim(VS1->VS1_TITNCC)) > 0

For cont := 1 to Len(AllTrim(VS1->VS1_TITNCC))

if substr(cStr,cont,1) == "/"

nTot++

Endif

Next

if nTot == 0

nTot := 1

Endif

Endif

 

For cont := 1 to nTot

 

cRecno := substr(cStr,1,AT("/",cStr)-1)

cStr := substr(cStr,AT("/",cStr)+1)

dbSelectArea("SE1")

dbGoto(val(cRecno))

 

aBaixa := {{"E1_PREFIXO" ,SE1->E1_PREFIXO ,Nil},;

{"E1_NUM" ,SE1->E1_NUM ,Nil},;

{"E1_PARCELA" ,SE1->E1_PARCELA ,Nil},;

{"E1_TIPO" ,"NCC" ,Nil},;

{"AUTMOTBX" ,"NOR" ,Nil},;

{"AUTDTBAIXA" ,dDataBase ,Nil},;

{"AUTDTCREDITO",dDataBase ,Nil}}

 

lMSHelpAuto := .f.

lMsErroAuto := .f.

MSExecAuto({|x,y| FINA070(x,y)},aBaixa,5)

If lMsErroAuto

lRet := .F.

lError := .T.

DisarmTransaction()

MostraErro()

Break

EndIf

Next

 

//////////////////////////////////////////////////

// EXCLUIR ARQUIVOS ( VEC / VSG ) e ALTERAR VS1 //

//////////////////////////////////////////////////

FS_EXCLUIR(cNota,cSerie,1) // 1=Voltar Orcamento para Aberto

//////////////////////////////////////////////////

 

if lCupom

//Imprime o cancelamento do Cupom Fiscal

iRetorno := 0

cRetorno := ' '

_lRetBema := .T.

_cPorta := GetMv("MV_PORTFIS")

_cImpressora:= GetMv("MV_IMPFIS")

_nDesconto := 0

_nTotal := 0

_nTotDesc := 0

_aIcms := {}

_nRet := ""

If Type("nHdlECF") == "U" .Or. nHdlEcf == -1

//If !Type("nHdlECF") == "U" .Or. nHdlEcf <> -1

Public nhdlecf

nhdlecf := IFAbrir( _cImpressora,_cPorta )

EndIf

iRet := IFStatus( nhdlecf, '5', @cRetorno )

//if iRet = 7

iRet := IFCancCup( nhdlecf )

Inkey(8) // dá um tempo para a impressora fazer a impressao do cancelamento

//Endif

Endif

 

if ( ExistBlock("OFM220FN") )

lRet := ExecBlock("OFM220FN",.f.,.f.)

if !lRet

DisarmTransaction()

Break

Endif

EndIf

 

End Transaction

 

If lMsErroAuto

MostraErro()

EndIf

 

//Executa RdMake da Ordem de Cancelamento

if ExistBlock("ORDCANC")

ExecBlock("ORDCANC",.f.,.f.)

Endif

 

Return

Programa Fonte:

OFIOM220.PRW 

Função:

FS_CANCELA()      

Retorno:

Booleano (.t. ou .f.)

 

Exemplo:

/*

ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ

±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±±

±±ºPrograma OFM220FN ºAutor ³Otavio Favarelli º Data ³ 25/04/16 º±±

±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±

±±ºDesc. ³Valida cancelamento da Nota Fiscal de Peças º±±

±±º ³ º±±

±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±

±±ºUso ³ DMS º±±

±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±±

±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±

ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß

*/

User Function OFM220FN

 

Local lRet1 := .T.

 

MsgInfo("Ponto de Entrada OFM220FN executado com sucesso!","Atenção!")

 

Return lRet1