Hola
Estoy haciendo unas pruebas con el DI-API y estoy atascado en un punto absurdo del que no encuentro información sobre cómo salir. Se trata simplemente de actualizar un precio de una línea de un albarán (ambos abiertos) y me dice que lo actualiza, pero luego no cambia nada. Este es el trozo de código (vb.net) que le sobra mucha morralla pero es que ya lo he escrito a lo bruto a ver si saltaba por algún lado, pero nada:
Dim oEntrega As Documents = CType(oCompany.GetBusinessObject(BoObjectTypes.oDeliveryNotes), Documents)
Dim oRecordset As Recordset = CType(oCompany.GetBusinessObject(BoObjectTypes.BoRecordset), Recordset)
Dim oListaPrecios As Recordset = CType(oCompany.GetBusinessObject(BoObjectTypes.BoRecordset), Recordset)
'Try
' Obtener todas las líneas de entregas abiertas
oRecordset.DoQuery("
SELECT T0.""DocEntry"", T1.""LineNum"", T0.""CardCode"", T1.""ItemCode"", T1.""ShipDate"",T1.""Price""
FROM ODLN T0
INNER JOIN DLN1 T1 ON T0.""DocEntry"" = T1.""DocEntry""
WHERE T0.""DocStatus"" = 'O' AND T1.""LineStatus"" = 'O'")
While Not oRecordset.EoF
Dim docEntry As Integer = oRecordset.Fields.Item("DocEntry").Value
Dim lineNum As Integer = oRecordset.Fields.Item("LineNum").Value
Dim cardCode As String = oRecordset.Fields.Item("CardCode").Value
Dim itemCode As String = oRecordset.Fields.Item("ItemCode").Value
Dim ShipDate As DateTime = oRecordset.Fields.Item("ShipDate").Value
' Obtener el precio actualizado de SPP1
Dim newPrice As Double = ObtenerPrecioArticulo(cardCode, itemCode, ShipDate)
If oRecordset.Fields.Item("Price").Value <> newPrice Then
' Actualizar el precio en la línea de entrega
If oEntrega.GetByKey(docEntry) Then
oEntrega.Lines.SetCurrentLine(lineNum)
oEntrega.Lines.Price = newPrice
' Guardar los cambios
If oEntrega.Update() <> 0 Then
Debug.Print("Error al actualizar entrega " & docEntry & ": " & oCompany.GetLastErrorDescription())
Else
Debug.Print("Entrega actualizada: DocEntry " & docEntry & ", Línea " & lineNum)
End If
End If
End If
oRecordset.MoveNext()
End While
'Catch ex As Exception
'Console.WriteLine("Error: " & ex.Message)
'Finally
' Liberar recursos
System.Runtime.InteropServices.Marshal.ReleaseComObject(oRecordset)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oListaPrecios)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oEntrega)
oRecordset = Nothing
oListaPrecios = Nothing
oEntrega = Nothing
'End Try
En este caso me tiene que cambiar una línea de un albarán concreto, todos los parámetros parecen correctos (DocEntry, lineNum, etc), el precio antiguo lo toma correcto, el nuevo también pero…no graba nada.
¿Alguna idea de qué puede estar mal? Por otro lado veo que hay dos librerías posibles, SAPbobsCOM100 y SAPbobsCOM90, estoy usando la 100 ya que entiendo que es la correcta para SAP B1 v10, aunque imagino que el problema no debe venir por ahí.