É possível utilizar através de forma customizada as informações de volumes montados no WMS Protheus, para impressão na Nota Fiscal quando no faturamento.
Por padrão, as informação do Pedido são replicadas para os campos da Nota Fiscal, porém, quando se faz a montagem de volumes no WMS Protheus esta informação não é gravada no Pedido, por este permitir liberações parciais, distorcendo assim as informações reais dos volumes faturados numa liberação parcial.
Sendo assim existem dois Pontos de Entrada do faturamento que podem ser utilizados para realizar esta gravação:
- MTASF2 - Geração de registros em SF2
Este Ponto de Entrada é chamado após a gravação dos dados principais da Nota Fiscal, porém, antes da gravação das informações de volumes e deve manipular o array Private aEspVol que alimentará os campos da Nota Fiscal.
- SF2460I - Atualização das tabelas referentes à nota fiscal
Este Ponto de Entrada é chamado após a gravação de todas as informação da Nota Fiscal e deve alterar diretamente os campos da tabela de Nota Fiscal (SF2).
#include "protheus.ch"
// Este ponto de entrada grava um array do tipo Private que irá gravar os volumes da nota fiscal
User Function MTASF2()
Local aVolumes := QtdVolSF2()
If Len(aVolumes) > 0
// Caso queira limpar os volumes calculados no padrão
// aEspVol := {}
If Len(aEspVol) >= 1
aEspVol[1] := aVolumes
Else
Aadd(aRet, aVolumes)
EndIf
EndIf
Return
// Este ponto de entrada deve gravar diretamente na tabela SF2 nos campos correspondentes
User Function SF2460I()
Local aVolumes := QtdVolSF2()
If Len(aVolumes) > 0
RecLock("SF2",.F.)
SF2->F2_ESPECI1 := aVolumes[1]
SF2->F2_VOLUME1 := aVolumes[2]
SF2->(MsUnLock())
EndIf
Return
Static Function QtdVolSF2()
Local aAreaAnt := GetArea()
Local cQuery := ""
Local cAliasQry := GetNextAlias()
Local aRet := {}
cQuery = "SELECT count(DISTINCT DCV_CODVOL) AS DCV_QTDVOL"
cQuery+= " FROM "+RetSqlName("SC9")+" SC9"
cQuery+= " INNER JOIN "+RetSqlName("DCV")+" DCV"
cQuery+= " ON DCV.DCV_FILIAL = '"+xFilial("DCV")+"'"
cQuery+= " AND DCV.DCV_PEDIDO = SC9.C9_PEDIDO"
cQuery+= " AND DCV.DCV_ITEM = SC9.C9_ITEM"
cQuery+= " AND DCV.DCV_SEQUEN = SC9.C9_SEQUEN"
cQuery+= " AND DCV.DCV_PRDORI = SC9.C9_PRODUTO"
cQuery+= " AND DCV.D_E_L_E_T_ = ' '"
cQuery+= " WHERE SC9.C9_FILIAL = '"+xFilial("SC9")+"'"
cQuery+= " AND SC9.C9_NFISCAL = '"+SF2->F2_DOC+"'"
cQuery+= " AND SC9.C9_SERIENF = '"+SF2->F2_SERIE+"'"
cQuery+= " AND SC9.D_E_L_E_T_ = ' '"
DbUseArea(.T.,'TOPCONN',TcGenQry(,,cQuery),cAliasQry,.F.,.T.)
TcSetField(cAliasQry,'DCV_QTDVOL','N',10,0)
If (cAliasQry)->(!Eof()).And. (cAliasQry)->DCV_QTDVOL > 0)
// Supondo que a espécie seja caixas
Aadd(aRet, {"CAIXA", (cAliasQry)->DCV_QTDVOL})
EndIf
(cAliasQry)->(dbCloseArea())
RestArea(aAreaAnt)
Return aRet
Pontos de Entrada