- VERSION 5.06.25

- Se quito que el almacen de guadalajara NO tuviera geocerca.
- Se corrigio el error de que cuando se desinstala la app y se vuelve a instalar, en la priera venta se trababa la aplicacion.
- Se puso codigo de prueba para usar el "wait for" con el DBReqManager.
This commit is contained in:
2025-07-01 17:41:19 -06:00
parent e639848418
commit 32ba186a60
8 changed files with 522 additions and 46 deletions

View File

@@ -117,6 +117,7 @@ Sub Class_Globals
Dim intentUsado As Boolean = False Dim intentUsado As Boolean = False
Private p_importarBDWA As Panel Private p_importarBDWA As Panel
Private cb_importarBDWA As CheckBox Private cb_importarBDWA As CheckBox
' Type TResultado(Tag As String, Success As Boolean, resultado As DBResult, ErrorMessage As String)
End Sub End Sub
Public Sub Initialize Public Sub Initialize
@@ -129,6 +130,7 @@ End Sub
'This event will be called once, before the page becomes visible. 'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView) Private Sub B4XPage_Created (Root1 As B4XView)
Log(">>>>>> CREATE - INICIAMOS MAIN PAGE <<<<<<<<<")
If Not(Starter.Logger) Then logger = False If Not(Starter.Logger) Then logger = False
Dim sDate, sTime As String Dim sDate, sTime As String
DateTime.DateFormat = "yyyyMMdd" DateTime.DateFormat = "yyyyMMdd"
@@ -212,7 +214,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
ruta = Starter.ruta ruta = Starter.ruta
Starter.tiempos.Initialize Starter.tiempos.Initialize
kh.guardaAppInfo kh.guardaAppInfo
Log(111)
'Revisamos si se disparo el intent de cargar la base de datos desde WhatApp. 'Revisamos si se disparo el intent de cargar la base de datos desde WhatApp.
If kh.traeUsarIntentBDWA Then kh.importaBDDesdeWhatsApp If kh.traeUsarIntentBDWA Then kh.importaBDDesdeWhatsApp
@@ -312,6 +314,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
Msgbox("No se puede crear el archivo de foto","Aviso") 'ignore Msgbox("No se puede crear el archivo de foto","Aviso") 'ignore
End Try End Try
End If End If
Log(222)
' Dim ph As Phone 'Get Id Device ' Dim ph As Phone 'Get Id Device
' Dim DeviceID As String = Starter.ph.GetSettings("android_id").ToUpperCase ' Dim DeviceID As String = Starter.ph.GetSettings("android_id").ToUpperCase
' If logger Then Log($"Marca: ${Starter.ph.manufacturer}, Modelo: ${Starter.ph.model}"$) ' If logger Then Log($"Marca: ${Starter.ph.manufacturer}, Modelo: ${Starter.ph.model}"$)
@@ -346,7 +349,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
Else Else
ToastMessageShow("Sin permisos para GPS", True) ToastMessageShow("Sin permisos para GPS", True)
End If End If
Log("***********************************************") Log("33***********************************************33")
MES1.Initialize(Me, "MES1") MES1.Initialize(Me, "MES1")
' Log("SDK: " & device.SdkVersion) ' Log("SDK: " & device.SdkVersion)
' Get the device SDK version ' Get the device SDK version
@@ -376,7 +379,7 @@ Private Sub B4XPage_Created (Root1 As B4XView)
End If End If
Log(MES1.IsInitialized) Log(MES1.IsInitialized)
Log(MES1.HasPermission) Log(MES1.HasPermission)
Log("***********************************************") Log("44***********************************************44")
MES1.Initialize(Me, "MES1") MES1.Initialize(Me, "MES1")
' Log("Permisos BT: " & rp.Check("android.permission.BLUETOOTH_CONNECT")) ' Log("Permisos BT: " & rp.Check("android.permission.BLUETOOTH_CONNECT"))
' Log("REVISAMOS PERMISOS DE BT") ' Log("REVISAMOS PERMISOS DE BT")
@@ -389,7 +392,8 @@ Private Sub B4XPage_Created (Root1 As B4XView)
End Sub End Sub
Sub B4XPage_Appear Sub B4XPage_Appear
Log(">>>>>> INICIAMOS MAIN PAGE <<<<<<<<<") Log(">>>>>> APPEAR - INICIAMOS MAIN PAGE <<<<<<<<<")
If Not(MES1.IsInitialized) Then MES1.Initialize(Me, "MES1")
Log(DateTime.GetDayOfWeek(DateTime.Now)) Log(DateTime.GetDayOfWeek(DateTime.Now))
kh.RD_Init kh.RD_Init
kh.SetButtonTintList(cb_geocerca, Colors.LightGray, Colors.RGB(43, 154, 211)) kh.SetButtonTintList(cb_geocerca, Colors.LightGray, Colors.RGB(43, 154, 211))
@@ -462,10 +466,10 @@ Sub B4XPage_Appear
Log(MES1.IsInitialized) Log(MES1.IsInitialized)
If MES1.IsInitialized Then If MES1.IsInitialized Then
LogColor("Permisos de almacenamiento: " & MES1.HasPermission, Colors.Magenta) LogColor("Permisos de almacenamiento: " & MES1.HasPermission, Colors.Magenta)
If MES1.HasPermission Then kh.revisaSiExisteRespaldo ' If MES1.HasPermission Then kh.revisaSiExisteRespaldo '' Se comenta causa el error de que en el primer cliente,al guardar la venta se trabe la aplicacion!!
End If End If
DateTime.DateFormat = "yyyy-MM-dd HH:mm:ss" DateTime.DateFormat = "yyyy-MM-dd HH:mm:ss"
Starter.skmt.ExecNonQuery($"insert into versiones (version, fecha) values ('${Application.VersionName}', '${datetime.Date(DateTime.Now)}')"$) Starter.skmt.ExecNonQuery($"insert into versiones (version, fecha) values ('${Application.VersionName}', '${DateTime.Date(DateTime.Now)}')"$)
End Sub End Sub
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
@@ -705,6 +709,52 @@ Private Sub i_engranes_LongClick
' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) ' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean)
' Subs.copiaDB(Result) ' Subs.copiaDB(Result)
' Dim x As Int = "a" ' Dim x As Int = "a"
Dim reqManagerW As DBRequestManagerW
reqManagerW.Initialize
cmd.Initialize
cmd.Name = "select_usuario_guna_KELL"
cmd.Parameters = Array As Object(user.Text, pass.Text)
reqManagerW.ExecuteQuery(Starter.DBReqServer, cmd, Me, "elUsuario")
Wait For elUsuario_Completed (res1 As TResultado)
Log("tag: " & res1.tag & " Success: " & res1.Success)
If res1.Success Then
Subs.logJobDoneResultados(res1.resultado)
Else
Log(res1.ErrorMessage)
End If
cmd.Name = "select_version_KELL"
cmd.Parameters = Array()
reqManagerW.ExecuteQuery(Starter.DBReqServer, cmd, Me, "laVersion")
Wait For laVersion_Completed (res2 As TResultado)
Log("tag: " & res2.tag & " Success: " & res2.Success)
If res2.Success Then
Subs.logJobDoneResultados(res2.resultado)
Else
Log(res2.ErrorMessage)
End If
cmd.Name = "delete_geoPass"
cmd.Parameters = Array As Object( Subs.traeAlmacen, Subs.traeRuta)
reqManagerW.ExecuteCommand(Starter.DBReqServer, cmd, Me, "borraGeoPass")
Wait For borraGeoPass_Completed (res3 As TResultado)
Log("tag: " & res3.tag & " Success: " & res3.Success)
If res3.Success Then
Subs.logJobDoneResultados(res3.resultado)
Else
Log(res3.ErrorMessage)
End If
End Sub
Sub elUsuario_Completed (res As DBResult)
Log("abc: " & res.tag)
Log("wrapper: " & res)
End Sub
Sub laVersion_Completed (res As DBResult)
Log("def: " & res.tag)
Log("wrapper2: " & res)
End Sub End Sub
Sub B_SERVER_Click Sub B_SERVER_Click

View File

@@ -422,7 +422,7 @@ Sub B4XPage_Appear
usarGeocerca = kh.traeUsarGeocerca usarGeocerca = kh.traeUsarGeocerca
'Para el almacen 12 (GDL) no se usa la geocerca 'Para el almacen 12 (GDL) no se usa la geocerca
If kh.traeAlmacen = 12 Then usarGeocerca = False ' If kh.traeAlmacen = 12 Then usarGeocerca = False
' Log(Subs.traeUltimaActividadBD) ' Log(Subs.traeUltimaActividadBD)
c = Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("MACIMP")) c = Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("MACIMP"))
@@ -1301,8 +1301,8 @@ Sub Imprime_ticket
Printer1.WriteString("Entre calle1: " & l_entre1.Text & CRLF) Printer1.WriteString("Entre calle1: " & l_entre1.Text & CRLF)
Printer1.WriteString("Entre Calle2: " & l_entre2.Text & CRLF) Printer1.WriteString("Entre Calle2: " & l_entre2.Text & CRLF)
LogColor("Entre Calle2: " & l_entre2.Text, Colors.red) LogColor("Entre Calle2: " & l_entre2.Text, Colors.red)
Printer1.WriteString("Forma de pago: " & formaPago & CRLF) ' Printer1.WriteString("Forma de pago: " & formaPago & CRLF)
LogColor("Forma de pago: " & formaPago, Colors.red) ' LogColor("Forma de pago: " & formaPago, Colors.red)
Printer1.WriteString(" " & CRLF) Printer1.WriteString(" " & CRLF)
Printer1.WriteString("------------------------------" & CRLF) Printer1.WriteString("------------------------------" & CRLF)
Printer1.WriteString("PEDIDO" & CRLF) Printer1.WriteString("PEDIDO" & CRLF)
@@ -1431,7 +1431,7 @@ Sub Imprime_ticket
End Try End Try
Else Else
Try Try
LogColor(456, Colors.red) ' LogColor(456, Colors.red)
DateTime.DateFormat = "yyyymmdd" DateTime.DateFormat = "yyyymmdd"
sDate=DateTime.Date(DateTime.Now) sDate=DateTime.Date(DateTime.Now)
Printer1.WriteString("KELLOGG COMPANY MEXICO" & CRLF) Printer1.WriteString("KELLOGG COMPANY MEXICO" & CRLF)
@@ -1450,9 +1450,9 @@ Sub Imprime_ticket
Printer1.WriteString("C.P.: " & la_cp.Text & CRLF) Printer1.WriteString("C.P.: " & la_cp.Text & CRLF)
Printer1.WriteString("Entre calle1: " & l_entre1.Text & CRLF) Printer1.WriteString("Entre calle1: " & l_entre1.Text & CRLF)
Printer1.WriteString("Entre Calle2: " & l_entre2.Text & CRLF) Printer1.WriteString("Entre Calle2: " & l_entre2.Text & CRLF)
LogColor("Entre Calle2: " & l_entre2.Text, Colors.red) ' LogColor("Entre Calle2: " & l_entre2.Text, Colors.red)
Printer1.WriteString("Forma de pago: " & formaPago & CRLF) Printer1.WriteString("Forma de pago: " & formaPago & CRLF)
LogColor("Forma de pago: " & formaPago, Colors.red) ' LogColor("Forma de pago: " & formaPago, Colors.red)
Printer1.WriteString(" " & CRLF) Printer1.WriteString(" " & CRLF)
''''''' PEDIDOS DOE ''''''' PEDIDOS DOE
@@ -1629,8 +1629,8 @@ Sub Imprime_ticket
Printer1.WriteString(Printer1.UNREVERSE & Printer1.BOLD & "Sub Total CAMBIOS: $" & NumberFormat2(sTotal3, 1, 2, 2, False) & CRLF) Printer1.WriteString(Printer1.UNREVERSE & Printer1.BOLD & "Sub Total CAMBIOS: $" & NumberFormat2(sTotal3, 1, 2, 2, False) & CRLF)
Private cantidad2 As String = "0" Private cantidad2 As String = "0"
If s.GetString("CANTIDAD") <> Null And IsNumber(s.GetString("CANTIDAD")) Then cantidad2 = s.GetString("CANTIDAD") If s.GetString("CANTIDAD") <> Null And IsNumber(s.GetString("CANTIDAD")) Then cantidad2 = s.GetString("CANTIDAD")
Log("|" & cantidad1 & "|") ' Log("|" & cantidad1 & "|")
Log("|" & s.GetString("CANTIDAD") & "|" & cantidad1 & "|") ' Log("|" & s.GetString("CANTIDAD") & "|" & cantidad1 & "|")
Printer1.WriteString( Printer1.UNREVERSE & Printer1.BOLD & "No. Productos: " & cantidad2 & CRLF) Printer1.WriteString( Printer1.UNREVERSE & Printer1.BOLD & "No. Productos: " & cantidad2 & CRLF)
Printer1.WriteString(CRLF) Printer1.WriteString(CRLF)
s.Close s.Close

