Relacion de tablas

Hola buen día ya tengo grabado registros de tres tablas en el archivo temporal, me falta grabar registros de la ultima tabla (TablaE) q sucede q esta tabla tiene en sus campos uno q es inscrinrx y otro q es facnro, el campo inscrinrx se relaciona con la tabla conexion.inscrinrn y el campo facnro se relaciona con la tabla notas1.notnro como hago para grabar los registros del tablaE en el archivo temporal.  
SELECT * FROM ("d:\pruebas\sici\catastro\totfac");
INTO CURSOR cTablaA;
WHERE MONTH(facemifec)=nMes AND YEAR(facemifec)=nAño AND MONTH(facvenfec)=nMes AND YEAR(facvenfec)=nAño;
order BY facnro
INDEX ON facnro TAG cTablaA ADDITIVE
SELECT * FROM ("d:\pruebas\sici\sfactura");
INTO CURSOR cTablaB;
WHERE MONTH(fscfecv)=nMes AND YEAR(fscfecv)=nAño
INDEX ON inscrinrx TAG cTablaB ADDITIVE
SELECT * FROM ("d:\pruebas\sici\catastro\notas");
INTO CURSOR cTablaC;
WHERE MONTH(notfecha)=nMes AND YEAR(notfecha)=nAño ORDER BY inscrinrn
INDEX ON inscrinrn TAG cTablaC ADDITIVE
SELECT * FROM ("d:\pruebas\sici\catastro\conexion");
INTO CURSOR cTablaD ORDER BY inscrinro
INDEX ON inscrinro TAG cTablaD ADDITIVE
SELECT("cTablaA")
SCAN
IF !SEEK(cTablaA.facnro,"cTemp","codigo")
APPEND BLANK IN cTemp
replace cTemp.fec_emi WITH cTablaA.facemifec;
cTemp.fec_venc WITH cTablaA.facvenfec;
cTemp.tipo WITH "14";
cTemp.serie WITH cTablaA.facsernro;
cTemp.numero WITH cTablaA.facnro
IF Seek(ALLTRIM(cTablaA.inscrinrx),"cTablaD")
IF !EMPTY(cTablaD.clirucx)
replace cTemp.tipo_doc WITH "6"
replace cTemp.num_doc WITH cTablaD.clirucx
ELSE
IF !EMPTY(cTablaD.clilelx)
replace cTemp.tipo_doc WITH "1"
replace cTemp.num_doc WITH cTablaD.clilelx
ENDIF
ENDIF
ENDIF
replace cTemp.cliente WITH IIF( Seek(ALLTRIM(cTablaA.inscrinrx),"cTablaD"), Subst(Alltrim (cTablaD.clinomx),1,40), "No Existe Cliente")
replace cTemp.total WITH cTablaA.factotal
ENDIF
ENDSCAN
SELECT("cTablaB")
SCAN FOR fscsernro=4 AND fscestado=2
IF !SEEK(cTablaB.inscrinrx,"cTemp","codigo")
APPEND BLANK IN cTemp
replace cTemp.fec_emi WITH cTablaB.fscfech;
cTemp.fec_venc WITH cTablaB.fscfecv;
cTemp.tipo WITH "14";
cTemp.serie WITH cTablaB.fscsernro;
cTemp.numero WITH cTablaB.fscnro
IF Seek(ALLTRIM(cTablaB.inscrinrx),"cTablaD")
IF !EMPTY(cTablaD.clirucx)
replace cTemp.tipo_doc WITH "6"
replace cTemp.num_doc WITH cTablaD.clirucx
ELSE
IF !EMPTY(cTablaD.clilelx)
replace cTemp.tipo_doc WITH "1"
replace cTemp.num_doc WITH cTablaD.clilelx
ENDIF
ENDIF
ENDIF
replace cTemp.cliente WITH IIF( Seek(ALLTRIM(cTablaB.inscrinrx),"cTablaD"), Subst(Alltrim (cTablaD.clinomx),1,40), "No Existe Cliente")
replace cTemp.total WITH cTablaB.fscsub
ENDIF
ENDSCAN
SELECT("cTablaB")
SCAN FOR fscsernro=2 AND fscestado<>3
IF !SEEK(cTablaB.inscrinrx,"cTemp","codigo")
APPEND BLANK IN cTemp
replace cTemp.fec_emi WITH cTablaB.fscfech;
cTemp.fec_venc WITH cTablaB.fscfecv;
cTemp.tipo WITH "14";
cTemp.serie WITH cTablaB.fscsernro;
cTemp.numero WITH cTablaB.fscnro
IF Seek(ALLTRIM(cTablaB.inscrinrx),"cTablaD")
IF !EMPTY(cTablaD.clirucx)
replace cTemp.tipo_doc WITH "6"
replace cTemp.num_doc WITH cTablaD.clirucx
ELSE
IF !EMPTY(cTablaD.clilelx)
replace cTemp.tipo_doc WITH "1"
replace cTemp.num_doc WITH cTablaD.clilelx
ENDIF
ENDIF
ENDIF
replace cTemp.cliente WITH IIF( Seek(ALLTRIM(cTablaB.inscrinrx),"cTablaD"), Subst(Alltrim (cTablaD.clinomx),1,40), "No Existe Cliente")
replace cTemp.total WITH cTablaB.fscsub
ENDIF
ENDSCAN
close datab

1 respuesta

Respuesta
1
Usa el mismo metodo para tablaE, pero antes relacionala con las tablas Conexion y Notas con los campos respectivos
SELECT("tablaE")
SET RELATION TO inscrix INTO conexion ADDITIVE
SET RELATION TO facnro INTO notas ADDITIVE
al momento de grabar solo haces mencion al campo respectivo de las tablas relacionadas
REPLACE campo1 WITH inscrix.campo1;
campo2 WITH notas.campo2;
SALU2
Yo hice lo sguiente:
SELECT * FROM ("d:\pruebas\sici\catastro\notas");
INTO CURSOR cTablaC;
WHERE MONTH(notfecha)=nMes AND YEAR(notfecha)=nAño ORDER BY inscrinrn
INDEX ON inscrinrn TAG cTablaC ADDITIVE
SELECT * FROM ("d:\pruebas\sici\catastro\conexion");
INTO CURSOR cTablaD ORDER BY inscrinro
INDEX ON inscrinro TAG cTablaD ADDITIVE
SELECT * FROM ("d:\pruebas\sici\catastro\notas1");
INTO CURSOR cTablaE ORDER BY notnro
INDEX ON notnro TAG cTablaE ADDITIVE
*** Aca hago la relacion pero me dice "notserie is not unique and must be qualified"
SELECT * FROM cTablaC INNER JOIN cTablaD ON cTablaC.inscrinrn=cTablaD.inscrinro;
inner JOIN cTablaE ON cTablaC.notnro=cTablaE.notnro INTO CURSOR cTablaF;
WHERE notserie <> 3 AND notlin=2 ORDER BY inscrinrn
INDEX ON inscrinrn TAG cTablaF ADDITIVE
1) Si vas a usar un select esta demas indexar los temporales creados
2) El proble es que el campo notserie tambien existe en alguna de las otras tablas y estaria duplicandose en el nuevo archivo, debido a que usas *,
se soluciona detallando cad uno d de los campos que vas a utilizar en el nuevo archivo temporal

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas