ayuda arrays por favor

81 views
Skip to first unread message

Jose Mario

unread,
Nov 9, 2022, 10:39:37 AM11/9/22
to Comunidad de Visual Foxpro en Español
tengo un dbf lo deseo pasar a un array
luego lo deseo pasar a un cursor
pero no me da

CLOSE data

USE salario EXCLUSIVE
INDEX on codigo tag codigo
lncuantos=RECCOUNT()
LOCAL lallenar(lncuantos)

SELECT salario
DIMENSION lallenar(1,8)
lnrows=0
SCAN
  lnrows=lnrows+1
  DIMENSION lallenar(lnrows,8)
ENDSCAN

SELECT salario
i=1
scan
 lallenar(i)=codigo
 lallenar(i)=salario
 lallenar(i)=descuento
 lallenar(i)=apagar
 i=i+1
endscan


CREATE CURSOR tmp (codi1 c(4), gana1 n(7,2), val1 n(7,2), tot1 n(7,2), codi2 c(2), gana2 n(7,2), val2 n(7,2), tot2 n(7,2))
SELECT * FROM tmp INTO CURSOR pagar READWRITE

SELECT pagar
f=1
DO WHILE f<=lncuantos
APPEND BLANK
 codi1=lallenar(f,1)
 gana1=lallenar(f,2)
 val1=lallenar(f,3)
 tot1=lallenar(f,4)
f=f+1

IF f>lncuantos
    EXIT
endif

 codi2=lallenar(f,5)
 gana2=lallenar(f,6)
 val2=lallenar(f,7)
 tot2=lallenar(f,8)

f=f+1
ENDDO

SELECT pagar
browse
SET STEP ON

campo1 campo2 campo3 campo4   campo5 campo6 campo7 campo8

ggcagnola gmail

unread,
Nov 9, 2022, 10:44:03 AM11/9/22
to publice...@googlegroups.com

SELECT salario
DIMENSION lallenar(1,8)
lnrows=0
SCAN
  lnrows=lnrows+1
  DIMENSION lallenar(lnrows,8)
ENDSCAN

que es eso de crear varias veces el mismo array???


creas siempre la tabla salarios???


tengo un dbf lo deseo pasar a un array
luego lo deseo pasar a un cursor

para que???

tarea para estudiantes???


Zarlu

unread,
Nov 9, 2022, 11:06:30 AM11/9/22
to Comunidad de Visual Foxpro en Español
Buenos días José Mario!

Si pudieras explicar cual es la complejidad que se te presenta.
Parece ser que estás codificando innecesariamente cuando quizá con un select sql lo solucionas

Suerte
zarlu
Chetumal, Quintana Roo

Jose Mario

unread,
Nov 9, 2022, 11:24:16 AM11/9/22
to Comunidad de Visual Foxpro en Español
bueno tengo un dbf que lo lleno 
codigo    salario     descuento   apagar
1234    300.00       75.00         225.00
6578    275.00        25.00         250.00

para no gastar mucho papel
lo deseo imprimir
codigo    salario    descuento  apagar                    codigo    salario    descuento    apagar
12345    300.00       75.00         225.00                     6578         275.00       25.00          250.00

quiero ahorrar papel

Jose Mario

unread,
Nov 9, 2022, 11:26:48 AM11/9/22
to Comunidad de Visual Foxpro en Español
no es para mi trabajo, pasaron los tiempos de estudiantes, nunca hice esto en vfp

lo hice en excel
Sub borrac()
Dim cont As Long, f As Long, j As Long, k As Long, c As Long
ultc = Range("Q1").Value   'numero de columnas a recorrera la derecha
ultf = Range("R1").Value   'numero de filas a recorrer hacia abajo
f = 3
For cont = 1 To ultf
  c = 1
  k = 2
  evaluar = Cells(cont, 1).Value
  If Not IsNumeric(evaluar) Then
    'cont = cont + 1
    Else
   
   Do While c <= ultc
     Cells(cont, c) = Empty
     c = c + 1
      If cont = f And c = k Then  ' para no borrar el total del empleado
        c = c + 1
        k = k + 2
       End If
       If Cells(cont, c) = "FIN" Then   '0 para salirse del bucle
         c = 9
       End If
   Loop
 End If
   If cont = 3 Or cont = 6 Or cont = 9 Or cont = 12 Then    'para no borrar el total del empleado
    f = f + 3
  End If
Next cont
End Sub

ggcagnola gmail