View File

@@ -9,6 +9,7 @@ Sub Class_Globals
Private Root As B4XView 'ignore Private Root As B4XView 'ignore
Private xui As XUI 'ignore Private xui As XUI 'ignore
Dim reqManager As DBRequestManager Dim reqManager As DBRequestManager
Dim reqManagerW As DBRequestManagerW
Dim device As Phone Dim device As Phone
Dim kh As kms_helperSubs Dim kh As kms_helperSubs
Dim rp As RuntimePermissions Dim rp As RuntimePermissions
@@ -214,6 +215,8 @@ Sub Class_Globals
Private r_7 As RadioButton Private r_7 As RadioButton
Private r_razonNoVisita As String Private r_razonNoVisita As String
Private l_descripcion As Label Private l_descripcion As Label
Type TCuantos (query As String, esperados As Int, guardados As Int)
Dim validaCuantos As TCuantos
End Sub End Sub
'You can add more parameters here. 'You can add more parameters here.
@@ -225,6 +228,7 @@ End Sub
'This event will be called once, before the page becomes visible. 'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView) Private Sub B4XPage_Created (Root1 As B4XView)
If Not(Starter.Logger) Then logger = False If Not(Starter.Logger) Then logger = False
validaCuantos.Initialize
Root = Root1 Root = Root1
'load the layout to Root 'load the layout to Root
Root.LoadLayout("principal") Root.LoadLayout("principal")
@@ -332,6 +336,7 @@ Sub B4XPage_Appear
If Subs.traeUltimaActividadBD <> "principal" Then Subs.iniciaActividad(Subs.traeUltimaActividadBD) If Subs.traeUltimaActividadBD <> "principal" Then Subs.iniciaActividad(Subs.traeUltimaActividadBD)
borraClientesNuevosSinVenta borraClientesNuevosSinVenta
reqManager.Initialize(Me, Starter.DBReqServer) reqManager.Initialize(Me, Starter.DBReqServer)
reqManagerW.Initialize
Log($"DBREQSERVER = ${Starter.DBReqServer}"$) Log($"DBREQSERVER = ${Starter.DBReqServer}"$)
Dim cmd As DBCommand Dim cmd As DBCommand
@@ -821,10 +826,83 @@ Sub cargar_Click
cmd.Parameters = Array As Object(ALMACEN) cmd.Parameters = Array As Object(ALMACEN)
reqManager.ExecuteQuery(cmd , 0, "detallepaq") reqManager.ExecuteQuery(cmd , 0, "detallepaq")
cmd.Name = "selectCuantosClientes_Kell"
cmd.Parameters = Array As Object(e_ruta.text, ALMACEN)
reqManagerW.ExecuteQuery(Starter.DBReqServer, cmd, Me, "kmt_cuantos")
Wait For kmt_cuantos_Completed (r As TResultado)
If r.Success Then
validaCuantos.query = "kmt_datos"
For Each records() As Object In r.resultado.Rows
Dim CUANTOS_CLIENTES As Int = records(r.resultado.Columns.Get("CUANTOS_CLIENTES"))
Next
validaCuantos.esperados = CUANTOS_CLIENTES
Subs.logJobDoneResultados(r.resultado)
Else
Log(r.ErrorMessage)
End If
cmd.Initialize cmd.Initialize
cmd.Name = "select_cat_clientes_guna_KELL2" cmd.Name = "select_cat_clientes_guna_KELL2"
cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) cmd.Parameters = Array As Object(e_ruta.text, ALMACEN)
reqManager.ExecuteQuery(cmd , 0, "kmt_datos") ' reqManager.ExecuteQuery(cmd , 0, "kmt_datos")
reqManagerW.ExecuteQuery(Starter.DBReqServer, cmd, Me, "kmt_datos")
Wait For kmt_datos_Completed (r As TResultado)
Log("tag: " & r.tag & " Success: " & r.Success)
If r.Success Then
' Subs.logJobDoneResultados(res2.resultado)
Private result As DBResult = r.resultado
cargar.Enabled = True
Log("TIEMPO kmt_datos : " & ((DateTime.Now-inicioContador)/1000))
S_CC.TEXT = "CARGANDO"
Starter.skmt.BeginTransaction
For Each records() As Object In result.Rows
Dim CAT_CL_CODIGO As String = records(result.Columns.Get("CAT_CL_CODIGO"))
Dim CAT_CL_RUTA As String = records(result.Columns.Get("CAT_CL_RUTA"))
Dim CAT_CL_NOMBRE As String = records(result.Columns.Get("CAT_CL_NOMBRE"))
Dim CAT_CL_ATIENDE1 As String = records(result.Columns.Get("CAT_CL_ATIENDE1"))
Dim CAT_CL_ATIENTE2 As String = records(result.Columns.Get("CAT_CL_ATIENTE2"))
Dim CAT_CL_TELEFONO As String = records(result.Columns.Get("CAT_CL_TELEFONO"))
Dim CAT_CL_EMAIL As String = records(result.Columns.Get("CAT_CL_EMAIL"))
Dim CAT_CL_CALLE As String = records(result.Columns.Get("CAT_CL_CALLE"))
Dim CAT_CL_NOEXT As String = records(result.Columns.Get("CAT_CL_NOEXT"))
Dim CAT_CL_NOINT As String = records(result.Columns.Get("CAT_CL_NOINT"))
Dim CAT_CL_CALLE1 As String = records(result.Columns.Get("CAT_CL_CALLE1"))
Dim CAT_CL_CALLE2 As String = records(result.Columns.Get("CAT_CL_CALLE2"))
Dim CAT_CL_COLONIA As String = records(result.Columns.Get("CAT_CL_COLONIA"))
Dim CAT_CL_MUNI As String = records(result.Columns.Get("CAT_CL_MUNI"))
Dim CAT_CL_EDO As String = records(result.Columns.Get("CAT_CL_EDO"))
Dim CAT_CL_CP As String = records(result.Columns.Get("CAT_CL_CP"))
Dim CAT_CL_LONG As String = records(result.Columns.Get("CAT_CL_LONG"))
Dim CAT_CL_LAT As String = records(result.Columns.Get("CAT_CL_LAT"))
Dim CAT_CL_MTOCOMPRA As String = records(result.Columns.Get("CAT_CL_MTOCOMPRA"))
Dim CAT_CL_NUM_SERIEFISICO As String = records(result.Columns.Get("CAT_CL_NUM_SERIEFISICO"))
Dim CAT_CL_BFACTURA As String = records(result.Columns.Get("CAT_CL_BFACTURA"))
Dim CAT_CL_BCREDITO As String = records(result.Columns.Get("CAT_CL_BBLOQUEOCRED"))
Dim CAT_CL_DIAS_VISITA As String = records(result.Columns.Get("CAT_CL_DIAS_VISITA"))
Dim CAT_CL_TIPO_RUTA As String = records(result.Columns.Get("CAT_CL_TIPO_RUTA"))
Dim CAT_CL_CATEGORIA As String = records(result.Columns.Get("CAT_CL_CATEGORIA"))
Dim CAT_CL_SEGMENTO As String = records(result.Columns.Get("CAT_CL_SEGMENTO"))
Dim CAT_CL_LIMITECREDITO As String = records(result.Columns.Get("CAT_CL_LIMITECREDITO"))
Dim CREDITO As String = records(result.Columns.Get("CAT_CL_BCREDITO"))
' LogColor("CAT_CL_LIMITECREDITO:" & CAT_CL_LIMITECREDITO & " -- ID: " & CAT_CL_CODIGO, Colors.red)
Starter.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO,CAT_CL_BFACTURA,CAT_CL_BCREDITO,CAT_CL_DIAS_VISITA,CAT_CL_TIPO_RUTA, gestion, IMPRESION, CAT_CL_CATEGORIA, CAT_CL_SEGMENTO,CAT_CL_LIMITECREDITO, CREDITO) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,0,?,?,?,?)", Array As Object (CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LAT,CAT_CL_LONG,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO,CAT_CL_BFACTURA,CAT_CL_BCREDITO,CAT_CL_DIAS_VISITA,CAT_CL_TIPO_RUTA,CAT_CL_CATEGORIA, CAT_CL_SEGMENTO,CAT_CL_LIMITECREDITO,CREDITO))
Next
Starter.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_BFACTURA,CAT_CL_BCREDITO,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO,CAT_CL_DIAS_VISITA, gestion, IMPRESION) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,0,0,?,0,0) ",Array As Object ("0",e_ruta.TEXT, "VENTA ABORDO","null","null","null","null","null","null","null","null","null","null","null","0","null","null","null","10000000","null"))
Starter.skmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!!
Starter.skmt.EndTransaction
LogColor("##################################################################3", Colors.red)
Listo1 = 1
S_CC.Text = "LISTO"
' ToastMessageShow("Catalogo Clientes Actualizados." , True)
If Listo1 = 1 And Listo2 = 1 And Listo3 = 1 And Listo4 = 1 Then
B4XPage_Appear
img2.Visible=False
EJECUTANDO = 0
End If
Else
Log(r.ErrorMessage)
End If
cmd.Initialize cmd.Initialize
cmd.Name = "select_hist_datos_KELL" cmd.Name = "select_hist_datos_KELL"
@@ -872,7 +950,7 @@ Sub cargar_Click
cmd.Initialize cmd.Initialize
cmd.Name = "select_cat_clientes_guna_KELL2" cmd.Name = "select_cat_clientes_guna_KELL2"
cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN)
reqManager.ExecuteQuery(cmd , 0, "kmt_datos") ' reqManager.ExecuteQuery(cmd , 0, "kmt_datos")
cmd.Initialize cmd.Initialize
cmd.Name = "select_hist_datos_KELL" cmd.Name = "select_hist_datos_KELL"
@@ -1047,7 +1125,7 @@ Sub JobDone(Job As HttpJob)
If logger Then LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211110 If logger Then LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211110
If Job.JobName = "DBRequest" Then If Job.JobName = "DBRequest" Then
Dim RESULT As DBResult = reqManager.HandleJob(Job) Dim RESULT As DBResult = reqManager.HandleJob(Job)
If RESULT.Tag = "kmt_datos" Then 'query tag If RESULT.Tag = "kmt_datos_xxx" Then 'query tag
cargar.Enabled = True cargar.Enabled = True
If logger Then Log("TIEMPO kmt_datos : " & ((DateTime.Now-inicioContador)/1000)) If logger Then Log("TIEMPO kmt_datos : " & ((DateTime.Now-inicioContador)/1000))
S_CC.TEXT = "CARGANDO" S_CC.TEXT = "CARGANDO"
@@ -1090,12 +1168,16 @@ Sub JobDone(Job As HttpJob)
Listo1 = 1 Listo1 = 1
S_CC.Text = "LISTO" S_CC.Text = "LISTO"
' ToastMessageShow("Catalogo Clientes Actualizados." , True) ' ToastMessageShow("Catalogo Clientes Actualizados." , True)
If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then If Listo1 = 1 And Listo2 = 1 And Listo3 = 1 And Listo4 = 1 Then
B4XPage_Appear B4XPage_Appear
img2.Visible=False img2.Visible=False
EJECUTANDO = 0 EJECUTANDO = 0
End If End If
End If End If
' S_CC.Text = "LISTO"
' Listo1 = 1
bcarga1 = 20 bcarga1 = 20
If RESULT.Tag = "hist_promos" Then 'query tag If RESULT.Tag = "hist_promos" Then 'query tag

