Importando productos desde excel

 Visual Basic |  copy code |? 
001
 'código de la forma PRODSEXCEL (utilizado en el Ambiente de Desarrollo)
002
Sub Form_load
003
 
004
    Me.Caption = "Importando desde Excel(tm)"
005
    Archivo.File = Ambiente.Path & "\articulos.xls"
006
 
007
End Sub
008
 
009
 
010
Sub Button_Click()   
011
 
012
    Select Case ControlEvento.Tag 
013
           Case "Aceptar"
014
 
015
                AplicaInventario
016
                DescargaForma
017
 
018
           Case "Cancelar" 
019
 
020
                DescargaForma
021
 
022
           Case "cmdButton2"
023
 
024
                ShellRun Parent.hWnd, "Open", Archivo.File                      
025
 
026
    End Select
027
 
028
End Sub
029
 
030
 
031
Sub AplicaInventario
032
 
033
    Set excelConnection = CreateObject("ADODB.Connection")
034
    excelConnection.ConnectionString = "driver={Microsoft Excel Driver (*.xls)};DBQ=" & Controles("Archivo").File
035
    excelConnection.Open    
036
 
037
    ImportaInventario excelConnection
038
 
039
End Sub
040
 
041
 
042
Sub ImportaInventario( excelConnection )
043
    Dim rstProductos
044
    Dim bolAfectaInventario    
045
    Dim rstArticulo
046
    Dim rstClaveAdd
047
    Dim Articulos 
048
    Dim Ajuste  
049
    Dim rstImpuesto
050
 
051
    Ambiente.Connection.Execute "UPDATE prods SET etiquetas = 0"
052
 
053
    bolAfectaInventario = True
054
 
055
 
056
'--------------------------------------------------------------------------------------------------------------------
057
'2011_11_22 Jose Felix jofelchez@gmail.com
058
'Agregamos las Lineas a la Importación
059
 
060
 
061
 Set rstExcel = CreaRecordSet( "SELECT linea FROM [ARTICULOS$] group by linea", (excelConnection ) )
062
    Set Query = NewQuery()    
063
    Set Query.Connection = Ambiente.Connection
064
    While Not rstExcel.EOF 
065
 
066
                Set rstLinea = CreaRecordSet( "SELECT * FROM lineas WHERE Linea = '" & rstExcel("Linea") & "'", Ambiente.Connection )
067
 
068
 Query.Reset                                                                                                                      
069
 
070
                If rstLinea.EOF Then
071
                   Query.strState = "INSERT"
072
                Else  
073
                   Query.strState = "UPDATE"
074
                   Query.Condition = "linea = '" & rstExcel("linea") & "'"
075
                End If  
076
 
077
                Query.AddField "lineas","linea", rstExcel("Linea")
078
                Query.AddField "lineas","descrip",rstExcel("Linea")
079
                Query.AddField "lineas","Usuario", Ambiente.Uid
080
                Query.AddField "lineas","usuFecha", Date
081
                Query.AddField "lineas","usuHora",Formato( Time, "hh:mm:ss" )
082
                Query.AddField "lineas","Numero", 0
083
 
084
                Query.CreateQuery 
085
                Query.Execute                                                   
086
 
087
 Query.Reset                                                                                                      
088
 
089
          rstExcel.MoveNext
090
    Wend                                                        
091
 
092
 
093
 
094
 
095
'--------------------------------------------------------------------------------------------------------------------
096
 
097
 
098
    Set rstProductos = CreaRecordSet( "SELECT * FROM [ARTICULOS$]", (excelConnection ) )
099
    Set Query = NewQuery()    
100
    Set Query.Connection = Ambiente.Connection
101
 
102
    Set Articulos = CreateObject( "MyBArticulos.Articulos" )
103
    Set Articulos.Ambiente = Ambiente                    
104
 
105
    nEntrada = 0
106
    nSalida = 0
107
 
108
    While Not rstProductos.EOF 
109
 
110
          If Not clEmpty( "" & (rstProductos("Código del producto")) ) Then
111
             If Not clEmpty( "" & (rstProductos("Descripción")) ) Then
112
 
113
                Articulos.recalculoDeInventario rstProductos("Código del producto"), Ambiente, False
