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.

6 Responses

  1. Fernando Vernier disse:

    Top demais meu nobre amigo Atílio.

  2. Jonathan O Aleluia disse:

    Aqui sempre tem uma dica que salva a gente!
    Sucesso e obrigado!

  3. Carlos Eduardo disse:

    Fala Dan, tudo em ordem?

    Sabe me dizer se, utilizando dessa forma, quando houver uma LP configurada o sistema irá contabilizar a exclusão?

    • Bom dia Carlos, tudo joia graças a Deus e você?

      Esse processo fazendo via AdvPL, usando a MaDelNFS, seria o mesmo que fazer manualmente via Exclusão Doc Saída via menu.

      Então se manualmente, você já tem regra na CT5 parametrizada que contabiliza, fazendo dessa forma via AdvPL, também irá ocorrer.

      Tenha um ótimo e abençoado fim de semana.

      Um forte abraço.

Deixe uma resposta

Terminal de Informação