168
B4A/DBRequestManagerW.bas Normal file
View File

@@ -0,0 +1,168 @@
B4A=true
Group=Default Group
ModulesStructureVersion=1
Type=Class
Version=12.8
@EndOfDesignText@
'Class module: jRDC1Wrapper
'Version 1.3 - Thread-Safe with ExecuteCommand support
Public Sub Class_Globals
' Public properties to be accessed after the wait for completes
Type TResultado(Tag As String, Success As Boolean, resultado As DBResult, ErrorMessage As String)
' Type TCommandResult(Tag As String, Success As Boolean, RowsAffected As Int, ErrorMessage As String)
'C <<< Definimos un tipo para almacenar la información de cada job
Type TJobInfo (Target As Object, EventName As String, IsQuery As Boolean)
'C <<< Un mapa para mantener un registro de los jobs activos
Private activeJobs As Map
'C <<< Un contador para generar tags únicos para cada job
Private jobCounter As Int
Public reqManager As DBRequestManager
Public cmd As DBCommand
Public resultado As TResultado
' Public commandResult As TCommandResult
Private logger As Boolean = False
End Sub
'Initializes the object.
Public Sub Initialize
'C <<< Inicializamos el mapa y el contador
activeJobs.Initialize
jobCounter = 0
End Sub
'Executes the query using the old jRDC1 mechanism.
'Parameters:
' - rdcLink: The link for the reqManager initialization.
' - Command: The DBCommand to execute.
' - Target: The module (like 'Me') where the completed event should be raised.
' - Event: The name of the event to raise when the query completes (e.g., "WrapperEvent").
Public Sub ExecuteQuery(rdcLink As String, Command As DBCommand, Target As Object, Event As String)
'<<< Incrementamos el contador para obtener un ID único
jobCounter = jobCounter + 1
Dim currentJobTag As String = "reqManagerWJob_" & jobCounter
currentJobTag = Event
If logger Then Log($"ExecuteQuery (Tag: ${currentJobTag}): Command=${Command.Name}, Event=${Event}"$)
'<<< Creamos una instancia de TJobInfo para guardar el target y el evento
Dim jobInfo As TJobInfo
jobInfo.Initialize
jobInfo.Target = Target
jobInfo.EventName = Event
jobInfo.IsQuery = True ' Mark as query job
'<<< Guardamos la información del job en el mapa, usando el tag único como llave
activeJobs.Put(currentJobTag, jobInfo)
reqManager.Initialize(Me, rdcLink)
cmd = Command
'<<< Ejecutamos la consulta pasando nuestro TAG ÚNICO
reqManager.ExecuteQuery(cmd, 0, currentJobTag)
End Sub
'Executes a command (INSERT, UPDATE, DELETE) using the old jRDC1 mechanism.
'Parameters:
' - rdcLink: The link for the reqManager initialization.
' - Command: The DBCommand to execute.
' - Target: The module (like 'Me') where the completed event should be raised.
' - Event: The name of the event to raise when the command completes (e.g., "WrapperEvent").
Public Sub ExecuteCommand(rdcLink As String, Command As DBCommand, Target As Object, Event As String)
'<<< Incrementamos el contador para obtener un ID único
jobCounter = jobCounter + 1
Dim currentJobTag As String = "reqManagerWJob_" & jobCounter
currentJobTag = Event
If logger Then Log($"ExecuteCommand (Tag: ${currentJobTag}): Command=${Command.Name}, Event=${Event}"$)
'<<< Creamos una instancia de TJobInfo para guardar el target y el evento
Dim jobInfo As TJobInfo
jobInfo.Initialize
jobInfo.Target = Target
jobInfo.EventName = Event
jobInfo.IsQuery = False ' Mark as command job
'<<< Guardamos la información del job en el mapa, usando el tag único como llave
activeJobs.Put(currentJobTag, jobInfo)
reqManager.Initialize(Me, rdcLink)
cmd = Command
'<<< Ejecutamos el comando pasando nuestro TAG ÚNICO
reqManager.ExecuteCommand(cmd, currentJobTag)
End Sub
'This sub will be called by the DBRequestManager when the job is done
Public Sub JobDone(job As HttpJob)
'<<< Obtenemos el Tag único que asignamos al job
Dim currentJobTag As String = job.Tag
'C <<< Verificamos si este job fue iniciado por nuestro wrapper
If activeJobs.ContainsKey(currentJobTag) = False Then
If logger Then Log($"JobDone: Se recibió un job con un tag desconocido: ${currentJobTag}"$)
job.Release
Return
End If
'<<< Recuperamos la información específica de este job desde el mapa
Dim jobInfo As TJobInfo = activeJobs.Get(currentJobTag)
Try
If jobInfo.IsQuery Then
' Handle query result
resultado.Initialize
resultado.Tag = jobInfo.EventName ' Usamos el nombre del evento original como Tag del resultado
If job.Success Then
Dim dbResult As DBResult = reqManager.HandleJob(job)
resultado.Success = True
resultado.Resultado = dbResult
resultado.ErrorMessage = ""
Else
resultado.Success = False
resultado.Resultado = Null
resultado.ErrorMessage = job.ErrorMessage
End If
job.Release
'<<< Usamos la información recuperada del mapa para llamar al Sub correcto
if logger then LogColor($"EVENTO: ${jobInfo.EventName}_Completed"$, Colors.Magenta)
CallSubDelayed2(jobInfo.Target, jobInfo.EventName & "_Completed", resultado)
Else
' Handle command result
resultado.Initialize
resultado.Tag = jobInfo.EventName
If job.Success Then
Dim dbResult As DBResult = reqManager.HandleJob(job)
' Dim rowsAffected As Int = reqManager.HandleCommandResult(job)
' For Each records() As Object In dbResult.Rows
' Dim rowsAffected As Int = records(dbResult.Columns.Get("AffectedRows"))
' Next
resultado.Success = True
resultado.resultado = dbResult
resultado.ErrorMessage = ""
Else
resultado.Success = False
resultado.resultado = Null
resultado.ErrorMessage = job.ErrorMessage
End If
job.Release
'<<< Usamos la información recuperada del mapa para llamar al Sub correcto
If logger Then LogColor($"EVENTO: ${jobInfo.EventName}_Completed"$, Colors.Magenta)
CallSubDelayed2(jobInfo.Target, jobInfo.EventName & "_Completed", resultado)
End If
'C <<< Se remueve el job del mapa en caso de ÉXITO
activeJobs.Remove(currentJobTag)
Catch
if logger then LogColor("Error en jRDC1Wrapper.JobDone: " & LastException, Colors.Red)
'<<< MUY IMPORTANTE: Remover el job del mapa para no tener fugas de memoria
activeJobs.Remove(currentJobTag)
End Try
End Sub

View File

@@ -881,21 +881,22 @@ Module15=|relative|..\C_TrendSpending
Module16=C_updateAvailable Module16=C_updateAvailable
Module17=CameraExClass Module17=CameraExClass
Module18=DBRequestManager Module18=DBRequestManager
Module19=DownloadService Module19=DBRequestManagerW
Module2=C_CheckList Module2=C_CheckList
Module20=errorManager Module20=DownloadService
Module21=EscPosPrinter Module21=errorManager
Module22=FileHandler Module22=EscPosPrinter
Module23=foto Module23=FileHandler
Module24=kms_helperSubs Module24=foto
Module25=ManageExternalStorage Module25=kms_helperSubs
Module26=MAPA_RUTAS Module26=ManageExternalStorage
Module27=Promociones Module27=MAPA_RUTAS
Module28=SD_Spinner Module28=Promociones
Module29=Starter Module29=SD_Spinner
Module3=C_Cliente Module3=C_Cliente
Module30=Subs Module30=Starter
Module31=Tracker Module31=Subs
Module32=Tracker
Module4=C_Clientes Module4=C_Clientes
Module5=C_Historico Module5=C_Historico
Module6=C_Mapas Module6=C_Mapas
@@ -904,13 +905,13 @@ Module8=C_NoVenta
Module9=C_NuevoCliente Module9=C_NuevoCliente
NumberOfFiles=421 NumberOfFiles=421
NumberOfLibraries=28 NumberOfLibraries=28
NumberOfModules=31 NumberOfModules=32
Version=12.8 Version=12.8
@EndOfDesignText@ @EndOfDesignText@
#Region Project Attributes #Region Project Attributes
#ApplicationLabel: Kelloggs Venta #ApplicationLabel: Kelloggs Venta
#VersionCode: 3000 #VersionCode: 3000
#VersionName: 5.04.28 #VersionName: 5.06.25
#SupportedOrientations: portrait #SupportedOrientations: portrait
#CanInstallToExternalStorage: False #CanInstallToExternalStorage: False
#BridgeLogger:true #BridgeLogger:true
@@ -945,7 +946,7 @@ End Sub
Sub Activity_Create(FirstTime As Boolean) Sub Activity_Create(FirstTime As Boolean)
Dim pm As B4XPagesManager Dim pm As B4XPagesManager
pm.Initialize(Activity) pm.Initialize(Activity)
Log("***********************************************") Log("11***********************************************11")
MES1.Initialize(Me, "MES1") MES1.Initialize(Me, "MES1")
Log("SDK: " & device.SdkVersion) Log("SDK: " & device.SdkVersion)
' Get the device SDK version ' Get the device SDK version
@@ -975,7 +976,7 @@ Sub Activity_Create(FirstTime As Boolean)
End If End If
Log(MES1.IsInitialized) Log(MES1.IsInitialized)
Log(MES1.HasPermission) Log(MES1.HasPermission)
Log("***********************************************") Log("22***********************************************22")
End Sub End Sub
'Template version: B4A-1.01 'Template version: B4A-1.01

