01. DATOS GENERALES

Línea de producto:

Línea Protheus

Segmento:

Backoffice

País:

Todos

02. DESCRIPCIÓN

El punto de entrada SPEDRTMS tiene como finalidad permitir el manejo con las informaciones involucrando conocimientos de transporte para los clientes que tienen movimientos generados sin integración con el entorno SIGATMS - Gestión de Transportes donde se utiliza para generar el bloque de documentos fiscales II servicio (ICMS)" para los registros: D100, D110, D120, D130, D140, D150, D160, D161, D162 y D190.


Parámetros del punto de entrada:

Nome

Tipo

Descrição

ParamIXB[1]

Numérico

Posición del registro de grabación

ParamIXB[2]

String

String del registro que se grabará

ParamIXB[3]

String

Alias del SFT de procesamiento

ParamIXB[4]

Array

Array de campos de la SFT previamente cargados

Es importante recordar que este punto de entrada permite solamente el manejo del alias del libro fiscal por ítem (SFT). De esta manera, no se puede o se recomienda enviar datos de movimientos diferentes de aquellos presentes en el alias.

03. ESPECIFICACIÓN

Cuando hay integración con el módulo Gestión de Transportes - SIGATMS es necesario que haya registros en la tabla DT6, pero cuando hay movimientos de CTE generados por el módulo Facturación - SIGAFAT (en que no hay registro en el DT6), es necesario utilizar el punto de entrada SPEDRMTS para obtener y componer los registros mencionados anteriormente en el archivo magnético del SPEDFISCAL.

Es importante prestar atención para validaciones pertinentes a cada registro del bloque, según exigencias del GUIA PRÁTICO DEL REGISTRO FISCAL DIGITAL – EFD-ICMS/IPI. Por ejemplo, el registro D100 para el modelo de documento 63 debe mostrar el campo 04 - COD_PART en blanco. El punto de entrada es el medio adecuado para cumplir con esta exigencia (vea a continuación, en la sección 4, ejemplo de tratamiento de esta exigencia con el PE SPEDRTMS).


