miércoles, 15 de agosto de 2007

De vuelta Solomon 5.5

Creo que se podran dar cuenta de que mi blog parecía olvidado, y bueno ni hablar de que nuevamente no pude a asistir a la reunión de la comunidad .net, pero en mi intento por tomar este camino como una cultura me he topado con nuevo conocimiento y nuevas oportunidades de aprender más cosas interesantes, y bueno por lo que les quiero compartir un poco de ese conocimiento.


Aqui vamos con un poco de solomon, y nada mejor como el saber como utilizar sus SolomonObjects, que verdaderamente ahhhh... como nos resuelven la vida evitandonos la pena y sufrimiento de tener que meterle mano directamente a las bases de datos, que eso sinceramente da mucho miedo, ya que culquier paso en falso es casi letal para la integridad de dicha información.


Todo empezó con el requerimiento de importar las recepciones de ordenes de compra desde un archivo de texto, y bueno todo esto implicaba hacer una transaccion por cada orden de compra con sus respectivas partidas y obviamente generar el lote por el conjunto de ordenes de compra, a lo cual sentí que mi vida se complicaria demasiado...jajaja, y ante dicha exageración de mi parte se me aparecio mi pepe grillo (mi amigo Luis Garcés) y me comento de que escucho los SolomonObjects o COM objects de solomon, eran casi casi leyenda urbana, jajaja!! y bueno me paso un instalador de eso de los SolomonObjects y bueno ante esa simbolica ayuda de su parte, pude aprender a ejecutar las pantallas llenarlas y hacer las transacciones debidas, y bueno les compartire el codigo completo de aplicación para que se den una idea de como abrir los objetos y manejar esos tan compliados grids.


Aqui les va todo comentado de la mejor manera posible:


'Declaración de Controles de Solomon
Public gblnSaving As BooleanPrivate
ctrlPOCurr As SIVControl ' declarando el control para asignarle el numero de orden de compra
Private ctrlPartCurr As SIVControl 'declarando el control de numero de partida a buscar
Private ctrlqty As SIVControl 'declarando el control para asignarle la cantidad recibida
Private ctrlrcptctrlqty As SIVControl 'declarando el control de cantidad control
Private ctrlrcptctrlamt As SIVControl 'declarando el control de costo control
Private crtldrtot As SIVControl 'Declarando el control de Cantidad control del lote
Private ctrlctrltot As SIVControl ' Declarando el control de Costo control del lote
Private sivTBCurr As New SIVToolbar
Private sivApp As SIVApplication

Private Sub cmdCancel_Click()
Call screenexit("", "")
End Sub

Private Sub Form_Load()
Call ApplInit
Call ScreenInit
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call screenexit("", "")
End Sub

Private Sub cmdEjecuta_Click()
'Declaracion de variables a utilizar para guardar las recepciones recibidas en el Archivo de texto
Dim strMyAppEXE As String 'pantalla a abrir
Dim pathEXE As String 'ruta de la pantalla a abrir
Dim strDataEntity As String 'Para guardar el valor de la entidad del grid
Dim blnRecordFound As Boolean 'Para saber si hay datos en el grid
Dim blnMatch As BooleanDim strPart As String 'El numero de Partida a buscar en el grid
Dim strPO As String 'El numero de orden de compra le ida en el archivo
Dim strqty As String 'El valor de la cantidad recibida a asignar
Dim auxstrPO As StringDim Articulo As String
Dim pathFile As String
Dim IDCompania As String
Dim sFile As String
Dim PathAccess As String
Dim LoginFile As String

