Histórico da Página
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