Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.


01. DADOS GERAIS

Linha de Produto:

Linhas_totvs
LinhaLinha Protheus

Segmento:

Segmentos_totvs
SegmentoBackoffice

País:Todos

02. DESCRIÇÃO

O ponto de entrada SPEDRTMS permite tem como finalidade permitir a manipulação do registro D100 do SPEDFISCAL com os com as informações envolvendo Conhecimentos de Transporte para os clientes que possuem movimentos gerados sem integração com o ambiente SIGATMS - Gestão de Transportes

03. ESPECIFICAÇÃO

Quando há integração com o módulo Gestão de Transportes - SIGATMS é necessário que haja registros na tabela DT6, mas quando há movimentos de CTE gerados pelo módulo Faturamento - SIGAFAT (em que não há registro no DT6), faz-se necessário o uso do ponto de entrada SPEDRMTS para obter e compor os registros D100 no arquivo magnético do SPEDFISCAL.

4. EXEMPLO DE UTILIZAÇÃO

sendo utilizado na geração do Bloco documentos fiscais II serviço (ICMS)" para os Registros: D100, D110, D120, D130, D140, D150, D160, D161, D162 e D190.


Parâmetros do ponto de entrada:

Nome

Tipo

Descrição

ParamIXB[1]NuméricoPosição do registro de gravação
ParamIXB[2]StringString do registro que será gravado
ParamIXB[3]StringAlias do SFT de processamento
ParamIXB[4]ArrayArray de campos da SFT previamente carregados
Aviso
titleImportante

É importante lembrar que este ponto de entrada permite apenas a manipulação do alias do livro fiscal por item (SFT). Desse modo, não é possível ou recomendado enviar dados de movimentos diferentes daqueles presentes no alias.

03. ESPECIFICAÇÃO

Quando há integração com o módulo Gestão de Transportes - SIGATMS é necessário que haja registros na tabela DT6, mas quando há movimentos de CTE gerados pelo módulo Faturamento - SIGAFAT (em que não há registro no DT6), faz-se necessário o uso do ponto de entrada SPEDRMTS para obter e compor os registros mencionados anteriormente no arquivo magnético do SPEDFISCAL.

Aviso
titleImportante

É importante se atentar para validações pertinentes a cada registro do bloco, conforme exigências do GUIA PRÁTICO DA ESCRITURAÇÃO FISCAL DIGITAL – EFD-ICMS/IPI. Por exemplo, o registro D100 para o modelo de documento 63 deve apresentar o campo 04 - COD_PART em branco. O ponto de entrada é o meio adequado para atender a esta exigência (vide abaixo, na seção 4, exemplo de tratamento desta exigência com o PE SPEDRTMS).

Image Added


4. EXEMPLO DE UTILIZAÇÃO


Bloco de código
languagejava
themeRDark
titleSPEDRTMS
linenumberstrue
#INCLUDE "PROTHEUS.CH"