114
                Set rstArticulo = CreaRecordSet( "SELECT articulo, existencia FROM prods WHERE articulo = '" & rstProductos("Código del producto") & "'", Ambiente.Connection )
115
 
116
                Query.Reset
117
 
118
                If rstArticulo.EOF Then
119
                   Query.strState = "INSERT"
120
                Else  
121
                   Query.strState = "UPDATE"
122
                   Query.Condition = "articulo = '" & rstProductos("Código del producto") & "'"
123
                End If  
124
 
125
                Query.AddField "prods","articulo", rstProductos("Código del producto")
126
                Query.AddField "prods","descrip",rstProductos("Descripción")
127
                Query.AddField "prods","linea", rstProductos("Linea")
128
                Query.AddField "prods","marca", "SYS"
129
                Query.AddField "prods","fabricante", "SYS"
130
                Query.AddField "prods","precio1", FDec( rstProductos("Precio de venta") ) 
131
                Query.AddField "prods","costo_u", FDec( rstProductos("Costo ultimo") )    
132
                Query.AddField "prods","etiquetas", Val2( rstProductos("Existencia") )
133
                Query.AddField "prods","Unidad",  rstProductos("Unidad") 
134
                Query.AddField "prods","precio2", FDec( rstProductos("Precio2") )  
135
                Query.AddField "prods","precio3", FDec( rstProductos("Precio3") ) 
136
                Query.AddField "prods","precio4", FDec( rstProductos("Precio4") ) 
137
                Query.AddField "prods","precio5", FDec( rstProductos("Precio5") )
138
 
139
 
140
 If Val2(rstProductos("Impuesto")) > 0 Then
141
                 Set rstImpuesto = CreaRecordSet( "SELECT * FROM impuestos WHERE valor = " & _
142
 FDec( rstProductos("Impuesto") ), Ambiente.Connection ) 
143
 Else
144
        If ClAt("0", Trim(rstProductos("Impuesto"))) > 0 AND Len(Trim(rstProductos("Impuesto"))) = 1 Then
145
                  Set rstImpuesto = CreaRecordSet( "SELECT * FROM impuestos WHERE valor = " & _
146
 FDec( rstProductos("Impuesto") ), Ambiente.Connection )
147
 Else
148
                     Set rstImpuesto = CreaRecordSet( "SELECT * FROM impuestos WHERE impuesto = '" & _
149
 rstProductos("Impuesto") & "'", Ambiente.Connection )
150
 End If
151
                End If
152
 
153
                If rstImpuesto.EOF Then
154
                   cImpuesto = "SYS"
155
                Else
156
                   cImpuesto = rstImpuesto( "impuesto" )                  
157
                End If
158
 
159
                Query.AddField "prods","impuesto", cImpuesto
160
                Query.AddField "prods","paraventa", 1
161
                Query.AddField "prods","invent", 1
162
                Query.CreateQuery 
163
                Query.Execute                                                   
164
 
165
 Query.Reset 
166
 
167
                If Not IsNull( rstProductos("Existencia") ) Then
168
 
169
                   Ajuste = FDec( rstProductos("Existencia") )' - Val2( rstArticulo("Existencia") )
170
                   AfectandoInventario rstProductos("Código del producto"), Ajuste
171
                   Articulos.recalculoDeInventario rstProductos("Código del producto"), Ambiente, False
172
 
173
                   If Ajuste <> 0 Then
174
                      If Ajuste > 0 Then      
175
                         nEntrada = CreaEntrada( nEntrada,  rstProductos("Código del producto"), Ajuste,  FDec( rstProductos("Costo ultimo") ), rstProductos("Descripción") )
176
                      Else
177
                         nSalida = CreaSalida( nSalida,  rstProductos("Código del producto"), Ajuste,  FDec( rstProductos("Precio de venta") ), rstProductos("Descripción") )
178
                      End If                   
179
    Else
180
   Query.Reset
181
   Query.SQL = "UPDATE prods SET costo_u = " & FDec( rstProductos("Costo ultimo") ) & _
182
               " WHERE articulo = '" & rstProductos("Código del producto") & "'"
183
   Query.Execute
184
                   End If
185
 
186
                End If
187
 
188
                If Not clEmpty( "" & rstProductos("Código de barras") ) Then
