01. DATOS GENERALES


Producto

Línea de producto: 

Segmento:

Módulo:SIGACOM - Compras
Función:
RutinaNombre

M100RICA.PRW

Retención de impuesto RICA.

LOCXFUNA.PRX

Funciones generales de documentos fiscales.

LOCXGEN.PRW

Función genérica para documentos fiscales.

País:Colombia

Ticket:

23854786
Requisito/Story/Issue (informe el requisito vinculado):DMICNS-23878


02. SITUACIÓN/REQUISITO

Se identifica un error en el cálculo del impuesto RC0(Retención del ICA), por ejemplo; si está configurado el Cpo del L.F. (FB_CPOLVRO) igual a 7, los campos F1_VALIMP7, F1_BASIMP7, D1_VALIMP7, D1_BASIMP7, D1_ALQIMP7 quedan con valor 0, como si no se hubieran calculado. 
Se identifica que este error solo sucede con el "MsExecAuto", si se hace desde la rutina manual funciona correctamente, además se hacen pruebas cambiando de campo y no lo graba. 


03. SOLUCIÓN

Se agrega tratamiento para el gravado del cálculo del impuesto RC0 (Retención del ICA) en la rutina "Retención de impuesto RICA (M100RICA.PRW)" cuando se ejecute el "MsExecAuto".


  1. Desarrollar y compilar la rutina automática para la generación de facturas de salida, ver sección "Ejemplo Inclusión".
  2. Configurar el menú para esta rutina, dentro del módulo Configurador (SIGACFG) | Entorno| Menús, agregar la opción en el menú para el módulo de Compras (SIGACOM).
  3. En la rutina de Productos (MATA010) que se encuentra en el menú perteneciente al módulo Compras (Actualizaciones | Archivos) registre un producto.
  4. En la rutina de Proveedores (MATA020) que se encuentra en el menú perteneciente al módulo Compras (Actualizaciones | Archivos) registre un proveedor informando los campos obligatorios, adaptando la información según sean sus necesidades.
  5. En la rutina de Imp. Variables (MATA995) que se encuentra en el menú perteneciente al módulo de Compras (Actualizaciones | Archivos) configurar los impuestos necesarios.
    1. En el caso de la RC0(Retención del ICA) para más información, consulte el apartado 05. ASUNTOS RELACIONADOS.
  6. En la rutina de Tipos de Entrada Y Salida (MATA080) que se encuentra en el menú perteneciente al módulo Compras (Actualizaciones | Archivos) registre una TES de entrada con los impuestos deseados.
  1. Por medio de la rutina Compras (Actualizaciones | Compras)
    1. Dentro del módulo Compras (SIGACOM), acceder a la opción del menú creado para la rutina automática y esperar la ejecución.
    2. Al finalizar la ejecución, acceder a la rutina Compras (SIGACOM), confirme que la factura de entrada se generó.
    3. Validar el cálculo de los impuestos configurados.

Cuando se utiliza el MsExecAuto, la inicialización correcta de la variable Private lMsErrorAuto es el valor .F., si se produce un error durante el ExecAuto, el sistema cambia automáticamente el valor de la variable lMsErrorAuto a .T. y muestra el error.


Ejemplo para facturas de entrada (MATA101N)

#INCLUDE "RWMAKE.CH"
#INCLUDE "TBICONN.CH"   

// Ejemplo de Factura de Entrada - Tipo - Normal //

User Function xMta101n()

    Local aCab          := {}   // Array con datos de encabezado
    Local aLin          := {}   // Array con datos de ítem
    Local aItem         := {}   // Array de ítems
    Local cDoc          := ""   // String con el número de documento
    Private lMsErroAuto := .F.  // Control de ejecución de rutina

    cDoc :=  FWInputBox("Número de Factura", "")    // Informar número de documento, ejemplo: "000000000001"

    // Encabezado   
    AADD( aCab, { "F1_FILIAL"   , xFilial("SF1")    , Nil })
    AAdd( aCab, { "F1_FORNECE"  , "23878 ", Nil })    
    AAdd( aCab, { "F1_LOJA"     , "01"              , Nil })    
    AAdd( aCab, { "F1_SERIE"    , "A"             , Nil })     
    AAdd( aCab, { "F1_DOC"      , cDoc              , Nil })
    AAdd( aCab, { "F1_TIPO"     , "N"               , Nil })
    AAdd( aCab, { "F1_FORMUL"   , "N"               , Nil })
    AAdd( aCab, { "F1_TIPODOC"  , "10"              , Nil })
    AAdd( aCab, { "F1_ESPECIE"  , "NF "             , Nil })
    AAdd( aCab, { "F1_EMISSAO"  , dDataBase         , Nil })
    AAdd( aCab, { "F1_DTDIGIT"  , dDataBase         , Nil })
    AAdd( aCab, { "F1_MOEDA"    , 1                 , Nil })
    AAdd( aCab, { "F1_TXMOEDA"  , 1                 , Nil })
    AAdd( aCab, { "F1_COND"     , "001"             , Nil })
    AAdd( aCab, { "F1_EST"      , "11"              , Nil })
    AAdd( aCab, { "F1_CODMUN"   , "11001"           , Nil })
    AAdd( aCab, { "F1_TPACTIV"  , "4923"             , Nil })
    AAdd( aCab, { "F1_NATUREZ"  , "OTROS"          , Nil })
    AAdd( aCab, { "F1_TIPOPE"   , ""              , Nil })
    AAdd( aCab, { "F1_DUPL"     , cDoc              , Nil })    // Informar título si hay integración financiera
 
    
    // Items    
    AADD( aLin, { "D1_FILIAL"   , xFilial("SD1")    , Nil })
    AADD( aLin, { "D1_ITEM"     , "0001"            , Nil })
    AAdd( aLin, { "D1_COD"      , "000001                        " , Nil })
    AAdd( aLin, { "D1_UM"       , "UN"              , Nil })
    AAdd( aLin, { "D1_QUANT"    , 1                 , Nil })
    AAdd( aLin, { "D1_VUNIT"    , 2000.00        , Nil })
    AAdd( aLin, { "D1_TOTAL"    , 2000.00        , Nil })
    AAdd( aLin, { "D1_TES"      , "244"             , Nil })
    AAdd( aLin, { "D1_CF"       , "111  "             , Nil })
    

    AAdd( aItem, aLin)    

    // Ejecuta Rutina Automática
    MSExecAuto( { |x,y| MATA101N(x,y) }, aCab, aItem, 3 )    

    If lMsErroAuto      
        MsgStop("Error en la grabación de la factura!") 
        MostraErro()    
    Else    
        msgInfo("Factura de Entrada incluida: " + cDoc, "MsExecAuto MATA101N")
    EndIf