'strqty = "2" 'asignando al valor de la cantidad recibida para pruebas
'strPart = "00002" 'asignando una partida para pruebas
'strPO = "000042" 'asignando un numero de ordende compra para pruebas
LoginFile = "xPathsApp\Login.txt"
'LoginFile = "Login.txt"
'pathEXE = "C:\Sol55\Solomon\PO\"
pathEXE = App.Path & "\"strMyAppEXE = "0401000.exe"
'pathFile = App.Path & "\PathImportRC.txt"
pathFile = "xPathsApp\PathImportRC.txt"
On Error GoTo errorFile2
Open pathFile For Input As #3 Input #3,
PathAccess Close #3
sFile = PathAccess & "RC" & Trim(bpes.CpnyID) & ".txt"
On Error GoTo errorOpen
Open sFile For Input As #1
Input #1, strPO, strPart, Articulo, strqty, IDCompania
If If strPO <> "NO.Orden" Or strPart <> "LineaReferencia" Or Articulo <> "Articulo" Or strqty <> "Cantidad_Recepcionada" Or IDCompania <> "IDCompania" Then
MsgBox "El archivo " & sFile & " no tiene el formato correcto", vbCritical, "Confirmation"
Close #1
Exit Sub
Else
Dim User, Pass As String 'Dim val As String
On Error GoTo errorOpen2
Open LoginFile For Input As #2
Input #2, User, Pass Close #2
On Error GoTo LOGIN_ERR
sivTBCurr.Login Trim(bpes.DBServer), Trim(bpes.DBNameSystem), Trim(bpes.CpnyID), User, Pass '"VMW2K", "TESTSISTEMA", "002", "SYSADMIN", ""
sivTBCurr.InitializeMode = False
On Error GoTo STARTAPP_ERR
Set sivApp = sivTBCurr.StartApplication(pathEXE & strMyAppEXE)
' Loop until the end of file is reached.
Do While Not EOF(1) ' Read data into variables.
On Error GoTo Closefile
Input #1, strPO, strPart, Articulo, strqty, IDCompania
If strPO <> Empty And strPart <> Empty And Articulo <> Empty And strqty <> Empty And IDCompania = Trim(bpes.CpnyID) Then ' pregunta si es la primera orden de compra a cargar
If (auxstrPO = Empty) Then
Set ctrlPOCurr = sivApp.Controls("cponbr") 'el control del numero de orden de compra
On Error GoTo STARTAPP_ERR: ctrlPOCurr = strPO 'numero de Orden de compra
End If '(auxstrPO = Empty) Then ' pregunta si es una nueva orden de compra, si lo es la guarda If (strPO <> auxstrPO And auxstrPO <> Empty) Then
Call CuadraValoresRecepcion ''Crea un nuevo documento sobre el batch guardado
Dim strEntityDoc As String
strEntityDoc = sivApp.Controls("crcptnbrh").Properties("Level")
sivApp.New
strEntityDoc ''Carga la nueva orden de compra para agregar al batch
Set ctrlPOCurr = sivApp.Controls("cponbr") 'el control del numero de orden de compra
On Error GoTo STARTAPP_ERR: ctrlPOCurr = strPO 'numero de Orden de compra
End If '(strPO <> auxstrPO And auxstrPO <> Empty) ''Asigna el valor al auxiliar para poder hacer las validaciones anteriores
auxstrPO = strPO 'para obtener el valor de la entidad para el nivel del grid
Set ctrlPartCurr = sivApp.Controls("cpolineref") 'Control del Campo de numero de partida de la orden de compra
strDataEntity = ctrlPartCurr.Properties("Level") 'Para ubicarse en el primer registro del grid blnRecordFound = (sivApp.First(strDataEntity) = sivRecFndFound) 'Este ciclo se ejecuta mientras encuentra la partida o hasta que termine de leer el grid
Do Until blnMatch Or (Not blnRecordFound) 'Compara el contenido del control ("cpolineref") Control del Campo de numero de partida de la orden de compra
blnMatch = (ctrlPartCurr = strPart) 'si el contenido del control no es igual al que se busca entonces
If Not blnMatch Then 'avanza al siguiente registro
blnRecordFound = (sivApp.Next(strDataEntity) = sivRecFndFound)
End If 'Not blnMatch
Loop 'Until
blnMatch Or (Not blnRecordFound) 'si encontro la partida
If blnMatch Then 'Asigna el valor a surtir
Set ctrlqty = sivApp.Controls("cqty") 'tomando el valor del control de cantidad recibida
ctrlqty = strqty 'asignando la cantidad recibida obtenida por el archivo
blnMatch = False
End If
Else
GoTo Closefile2
End If 'strPO <> Empty Or strPart <> Empty Or Articulo <> Empty Or strqty <> Empty Loop ' Loop Not EOF End If 'strPO <> "NO.Orden" Or strPart <> "LineaReferencia" Or Articulo <> "Articulo" Or strqty <> "Cantidad_Recepcionada"
Call CuadraValoresRecepcion MsgBox "Lote No." & sivApp.Controls("cbatnbrb") & " Importado con éxito"
'sivApp.Quit
'sivTBCurr.Logout 'elimina el archivo una vez copiado
Close #1
Dim myFSO, f
Set myFSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set f = myFSO.GetFile(sFile)
f.Delete sivApp.Visible = True
Call screenexit("", "")