SAP B1 SDK Error JournalEntry

Buenas tardes equipo de MEGA EXPERTOS en SAP B1 y SDK… xD (yo soy un completo novato que tengo más de 8 años sin programar y me ha tocado hacer un par de cambios a un AddOn viejo)…

Bueno les comento un poco mi problema.

En mi empresa usan 2 BD de empresas vamos a llamarla BD1 y BD2.

En la BD1 tienen un AddOn que funciona bien y hace unas cargas de nómina y crea la Poliza del pago de la nómina.

Este Addon Me están pidiendo lo ponga a funcionar en la BD2 con un par de cambios (ahora va a manejar 2 campos adicionales de Centros de Costo).

Bien. El addon ya lo modifiqué.

Si este AddOn modificado, lo corro en una BD de pruebas de BD1 (Llamemoslo BD1P), funciona a la perfección. Busca la información, hace los cálculos y todo perfecto. (incluso agrega los centros de costo ya configurados también en esta BD1P).

Pero cuando corro el AddOn en la BD2P me arroja un mensaje de error en la acción de:
Journalentry.add()

El error es: “-5002 - No tiene autorización para modificar las fechas a nivel de línea”.

El problema es que en el código NO modifico la fecha de ninguna linea, solo de cabecera para ponerle la fecha de contabilización. Otra cosa es como les digo en BD1P no arroja dicho error.

Esto me da a entender que debe ser un tema con las cuentas contables (aquí si son diferentes entre las 2 BD). la cosa es que no se que revisar de las cuentas. Todas están activas y no tienen “fecha de inactivo” o algo así.

¿Qué me recomiendan buscar?

Copio la parte del código donde arroja el error por si me está faltando algo y no lo sé.

'Antes de todo esto valida que los campos estén llenos y demás
 '--- realizar consulta
            oRecSet = cSBOCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset)
            oRecSet.DoQuery(CommonFunc.SQLSentence(1, stAño, stPeriodoID, stPeriodo, stTipoNom, stCentroID))
            If oRecSet.RecordCount = 0 Then
                cSBOApplication.MessageBox("No se encontraron registros para generar poliza.")
                Exit Function
            End If
            oRecSet.MoveFirst()

            oPoliza = cSBOCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oJournalEntries)
'el campo fecha estaba en txt lo paso a formato esto no estaba antes es nuevo y lo realicé para validar no fuera formato de fecha

            Dim stFechaFinal As Date
            stFechaFinal = Format(CDate(stFecha), "dd/MM/yyyy")

            'Cabecera
            oPoliza.ReferenceDate = stFechaFinal
            oPoliza.DueDate = stFechaFinal
            oPoliza.TaxDate = stFechaFinal
            oPoliza.Memo = stMemo
            oPoliza.Reference = stRef
            oPoliza.Series = 25

            'Detalle
            oPoliza.Lines.SetCurrentLine(0)
            For i = 1 To oRecSet.RecordCount

                'oPoliza.Lines.AccountCode = oRecSet.Fields.Item("Cuenta Mayor").Value
                oPoliza.Lines.ShortName = oRecSet.Fields.Item("Cuenta Mayor").Value
                oPoliza.Lines.Reference1 = stRef
                If CDbl(oRecSet.Fields.Item("Percepcion").Value) <> 0 Then
                    oPoliza.Lines.Debit = CDbl(oRecSet.Fields.Item("Percepcion").Value)
                    oPoliza.Lines.Credit = 0.0
                Else
                    oPoliza.Lines.Debit = 0.0
                    oPoliza.Lines.Credit = CDbl(oRecSet.Fields.Item("Deduccion").Value)
                End If
                oPoliza.Lines.CostingCode = oRecSet.Fields.Item("ProfitCode").Value
                oPoliza.Lines.CostingCode2 = oRecSet.Fields.Item("OrcCode2").Value
                oPoliza.Lines.UserFields.Fields.Item("U_Nom_Depto").Value = oRecSet.Fields.Item("Depto").Value
                oPoliza.Lines.Add()  'agrega la linea
                oRecSet.MoveNext()
            Next

                Resultado = oPoliza.Add  'agrega la poliza 'Aquí me genera el error

                If (Resultado <> 0) Then
                    cSBOCompany.GetLastError(llError, lsError)
                    '    cSBOApplication.MessageBox("Error SAP " & llError & "-" & lsError)
                    Err.Raise(-1, 1, lsError)
                Else
                    cSBOCompany.GetNewObjectCode(TransId)
                    cSBOApplication.MessageBox("Se ha creado la poliza correctamente. " & TransId)
                    oRecSet.DoQuery(CommonFunc.SQLSentence(2, stAño, stPeriodoID, stPeriodo, stTipoNom, stCentroID, TransId, stFecha, stMemo, stRef))

                End If

image

A partir del “-5002 - Mensaje” Son los datos que me arroja SAP del error.

Hola @Ares17000
Hay un permiso en finanzas / asiento / Permitir tratamiento de fecha de documento líneas revisa si lo tienes habilitado.

Saludos

1 me gusta

Justamente eeeeeeso es lo que me faltaba… Estaba el Chek de bloqueo.

Así quedó por si alguien llega a tener el mensaje de error.

2 Me gusta

Hola @Ares17000
Realmente no es buena practica tener este parámetro desbloqueado.

De hecho comprendo perfectamente la razón… pero lo que hice para evitar errores, y no tener que usar este check, es en el TN, las lineas deben tener la misma fecha de la cabecera, sino lo detiene con un mensaje informando que no se puede.

Ya si alguien me pregunta le diré que necesita ana autorización por correo del Director de Finanzas.

Es que por programación DI API si está el check, aunque no toque el campo en el código, el sistema lo toma como que lo está cambiando, y el check se dispara bloqueando la creación del asiento.

Este tema se cerró automáticamente 7 días después de la última publicación. No se permiten nuevas respuestas.