cancel
Showing results for 
Search instead for 
Did you mean: 

Simular DTW con opción Rollback si falla alguna factura

Former Member
0 Kudos

Hola buenas,

He desarrollado una aplicación TPV para vender productos (libros) en Stands en ferias donde no suelen tener conexión a internet,...

La aplicación (Stands TPV) mediante lector de código de barras o por teclado lee los artículos y genera los tickets de compras, devoluciones, cierres de caja diarios, informes...

La finalidad de esta aplicación es que cuando se cierra una feria, esta, genera una serie de plantillas con todo lo necesario para subirlo a SAP por Data Transfer (DTW)..., estas ferías cada vez son más comunes y pierdo mucho tiempo validando los procesos y subiendo por DTW la facturación de las ferias.

Mi propósito es mediante otra aplicación vb.net utilizando SapBobcom.dll que simule una subida de boletas, notas de crédito, pagos,...

Esto ya lo tengo mas o menos encaminado pero tengo la necesidad de hacer una simulación previa antes de hacer la subida y si falla algo que no suba nada de nada... tal como lo hace la simulación por DTW.

Mi duda es alguien si sabe como hacer esta simulación previa a la subida de documentos (facturas) y en el caso que falle algo, que no se actualice nada. Mi idea inicial era hacer Listas y poner una list.add() para que lo suba todo o nada pero desconozco el proceso y si es posible..

Sería algo como hacer un rollback en un proceso de sql server o un método de simulación mediante sapbobscom.dll o sabéis si es posible enlazarlo todo en lista y hacer una ret = lista.add() por ejemplo?

Espero haberme explicado!!

Adjunto un código simple de subida de una factura (esto lo tengo más elaborado para que cargue de las plantillas generadas pero tengo que ir uno a uno...) :

  'Definir variables

        Dim oCompany As New SAPbobsCOM.Company

        Dim lRetCode, ErrorCode As Long

        Dim ErrorMessage As String

        Dim folio, nextfolio As String

        Dim Retval As Long

        Dim oDoc As SAPbobsCOM.Documents

        Dim DocLines As SAPbobsCOM.Document_Lines

        Try

            'Iniciar objeto de la compañia

            'oCompany = New SAPbobsCOM.Company

            'Definir datos de la coneccion

            oCompany.DbServerType = SAPbobsCOM.BoDataServerTypes.dst_MSSQL2005 'Tipo de BD

            oCompany.DbUserName = "sa"

            oCompany.DbPassword = "********"  'Contraseña usuairo SA

            oCompany.Server = "SERV" 'IP o servidor de SQL

            oCompany.CompanyDB = "VVPeru_STDJOR"   'BASE DE DATOS

            oCompany.UserName = "manager"

            oCompany.Password = "*****"  'contraseña usuario manager

            oCompany.language = SAPbobsCOM.BoSuppLangs.ln_Spanish_La 'lenguaje de SQL, si esta en español usa SAPbobsCOM.BoSuppLangs.ln_Spanish

            oCompany.UseTrusted = False

            'Conectar a la base de SAP B1

            lRetCode = oCompany.Connect()

            If lRetCode = 0 Then

                'Document = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oInvoices)

                oDoc = oCompany.GetBusinessObject(BoObjectTypes.oInvoices)

                oDoc.CardCode = "J00984"

                oDoc.DocDate = Today

                oDoc.DocDueDate = Today

                oDoc.CardCode = 24

                oDoc.Series = 107

                oDoc.Lines.ItemCode = "000119"

                oDoc.Lines.Quantity = 1

                oDoc.Lines.SalesPersonCode = 24

                oDoc.Lines.WarehouseCode = "03"

                If oDoc.Add <> 0 Then

                    MsgBox("Error " + oCompany.GetLastErrorDescription())

                Else

                    MsgBox("Good")

                    Dim newCode As String = oCompany.GetNewObjectKey()

                    MsgBox(newCode)

                End If

            End If

        Catch ex As Exception

            MsgBox(ex.ToString)

        End Try

Mucahs gracias y saludos!!

Jorge

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Iepppp! He encontrado una solición mediante el método oCompany.StartTransaction()

Aquí os paso mi código para el que le pueda interesar!