View File

@@ -24,6 +24,7 @@ ModuleBookmarks29=
ModuleBookmarks3= ModuleBookmarks3=
ModuleBookmarks30= ModuleBookmarks30=
ModuleBookmarks31= ModuleBookmarks31=
ModuleBookmarks32=
ModuleBookmarks4= ModuleBookmarks4=
ModuleBookmarks5= ModuleBookmarks5=
ModuleBookmarks6= ModuleBookmarks6=
@@ -56,6 +57,7 @@ ModuleBreakpoints29=
ModuleBreakpoints3= ModuleBreakpoints3=
ModuleBreakpoints30= ModuleBreakpoints30=
ModuleBreakpoints31= ModuleBreakpoints31=
ModuleBreakpoints32=
ModuleBreakpoints4= ModuleBreakpoints4=
ModuleBreakpoints5= ModuleBreakpoints5=
ModuleBreakpoints6= ModuleBreakpoints6=
@@ -63,9 +65,9 @@ ModuleBreakpoints7=
ModuleBreakpoints8= ModuleBreakpoints8=
ModuleBreakpoints9= ModuleBreakpoints9=
ModuleClosedNodes0= ModuleClosedNodes0=
ModuleClosedNodes1= ModuleClosedNodes1=6,7,8,9,10,11,12,14,15,16
ModuleClosedNodes10= ModuleClosedNodes10=
ModuleClosedNodes11= ModuleClosedNodes11=3,5,6
ModuleClosedNodes12=3,7,8,9,10,11,12 ModuleClosedNodes12=3,7,8,9,10,11,12
ModuleClosedNodes13=6,7,8,9,10,11,12,13,14,16,17 ModuleClosedNodes13=6,7,8,9,10,11,12,13,14,16,17
ModuleClosedNodes14= ModuleClosedNodes14=
@@ -79,21 +81,22 @@ ModuleClosedNodes20=
ModuleClosedNodes21= ModuleClosedNodes21=
ModuleClosedNodes22= ModuleClosedNodes22=
ModuleClosedNodes23= ModuleClosedNodes23=
ModuleClosedNodes24=4,24,25,26,27,31,32,33,35 ModuleClosedNodes24=
ModuleClosedNodes25= ModuleClosedNodes25=24,25,26,27,31,32,33,35
ModuleClosedNodes26=4 ModuleClosedNodes26=
ModuleClosedNodes27= ModuleClosedNodes27=4
ModuleClosedNodes28= ModuleClosedNodes28=
ModuleClosedNodes29= ModuleClosedNodes29=
ModuleClosedNodes3=5,6,7 ModuleClosedNodes3=5,6
ModuleClosedNodes30=115 ModuleClosedNodes30=
ModuleClosedNodes31= ModuleClosedNodes31=115
ModuleClosedNodes32=
ModuleClosedNodes4= ModuleClosedNodes4=
ModuleClosedNodes5= ModuleClosedNodes5=
ModuleClosedNodes6= ModuleClosedNodes6=
ModuleClosedNodes7= ModuleClosedNodes7=
ModuleClosedNodes8= ModuleClosedNodes8=
ModuleClosedNodes9= ModuleClosedNodes9=
NavigationStack=C_Clientes,Class_Globals,23,0,C_Clientes,B_IMP_Click,236,0,C_Cliente,B4XPage_Created,316,0,B4XMainPage,B4XPage_Created,155,1,C_Principal,JobDone,1064,0,Diseñador Visual,cliente.bal,-100,3,C_Cliente,B_IMP_Click,1138,0,Subs,ponImpreso,658,0,C_Cliente,Imprime_ticket,1210,6,kms_helperSubs,RD_respalda_kmt_info,362,0,kms_helperSubs,RD_Init,94,4 NavigationStack=kms_helperSubs,RD_Init,69,0,C_Cliente,Imprime_ticket,1573,0,C_Cliente,Guardar_Click,1018,0,kms_helperSubs,RD_respaldoBatch,545,0,kms_helperSubs,RD_respalda_cat_gunaprod2,256,0,kms_helperSubs,RD_restaura_cat_gunaprod2,307,0,kms_helperSubs,RD_respalda_cat_detalle_paq,323,6,kms_helperSubs,TraeVentaSinImprimir,910,0,kms_helperSubs,RD_respalda_cat_rmi,503,0,kms_helperSubs,revisaSiExisteRespaldo,105,0,B4XMainPage,B4XPage_Appear,462,6
SelectedBuild=0 SelectedBuild=0
VisibleModules=1,29,11,3,30,13,12,7,27,26,24,4 VisibleModules=1,30,19,11,3,31,12,28,16,18,25

