Mudar a data que será considerada nos vencimentos dos títulos de um documento de saída

No artigo de hoje vamos demonstrar em como modificar a data que será considerada para gerar os títulos a receber de um documento de saída.

Ao emitir um documento de saída no sistema (SF2), se ele tiver parametrizado para gerar duplicatas, será avaliado a condição de pagamento e os vencimentos vão começar a computar a partir dessa data de emissão da nota (E1_VENCTO/E1_VENCREA na SE1).

 

Ai alguns alunos nos perguntaram se seria possível, ao invés da data de emissão,  o sistema considerar a data de entrega, ou um campo como data de embarque.

 

Pensando nisso montamos esse exemplo, onde a lógica dele é a seguinte:

  1. É utilizado o ponto de entrada M460COND
  2. Dentro dele é avaliado se o campo de data entrega está preenchido, e se estiver usa ele
  3. Senão, faz o mesmo para a data de embarque
  4. Por fim, vai retornar essa data para ser considerada no lugar da de emissão

 

Abaixo, o código fonte desenvolvido:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function M460COND
Ponto de entrada para alterar a data que irá considerar para gerar as parcelas e vencimentos
@type  Function
@author Atilio
@since 16/06/2023
@see https://tdn.totvs.com/pages/viewpage.action?pageId=6784176
/*/

User Function M460COND()
    Local aArea     := FWGetArea()
    Local aAreaSC5  := SC5->(FWGetArea())
    Local dDataCond := ParamIXB[1] //Por padrão pega do SF2->F2_EMISSAO
	Local dDataAtu  := Date()

    //Se o campo de tipo de data de entrega estiver preenchido
    DbSelectArea("SC5")
    If Empty(SC5->C5_FECENT)
        dDataCond := SC5->C5_FECENT
	
	//Senão, se o campo customizado de data de embarque estiver preenchido
    ElseIf Empty(SC5->C5_X_DTEMB)
        dDataCond := SC5->C5_X_DTEMB
    EndIf
	
	
	//Prevenção para que, se a data alterada for menor que a data atual, considera a data atual (caso o pedido foi copiado e não modificaram as informações)
	If dDataCond < dDataAtu
		dDataCond := dDataAtu
	EndIf

    FWRestArea(aAreaSC5)
    FWRestArea(aArea)
Return dDataCond

Obs: Seria interessante tratar na cópia dos pedidos de venda para zerar esses campos para não impactar no ponto de entrada.

 

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.

Deixe uma resposta

Terminal de Informação