4. EJEMPLO DE UTILIZACIÓN


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 contenidos en el array aCmpAntSFT:
	//01 - Doc. Fiscal
	//02 - Serie Factura
	//03 - Cliente/Proveedor
	//04 - Código Tienda
	//05 - Fecha Docum
	//06 - Fecha Emisión
	//07 - Fecha Anulación
	//08 - Formulario propio
	//09 - CFOP
	//10 -
	//11 - Alíc. ICMS
	//12 - Nº. PDV
	//13 - Base  ICMS
	//14 - Alíc. ICMS
	//15 - Valor ICMS
	//16 - Valor exento ICMS
	//17 - Otros ICMS
	//18 - ICMS Retenido ST
	//19 - Cuenta contable
	//20 - Tipo Registro
	//21 - Tipo Flete
	//22 - Sucursal
	//23 - Estado/Prov/Reg
	//24 - Observación
	//25 - Clave NFE
	//26 - Tipo Emisión
	//27 - Prefijo
	//28 - Factura de crédito
	//29 - Comprobante fiscal
	//30 - Transportadora
	//31 - Peso bruto
	//32 - Peso neto
	//33 - Vehículo1
	//34 - Vehículo2
	//35 - Vehículo3
	//36 - Optante Simples Nacional
	//37 - Régimen Paraíba
	//38 - Factura original
	//39 - Serie de la factura original
	//40 - Flag del tipo de CTE en la entrada
	//41 - Fecha de recepción para registro extemporáneo de documento fiscal.
	//42 - Clase de documento
	//43 - Tipo Mov.
	//44 - Mensaje de la factura
	//45 - Producto
	//46 - Ítem
	//47 - Fórmula
	//48 - Código del TES
	//49 - Est/Prov/Reg de origen del transporte
	//50 - Municipio de origen del transporte
	//51 - Est/Prov/Reg de destino del transporte
	//52 - Municipio de destino del transporte
	//53 - Subserie de la factura de entrada
	//54 - Est/Prov/Reg de origen del transporte
	//55 - Municipio de origen del transporte
	//56 - Est/Prov/Reg de destino del transporte
	//57 - Municipio de destino del transporte
	//58 - Municipio de destino complemento
	//59 - Clave de acceso SEFAZ/e-CT
	//60 - Documento de transporte
	//61 - Tipo Flete
	//62 - Cantidad de registros encontrados en la GZH
	//63 - Código del producto en la SB1
	//64 - Cuenta contable del producto en la SB1

	If aCmpAntSFT[43] == "S"

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

		cCod_Part   := "SA1"
		cCodMunOri  := SM0->M0_CODMUN
		cCodMunDes  := UfCodIBGE(SA1->A1_EST) + AllTrim(SA1->A1_COD_MUN)

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

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

		cCod_Part   := "SA2"
		cCodMunOri  := UfCodIBGE(SA2->A2_EST) + 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 REG
		AAdd(vLinha,    cInd_Oper)      //02 IND_OPER
		AAdd(vLinha,    cInd_Emit)      //03 IND_EMIT
		AAdd(vLinha,    IIf(cModelo$"63", "", cCod_Part))      //04 COD_PART
		AAdd(vLinha,    AModNot(aCmpAntSFT[42])) //05 COD_MOD
		AAdd(vLinha,    "00")           //06 COD_SIT
		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
		AAdd(vLinha,    "0")            //13 TP_CTe
		AAdd(vLinha,    "")             //14 CHV_CTe_REF
		AAdd(vLinha,    vValDoc)        //15 VL_DOC
		AAdd(vLinha,    0)              //16 VL_DESC
		AAdd(vLinha,    IIf(cModelo$"63", "", aCmpAntSFT[21])) //17 IND_FRT
		AAdd(vLinha,    vValServ)       //18 VL_SERV
		AAdd(vLinha,    vValBSICM)      //19 VL_BC_ICMS
		AAdd(vLinha,    vValICMS)       //20 VL_ICMS
		AAdd(vLinha,    0)              //21 VL_NT
		AAdd(vLinha,    "")             //22 COD_INF
		AAdd(vLinha,    "")             //23 COD_CTA
		AAdd(vLinha,    cCodMunOri)     //24 COD_MUN_ORIG
		AAdd(vLinha,    cCodMunDes)     //25 COD_MUN_DEST
		AAdd(aRet, vLinha)

	ElseIf cReg == "D120"

		AAdd(vLinha,    "D120")         // 01 - REG
		AAdd(vLinha,    cCodMunOri)     // 02 - COD_MUN_ORIG
		AAdd(vLinha,    cCodMunDes)     // 03 - COD_MUN_DEST
		AAdd(vLinha,    "")             // 04 - VEIC_ID
		AAdd(vLinha,    "")             // 05 - UF_ID
		AAdd(aRet, vLinha)

	ElseIf cReg == "D130"

		aAdd(vLinha,	"D130")	    // 01 - REG
		aAdd(vLinha,	cCod_Part )	// 02 - COD_PART_CONSG
		aAdd(vLinha,	cCod_Part )	// 03 - COD_PART_RED
		aAdd(vLinha,	"0")		// 04 - IND_FRT_RED
		aAdd(vLinha,	cCodMunOri)	// 05 - COD_MUN_ORIG
		aAdd(vLinha,	cCodMunDes)	// 06 - COD_MUN_DEST
		aAdd(vLinha,	"")	        // 07 - 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,    "D140")         // 01 - REG
		AAdd(vLinha,    cCod_Part )     // 02 - COD_PART_CONSG
		AAdd(vLinha,    cCodMunOri)     // 03 - COD_MUN_ORIG
		AAdd(vLinha,    cCodMunDes)     // 04 - COD_MUN_DEST
		AAdd(vLinha,    "1")            // 05 - IND_VEIC
		AAdd(vLinha,    "")             // 06 - VEIC_ID
		AAdd(vLinha,    "0")            // 07 - IND_NAV
		AAdd(vLinha,    "")             // 08 - VIAGEM
		AAdd(vLinha,    LTrim(Transform(SF2->F2_VALMERC, "@E 99999999.99"))) // 09 - VL_FRT_LIQ
		AAdd(vLinha,    "")             // 10 - VL_DESP_PORT
		AAdd(vLinha,    "")             // 11 - VL_DESP_CAR_DESC
		AAdd(vLinha,    "")             // 12 - VL_OUT
		AAdd(vLinha,    LTrim(Transform(SF2->F2_VALBRUT, "@E 99999999.99"))) // 13 - VL_FRT_BRT
		AAdd(vLinha,    LTrim(Transform(0.00, "@E 99999999.99"))) // 14 - VL_FRT_MM
		AAdd(aRet, vLinha)

	EndIf

Return aRet
 


05. INFORMACIONES ADICIONALES

       La devolución del punto de entrada debe ser obligatoriamente un array.



Al utilizar este punto de entrada, es muy recomendable que toda la estructura del D100 y archivos secundarios se generen a partir de este. Este punto de entrada una vez activado,  se activa en cada punto de los registros D100, D110, D120, D130, D140, D150, D160, D161, D162 y D190. La utilización de forma parcial puede ocasionar errores imprevistos.