166
B4A/jRDCWrapper.bas Normal file
View File

@@ -0,0 +1,166 @@
B4A=true
Group=Default Group
ModulesStructureVersion=1
Type=Class
Version=12.8
@EndOfDesignText@
'Class module: jRDC1Wrapper
'Version 1.3 - Thread-Safe with ExecuteCommand support
Public Sub Class_Globals
' Public properties to be accessed after the wait for completes
Type TResultado(Tag As String, Success As Boolean, resultado As DBResult, ErrorMessage As String)
' Type TCommandResult(Tag As String, Success As Boolean, RowsAffected As Int, ErrorMessage As String)
'C <<< Definimos un tipo para almacenar la información de cada job
Type TJobInfo (Target As Object, EventName As String, IsQuery As Boolean)
'C <<< Un mapa para mantener un registro de los jobs activos
Private activeJobs As Map
'C <<< Un contador para generar tags únicos para cada job
Private jobCounter As Int
Public reqManager As DBRequestManager
Public cmd As DBCommand
Public resultado As TResultado
' Public commandResult As TCommandResult
Private logger As Boolean = False
End Sub
'Initializes the object.
Public Sub Initialize
'C <<< Inicializamos el mapa y el contador
activeJobs.Initialize
jobCounter = 0
End Sub
'Executes the query using the old jRDC1 mechanism.
'Parameters:
' - rdcLink: The link for the reqManager initialization.
' - Command: The DBCommand to execute.
' - Target: The module (like 'Me') where the completed event should be raised.
' - Event: The name of the event to raise when the query completes (e.g., "WrapperEvent").
Public Sub ExecuteQuery(rdcLink As String, Command As DBCommand, Target As Object, Event As String)
'<<< Incrementamos el contador para obtener un ID único
jobCounter = jobCounter + 1
Dim currentJobTag As String = "jRDCWrapJob_" & jobCounter
If logger Then Log($"ExecuteQuery (Tag: ${currentJobTag}): Command=${Command.Name}, Event=${Event}"$)
'<<< Creamos una instancia de TJobInfo para guardar el target y el evento
Dim jobInfo As TJobInfo
jobInfo.Initialize
jobInfo.Target = Target
jobInfo.EventName = Event
jobInfo.IsQuery = True ' Mark as query job
'<<< Guardamos la información del job en el mapa, usando el tag único como llave
activeJobs.Put(currentJobTag, jobInfo)
reqManager.Initialize(Me, rdcLink)
cmd = Command
'<<< Ejecutamos la consulta pasando nuestro TAG ÚNICO
reqManager.ExecuteQuery(cmd, 0, currentJobTag)
End Sub
'Executes a command (INSERT, UPDATE, DELETE) using the old jRDC1 mechanism.
'Parameters:
' - rdcLink: The link for the reqManager initialization.
' - Command: The DBCommand to execute.
' - Target: The module (like 'Me') where the completed event should be raised.
' - Event: The name of the event to raise when the command completes (e.g., "WrapperEvent").
Public Sub ExecuteCommand(rdcLink As String, Command As DBCommand, Target As Object, Event As String)
'<<< Incrementamos el contador para obtener un ID único
jobCounter = jobCounter + 1
Dim currentJobTag As String = "jRDCWrapJob_" & jobCounter
if logger then Log($"ExecuteCommand (Tag: ${currentJobTag}): Command=${Command.Name}, Event=${Event}"$)
'<<< Creamos una instancia de TJobInfo para guardar el target y el evento
Dim jobInfo As TJobInfo
jobInfo.Initialize
jobInfo.Target = Target
jobInfo.EventName = Event
jobInfo.IsQuery = False ' Mark as command job
'<<< Guardamos la información del job en el mapa, usando el tag único como llave
activeJobs.Put(currentJobTag, jobInfo)
reqManager.Initialize(Me, rdcLink)
cmd = Command
'<<< Ejecutamos el comando pasando nuestro TAG ÚNICO
reqManager.ExecuteCommand(cmd, currentJobTag)
End Sub
'This sub will be called by the DBRequestManager when the job is done
Public Sub JobDone(job As HttpJob)
'<<< Obtenemos el Tag único que asignamos al job
Dim currentJobTag As String = job.Tag
'C <<< Verificamos si este job fue iniciado por nuestro wrapper
If activeJobs.ContainsKey(currentJobTag) = False Then
If logger Then Log($"JobDone: Se recibió un job con un tag desconocido: ${currentJobTag}"$)
job.Release
Return
End If
'<<< Recuperamos la información específica de este job desde el mapa
Dim jobInfo As TJobInfo = activeJobs.Get(currentJobTag)
Try
If jobInfo.IsQuery Then
' Handle query result
resultado.Initialize
resultado.Tag = jobInfo.EventName ' Usamos el nombre del evento original como Tag del resultado
If job.Success Then
Dim dbResult As DBResult = reqManager.HandleJob(job)
resultado.Success = True
resultado.Resultado = dbResult
resultado.ErrorMessage = ""
Else
resultado.Success = False
resultado.Resultado = Null
resultado.ErrorMessage = job.ErrorMessage
End If
job.Release
'<<< Usamos la información recuperada del mapa para llamar al Sub correcto
if logger then LogColor($"EVENTO: ${jobInfo.EventName}_Completed"$, Colors.Magenta)
CallSubDelayed2(jobInfo.Target, jobInfo.EventName & "_Completed", resultado)
Else
' Handle command result
resultado.Initialize
resultado.Tag = jobInfo.EventName
If job.Success Then
Dim dbResult As DBResult = reqManager.HandleJob(job)
' Dim rowsAffected As Int = reqManager.HandleCommandResult(job)
' For Each records() As Object In dbResult.Rows
' Dim rowsAffected As Int = records(dbResult.Columns.Get("AffectedRows"))
' Next
resultado.Success = True
resultado.resultado = dbResult
resultado.ErrorMessage = ""
Else
resultado.Success = False
resultado.resultado = Null
resultado.ErrorMessage = job.ErrorMessage
End If
job.Release
'<<< Usamos la información recuperada del mapa para llamar al Sub correcto
If logger Then LogColor($"EVENTO: ${jobInfo.EventName}_Completed"$, Colors.Magenta)
CallSubDelayed2(jobInfo.Target, jobInfo.EventName & "_Completed", resultado)
End If
'C <<< Se remueve el job del mapa en caso de ÉXITO
activeJobs.Remove(currentJobTag)
Catch
if logger then LogColor("Error en jRDC1Wrapper.JobDone: " & LastException, Colors.Red)
'<<< MUY IMPORTANTE: Remover el job del mapa para no tener fugas de memoria
activeJobs.Remove(currentJobTag)
End Try
End Sub