User Function SPEDRTMS()

	Local vLinha     := {}
	// Local nPos       := ParamIXB[1]
	Local cReg       := ParamIXB[2]
	// Local cAlias     := ParamIXB[3]
	Local aCmpAntSFT := ParamIXB[4]
	Local aRet       := {}
	Local vValServ   := "0"
	Local vValDoc    := "0"
	Local vValICMS   := "0"
	Local vValBSICM  := "0"
	Local cCod_Part  := ""
	Local cCodMunOri := ""
	Local cCodMunDes := ""
	Local cInd_Oper  := ""
	Local cInd_Emit  := ""
	Local cModelo    := AModNot(aCmpAntSFT[42])

	//Campos contidos no array aCmpAntSFT:
	//01 - Doc. Fiscal
	//02 - Serie NF
	//03 - Cliente/Fornecedor
	//04 - Código Loja
	//05 - Data Docto
	//06 - Data Emissão
	//07 - Data Cancelamento
	//08 - Formulário Próprio
	//09 - CFOP
	//10 -
	//11 - Alíq. ICMS
	//12 - Nro. PDV
	//13 - Base  ICMS
	//14 - Alíq. ICMS
	//15 - Valor ICMS
	//16 - Valor Isento ICMS
	//17 - Outros ICMS
	//18 - ICMS Retido ST
	//19 - Conta Contábil
	//20 - Tipo Lançamento
	//21 - Tipo Frete
	//22 - Filial
	//23 - Estado
	//24 - Observação
	//25 - Chave NFE
	//26 - Tipo Emissão
	//27 - Prefixo
	//28 - Duplicata
	//29 - Cupom Fiscal
	//30 - Transportadora
	//31 - Peso Bruto
	//32 - Peso Liquido
	//33 - Veiculo1
	//34 - Veiculo2
	//35 - Veiculo3
	//36 - Optante Simples Nacional
	//37 - Regime Paraíba
	//38 - Nota Fiscal Original
	//39 - Serie da Nota fiscal original
	//40 - Flag de tipo de CTE na entrada
	//41 - Data de Recebimento para Lançamento extemporâneo de documento fiscal.
	//42 - Espécie do Documento
	//43 - Tipo Mov.
	//44 - Mensagem da Nota Fiscal
	//45 - Produto
	//46 - Item
	//47 - Formula
	//48 - Código da TES
	//49 - UF de Origem do Transporte
	//50 - Município de Origem do Transporte
	//51 - UF de Destino do Transporte
	//52 - Município de Destino do Transporte
	//53 - Sub Série da nota fiscal de entrada
	//54 - UF de Origem do Transporte
	//55 - Município de Origem do Transporte
	//56 - UF de Destino do Transporte
	//57 - Município de Destino do Transporte
	//58 - Município de Destino Complemento
	//59 - Chave de Acesso SEFAZ/CTe
	//60 - Documento de Transporte
	//61 - Tipo Frete
	//62 - Quantidade de registros encontrados na GZH
	//63 - Código do Produto na SB1
	//64 - Conta Contábil do Produto na SB1

	If aCmpAntSFT[43] == "S"

		DbSelectArea("SA1")
		SA1->(DBSetOrder(1))
		SA1->(DBSeek(XFilial("SA1")
Bloco de código
languagejava
themeRDark
titleSPEDRTMS
linenumberstrue
User Function SPEDRTMS()

    Local vLinha     := {}
    Local nPos       := ParamIXB[1]
    Local cReg       := ParamIXB[2]
    Local cAlias     := ParamIXB[3]
    Local aCmpAntSFT := ParamIXB[4]
    Local aRet       := {}
    Local vValServ   := 0
    Local vValDoc    := 0
    Local vValICMS   := 0
    Local vValBSICM  := 0
    Local cCodPart   := ""

    //Campos contidos no array aCmpAntSFT:
    //01 - Doc. Fiscal
    //02 - Serie NF
    //03 - Cliente/Fornecedor
    //04 - Codigo Loja
    //05 - Data Docto.
    //06 - Data Emissao
    //07 - Data Canc.
    //08 - Formulario Proprio
    //09 - CFOP
    //10 - 
    //11 - Aliq. ICMS
    //12 - Nro. PDV
    //13 - Base  ICMS
    //14 - Aliq. ICMS
    //15 - Valor ICMS
    //16 - Valor Isento ICMS
    //17 - Outros ICMS
    //18 - ICMS Retido ST
    //19 - Conta Contabil
    //20 - Tipo Lancamento
    //21 - Tipo Frete
    //22 - Filial
    //23 - Estado
    //24 - Observacao
    //25 - Chave NFE
    //26 - Tipo Emissao
    //27 - Prefixo
    //28 - Duplicata
    //29 - Cupom Fiscal
    //30 - Transportadora
    //31 - Peso Bruto
    //32 - Peso Liquido
    //33 - Veiculo1
    //34 - Veiculo2
    //35 - Veiculo3
    //36 - Optante Simples Nacional
    //37 - Regime Paraiba
    //38 - Nota Fiscal Original
    //39 - Serie da Nota fiscal original
    //40 - Flag de tipo de CTE na entrada
    //41 - Data de Recebimento para Lançamento extemporâneo de documento fiscal.
    //42 - Especie do Documento
    //43 - Tipo Mov.
    //44 - Mensagem da Nota Fiscal
    //45 - Produto
    //46 - Item
    //47 - Formula
    //48 - Código da TES
    //49 - UF de Origem do Transporte
    //50 - Municipio de Origem do Transporte
    //51 - UF de Destino do Transporte
    //52 - Municipio de Destino do Transporte
    //53 - Sub Série da nota fiscal de entrada
    //54 - UF de Origem do Transporte
    //55 - Municipio de Origem do Transporte
    //56 - UF de Destino do Transporte
    //57 - Municipio de Destino do Transporte
    //58 - Municipio de Destino Complemento

    If aCmpAntSFT[43] == "S"
        
        DbSelectArea("SA1")
        SA1->(DBSetOrder(1))
        SA1->(DBSeek(XFilial("SA1") + aCmpAntSFT[3] + aCmpAntSFT[4]))

        cCodPart  := "SA1"

        DbSelectArea("SF2")
        SF2->(DBSetOrder(1))
        SF2->(DBSeek(XFilial("SF2") + aCmpAntSFT[1] + aCmpAntSFT[2] + aCmpAntSFT[3] + aCmpAntSFT[4]))
   

		cCod_Part   :=  
"SA1"
		cCodMunOri  := SM0->M0_CODMUN
		cCodMunDes     cCodPart:= UfCodIBGE(SA1->A1_EST) += SF2->(F2_FILIAL+F2_CLIENTE+F2_LOJA)
    Else
        DbSelectArea("SA2")
        SA2AllTrim(SA1->A1_COD_MUN)

		DbSelectArea("SF2")
		SF2->(DBSetOrder(1))
        SA2		SF2->(DBSeek(XFilial("SA2SF2") + aCmpAntSFT[31] + aCmpAntSFT[4]))

        cCodPart  := "SA2"

        DbSelectArea("SF1")
        SF12] + aCmpAntSFT[3] + aCmpAntSFT[4]))

		cCod_Part += SF2->(F2_FILIAL+F2_CLIENTE+F2_LOJA)
	Else
		DbSelectArea("SA2")
		SA2->(DBSetOrder(1))
        SF1))
		SA2->(DBSeek(XFilial("SF1SA2") + aCmpAntSFT[1] + aCmpAntSFT[2] + aCmpAntSFT[3] + aCmpAntSFT[4]))

		cCod_Part   := "SA2"
		cCodMunOri    cCodPart:= UfCodIBGE(SA2->A2_EST) += SF1->(F1_FILIAL+F1_FORNECE+F1_LOJA)

    EndIf

    If cReg == "D140"
        
        AAdd(vLinha,    "D140")         // 01 - REG
        AAdd(vLinha,    cCodPart)       // 02 - COD_PART_CONSG
        AAdd(vLinha,    aCmpAntSFT[50]) // 03 - COD_MUN_ORIG
        AAdd(vLinha,    aCmpAntSFT[57]) // 04 - COD_MUN_DEST
        AAdd(vLinha,    "1")            // 05 - IND_VEIC
        AAdd(vLinha,    "")             // 06 - VEIC_ID
        AAdd(vLinha,    "0")            // 07 - IND_NAV
        AllTrim(SA2->A2_COD_MUN)
		cCodMunDes  := SM0->M0_CODMUN

		DbSelectArea("SF1")
		SF1->(DBSetOrder(1))
		SF1->(DBSeek(XFilial("SF1") + aCmpAntSFT[1] + aCmpAntSFT[2] + aCmpAntSFT[3] + aCmpAntSFT[4]))

		cCod_Part += SF1->(F1_FILIAL+F1_FORNECE+F1_LOJA)
	EndIf

	If cReg == "D100"

		If  aCmpAntSFT[43] == "S"

			cInd_Oper := "1"
			cInd_Emit := "0"

			vValServ  := LTrim(Transform(F2_VALMERC + F2_FRETE + F2_VALICM, "@E 99999999.99"))
			vValDoc   := LTrim(Transform(F2_VALBRUT, "@E 99999999.99"))
			vValICMS  := LTrim(Transform(F2_VALICM , "@E 99999999.99"))

		Else

			cInd_Oper := "0"
			cInd_Emit := "1"

			vValServ := LTrim(Transform(F1_VALMERC + F1_FRETE + F1_VALICM, "@E 99999999.99"))
			vValDoc  := LTrim(Transform(F1_VALBRUT, "@E 99999999.99"))
			vValICMS := LTrim(Transform(F1_VALICM , "@E 99999999.99"))

		EndIf

		DbSelectArea("SF3")
		SF3->(DBSetOrder(1))
		SF3->(DBSeek(XFilial("SF3") + DtoS(aCmpAntSFT[6]) + aCmpAntSFT[1] + aCmpAntSFT[2] + aCmpAntSFT[3] + aCmpAntSFT[4]))

		vValBSICM := LTrim(Transform(F3_VALCONT, "@E 99999999.99"))

		AAdd(vLinha,    "D100")             //01 08 - VIAGEM
        REG
		AAdd(vLinha,    cInd_Oper)   LTrim(Transform(SF2->F2_VALMERC, "@E 99999999.99"))) // 09 - VL_FRT_LIQ