189
 
190
                   Set rstClaveAdd = CreaRecordSet( "SELECT clave FROM clavesadd WHERE clave = '" & rstProductos("Código de barras") & "'", Ambiente.Connection )
191
 
192
                   Query.Reset
193
 
194
                   If rstClaveAdd.EOF Then
195
                      Query.strState = "INSERT"
196
                   Else  
197
                      Query.strState = "UPDATE"
198
                      Query.Condition = "clave = '" & rstProductos("Código de barras") & "'"
199
                   End If 
200
 
201
                   Query.AddField "clavesadd","Clave", rstProductos("Código de barras")
202
                   Query.AddField "clavesadd","Dato1", ""
203
                   Query.AddField "clavesadd","Usuario", Ambiente.Uid
204
                   Query.AddField "clavesadd","usuFecha", Date
205
    Query.AddField "clavesadd","usuHora", Formato( Time, "hh:mm:ss" )
206
                   Query.AddField "clavesadd","Dato2", ""
207
                   Query.AddField "clavesadd","Articulo", rstProductos("Código del producto")
208
                   Query.AddField "clavesadd","Cantidad", 1
209
                   Query.AddField "clavesadd","Unidad", ""
210
 
211
                   If bolAfectaInventario = True Then
212
                      Query.AddField "clavesadd","Existencia", 0
213
                   End If
214
 
215
                   Query.AddField "clavesadd","Libre", 0
216
                   Query.AddField "clavesadd","Exportado", 0
217
                   Query.AddField "clavesadd","Precio", 0
218
                   Query.AddField "clavesadd","imagen", ""
219
                   Query.AddField "clavesadd","etiquetas", 0
220
                   Query.CreateQuery
221
                   Query.Execute
222
 
223
                End If
224
 
225
             End If
226
          End If
227
 
228
          Detalle.Caption = "" & rstProductos("Descripción")           
229
 
230
          rstProductos.MoveNext
231
    Wend                                                        
232
 
233
    MyMessage "Catálogo importado"                            
234
 
235
    If Question( "Desea imprimir etiquetas de codigo de barras", 1 ) = True Then
236
 
237
       Script.RunProcess "ZEBRA2844", Me, Ambiente
238
 
239
    End If
240
 
241
End Sub
242
 
243
 
244
Sub AfectandoInventario( strArticulo, Existencia )
245
    Dim rstProd
246
    Dim n
247
    Dim Query
248
    Dim rstInvInicial
249
 
250
    Set Query = NewQuery()    
251
    Set Query.Connection = Ambiente.Connection
252
 
253
    Set rstProd = CreaRecordSet( "SELECT articulo, existencia, costo_u FROM prods WHERE articulo = '" & strArticulo & "'", Ambiente.Connection )
254
    n = n + 1                                   
255
 
256
    If Existencia = 0 Then
257
       Exit Sub
258
    End If
259
 
260
    Set MovInv = CreateObject( "MyBInventario.Inventario" )
261
    Set MovInv.Ambiente = Ambiente
262
 
263
    MovInv.FechaMov = Date
264
    MovInv.uId = Me.Ambiente.uId
265
    MovInv.EntradaSalida = "S"
266
    MovInv.cMetodo = Me.Ambiente.costeo
267
    MovInv.EstacionSalida = Trim(Ambiente.Estacion)
268
 
269
    While Not rstProd.EOF 
270
 
271
          n = n + 1
272
 
273
          Query.Reset
274
          Query.strState = "INSERT"
275
          Query.AddField "movsinv","MOVIMIENTO", 1 
276
 
277
          If Existencia > 0 Then     
278
             MovInv.EntradaSalida = "E"
279
             MovInv.nMovimiento = 1
280
             MovInv.TipoMovim = "EX+"
281
             MovInv.NoMovim = 1
282
             MovInv.TipoOperacion = "EX+"
283
             MovInv.nCantidad = Existencia
284
             MovInv.AfectaCosto = True
285
          Else
286
             MovInv.EntradaSalida = "S"
287
             MovInv.nMovimiento = 1
288
             MovInv.TipoMovim = "EX-"
289
             MovInv.NoMovim = 1
290
             MovInv.TipoOperacion = "EX-"
