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:
- É utilizado o ponto de entrada M460COND
- Dentro dele é avaliado se o campo de data entrega está preenchido, e se estiver usa ele
- Senão, faz o mesmo para a data de embarque
- 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.