Calcular Retenciones Venta DIAPI SAP B1

Estimados, agradecería mucho si pueden ayudarme con el siguiente tema, estamos implementando SAP B1 9.3 pl05 en Colombia, necesito saber que se necesita para que la factura calcule las retenciones a través de la DIAPI, actualmente la retención se calcula sin problemas cuando se hace manualmente la factura, pero al generar la factura por DIAPI no lo hace.

Quedo atento a sus comentarios.

Gracias,

Prueba asi:

oDoc.WithholdingTaxData.WTCode = "WT01"
oDoc.WithholdingTaxData.Add()

es claro que antes y después hay mas código…

Hola @AldoaMC espero que estés bien, te voy a compartir un poco de código que espero te sirva.

Lo primero sería calcular la base de retención que es el Valor Unitario * Cantidad.

Lo siguiente sería consultar las retenciones que se le deben practicar a dicho cliente, estas se configuran en Módulos, / Socios de Negocio / Dato maestro del socio de negocio / Pestaña Finanzas / Pestaña Impuesto - Retenciones.

SELECT T0.WTCode,
T1.Rate,
T1.BaseType,
T1.PrctBsAmnt,
T1.Account,
T1.U_Tipo,
T1.U_TipoRet,
T1.U_es_Cree,
T1.U_HBT_MunMed,
T1.U_HBT_TipRet,
T1.U_HBT_BasMin,
T1.U_HBT_TipRetMM,
T1.U_HBT_Afecta,
T1.U_HBT_TipoAutoRet,T1.U_HBT_RtncionAsumida FROM CRD4 T0  INNER JOIN OWHT T1 ON T1.WTCode = T0.WTCode 
WHERE CardCode = 'CardCode' AND T1.Inactive <> 'Y'

Luego hago un Foreach de los datos de esta consulta, y empiezo a ponerlos en el businessObject

businessObject.WithholdingTaxData.WTCode = Convert.ToString(rrow["WTCode"]);                                                    businessObject.WithholdingTaxData.TaxableAmount = Math.Round(baseRetencion * (Convert.ToDouble(rrow["PrctBsAmnt"]) / 100), 2);                                                    businessObject.WithholdingTaxData.WTAmount = Math.Round(baseRetencion * (Convert.ToDouble(rrow["PrctBsAmnt"]) / 100), 2);                                                    businessObject.WithholdingTaxData.UserFields.Fields.Item("U_HBT_BaseRet").Value = baseRetencion;                                                    businessObject.WithholdingTaxData.UserFields.Fields.Item("U_HBT_TipoCalculoRet").Value = "A";
businessObject.WithholdingTaxData.Add();
sumRetenciones += Math.Round(baseRetencion * (Convert.ToDouble(rrow["PrctBsAmnt"]) / 100), 2);

Espero que te sirva de algo, nos avisas.

3 Me gusta

También habría que mirar que Localización estás usando, ese ejemplo que te pasé es para la LOCALIZACIÓN HBT - HESIOHN.

Estimado leonardo70338, gracias por su pronta respuesta, favor ayudarme a aclarar las siguientes dudas:

¿que diferencia puede haber en el calculo de retenciones entre una localización y otra?
¿el calculo de retenciones lo realiza cada localización de cada país y no es nativo de SAP?

Gracias,

Hola @AldoaMC
Creo que deberías crear otro post. para conservar el orden en los temas.
Como bien conoces en Colombia se trabaja en base a la localización de Chile, donde existen elementos comunes y diferencias. estas diferencias se manejan por medio de un addon de localización creado por partners locales. Básicamente las diferencias son las siguientes:

  1. Manejo de retenciones con topes mínimos de compra o venta (reteFuente, reteIVA)
  2. Manejo de reteICA, el cual se calcula en base a la ciudad donde se efectuá la operación.
  3. Manejo de autoRetenciones, lo cual aplica para grandes empresas que tienen unas cualidades tributarias especiales, donde los clientes no pueden realizarle retenciones y en su lugar el mismo las aplica y las reporta ante la dirección de impuestos.
    A nivel de finanzas existen mas diferencias, pero específicamente en retenciones es lo que te comento anteriormente.

Saludos,
Andres Ramirez Jaramillo :colombia:

2 Me gusta

estimado andresramirez, agradezco mucho tu aclaración.

Gracias.

Hola @AldoaMC no, las retenciones se calculan igual obviamente, pero como dice @andresramirez debes tener en cuenta esto factores que él describe, a lo que me refiero con el tema de LOCALIZACIÓN, es que si quieres por ejemplo ingresar una Factura de Venta vía DI API, también debes tener en cuenta llenar los campos y tablas definidas por usuario que pertenecen al proveedor de LOCALIZACIÓN, puesto que dicho proveedor debe tener unos módulos en los que saques informes hechos por ellos, y que si no estás incluyendo información en las tablas de ellos o los campos de ellos, no van a salir información, pero como te aclaro, son informes propios del Proveedor de la LOCALIZACIÓN.

Estimado @leonardo70338, muchas gracias por la información, logre generar las retenciones por DIAPI, ahora si es posible me puedas ayudar a generar los gastos adicionales que entiendo se aplica en todas las ventas.

Muchas gracias por tu valiosa ayuda.

Con mucho gusto @AldoaMC te refieres a los Expenses?

Estimado @leonardo70338, si, me refiero a los Expenses y que se informan en la tabla INV3.

Gracias,

Estimado, realice la siguiente prueba sin resultado, favor de su ayuda para poder detectar donde esta el problema:

El código que crea registro en INV3 (Expenses) es el siguiente:

factura.Expenses.TaxCode = Convert.ToString(AutoRetenc["TaxCode"]);
factura.Expenses.DistributionMethod = SAPbobsCOM.BoAdEpnsDistribMethods.aedm_None;
factura.Expenses.ExpenseCode = Convert.ToInt16(AutoRetenc["ExpnsCode"]);  //código de la auto-retención definida en tabla OEXD
factura.Expenses.LineTotal = Math.Round(vLineTotal * (Convert.ToDouble(AutoRetenc["PrctBsAmnt"]) / 100), 2); //valor neto de la factura * %auto-retención
factura.Expenses.WTLiable = BoYesNoEnum.tNO;
factura.Expenses.Add();

Gracias por su ayuda.

Estimados, con el código anterior muestra el siguiente error.

There is a difference between the document total and its components. [OINV.DocTotal][line: 0]

Nota: en el campo LineTotal estoy dejando el monto de la retención.

Gracias por su ayuda.

@AldoaMC que pena demorarme tanto con la respuesta, he estado un poco ocupado. en un par de días te envío el código.

Estimado @leonardo70338, muy agradecido.

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.