Try

            'Iniciar objeto de la compañia

            'oCompany = New SAPbobsCOM.Company

            'Definir datos de la coneccion

            oCompany.DbServerType = SAPbobsCOM.BoDataServerTypes.dst_MSSQL2005 'Tipo de BD

            oCompany.DbUserName = "sa"

            oCompany.DbPassword = "********"  'Contraseña usuairo SA

            oCompany.Server = "SERV" 'IP o servidor de SQL

            oCompany.CompanyDB = "VVPeru_STDJOR"   'BASE DE DATOS

            oCompany.UserName = "manager"

            oCompany.Password = "*******"  'contraseña usuario manager

            oCompany.language = SAPbobsCOM.BoSuppLangs.ln_Spanish_La 'lenguaje de SQL, si esta en español usa SAPbobsCOM.BoSuppLangs.ln_Spanish

            oCompany.UseTrusted = False

            'Conectar a la base de SAP B1

            lRetCode = oCompany.Connect()

            If lRetCode = 0 Then

               oCompany.StartTransaction()

                'Document = oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oInvoices)

                oDoc = oCompany.GetBusinessObject(BoObjectTypes.oInvoices)

                oDoc.CardCode = "J00984"

                oDoc.FolioPrefixString = "12"

                oDoc.FolioNumber = "58950"

                oDoc.NumAtCard = "12-020-58950"

                oDoc.DocDate = Today

                oDoc.DocDueDate = Today

                oDoc.TaxDate = Today

                oDoc.Series = 107

                oDoc.DocumentSubType = BoDocumentSubType.bod_Bill

                'oDoc.Series = "12-020"

                oDoc.Comments = "Prueba subida Boleta : 6 - app UtilsSAPBobsCOM  -  " & oDoc.NumAtCard

                oDoc.SalesPersonCode = 24

                oDoc.DocType = BoDocumentTypes.dDocument_Items

                oDoc.Lines.ItemCode = "000119"

                oDoc.Lines.Quantity = 1

                oDoc.Lines.WarehouseCode = "03"

                oDoc.Lines.UnitPrice = 29

                oDoc.Lines.WTLiable = BoYesNoEnum.tNO

                oDoc.Lines.SalesPersonCode = 24

                oDoc.Lines.Add()

                oDoc.Lines.ItemCode = "000132"

                oDoc.Lines.Quantity = 1

                oDoc.Lines.WarehouseCode = "03"

                oDoc.Lines.UnitPrice = 25

                oDoc.Lines.WTLiable = BoYesNoEnum.tNO

                oDoc.Lines.SalesPersonCode = 24

                oDoc.Lines.Add()

                oDoc.Lines.ItemCode = "000133"

                oDoc.Lines.Quantity = 5

                oDoc.Lines.WarehouseCode = "03"

                oDoc.Lines.UnitPrice = 32

                oDoc.Lines.WTLiable = BoYesNoEnum.tNO

                oDoc.Lines.SalesPersonCode = 24

                'oDoc.Lines.Add()

               ret = validaDocAdd(oCompany, oDoc)

                If ret Then

                    oDoc.CardCode = "C00984"

                    oDoc.FolioPrefixString = "12"

                    oDoc.FolioNumber = "58951"

                    oDoc.NumAtCard = "12-020-58951"

                    oDoc.DocDate = Today

                    oDoc.DocDueDate = Today

                    oDoc.TaxDate = Today

                    oDoc.Series = 107

                    oDoc.DocumentSubType = BoDocumentSubType.bod_Bill

                    'oDoc.Series = "12-020"

                    oDoc.Comments = "Prueba subida Boleta : 7 - app UtilsSAPBobsCOM  -  " & oDoc.NumAtCard

                    oDoc.SalesPersonCode = 24

                    oDoc.DocType = BoDocumentTypes.dDocument_Items

                    oDoc.Lines.ItemCode = "000119"

                    oDoc.Lines.Quantity = 1

                    oDoc.Lines.WarehouseCode = "03"

                    oDoc.Lines.UnitPrice = 29

                    oDoc.Lines.WTLiable = BoYesNoEnum.tNO

                    oDoc.Lines.SalesPersonCode = 24

                    oDoc.Lines.Add()

                    ret = validaDocAdd(oCompany, oDoc)

                End If

                'Si todo es ok palante sinó to patrás!!!

                If ret Then

                    oCompany.EndTransaction(BoWfTransOpt.wf_Commit)

                Else

                    'oCompany.EndTransaction(BoWfTransOpt.wf_RollBack) 'Lanza una exception ya que no se ha hecho ningún commit!

                    oCompany.Disconnect()

                End If

            Else

                ret = False

            End If

        Catch ex As Exception

            'oCompany.EndTransaction(BoWfTransOpt.wf_RollBack)

            MsgBox("Error odoc.Add Catch.Exception : " & ex.ToString)

        End Try

-----

Function validaDocAdd(ByRef oCompany, ByRef oDoc) As Boolean

        Dim ret As Boolean

        Try

            If oDoc.Add <> 0 Then

                ret = False

                MsgBox("Error " + oCompany.GetLastErrorDescription())

            Else

                MsgBox("Good")

                ret = True

                Dim newCode As String = oCompany.GetNewObjectKey()

                MsgBox(newCode)

            End If

        Catch ex As Exception

            ret = False

        End Try

        Return ret

    End Function

Answers (0)