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.