Histórico da Página
Exemplo para customizar a atribuição de peso líquido e peso bruto para volume/espécie 1, volume/espécie 2, volume/espécie 3, volume/espécie 4 na DANFE.
Características do Requisito
Linha de Produto: | Microsiga Protheus® | ||||
Segmento: | Serviços | ||||
Módulo: | Faturamento | ||||
Rotina: |
|
Descrição
Ponto de entrada que permite alterada alterar dados do produto, neste caso altera peso liquido, peso líquido e peso bruto , por volume e especie espécie na geração xml da nota, antes de transmitir.
Os campos criados na tabelas SC5 deve ser alimentados manualmente e este valor será transportado para a tabela SF2.
Para transportar os campos da SC5 para SF2 use o ponto de entrada (M461LSF2-Alterar SF2 após gravação).
Exemplo de campo a ser criado
Criar os campos de peso líquido e bruto na tabela SC5 e tabela SF2. Os campos devem conter o mesmo nome, mudando apenas o último caractere que é numérico.
Campos da Tabela SC5
Campo | C5_PLIQUI1 |
---|---|
Tipo | N |
Tamanho | 11 |
Decimal | 4 |
Formato | @E 999,999.9999 |
Título | Texto do cliente |
Descrição | Texto do cliente |
Usado | Sim |
Campo | C5_PBRUTO1 |
---|---|
Tipo | N |
Tamanho | 11 |
Decimal | 4 |
Formato | @E 999,999.9999 |
Título | Texto do cliente |
Descrição | Texto do cliente |
Usado | Sim |
Replique a criação dos campos para acompanhar os demais volumes/espécies:
Campo | C5_PLIQUI2 e C5_PBRUTO2 |
---|---|
Campo | C5_PLIQUI3 e C5_PBRUTO3 |
Campo | C5_PLIQUI4 e C5_PBRUTO4 |
Campos da Tabela SF2
Campo | F2_PLIQUI1 |
---|---|
Tipo | N |
Tamanho | 11 |
Decimal | 4 |
Formato | @E 999,999.9999 |
Título | Texto do cliente |
Descrição | Texto do cliente |
Usado | Sim |
Campo | F2_PBRUTO1 |
---|---|
Tipo | N |
Tamanho | 11 |
Decimal | 4 |
Formato | @E 999,999.9999 |
Título | Texto do cliente |
Descrição | Texto do cliente |
Usado | Sim |
Replique a criação dos campos para acompanhar os demais volumes/espécies:
Campo | F2_PLIQUI2 e F2_PBRUTO2 |
---|---|
Campo | F2_PLIQUI3 e F2_PBRUTO3 |
Campo | F2_PLIQUI4 e F2_PBRUTO4 |
Ponto de Entrada
Descrição: | PE01NFESEFAZ-Ponto de entrada que permite alterar dados de produto/volume/especie/peso liquido/peso bruto na geração do xml para transmitir a nota. | ||||||||
Localização: | BRA | ||||||||
Eventos: | alteração de array aParam para geração de dados do xml e antes da transmissão da nota | ||||||||
Programa Fonte: | NFESEFAZ.PRW | ||||||||
U_XmlNfeSef() | |||||||||
Retorno: |
|
Exemplo
Exemplo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
#include 'protheus.ch' #include 'parmtype.ch' user function PE01NFESEFAZ() Local aProd := PARAMIXB[1] Local cMensCli := PARAMIXB[2] Local cMensFis := PARAMIXB[3] Local aDest := PARAMIXB[4] Local aNota := PARAMIXB[5] Local aInfoItem := PARAMIXB[6] Local aDupl := PARAMIXB[7] Local aTransp := PARAMIXB[8] Local aEntrega := PARAMIXB[9] Local aRetirada := PARAMIXB[10] Local aVeiculo := PARAMIXB[11] Local aReboque := PARAMIXB[12] Local aNfVincRur := PARAMIXB[13] Local aEspVol := PARAMIXB[14] Local aRetorno := {} Local aAreaSB1nPesoLiq := {} Local aAreaSAH := {}0 Local nPesoBr := 0 Local nPesoLiq := 0 Local y x := 0 Local nPos cScan := 0 Local x := 0"1" //O retorno deve ser exatamente nesta ordem e passando o conteúdo completo dos arrays //pois no rdmake nfesefaz é atribuido o retorno completo para as respectivas variáveis //Ordem: // aRetorno[1] -> aProd // aRetorno[2] -> cMensCli // aRetorno[3] -> cMensFis // aRetorno[4] -> aDest // aRetorno[5] -> aNota // aRetorno[6] -> aInfoItem // aRetorno[7] -> aDupl // aRetorno[8] -> aTransp // aRetorno[9] -> aEntrega // aRetorno[10] -> aRetirada // aRetorno[11] -> aVeiculo // aRetorno[12] -> aReboque // aRetorno[13] -> aNfVincRur // aRetorno[14] -> aEspVol aAreaSB1 := SB1->(GetArea())//Salvando area para não perder o posicionamento aAreaSAH := SAH->(GetArea()) dbSelectArea("SB1")//Abrindo Area SB1 Tabela de produto dbSetOrder(1) dbSelectArea("SAH")//Abrindo Area SAH Tabela de unidade de medida dbSetOrder(1) For y := 1 to len(APROD)//Loop que percorre o Array produto para alimentar o peso liquido e peso bruto If SB1->(MsSeek(xFilial("SB1")+APROD[Y][2])) nPesoBr := SB1->B1_PESBRU nPesoLiq := SB1->B1_PESO If SAH->(MsSeek(xFilial("SAH")+APROD[Y][11])) //Condição que verifica unidade de medida para calcular o peso liquido e peso bruto a partir do Volume x unidade de medida. SF2") If SF2->F2_DOC == aNota[2] For x:=1 to Len(aEspVol) cEspecie := Upper(FieldGet(FieldPos("F2_ESPECI"+cScan))) If nPos:= aScan(aEspVol,{|x| alltrim(x[1]) == alltrim(SAH->AH_UMRES)}) cEspecie)}) nPesoLiq := FieldGet(FieldPos("F2_PLIQUI"+cScan)) nPesoBr := FieldGet(FieldPos("F2_PBRUTO"+cScan)) aEspVol[nPos][3] := APROD[Y][9] * nPesoLiq aEspVol[nPos][4] := APROD[Y][9] * nPesoBr EndIf EndIfcScan:=Soma1(cScan,1) EndIf Next RestArea(aAreaSB1)//Devolve Area da tabela SB1 RestArea(aAreaSAH)//Devolve Area da tabela SAH //EndIf //Alimenta array aRtorno que no nfesefaz será o aParam aadd(aRetorno,aProd) aadd(aRetorno,cMensCli) aadd(aRetorno,cMensFis) aadd(aRetorno,aDest) aadd(aRetorno,aNota) aadd(aRetorno,aInfoItem) aadd(aRetorno,aDupl) aadd(aRetorno,aTransp) aadd(aRetorno,aEntrega) aadd(aRetorno,aRetirada) aadd(aRetorno,aVeiculo) aadd(aRetorno,aReboque) aadd(aRetorno,aNfVincRur) aadd(aRetorno,aEspVol) returnReturn(aRetorno) |