Return 


Ejemplo para facturas de entrada (COMA222)

#INCLUDE 'protheus.ch'
 #INCLUDE "FWMVCDEF.CH"
User Function autCom22()
Local oMdlTab
Local aError    := {}
Local cMsj      := "Registrado con exito."
Local cFornece  := "23878 "
Local cLoja     := "01"
Local cDoc      := "090420240002"
Local cSerie    := "A"
       
    SetFunName("COMA222")
     cDoc :=  FWInputBox("Numero de Factura", "") 
    // Se define el modelo LOCX10 
    oMdlTab  := FwLoadModel("LOCX10")
    
    // Se define la operación INSERT en el modelo
    oMdlTab:SetOperation(MODEL_OPERATION_INSERT)
   
    // Se activa el modelo
    oMdlTab:Activate()
    
    //Encabezado - SF1
    oMdlTab:SetValue('SF1_MASTER', "F1_FILIAL"  ,   xFilial("SF1"))
    oMdlTab:SetValue('SF1_MASTER', "F1_FORNECE" ,   cFornece )
    oMdlTab:SetValue('SF1_MASTER', "F1_LOJA"    ,   cLoja )
    oMdlTab:SetValue('SF1_MASTER', "F1_DOC"     ,   cDoc)
    oMdlTab:SetValue('SF1_MASTER', "F1_SERIE"   ,   cSerie)
    oMdlTab:SetValue('SF1_MASTER', "F1_SERIE2"   ,   cSerie)
    oMdlTab:SetValue('SF1_MASTER', "F1_EMISSAO" ,   dDataBase)
    oMdlTab:SetValue('SF1_MASTER', "F1_MOEDA"   ,   1)
  
    oMdlTab:SetValue('SF1_MASTER', "F1_COND"    ,   "001" )
    oMdlTab:SetValue('SF1_MASTER',"F1_CODMUN"   ,  "11001" )
    oMdlTab:SetValue('SF1_MASTER', "F1_TPACTIV" ,   "A011100"  )

    //Detalle Items - SD1
    oMdlTab:SetValue('SD1_DETAIL', "D1_FILIAL"  ,   xFilial("SF1"))
    oMdlTab:SetValue('SD1_DETAIL', "D1_ITEM"    ,   "0001" )
    oMdlTab:SetValue('SD1_DETAIL', "D1_COD"     ,   "000001                        " )
    oMdlTab:SetValue('SD1_DETAIL', "D1_DOC"     ,   cDoc)
    oMdlTab:SetValue('SD1_DETAIL', "D1_QUANT"   ,   1)
    oMdlTab:SetValue('SD1_DETAIL', "D1_VUNIT"   ,   2000)
    oMdlTab:SetValue('SD1_DETAIL', "D1_TOTAL"   ,   2000)
    oMdlTab:SetValue('SD1_DETAIL', "D1_TES"     ,   "085")
    oMdlTab:SetValue('SD1_DETAIL', "D1_CF"      ,   "155  " )
    
  
 
    //Se ejecuta el commit
    If oMdlTab:VldData() // Se detonan las validaciones del modelo
        // Si pasa las validaciones, se ejecutará el CommitData del modelo para guardar los datos.
        oMdlTab:CommitData()
    Endif
 ALERT("FIN")
    // Se obtienen los errores del modelo
    aError := oMdlTab:GetErrorMessage()
    If alltrim(aError[6]) <> ""
        cMsj := aError[6]
    Endif
    ConOut("Mensaje de proceso: " + cMsj)
      
    oMdlTab:DeActivate()
Return
 


04. INFORMACIÓN ADICIONAL




05. ASUNTOS RELACIONADOS