Skip to main content

Notifications

Dynamics 365 Community / Blogs / Axapta todo es posible / AX 2012 R2: Error al elimin...

AX 2012 R2: Error al eliminar Historial de facturas y coincidencias de Orden de compra.

Escenario

En un ambiente con el control presupuestario activado establece una serie de controles que se aplican a los documentos, este control ha presentado varios problemas al momento de eliminar y registrar una factura de OC que en un principio generó algún error estándar y por su naturaleza no implica que el proceso estándar realice el control de presupuestos al documento.

 

El mensaje de error es el siguiente:

Descripción de error SQL: [Microsoft][SQL Server Native Client 10.0][SQL Server]BudgetControlProcessProc ( in SysRaiseErrorProc): Trying:exec BudgetControlCheckBudgetProc :BudgetControlCheckBudgetProc: Trying:No BudgetSource rows for BudgetCheckGroup = 5637151459: at line unknown at line 67

 

Análisis del problema

Durante el seguimiento y análisis del problema se pudo identificar que el control presupuestario ejecuta un procedimiento almacenado (store procedure BudgetControlCheckBudgetProc) el cual se encarga de aplicar los controles que los documentos deben reunir antes de realizar cualquier operación en Axapta.

El procedimiento almacenado BudgetControlCheckBudgetProc  realiza la consulta a las siguientes tablas:

[BUDGETSOURCETRACKINGDETAIL]

[BUDGETSOURCETRACKING]

[BUDGETSOURCE]

[BUDGETCONTROLCONFIGURATION]

[BUDGETCONTROLRULE]

[BudgetControlCycleView] (Vista SQL)

[BUDGETGROUPMEMBER]

[BUDGETGROUP]

 

El sistema al no encontrar información de la consulta provoca que se emita el error reportado.

 

Solución

 Modificación de la clase estándar BudgetControlProcessor, esta modificación debe permitir realizar la consulta a la tabla BUDGETSOURCETRACKINGDETAIL y verificar si tiene información de seguimiento del presupuesto, en caso de no encontrar información no deberá realizar el control del presupuesto del documento.

  1. Crear método checkBudgetFix
  2. Modificar método estándar processForBudgetControl para invocar al nuevo método.

 

/// <summary>
/// Ismael Utitiaj A.
/// consulta para identificar si el documento debe realizar control presupuestario.
/// </summary>
/// <returns>
///
/// </returns>
/// <remarks>
///
/// </remarks>

private boolean checkBudgetFix()
{

    BudgetSourceTracking sourceTracking;
    BudgetSourceTrackingDetail sourceTrackingDetail;

    ;

    //consulta detalle de seguimiento
    select RecId from sourceTrackingDetail
    join sourceTracking
    where sourceTracking.RecId == sourceTrackingDetail.BudgetSourceTracking
        && sourceTracking.BudgetSource == budgetCheckGroup;

    return sourceTrackingDetail.RecId;


}
 

/// <summary>
/// Ismael Utitiaj A.
/// llamada verificacion de control presupuestario en documentos con error y que no debe realizar
/// la comprobacion de presupuesto
/// Invokes the stored procedure for performing the budget check.
/// </summary>
/// <returns>
///    A Boolean that indicates whether the stored procedure completed successfully.
/// </returns>
protected boolean processForBudgetControl()
{
    boolean isStoredProcedureSuccessful = true;

    // The stored procedure must be called in the case where pending deletions are prepared or return details or
    // relieving details are prepared regardless of whether there are control details to be checked
    //if (this.areProcessingDetailsPrepared()) //.oldLine
    if (this.areProcessingDetailsPrepared() && this.checkBudgetFix()) //linenew
    {
        isStoredProcedureSuccessful = BudgetControlProcessor::invokeBudgetCheckStoredProcedure(
            budgetCheckGroup,
            areRelievingDetailsPrepared || areRelievingPendingDeletionsPrepared);
    }

    return isStoredProcedureSuccessful;
}

Comments

*This post is locked for comments