View File

@@ -73,6 +73,7 @@ Sub RD_Init
limpiarBD = True limpiarBD = True
Log("NO EXISTE BD") Log("NO EXISTE BD")
End If End If
LogColor("#################################################" & CRLF & " safePath: " & safePath, Colors.red)
rkmt.Initialize(safePath, $"${name(0)}.rkmt.km"$, True) rkmt.Initialize(safePath, $"${name(0)}.rkmt.km"$, True)
If limpiarBD Then If limpiarBD Then
LogColor("----->> LIMPIAMOS BD RECUPERACION PRIMERA VEZ <<-------", Colors.red) LogColor("----->> LIMPIAMOS BD RECUPERACION PRIMERA VEZ <<-------", Colors.red)
@@ -117,6 +118,9 @@ Sub revisaSiExisteRespaldo
If File.size(File.DirInternal&"/kmts", $"${name(0)}.rkmt.km"$) < 43000 And File.Exists(File.DirRootExternal & extDir, $"${name(0)}.rkmt.km"$) Then If File.size(File.DirInternal&"/kmts", $"${name(0)}.rkmt.km"$) < 43000 And File.Exists(File.DirRootExternal & extDir, $"${name(0)}.rkmt.km"$) Then
LogColor("Copiamos el respaldo desde la tarjeta!!", Colors.red) LogColor("Copiamos el respaldo desde la tarjeta!!", Colors.red)
File.Copy(File.DirRootExternal & extDir, $"${name(0)}.rkmt.km"$, File.DirInternal&"/kmts", $"${name(0)}.rkmt.km"$) File.Copy(File.DirRootExternal & extDir, $"${name(0)}.rkmt.km"$, File.DirInternal&"/kmts", $"${name(0)}.rkmt.km"$)
RD_Init
Else Else
LogColor("No hay respaldo en tarjeta externa!", Colors.red) LogColor("No hay respaldo en tarjeta externa!", Colors.red)
End If End If
@@ -327,7 +331,9 @@ Sub RD_respalda_cat_detalle_paq
End If End If
Catch Catch
Log(LastException) Log(LastException)
rkmt.Close
End Try End Try
Log(2.5)
x.Close x.Close
End Sub End Sub