Inicio > Visual FoxPro > victoramf > relacionar dos tablas maestras

relacionar dos tablas maestras

Experto:
Usuario:
Fecha: 29/05/2008
Valoración: (5,00 sobre 5) Categoría: Visual FoxPro
21/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Hola experto, estoy realizando un programa para Libro Caja - Banco y tengo dos tablas principales ingresos y egresos la idea es relacionar estas dos tablas principales para poder emitir un reporte mostrando infoemacion en la misma hoja tanto de ingresos y egresos.
La tabla Ingresos tienes estos campos: numauto (autoinc), n_corr c(5),f_oper d(8),m_pago c(3), id_desc n(3),id_prov c(11), numero c(14), id_den c(8), deudor n(12,2), acreedor n(12,2), mes c(2),año c(4), nommes c(9) los indices son numauto (principal), id_desc, id_prov, id_den (regulares), las tres tablas relacionadas son desc_oper_ingresos que tiene estos campos id_desc n(3), operacion c(40) y su indice es id_desc, prov_ingresos que tienen estos campos id_prov c(11) , r_social c(40) y su indice es id_prov, denom_ingresos que tiene estos campos id_den c(8), descripcion c(40) y indice es id_den.
La tabla Egresos tienes estos campos: numauto (autoinc), n_corr1 c(5),f_oper1 d(8),m_pago1 c(3), cod_desc n(3),cod_prov c(11), numero1 c(14), cod_den c(8), deudor1 n(12,2), acreedor1 n(12,2), mes c(2),año c(4), nommes c(9) los indices son numauto (principal), cod_desc, cod_prov, cod_den (regulares), las tres tablas relacionadas son desc_oper_egresos que tiene estos campos cod_desc n(3), operacion1 c(40) y su indice es cod_desc, prov_egresos que tienen estos campos cod_prov c(11) , r_social1 c(40) y su indice es cod_prov, denom_egresos que tiene estos campos cod_den c(8), descripcion1 c(40) y indice es cod_den.
He hecho dos formularios uno para ingresos y otro para egresos y se guardan en tablas diferenetes ya que a veces solamente puede haber ingresos y no egresos, si tienes alguna sugerencia te lo agradeceré.
21/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
¿Las tablas comparten algún campo en común?
22/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Hola experto te explico: la tabla ingresos tiene los campos id_desc, id_prov, id_den estos son los campos comunes para relacionarse con las tablas desc_oper_ingresos que tiene el campo id_desc, prov_ingresos que tiene el campo id_prov, denom_ingresos que tiene el campo id_den.
La tabla egresos tiene los campos cod_desc, cod_prov, cod_den estos son los campos comunes para relacionarse con las tablas desc_oper_egresos que tiene el campo cod_desc, prov_egresos que tiene el campo cod_prov, denom_ingresos que tiene el campo cod_den.
22/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Ok.

Las tablas de ingreso y egresos ¿Comparten algún campo en común?
22/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Las tablas de ingresos y egresos no comparten algun campo en comun, ya que cada una  alamacena informacion independientemente. Cada una se relaciona con tres tablas diferentes. Justamente a eso quiero llegar relacionar las dos tablas maestras para poder generar un reporte final juntando la tabla ingresos relacionadas con sus tres tablas y egresos relacionada con sus tres tablas. Ojala y me deje entender.
22/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Agrega un campo a cada tabla que permita relacionarlas, te sugiero que mediante la cuenta de afectación se cree la llave
22/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Agrego un campo a cada tabla, y esos campos agregados que informacion guardarian, a que cuenta de afectacion te refieres.   
22/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
¿Como deseas que se relaciónen? no porque, como.

Los egeresos e ingresos deben de afectar a una cuenta contable ¿Me equivoco?
22/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Te explico sucede que los ingresos y egresos lo ingresan manualmente (a puño y letra) en un Libro y ese libro se llama Libro Caja Bco, me piden mecanizarlo y lo que ingresan manualmente ahora lo tienen hacer a travez del programa que estoy haciendo, es como si seria un mantenimiento tanto para egresos como para ingresos es por eso que tengo dos formularios, lo que se ingresa en ingresos es numero correlativo, fecha de operacion medio de pago, descripcion de la operacion, apellidos y nombres, codigo, denominacion, deudor y acreedor los mismos campos se ingresan para egresos, me han dado un reporte de muestra que ellos han hecho en excel y en ese reporte estan los  ingresos  y egresos en la misma hoja, y eso lo quiero aplicar en mi programa relacionar las dos tablas maestras para poder emitir reportes tanto en vista preliminar como a la impresora mostrando o imprimiendo todo junto (ingresos y egresos), no puedo hacer los reportes por separado de ingresos y de egresos. Para vista preliminar lo tengo que hacer desde el reporteador de windows y para imprimir lo tengo que hacer desde un prg.
22/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Eso responde el porque.