291
             MovInv.nCantidad = Existencia * -1
292
          End If                   
293
 
294
          MovInv.nPrecio = rstProd("costo_u")
295
          MovInv.nAlmacen = 1          
296
          MovInv.cArticulo = strArticulo  
297
          MovInv.AfectaInventario                                                        
298
 
299
 
300
          Set rstInvInicial = CreaRecordSet( "SELECT * FROM invinicial WHERE articulo = '" & rstProd("articulo") & "'", _
301
              Ambiente.Connection )
302
 
303
          If rstInvInicial.EOF Then   
304
             Query.Reset
305
             Query.strState = "INSERT"
306
             Query.AddField "invinicial","fecha", DateSerial( 2000, 01, 01 )
307
             Query.AddField "invinicial","articulo", rstProd("articulo")
308
             Query.AddField "invinicial","existencia", Existencia
309
             Query.AddField "invinicial","costo", rstProd("costo_u")
310
             Query.CreateQuery
311
             Query.Execute
312
          End If      
313
 
314
          rstProd.MoveNext
315
 
316
    Wend    
317
 
318
End Sub
319
 
320
 
321
Function FDec( Number )
322
 
323
    FDec = Replace( "" & Number, ",", "." )
324
 
325
End Function
326
 
327
 
328
Function CreaEntrada( Entrada, Articulo, Cantidad, Costo, Descripcion )
329
    Dim Query           
330
    Dim rstArticulo
331
 
332
    Set Query = NewQuery()
333
 Set Query.Connection = Ambiente.Connection
334
 
335
    If Entrada = 0 Then
336
    Query.Reset
337
       Query.strState = "INSERT"
338
 
339
       Entrada = TraeSiguiente( "MovEnt", Ambiente.Connection ) 
340
       Query.AddField "entradas", "entrada", Entrada
341
       Query.AddField "entradas", "ocupado", 1
342
       Query.AddField "entradas", "f_emision", Date
343
       Query.AddField "entradas", "tipo_doc", "EX+"
344
       Query.AddField "entradas", "importe", 0
345
       Query.AddField "entradas", "costo", 0
346
       Query.AddField "entradas", "almacen", 1
347
       Query.AddField "entradas", "estado", "CO"
348
       Query.AddField "entradas", "observ", vbNullString
349
       Query.AddField "entradas", "tipo_cam", 1
350
       Query.AddField "entradas", "moneda", Ambiente.Moneda
351
       Query.AddField "entradas", "datos", vbNullString
352
       Query.AddField "entradas", "usuario", Ambiente.uId
353
       Query.AddField "entradas", "usufecha", Date
354
    On Error Resume Next
355
       Query.AddField "entradas", "usuhora", Libreria.Formato(Time, "hh:mm:ss")
356
    On Error GoTo 0
357
       Query.CreateQuery
358
       Query.Execute
359
    End If 
360
 
361
    Query.Reset
362
    Query.strState = "INSERT"
363
    Query.AddField "entpart","ENTRADA", Entrada
364
    Query.AddField "entpart","TIPO_DOC", "EX+"
365
    Query.AddField "entpart","NO_REFEREN", Entrada
366
    Query.AddField "entpart","ARTICULO", Articulo
367
    Query.AddField "entpart","CANTIDAD", Cantidad
368
    Query.AddField "entpart","PRECIO", Costo
369
    Query.AddField "entpart","OBSERV", Descripcion
370
    Query.AddField "entpart","PARTIDA", 0
371
    Query.AddField "entpart","ID_ENTRADA", TraeSiguiente( "entpart", Ambiente.Connection )
372
    Query.AddField "entpart","Usuario", Ambiente.Uid
373
    Query.AddField "entpart","UsuFecha", Date
374
    Query.AddField "entpart","UsuHora", Libreria.Formato( Time, "hh:mm:ss" )
375
    Query.AddField "entpart","PRCANTIDAD", 0
376
    Query.AddField "entpart","PRDESCRIP", ""
377
    Query.AddField "entpart","CLAVEADD", ""
378
    Query.CreateQuery
379
    Query.Execute   
380
 
381
    CreaEntrada = Entrada
382
 
383
End Function
384
 
385
 
386
 
387
Function CreaSalida( Salida, Articulo, Cantidad, Precio, Descripcion )
388
    Dim Query           
389
    Dim rstArticulo
390
 
391
    Set Query = NewQuery()
392
 Set Query.Connection = Ambiente.Connection
393
 
394
    If Salida = 0 Then
395
    Query.Reset
396
       Query.strState = "INSERT"
397
 
398
       Salida = TraeSiguiente( "MovSal", Ambiente.Connection ) 
399
 
400
       Query.AddField "salidas","Salida", Salida
401
       Query.AddField "salidas","ocupado", 1
402
       Query.AddField "salidas","tipo_doc", "EX-"
403
       Query.AddField "salidas","F_EMISION", Date
404
       Query.AddField "salidas","IMPORTE", 0
405
       Query.AddField "salidas","COSTO",  0
406
       Query.AddField "salidas","ALMACEN", 1
407
       Query.AddField "salidas","ESTADO", "CO"
408
       Query.AddField "salidas","OBSERV", "Salida automática por excel"
409
       Query.AddField "salidas","DATOS", ""
410
       Query.AddField "salidas","USUARIO", Ambiente.Uid
411
       Query.AddField "salidas","USUFECHA", Date
412
       Query.AddField "salidas","USUHORA", Libreria.Formato( Time, "hh:mm:ss" ) 
413
       Query.AddField "salidas","traspaso", 0
414
       Query.AddField "salidas","almt", 0
415
       Query.AddField "salidas","estraspaso", 0
416
       Query.AddField "salidas","sucursal", ""
417
       Query.AddField "salidas","esparasucursal", 0
418
       Query.AddField "salidas","entsuc", 0
419
       Query.AddField "salidas","folio", TraeSiguiente(Trim(Ambiente.Estacion) & "salida", Ambiente.Connection)
420
       Query.AddField "salidas","estacion", Ambiente.Estacion
421
       Query.CreateQuery
422
       Query.Execute
423
    End If 
424
 
425
    Query.Reset
426
    Query.strState = "INSERT"
427
    Query.AddField "salpart","SALIDA", Salida
428
    Query.AddField "salpart","TIPO_DOC", "EX-"
429
    Query.AddField "salpart","NO_REFEREN", Salida
430
    Query.AddField "salpart","ARTICULO", Articulo
431
    Query.AddField "salpart","CANTIDAD", Cantidad * -1
432
    Query.AddField "salpart","PRECIO", Precio
433
    Query.AddField "salpart","OBSERV", Descripcion
434
    Query.AddField "salpart","PARTIDA", 0
435
    Query.AddField "salpart","ID_SALIDA", TraeSiguiente( "salpart", Ambiente.Connection )
436
    Query.AddField "salpart","Usuario", Ambiente.Uid
437
    Query.AddField "salpart","UsuFecha", Date
438
    Query.AddField "salpart","UsuHora", Libreria.Formato( Time, "hh:mm:ss" )
439
    Query.AddField "salpart","PRCANTIDAD", 0
440
    Query.AddField "salpart","PRDESCRIP", ""
441
    Query.AddField "salpart","CLAVEADD", ""
442
    Query.AddField "salpart","costo", 0
443
    Query.CreateQuery
444
    Query.Execute  
445
 
446
    CreaSalida = Salida
447
 
448
End Function
449
 
450