02 IND_OPER
		AAdd(vLinha,    cInd_Emit)        //03 IND_EMIT
		AAdd(vLinha,    IIf(cModelo$"63")       , "", cCod_Part))      //04 10 - VL_DESP_PORT
COD_PART
		AAdd(vLinha,    AModNot(aCmpAntSFT[42]))    //05 COD_MOD
		AAdd(vLinha,    "00")             //06 11 - VL_DESP_CAR_DESC
COD_SIT
		AAdd(vLinha,    aCmpAntSFT[2])    //07 SER
		AAdd(vLinha,    "")             // 12 - VL_OUT
        08 SUB
		AAdd(vLinha,    LTrim(Transform(SF2->F2_VALBRUT, "@E 99999999.99")))aCmpAntSFT[1])  // 13 - VL_FRT_BRT
09 NUM_DOC
		AAdd(vLinha,    aCmpAntSFT[25])    //10 CHV_CTE
		AAdd(vLinha,    LTrim(Transform(SF2->(F2_AFRMM1+F2_AFRMM2), "@E 99999999.99"))) // 14 - VL_FRT_MM
        AAdd(aRet, vLinha)

    ElseIf cReg == "D100"

aCmpAntSFT[5])  //11 DT_DOC
		AAdd(vLinha,    aCmpAntSFT[5])  //12 DT_A_P
		AAdd(vLinha,    "0")          If aCmpAntSFT[43] == "S"
 //13 TP_CTe
		AAdd(vLinha,    "")        
     //14 CHV_CTe_REF
		AAdd(vLinha,    vValDoc)  vValServ  := LTrim(Transform(F2_VALMERC + F2_FRETE + F2_VALICM, "@E 99999999.99"))
 //15 VL_DOC
		AAdd(vLinha,    0)               vValDoc//16 VL_DESC
		AAdd(vLinha,   := LTrim(Transform(F2_VALBRUTIIf(cModelo$"63", ""@E 99999999.99", aCmpAntSFT[21]))
 //17 IND_FRT
		AAdd(vLinha,     vValServ)     vValICMS  := LTrim(Transform(F2_VALICM, "@E 99999999.99"))

//18 VL_SERV
		AAdd(vLinha,    vValBSICM)        Else
//19 VL_BC_ICMS
		AAdd(vLinha,    vValICMS)       //20 VL_ICMS
		AAdd(vLinha,    0)         vValServ := LTrim(Transform(F1_VALMERC + F1_FRETE + F1_VALICM, "@E 99999999.99"))
 //21 VL_NT
		AAdd(vLinha,    "")            vValDoc  := LTrim(Transform(F1_VALBRUT, "@E 99999999.99"))
//22 COD_INF
		AAdd(vLinha,    "")            vValICMS := LTrim(Transform(F1_VALICM, "@E 99999999.99"))

  //23 COD_CTA
		AAdd(vLinha,    cCodMunOri)      EndIf

//24 COD_MUN_ORIG
		AAdd(vLinha,        DbSelectArea("SF3")
 cCodMunDes)     //25  SF3->(DBSetOrder(1))
    COD_MUN_DEST
		AAdd(aRet, vLinha)

	ElseIf cReg == "D120"

		AAdd(vLinha,    SF3->(DBSeek(XFilial("SF3"D120")  + DtoS(aCmpAntSFT[6]) + aCmpAntSFT[1]  + aCmpAntSFT[2] + aCmpAntSFT[3] + aCmpAntSFT[4]))

   // 01 - REG
		AAdd(vLinha,    cCodMunOri)     // vValBSICM02 := LTrim(Transform(F3_VALCONT, "@E 99999999.99"))

- COD_MUN_ORIG
		AAdd(vLinha,    cCodMunDes)     // 03 - COD_MUN_DEST
		AAdd(vLinha,    "D100")         //01 REG
   // 04    - VEIC_ID
		AAdd(vLinha,    "1")             //02 IND_OPER
        AAdd(vLinha,    "0") 05 - UF_ID
		AAdd(aRet, vLinha)

	ElseIf cReg == "D130"

		aAdd(vLinha,	"D130")	    // 01 - REG
		aAdd(vLinha,	cCod_Part )	// 02   //03 IND_EMIT
        AAdd(vLinha,    cCodPart)       //04- COD_PART_CONSG
		aAdd(vLinha,	cCod_Part )	// 03 - COD_PART
        AAdd_RED
		aAdd(vLinha,    "57	"0")		// 04          //05 COD_MOD
        AAdd(vLinha,    "00")           //06 COD_SIT
- IND_FRT_RED
		aAdd(vLinha,	cCodMunOri)	// 05 - COD_MUN_ORIG
		aAdd(vLinha,	cCodMunDes)	// 06 - COD_MUN_DEST
		aAdd(vLinha,	"")	        // 07  AAdd(vLinha,    aCmpAntSFT[2])  //07 SER
        AAdd(vLinha,    "")             //08 SUB
        AAdd(vLinha,    aCmpAntSFT[1])  //09 NUM_DOC
        AAdd(vLinha,    aCmpAntSFT[25]) //10 CHV_CTE
        AAdd(vLinha,    aCmpAntSFT[5])  //11 DT_DOC
        AAdd(vLinha,    aCmpAntSFT[5])  //12 DT_A_P
        - VEIC_ID
		aAdd(vLinha,	LTrim(Transform(SF2->F2_VALMERC, "@E 99999999.99")))			// 08 - VL_LIQ_FRT
		aAdd(vLinha,	0)			// 09 - VL_SEC_CAT
		aAdd(vLinha,	0)			// 10 - VL_DESP
		aAdd(vLinha,	0)			// 11 - VL_PEDG
		aAdd(vLinha,	0)			// 12 - VL_OUT
		aAdd(vLinha,	LTrim(Transform(SF2->F2_VALBRUT, "@E 99999999.99")))			// 13 - VL_FRT
		aAdd(vLinha,	"")         // 14 - UF_ID
		AAdd(aRet, vLinha)

	ElseIf cReg == "D140"

		AAdd(vLinha,    0)           "D140")   //13 TP_CTe
     // 01 - REG
		AAdd(vLinha,    cCod_Part "")     // 02 - COD_PART_CONSG
		AAdd(vLinha,    cCodMunOri) //14 CHV_CTe_REF
   // 03    - COD_MUN_ORIG
		AAdd(vLinha,    vValDoc)   cCodMunDes)     //15 VL_DOC
         04 - COD_MUN_DEST
		AAdd(vLinha,    0"1")            // 05 //16- VLIND_DESC
        VEIC
		AAdd(vLinha,    "1")             //17 IND_FRT
         06 - VEIC_ID
		AAdd(vLinha,    vValServ"0")        //18 VL_SERV
     // 07 - IND_NAV
		AAdd(vLinha,    vValBSICM"")       //19 VL_BC_ICMS
     // 08 - VIAGEM
		AAdd(vLinha,    vValICMS)       //20 VL_ICMS
        LTrim(Transform(SF2->F2_VALMERC, "@E 99999999.99"))) // 09 - VL_FRT_LIQ
		AAdd(vLinha,    0"")              //21 10 - VL_DESP_NT
        PORT
		AAdd(vLinha,    "")             //22 COD_INF
     // 11 - VL_DESP_CAR_DESC
		AAdd(vLinha,    "")             //23 COD_CTA
         12 - VL_OUT
		AAdd(vLinha,    SM0->M0_CODMUN) //24 COD_MUN_ORIG
        LTrim(Transform(SF2->F2_VALBRUT, "@E 99999999.99"))) // 13 - VL_FRT_BRT
		AAdd(vLinha,    UfCodIBGE(aCmpAntSFT[56]) + AllTrim(aCmpAntSFT[57]LTrim(Transform(0.00, "@E 99999999.99"))) //25 COD_MUN_DEST
         14 - VL_FRT_MM
		AAdd(aRet, vLinha)
    
    EndIf

Return(aRet)

05. INFORMAÇÕES ADICIONAIS

        Parâmetros do ponto de entrada:

...

Nome

...

Tipo

...

Descrição

...


	EndIf

Return aRet


05. INFORMAÇÕES ADICIONAIS

       O retorno do ponto de entrada deverá ser obrigatoriamente um array.



Aviso
titleImportante

Ao utilizar este ponto de entrada, é altamente recomendado que toda a estrutura do D100 e filhos sejam gerados a partir dele. Este ponto de entrada uma vez ativado, é chamado em cada ponto dos registros D100, D110, D120, D130, D140, D150, D160, D161, D162 e D190. A utilização de forma parcial poderá acarretar em erros imprevistos

Informações
titleRetorno

O retorno do ponto de entrada deverá ser obrigatoriamente um array.