Pregunta como fue que relacionaron las tablas, debe de ser por medio de una clave combinada, una vez que obtengas ese dato puedes crear la llave que puede servir para relacionarlas.

Si no existe una llave, ya sea formada por un campo o por varias, no puedes establecer la relación.
22/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Yo estoy haciendo un programa nuevo independiente al sistema que ya existe en mi empresa, el programa nuevo es solo para mecanizar el Libro Caja - banco.
22/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
No cuestiono que ni para que, solo inquiero el como ¿Como se crea esa relación actualmente?, respondiendo esa pregunta podemos crear una forma automática de crearla.
22/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Yo estoy haciendo un programa nuevo independiente al sistema que ya existe en mi empresa, el programa nuevo es solo para mecanizar el Libro Caja - banco.
22/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Eso es lo que quiero hacer crear la relacion entre las dos tablas primarias, suponiendo que en ingresos ingresas 10 items y en egresos solo 5 items, en el reporte tengo que mostrar los 15 ingresos y los 5 egresos en la misma hoja. 
22/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Mencionaste que te mostraron una hoja de Excel con la relación que deseas, para crear esa relación en VFP es necesario saber como se hizo en Excel.

¿O solo deseas mostrar los 10 ingresos y los 5 egeresos, uno después de otro y no relacionados entre si?
23/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
A ver en la hoja de calculo tengo lo siguiente:
                   Ingresos                                                                    Egresos