17 comments for “Importando productos desde excel

  1. Adan Salgado
    enero 2, 2016 at 3:29 pm

    Exelente aporte me sirvio de mucho gracias

  2. PEDRO MARTINEZ
    agosto 13, 2015 at 4:58 pm

    hola este error lo solucione agregando la columna Línea poniendo “SYS” en las celdas y agregando también la columna Unidad poniendo en las celdas “pzas” con esto me dejo importar mi inventario espero les sirva

    • José Félix
      agosto 13, 2015 at 7:21 pm

      Muchas gracias por su colaboración, señor Martínez. Estoy seguro que será de utilidad para los demás compañeros.

      Saludos
      José Félix

  3. samuel
    diciembre 20, 2014 at 1:00 am

    estoy tratando de importarlos articculos y este mensaje es el que me sale

    Button_Click PRODSEXCEL No se encontró el elemento en la colección que corresponde al nombre o el ordinal solicitado. —> 0 3265 En línea: 87

    me pueden orientar porfavor

    • José Félix
      diciembre 20, 2014 at 1:43 pm

      Buen día

      Por favor apóyeme con un pomo de 300 y le envío un parche para que pueda importar sin problemas.
      Saludos
      José Félix

  4. cpc
    noviembre 5, 2014 at 12:47 am

    Amigos:
    El error ” Button_Click PRODSEXCEL No se encontró el elemento en la colección que corresponde con el nombre o el ordinal pedido. —> 0 3265 En línea: 89″, lo pueden corregir agregando la columna “Linea”, y llenándola con el valor SYS, también las demás columnas deben estar llenos de acuerdo al tipo de celda que les corresponde. Por ejemplo, en “Impuesto” poner IVA (ya lo habían comentado anteriormente, José Félix). Espero les sirva a alguien, sin fines de lucro.

    • José Félix
      noviembre 5, 2014 at 3:08 am

      Muchas gracias CPC por este recordatorio, se convierte en aportación para los nuevos visitantes que tengan la misma duda.
      Saludos
      José Félix

    • diciembre 12, 2014 at 8:58 pm

      Muchas Gracias @CPC me sirvio bastante tu aporte, esta recibiendo ese error al Exportar. PEro ya quedo solucionado

      Gracias

  5. cpc
    noviembre 5, 2014 at 12:46 am

    El error ” Button_Click PRODSEXCEL No se encontró el elemento en la colección que corresponde con el nombre o el ordinal pedido. —> 0 3265 En línea: 89″, lo pueden corregir agregando la columna “Linea”, y llenándola con el valor SYS, también las demás columnas deben estar llenos de acuerdo al tipo de celda que les corresponde. Por ejemplo, en “Impuesto” poner IVA (ya lo habían comentado anteriormente, José Félix). Espero les sirva a alguien, sin fines de lucro.

  6. Alfonso
    octubre 1, 2014 at 4:50 am

    Podrian ayudarme cuando intento importar articulos desde excel me aparece ” Button_Click PRODSEXCEL No se encontró el elemento en la colección que corresponde con el nombre o el ordinal pedido. —> 0 3265 En línea: 89″ ayuda por favor

    • José Félix
      octubre 1, 2014 at 5:44 pm

      Buenas tardes. Le puedo ofrecer un parche que le soluciona el error , en 300 pesos a la cuenta que aparece en la parte superior izquierda

      Saludos
      José Félix

  7. Héctor Orozco
    agosto 9, 2014 at 9:41 pm

    tengo este problema al momento de importar el archivo de “artículos” previamente modificado, al cual le agregue código, descripción y linea: If ClAt(“0″, Trim(rstProductos(“Impuesto”))) > 0 AND Len(Trim(rstProductos(“Impuesto”))) = 1 Then

    • José Félix
      agosto 9, 2014 at 9:46 pm

      Buenas tardes. Por favor intente colocar en la columna IMPUESTO el valor 0 o SYS encaso de que sus productos no lleven iva o coloque IVA si es que se desglosará el impuesto adicional.

      Saludos
      José Félix

  8. Victor
    mayo 7, 2014 at 9:54 pm

    Me pasa lo mismo… Button_Click PRODSEXCEL No se encontró el elemento en la colección que corresponde al nombre o el ordinal solicitado. —> 0 3265 En línea: 83

  9. MISAEL GARCIA VAZQUEZ
    abril 8, 2013 at 1:37 am

    Esto soluciona el error en la versión 2012?

  10. jose antonio
    febrero 29, 2012 at 7:12 pm

    Que tal la verdad soy nuevo en esto.. y apenas estoy checando su producto.. pero he tenido algunos problemas para exportar productos desde excel me manda este error Button_Click PRODSEXCEL El nombre de columna ‘ensambladoenlinea’ no es válido. —> 0 -2147217900 En línea: 97

    • eric
      marzo 10, 2014 at 10:17 pm

      que tal a mi me pasa lo mismo que a jose antonio alguien lo resolvio???? Button_Click PRODSEXCEL El nombre de columna ‘ensambladoenlinea’ no es válido. —> 0 -2147217900 En línea: 97

Deja un comentario