unread,
Nov 9, 2022, 11:36:24 AM11/9/22
to publice...@googlegroups.com

creas un cursor con el doble de columnas que necesitas

recorres la tabla original

si el recno() es impar grabas en las columnas de la izquierda

si es par en las columnas de la derecha

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/91e8edb5-836e-4b7a-84dd-54415eef0bfbn%40googlegroups.com.

Zarlu

unread,
Nov 9, 2022, 11:40:28 AM11/9/22
to Comunidad de Visual Foxpro en Español
Qué tal José Mario!

Haz probado el reporte con columnas?
Sin título.png

zarlu
Chetumal, Quintana Roo, México

Jose Mario

unread,
Nov 9, 2022, 11:42:50 AM11/9/22
to Comunidad de Visual Foxpro en Español
juela que facil, estaba, esta mejor asi, gracias

Jose Mario

unread,
Nov 9, 2022, 11:48:14 AM11/9/22
to Comunidad de Visual Foxpro en Español
voy a probar , nunca habia probado

Jose Mario

unread,
Nov 9, 2022, 12:30:32 PM11/9/22
to Comunidad de Visual Foxpro en Español
gracias asi lo resolvi
y si me dicen que tengo que meter 3 empleados

SELECT salario
scan
 m.codi=codigo
 m.sala=salario
 m.desc=descuento
 m.apagar=apagar
 m.recno=RECNO()
  SELECT pagar
 IF MOD(m.recno,2)=1
  APPEND BLANK
   REPLACE NEXT 1 codi1 WITH m.codi, gana1 WITH m.sala in pagar
   REPLACE NEXT 1 val1 WITH m.desc, tot1 WITH m.apagar in pagar
 ELSE
   REPLACE NEXT 1 codi2 WITH m.codi, gana2 WITH m.sala in pagar
   REPLACE NEXT 1 val2 WITH m.desc, tot2 WITH m.apagar in pagar
 endif

  SELECT salario
endscan

El miércoles, 9 de noviembre de 2022 a la(s) 10:36:24 UTC-6, ggca...@gmail.com escribió:

Víctor Hugo Espínola Domínguez

unread,
Nov 9, 2022, 5:23:35 PM11/9/22
to publice...@googlegroups.com
https://www.mediafire.com/file/x6pwrrsedmqfdls/gencols.prg/file
Un programa para dividir en columnas una tabla/cursor, en la variable pnCols indicas cuantas columnas deseas.

Saludos,
Víctor.
Lambaré - Paraguay.



Jose Mario

unread,
Nov 11, 2022, 2:15:47 PM11/11/22
to Comunidad de Visual Foxpro en Español
ASI ME AHORRE MUCHO PAPEL GRACIAS A LO UQ ME SUGERISTES
PORQUE EL RECNO() SOLO ME SERVIA PARA 2
SELECT salarioa
ln=1
scan
 m.codi=codigo
 m.sala=salario
 m.desc1=descuento1
 m.desc2=descuento2
 m.apagar=apagar
 m.nom=LEFT(nombre,35)
SELECT pagar
DO case
CASE ln=1
  APPEND BLANK
   REPLACE NEXT 1 nom1 WITH m.nom, gana1 WITH m.sala in pagar
   REPLACE NEXT 1 val1 WITH    m.desc1, vale1 WITH    m.desc2, tot1 WITH m.apagar in pagar
CASE ln=2
   REPLACE NEXT 1 nom2 WITH m.nom, gana2 WITH m.sala in pagar
   REPLACE NEXT 1 val2 WITH m.desc1, vale2 WITH    m.desc2, tot2 WITH m.apagar in pagar
CASE ln=3
   REPLACE NEXT 1 nom3 WITH m.nom, gana3 WITH m.sala in pagar
   REPLACE NEXT 1 val3 WITH m.desc1, vale3 WITH    m.desc2, tot3 WITH m.apagar in pagar
CASE ln=4
   REPLACE NEXT 1 nom4 WITH m.nom, gana4 WITH m.sala in pagar
   REPLACE NEXT 1 val4 WITH m.desc1, vale4 WITH    m.desc2, tot4 WITH m.apagar in pagar
   ln=0
ENDCASE
ln=ln+1
SELECT salarioa
endscan

MUCHAS GRACIAS
El miércoles, 9 de noviembre de 2022 a la(s) 10:36:24 UTC-6, ggca...@gmail.com escribió:
Reply all
Reply to author
Forward
0 new messages