Como excluir uma NF de Saída via AdvPL

No artigo de hoje, nós vamos mostrar como excluir uma NF de Saída via AdvPL usando as funções MaCanDelF2 e MaDelNFS.

Basicamente a lógica que usamos foi a seguinte para montar o exemplo:

  1. Posicionamos na NF com a função MsSeek
  2. Marcamos o campo F2_OK igual é na tela de Exclusão do Documento de Saída
  3. Acionamos a MaCanDelF2 para verificar se é possível fazer a exclusão
  4. Em seguida acionamos a MaDelNFS para fazer a exclusão
  5. Se tudo der certo, mostramos uma mensagem, similar o print abaixo

Mensagem no término da rotina

 

Abaixo o código fonte desenvolvido conforme a lógica acima:

//Define as variáveis base
cDocumento := AvKey("000002", "F2_DOC")
cSerie     := AvKey("1",      "F2_SERIE")
cCliente   := AvKey("C00003", "F2_CLIENTE")
cLoja      := AvKey("01",     "F2_LOJA")

//Define as variáveis específicas do processo de exclusão
cMarca     := GetMark(, "SF2", "F2_OK")
aRegSD2    := {}
aRegSE1    := {}
aRegSE2    := {}
lMostraCtb := .F.
lAglCtb    := .F.
lContab    := .F.
lCarteira  := .F.
lPodeExcl  := .F.
lDeuCerto  := .F.

//Abre a tabela de documentos de saída
DbSelectArea("SF2")
SF2->(DbSetOrder(1)) // F2_FILIAL + F2_DOC + F2_SERIE + F2_CLIENTE + F2_LOJA + F2_FORMUL + F2_TIPO

//Se conseguir posicionar na Nota
If SF2->(MsSeek(FWxFilial("SF2") + cDocumento + cSerie + cCliente + cLoja))
	//Simula a marcação da tela de exclusão de Documento de Saída
	RecLock("SF2", .F.)
		SF2->F2_OK := cMarca
	SF2->(MsUnlock())

	//Verifica se é possível excluir a NF ou tem alguma restrição
	lPodeExcl := MaCanDelF2("SF2", SF2->(RecNo()), @aRegSD2, @aRegSE1, @aRegSE2)

	//Se for possível excluir, aciona a rotina para efetivar a exclusão
	If lPodeExcl
		lDeuCerto := MaDelNFS(aRegSD2, aRegSE1, aRegSE2, lMostraCtb, lAglCtb, lContab, lCarteira)

        //Se deu tudo certo, mostra mensagem de sucesso
        If lDeuCerto
            FWAlertSuccess("Nota de número '" + cDocumento + "' foi excluída com sucesso!", "Sucesso")
        EndIf
	EndIf
EndIf

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

2 Responses

  1. Fernando Vernier disse:

    Top demais meu nobre amigo Atílio.

Deixe uma resposta

Terminal de Informação