Implementación
Paso 1. Generación de estructuras del circuito REC
- Desde el Interpretador de Comandos > ejecute el check correspondiente para generar automáticamente los procesos, campos auxiliares y estructuras requeridas para el circuito de Remito Electrónico Cárnico.
- Luego de la ejecución, realice la verificación de estructuras para aplicar correctamente los cambios en la base de datos.
- Comando a ejecutar: Feadmin.check "rcar"
Paso 2. Creación del Procedimiento Público
- Agregar el Procedimiento Público que actuará como lanzador de la llamada a la función del procesamiento del REC ante ARCA.
- Este procedimiento será responsable de:
- obtener y mapear los datos del remito
- recuperar información fiscal, logística y de transporte
- ejecutar validaciones y logs técnicos
- invocar la función de procesamiento electrónico del REC
- Nombre del Procedimiento Público: FE_WSDATOS_RCAR
Sub RCAR_ProcDocInv()
' Procesamiento de Remito Cárnico Electrónico
' Variables del encabezado del remito
Dim xcodigo, xclase, xremito, xfecha
Dim xtipoComprobante, xtipoMovimiento, xcategoriaEmisor
Dim xpuntoEmision, xcuitTitularMercaderia, xcuitDepositario
Dim xtipoReceptor, xcategoriaReceptor, xcuitReceptor
Dim xcodDomOrigen, xcodDomDestino
' Variables de viaje y transporte
Dim xcuitTransportista, xcuitConductor, xfechaInicioViaje, xdistanciaKm
Dim xdominio, xdominioAcoplado
'******************Datos del Encabezado del Remito****************************
xcodigo = CStr(f.context.cgivar("o1"))
xremito = CStr(f.context.cgivar("xnum"))
'******************Mapeo de Datos para RCAR***********************************
' --- ENCABEZADO DEL REMITO ---
' Obtener tipo de documento desde el puntero
xtipoComprobante = f.traecam("punted", "tipodoc", campo("xpuntero"))
' Tipo de movimiento desde campo auxiliar o default
xtipoMovimiento = campo("C_TIPOMOVRCAR")
If xtipoMovimiento = "" Then xtipoMovimiento = "ENV" ' Default: Envío
' Categoría del emisor desde campo auxiliar
xcategoriaEmisor = f.paramvalue("FE_CATEMISORRCAR")
If xcategoriaEmisor = "" Then xcategoriaEmisor = "1" ' Default
' Punto de emisión
xpuntoEmision = f.traecam("punted", "estacion", campo("xpuntero"))
' CUIT Titular de la mercadería (CUIT propio)
xcuitTitularMercaderia = Replace(f.paramvalue("FE_CUIT"), "-", "")
' CUIT Depositario (opcional)
xcuitDepositario = campo("CUITDEPOSITARIO")
If xcuitDepositario <> "" Then
xcuitDepositario = Replace(xcuitDepositario, "-", "")
End If
' --- RECEPTOR ---
' Tipo receptor desde campo auxiliar: MI=Matadero/Industria, EM=Establecimiento
xtipoReceptor = f.traecam("clientes", "C_TIPORECEPTOR", campo("cliente"))
If xtipoReceptor = "" Then xtipoReceptor = "MI" ' Default
' Categoría receptor desde campo auxiliar
xcategoriaReceptor = f.traecam("clientes", "C_CATRECEPTORRCAR", campo("cliente"))
If xcategoriaReceptor = "" Then xcategoriaReceptor = "1" ' Default
' CUIT del receptor (cliente) - traer desde tabla clientes
If campo("cliente") <> "" Then
xcuitReceptor = f.traecam("clientes", "cuit", campo("cliente"))
xcuitReceptor = Replace(xcuitReceptor, "-", "")
End If
' --- DOMICILIOS ---
' Código domicilio origen (debe estar registrado en ARCA)
xcodDomOrigen = cstr(campo("C_CODDOMORIG"))
' Código domicilio destino (debe estar registrado en ARCA)
xcodDomDestino = cstr(campo("C_CODDOMDEST"))
' --- VIAJE Y TRANSPORTE ---
' CUIT Transportista desde campo auxiliar
xcuitTransportista = f.traecam("expresos", "cot_transportista_cuit", campo("transporte"))
If xcuitTransportista = "" Then
' Si no hay transportista específico, usar CUIT propio
xcuitTransportista = Replace(f.paramvalue("FE_CUIT"), "-", "")
Else
xcuitTransportista = Replace(xcuitTransportista, "-", "")
End If
' CUIT Conductor
xcuitConductor = f.traecam("choferes", "documento", campo("chofer"))
If xcuitConductor <> "" Then
xcuitConductor = Replace(xcuitConductor, "-", "")
End If
' Fecha inicio del viaje desde C_FECHAINIVIAJE
xfechaInicioViaje = campo("C_FECHAINIVIAJE")
If xfechaInicioViaje = "" Or IsNull(xfechaInicioViaje) Then
xfechaInicioViaje = campo("fecha")
End If
' Distancia en kilómetros desde C_DISTANCIAVIAJE
xdistanciaKm = campo("C_DISTANCIAVIAJE")
If xdistanciaKm = "" Then xdistanciaKm = "0"
' --- VEHÍCULO ---
' Dominio/Patente del vehículo desde camion
xdominio = f.traecam("camiones", "patente", campo("camion"))
' Si no hay camión, intentar obtener del transporte
If xdominio = "" Then
If campo("transporte") <> "" Then
xdominio = f.traecam("transpor", "patente", campo("transporte"))
End If
End If
' Dominio acoplado
xdominioAcoplado = f.traecam("camiones", "patente", campo("camion"))
' Fecha del remito
xfecha = campo("fecha")
'******************Logs para debugging****************************************
f.addsystemevent "T", "RCAR_REMITO", "0", "******** REMITO CARNICO ELECTRONICO ********"
f.addsystemevent "T", "RCAR_REMITO", "0", "Codigo: " & xcodigo
f.addsystemevent "T", "RCAR_REMITO", "0", "Clase: " & xclase
f.addsystemevent "T", "RCAR_REMITO", "0", "Remito: " & xremito
f.addsystemevent "T", "RCAR_REMITO", "0", "Fecha: " & xfecha
f.addsystemevent "T", "RCAR_REMITO", "0", "-------------------------------------"
f.addsystemevent "T", "RCAR_REMITO", "0", "Tipo Cbte: " & xtipoComprobante
f.addsystemevent "T", "RCAR_REMITO", "0", "Tipo Mov: " & xtipoMovimiento
f.addsystemevent "T", "RCAR_REMITO", "0", "Categ Emisor: " & xcategoriaEmisor
f.addsystemevent "T", "RCAR_REMITO", "0", "Punto Emision: " & xpuntoEmision
f.addsystemevent "T", "RCAR_REMITO", "0", "-------------------------------------"
f.addsystemevent "T", "RCAR_REMITO", "0", "CUIT Titular: " & xcuitTitularMercaderia
f.addsystemevent "T", "RCAR_REMITO", "0", "CUIT Depositario: " & xcuitDepositario
f.addsystemevent "T", "RCAR_REMITO", "0", "-------------------------------------"
f.addsystemevent "T", "RCAR_REMITO", "0", "Tipo Receptor: " & xtipoReceptor
f.addsystemevent "T", "RCAR_REMITO", "0", "Categ Receptor: " & xcategoriaReceptor
f.addsystemevent "T", "RCAR_REMITO", "0", "CUIT Receptor: " & xcuitReceptor
f.addsystemevent "T", "RCAR_REMITO", "0", "-------------------------------------"
f.addsystemevent "T", "RCAR_REMITO", "0", "Cod Dom Origen: " & xcodDomOrigen
f.addsystemevent "T", "RCAR_REMITO", "0", "Cod Dom Destino: " & xcodDomDestino
f.addsystemevent "T", "RCAR_REMITO", "0", "-------------------------------------"
f.addsystemevent "T", "RCAR_REMITO", "0", "CUIT Transportista: " & xcuitTransportista
f.addsystemevent "T", "RCAR_REMITO", "0", "CUIT Conductor: " & xcuitConductor
f.addsystemevent "T", "RCAR_REMITO", "0", "Fecha Inicio Viaje: " & xfechaInicioViaje
f.addsystemevent "T", "RCAR_REMITO", "0", "Distancia KM: " & xdistanciaKm
f.addsystemevent "T", "RCAR_REMITO", "0", "-------------------------------------"
f.addsystemevent "T", "RCAR_REMITO", "0", "Dominio: " & xdominio
f.addsystemevent "T", "RCAR_REMITO", "0", "Dominio Acoplado: " & xdominioAcoplado
f.addsystemevent "T", "RCAR_REMITO", "0", "-------------------------------------"
f.addsystemevent "T", "RCAR_REMITO", "0", "Cant. Mercaderias: " & (nroOrden - 1)
f.addsystemevent "T", "RCAR_REMITO", "0", "============================================"
' Llamo a la función que procesará el remito en ARCA
FEADMIN.ProcesaGenerarRemito_RCAR _
xcodigo, _
xremito, _
xfecha, _
xtipoComprobante, _
xtipoMovimiento, _
xcategoriaEmisor, _
xpuntoEmision, _
xcuitTitularMercaderia, _
xcuitDepositario, _
xtipoReceptor, _
xcategoriaReceptor, _
xcuitReceptor, _
xcodDomOrigen, _
xcodDomDestino, _
xcuitTransportista, _
xcuitConductor, _
xfechaInicioViaje, _
xdistanciaKm, _
xdominio, _
xdominioAcoplado
End Sub
¿Le ha sido útil este artículo?
¡Qué bien!
Gracias por sus comentarios
¡Sentimos mucho no haber sido de ayuda!
Gracias por sus comentarios
Sus comentarios se han enviado
Agradecemos su esfuerzo e intentaremos corregir el artículo