numero fecha     medio descripcion ....                numero     fecha    medio   descripcion .... 
00141  05/05/08  0041  cobranza                        00540   12/05/08  Pago       AFP
00141  15/05/08  0041  cobranza                        00541    17/05/08 Pago       sunass
.......                                                                       ...........
........                                                                      ...........
Asi seria el reporte en Vfox , tanto en vista preliminar y en impresora.  Que me muestre los ingresos y egresos. Y como te dije antes la tabla ingresos se relaciona con tres tablas y la tabla egresos tambien se relaciona con tres tablas. 
tabla Ingresos                                      tabla denom_ingresos
numauto autoinc                                    id_den c(8)
n_corr c 5                                               descripcion c(40)
f_oper d 8                                               indice
m_pago c 3                                             id_den c(8)
id_desc n 3
id_prov c 11                                            tabla desc_oper_ingresos
numero c 14                                            id_desc n(3) 
id_den c 8                                               operacion c(40) 
deudor n 12,2                                         indice                                       
acreedor n 12,2                                      id_desc c(8)
mes c 2
año c 4
nommes c (9)                                          tabla prov_ingresos
indices                                                    id_prov c(11)
numauto autoinc                                     r_social c(40)
id_desc n 3                                              indice
id_prov c 11                                             id_prov c(11)
id_den c 8
-----------------------------------------------------------------------------------
tabla Egresos                                        tabla denom_egresos
numauto autoinc                                    cod_den c(8)
n_corr c(5)                                              descripcion1 c(40)
f_oper d (8)                                             indice
m_pago c(3)                                            cod_den c(8)
cod_desc n(3)
cod_prov c(11)                                        tabla desc_oper_egresos
numero c(14)                                          cod_desc n(3)
cod_den c(8)                                            operacion1 c(40)
deudor n(12,2)                                        indice
acreedor n(12,2)                                     cod_desc c(8)
mes c(2)
año c(4)
nommes c (9)                                       tabla prov_egresos
indices                                                 cod_prov c(11)
numauto autoinc                                  r_social1 c(40)
cod_desc n(3)                                       indice
cod_prov c(11)                                      cod_prov c(11)
cod_den c(8)
Ahi te muestro las tablas ingresos y egresos con las tablas que se relacionan la idea es sacar el reporte relacionando las tablas ingresos y egresos.
23/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Sencillo, solo crea una tabla temporal con los campos de ambas tablas que deseas y genera el informe, no se necesita ninguna relación entre ellas.
23/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
La verdad no he trabajado usando tablas temporales, sabes de algun ejem?, en todo caso en que parte puedo crear la tabla temporal ya que esa tabla(temporal) lo tuviera que usar en el reporteador de windows para el reporte - vista preliminar lo mimso para crear el reporte a la impresora,
23/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
La tabla temporal se crea como lo harías con un cursor, o puedes crearla mediante el comando Create Table, una vez creada puedes usarla y manipularla de la manera que desees.
23/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Disculpa pero como crearia la tabla temporal tomando en cuenta las tablas que te envie. 
Por ejm. para  la parte de ingresos tengo que mostrar ncorr, fecha, razon social ......... deudor acreedor  y para la parte de egresos tambien ncorr1, razon social1, .... deudor acreedor
23/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Puedes cambiar los nombres agregando la letra "i" a los campos que provienen de la tabla de ingresos y "e" a los que provienen de la tabla de egeresos.
23/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
A ver estoy podria ser asi pero en que patrte del programa coloco estas lineas y como añado registros a esta tabla final.
(create table final incorr c(5),f_oper id(8),im_pago c(3), aqui adeberia venir el campo operacion, pero este campo esta en la tabla desc_oper_ingresos y se relaciona por un campo comun id_desc, luego seguiría inumero c(14),ideudor n(12,2), iacreedor n(12,2), encorr, ef_oper d(8), em_pago c(3), aqui deberia venir el campo operacion1, pero este campo esta en la tabla desc_oper_egresos y se relaciona por un campo comun cod_desc, luego seguiría enumero c(14),edeudor n(12,2),eacreedor n(12,2)) 
23/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Puedes crear la tabla antes de generar el reporte, por ejemplo.
23/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
He creado la tabla, pero como hago para jalar los datos de la tabla ingresos y la tabla egresos. Estuve haciendo esto si hay alguna sugerencia o derrepente estoy fallando en algo.
set defa to d:\libros\datos
cretae table final (In_corr c(5), Iid_prov c(11),Im_pago c(3), En_corr1 c(5), Ecod_prov c(11), Em_pago c(3)
appe from ingresos   ** Aca se añaden los registros de la tabla ingresos los campos En_corr1, Ecod_prov,Em_pago estan en blanco por que faltaria agregar los registros de la tabla egresos. Como haria para agregar los registros de la tabla egresos.
23/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Select ingresos
Go Top
Do While !Eof()
     Select temporal
     Append Blank
     Replace temporal.campo1 With ingresos.campo1, temporal.campo2 With ingresos.campo2
     Select ingresos
     Skip
EndDo
Select temporal
Go Top
Select Egresos
Go Top
Do While !Eof()
     Select Temporal
     Skip
     If Eof()
          Append Blank
     Else
          Skip -1
     EndIf
Replace Temporal.campo10 With egresos.campo1, Temporal.campo11 With egresos.campo2
     Select egresos
     Skip
EndDo
23/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
He probado en un formulario y he creado una tabla llamada final con los campos de ambas tablas (ingresos y egresos) pero solo me graba los registros de la tabla ingresos y los campos que corresponden a la tablalos deja en blanco.
En el load del form hay este codigo:
USE lbcjbco SHARED AGAIN IN 0         && ingresos
USE lbcjbco1 SHARED AGAIN IN 0       && egresos
USE final SHARED AGAIN IN 0              && Tabla con campos de ingresos y egresos
En el init del form puse el codigo:
IF USED("lbcjbco")
Select lbcjbco                        &&Ingresos
ENDIF
Go Top
Do While !Eof()
Select final
Append Blank
Replace final.numauto With lbcjbco.numauto, final.n_corr With lbcjbco.n_corr, final.f_oper With lbcjbco.f_oper,;
final.m_pago With lbcjbco.m_pago,final.id_desc With lbcjbco.id_desc,final.id_prov With lbcjbco.id_prov,;
final.numero With lbcjbco.numero,final.id_den With lbcjbco.id_den,final.deudor With lbcjbco.deudor,;
final.acreedor With lbcjbco.acreedor
Select lbcjbco
Skip
EndDo
Select final
Go Top
IF USED("lbcjbco1")
Select lbcjbco1                                 &&Egresos
ENDIF
Go Top
Do While !Eof()
Select final
Skip
If Eof()
Append Blank
Else
Skip -1
EndIf
Replace final.n_corr1 With lbcjbco1.n_corr1, final.f_oper1 With lbcjbco1.f_oper1,;
final.m_pago1 With lbcjbco1.m_pago1,final.cod_desc With lbcjbco1.cod_desc,final.cod_prov With lbcjbco1.cod_prov,;
final.numero1 With lbcjbco1.numero1,final.cod_den With lbcjbco1.cod_den,final.deudor1 With lbcjbco1.deudor,;
final.acreedor1 With lbcjbco1.acreedor1
Select lbcjbco1
Skip
EndDo
24/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
¿Podrías identar el código? leer de esa manera es muy complicado.

Ejecuta el código paso a paso y verifica que esté ejecutando la parte de ingreso de los datos de la segunda tabla.
24/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Logró copiar los 7 registros de la tabla ingresos pero en la tabla egresos tengo 2 registros y solo copia el ultimo de ellos.
24/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
En la parte:
IF USED("lbcjbco1")
     Select lbcjbco1 &&Egresos
ENDIF

¿Que sucede si la tabla lbcjbco1 NO está en uso?
24/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Si no está en uso la tabla lo tengo que abrir ya modifique el codigo pero igual solo me jala los 7 registros de la tabla ingresos y solo el ultimo registro de la tabla egresos. Tambien probé sleccionando la tabla (select lbcjbco1) sin el used y sigue lo mismo a que se deberá.
if used("lbcjbco1")
      select lbcjbco1
else
      use lbcjbco1shared again in 0
endif
24/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Cuando entra en la segunda condicional ¿Donde se encuantra ubicado el apuntador en el archivo?
24/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Cuando graba apunta al ultimo registro de la tabla lbcjbco1 (egresos) en la barra de estado dice lbcjbco1: record Nº 3
24/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
¿Porque?
Te recuerdo que la aplicación la tienes tu, si en algún momento te parece que mis preguntas son muy obvias es porque yo no tengo la misma visión que tu
26/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Bueno, en realidad no pienso que tus preguntas son obvias solo trato de ser lo mas explicito en mis respuestas para que me entiendas mejor y poder llegar a la solucion. Yo estoy agradecido por tu tiempo y por que estoy aprendiendo mas de este lenguaje. Ahora estoy revisando el código que me proporcionaste y quiero encontrar la solucion de por que solo me añade el ultimo registro de la tabla egresos, para es importante esto por que me va a permitir generar mis reportes, espero seguir contando con tu apoyo.
26/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Cuentas con mi apoyo.
26/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Gracias, entonces a que se deberá que me añade a la tabla temporal todos los registros de la tabla ingresos y solo el ultimo de la tabla egresos.
26/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Unas cuantas posibles causas:

- El apuntatodor en la tabla egresos se mueve
- Existe una condición que impide que la tabla egresos pueda ser recorrida
- El código no está moviendo el apuntador de manera adecuada
- En la condicional está modificando el apuntador
- Existe un desencadenate o condición para insertar.
- etc.

Ejecuta el código línea a línea y encuentra la causa, repito, yo no tengo la aplicación y el código, tal cual, no presenta un motivo por el cual esté teniendo ese comportamiento.
26/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Gracias, entonces a que se deberá que me añade a la tabla temporal todos los registros de la tabla ingresos y solo el ultimo de la tabla egresos.
26/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Porque posiblemente esas restricciones no aplican para la tabla ingresos
26/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Solo si se ejecuta el código y se ven las acciones y resultados es posible determinar cual o cuales condiciones aplican para cada una de las tablas.
26/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Gracias, entonces a que se deberá que me añade a la tabla temporal todos los registros de la tabla ingresos y solo el ultimo de la tabla egresos.
26/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
A que las condiciones y/o restriciones en la tabla ingresos no son las mismas que las que aplican a la tabla egresos.
26/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Entonces no hay forma de corregirlo solo he logrado que se añadan uno de los registros de la tabla egresos pero no todos.
26/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Si hay forma de corregirlo, solo es necesario localizar porque solo puedes agregar un registro de la tabla y eliminar/modificar esa condición.

Se me ocurre que puedes volver a generar los índices, o ver si se encuentran relacionadas las tablas de alguna manera, o que cuando selecciones el área de trabajo asegurarte de que es el área y el registro esperado, o...

A riesgo de parecer necio, solo si se ejecuta y constata cada línea de código puedes verificar que el código se está ejecutando de la manera deseada, no hay otra forma.
27/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Bueno, las tablas lo abro de esta manera en el evento load :
SET DEFAULT TO d:\libros\datos
USE lbcjbco shared AGAIN IN 0 order n_corr
USE lbcjbco1 shared AGAIN IN 0 order n_corr1
USE final shared AGAIN IN 0
Y en un boton de comando tengo el codigo para copiar las tablas ingresos y egresos,  a la tabla final. Las teblas lo selecciono usando select nombre de tabla, la primera parte del código lo realiza bien ya que copia los registros de la tabla ingresos (lbcjbco):
Select lbcjbco
Go Top
Do While !Eof()
   Select final
   Append Blank
   Replace final.n_corr With lbcjbco.n_corr, final.f_oper With lbcjbco.f_oper,;
   .......
   Select lbcjbco
   Skip
EndDo
Es en esta segunda parte del codigo donde solo copia el ultimo registro de la tabla egresos (lbcjbco1)
Select final
Go Top
Select lbcjbco1
Go Top
Do While !Eof()
  Select final
  SKIP
  IF EOF()
      append Blank 
  Else
      Skip -1
  EndIf
  Replace final.n_corr1 With lbcjbco1.n_corr1, final.f_oper1 With lbcjbco1.f_oper1,;
   ........
  Select lbcjbco1
  Skip
EndDo
 
28/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Bueno, las tablas lo abro de esta manera en el evento load :
SET DEFAULT TO d:\libros\datos
USE lbcjbco shared AGAIN IN 0 order n_corr
USE lbcjbco1 shared AGAIN IN 0 order n_corr1
USE final shared AGAIN IN 0
Y en un boton de comando tengo el codigo para copiar las tablas ingresos y egresos, a la tabla final. Las teblas lo selecciono usando select nombre de tabla, la primera parte del código lo realiza bien ya que copia los registros de la tabla ingresos (lbcjbco):
Select lbcjbco
Go Top
Do While !Eof()
Select final
Append Blank
Replace final.n_corr With lbcjbco.n_corr, final.f_oper With lbcjbco.f_oper,;
.......
Select lbcjbco
Skip
EndDo
Es en esta segunda parte del codigo donde solo copia el ultimo registro de la tabla egresos (lbcjbco1)
Select final
Go Top
Select lbcjbco1
Go Top
Do While !Eof()
Select final
SKIP
IF EOF()
append Blank
Else
Skip -1
EndIf
Replace final.n_corr1 With lbcjbco1.n_corr1, final.f_oper1 With lbcjbco1.f_oper1,;
........
Select lbcjbco1
Skip
EndDo
28/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
¿Y donde se encuentra el apuntador y cual es la tabla activa cuando entra la condicionante que copia desde la segunda tabla?
28/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Condicion que copia desde la segunda tabla:
Select final                   && Tabla temporal - tabla activa
Go Top                         
Select lbcjbco1            &&Tabla Egresos  
Go Top                       
Do While !Eof()
Select final                  && tabla temporal
SKIP
IF EOF()
      append Blank
Else
     Skip -1
EndIf
Replace final.n_corr1 With lbcjbco1.n_corr1, final.f_oper1 With lbcjbco1.f_oper1,;
........
Select lbcjbco1        && Tabla Egresos
Skip
EndDo
28/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
El código aparentemente no tiene ningún problema, ¿Donde se encuentra el apuntador y cual es la tabla activa cuando entra a esta condicionante?

Voy a ser repetitivo, pero es que no hay ninguna forma en que puedas encontrar el error si no ejecutas paso a paso el código verificando todas las condiciones que intervienen.  No importa cuantas veces pongas el código, solo es necesario que respondas el lugar donde se encuentra el apuntador antes, mientras y después de entrar a esa condicionante, sin ese dato poco podemos hacer.
28/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Antes de entrar a la segunda condicion la tabla activa es la de ingresos (lbcjbco), y el puntero debes apuntar al ultimo registro de esta tabla por que hay un skip despues del select lbcjbco.
28/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Si la tabla ingresos es la activa y el apuntador se encuentra en el último registro es la razón de que solo copie un registro.
Sin embargo en el código que me muestras se hace activa la tabla de Egresos (Select lbcjbco1) y se mueve el apuntador al primer registro (Go Top), o el código que describes no es el que estás utilizando o existe un conflicto con los apuntadores y se están "saltando" de tabla (y registro).
¿Este es el único caso en que los apuntadores presentan este comportamiento errático?
28/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Disculpa, tienes razon hubo una equivocacion, cuando entra a la segunda condicion la tabla activa es egresos (lbcjbco1) y el puntero va hacia el primer registro.  Sigo sin entender por que solo añade el ultimo registro.
28/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Si el puntero está en el primer registro de la tabla, y dado que no existe ningún movimiento en esa tabla, los valores que copia, o debería copiar, son los del primer registro.  Dado que no es así, y puesto que aseguras que el comportamiento del apuntador no es errático, solo me surgen dos posibilidades:

1.- El apuntador no está en el primer registro cuando entra.
2.- El apuntador se mueve en algún momento dentro del ciclo.

Tu aseguras que si está en el primer registro, por lo que la primera posibilidad no es factible, por lo tanto debe ser la segunda.

Cuando ejecutas el código paso a paso ¿En que momento se mueve el apuntador de la tabla?
28/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
A todo esto ¿Sabes como ejecutar el código paso a paso?, porque insisto, mientras no lo hagas yo no puedo encontrar porque esta comportandose de esta forma, solo puedo imaginarmelo.
29/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
He colocado set step en la primera linea de código, en todo caso si hay otra forma de ejecutar el codigo paso a paso?.
29/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Si, hay otra forma y, por cierto, es la que se recomienda.
Utiliza el depurador y en cada línea verifica la situación de los apuntadores y tablas activas para encontrar cual es la discrepancia.
29/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Bueno he usado el depurador menu tools/debugger y antes de la segunda condicion he colocado set step on y a la hora que ejecuto el codigo entro al depurador y ejecuto el codigo paso a paso: Te indico como sigue el puntero.
SET STEP ON
Select final                  El puntero llega acá
Go Top                        Continua acá 
Select lbcjbco1            Continua acá
Go Top                        Continua acá 
Do While !Eof()           Continua acá
Select final                  Continua acá
SKIP                            Continua acá
IF EOF()                       Continua acá
    append Blank           el puntero salta esta linea
Else
    Skip -1                       Y continua acá
ENDIF                             Continua acá
Replace .......                  Continua acá 
select lbcjbco1               continua acá
SKIP                               continua acá
EndDo                            continua acá 
29/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
El puntero debe moverse en la instrucción donde agregas un registro nuevo, es lógico, pero debe hacerlo sobe la tabla donde se están ingresando los registros, no sobre la de egresos.
Si no se ha alcanzado el final del archivo no tiene caso que se añadan nuevos registros, por eso se "salta" esa instrucción.
El puntero es el indicador del número de registro de una tabla, no tiene nada que ver en absoluto con un código o un programa, si actualmente se encuentra visible el registro 1 de  la tabla maestro, se dice que el apuntador está en el registro 1 de la tabla maestra, no importa si se visualiza en un formulario o en una consulta.
Sigo insistiendo, ¿En que parte del código el apuntador, el que indica el número de registro de la tabla, altera su posición en la tabla activa?
Déjame simplificar un poco el codigo para un mejor seguimiento:

m.nNueva = .F.
Select final                                         && Tabla temporal - tabla activa
Go Top
Select lbcjbco1                                   &&Tabla Egresos
Go Top
Do While !Eof()
     Select final                                    && tabla temporal
     Skip
     If Eof()
          Append Blank
          m.nNueva = .T.
     Else
         Skip -1
     EndIf
     Replace final.n_corr1 With lbcjbco1.n_corr1, final.f_oper1 With lbcjbco1.f_oper1,;
........
     If !m.nNueva
          Skip
     Endif
     Select lbcjbco1 && Tabla Egresos
     Skip
EndDo
29/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Estoy probando el código y hasta el momento está copiando los registros de ambas tablas hacia la tabla temporal (final).
29/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Gracias por tu apoyo y tu tiempo, espero seguir contanto contigo.
29/05/2008
alfidimu, experto respondiendo en Visual FoxPro
Experto
Cuando gustes, si no tienes nada más en lo que consideres que pueda ayudarte, favor de cerrar la pregunta para que pueda continuar respondiendo otras inquietudes.
29/05/2008
alfidimu, usuario preguntando en Visual FoxPro
Usuario
Gracias por tu tiempo y apoyo.
Enlaces patrocinados