diff --git a/TESTS/DATOS_READONLY/bmps/SobrePostal.bmp b/TESTS/DATOS_READONLY/bmps/SobrePostal.bmp new file mode 100644 index 0000000..9db1f07 Binary files /dev/null and b/TESTS/DATOS_READONLY/bmps/SobrePostal.bmp differ diff --git a/TESTS/DATOS_READONLY/bmps/TreeView.bmp b/TESTS/DATOS_READONLY/bmps/TreeView.bmp new file mode 100644 index 0000000..80e969a Binary files /dev/null and b/TESTS/DATOS_READONLY/bmps/TreeView.bmp differ diff --git a/TESTS/DATOS_READONLY/fb2p_foxuser.frt b/TESTS/DATOS_READONLY/fb2p_foxuser.frt new file mode 100644 index 0000000..34e1caa Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_foxuser.frt differ diff --git a/TESTS/DATOS_READONLY/fb2p_foxuser.frx b/TESTS/DATOS_READONLY/fb2p_foxuser.frx new file mode 100644 index 0000000..60a4c26 Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_foxuser.frx differ diff --git a/TESTS/DATOS_READONLY/fb2p_foxuser.lbt b/TESTS/DATOS_READONLY/fb2p_foxuser.lbt new file mode 100644 index 0000000..2b2ad07 Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_foxuser.lbt differ diff --git a/TESTS/DATOS_READONLY/fb2p_foxuser.lbx b/TESTS/DATOS_READONLY/fb2p_foxuser.lbx new file mode 100644 index 0000000..94baf42 Binary files /dev/null and b/TESTS/DATOS_READONLY/fb2p_foxuser.lbx differ diff --git a/TESTS/ut__foxbin2prg.prg b/TESTS/ut__foxbin2prg.prg index 3125c76..ac937ce 100644 --- a/TESTS/ut__foxbin2prg.prg +++ b/TESTS/ut__foxbin2prg.prg @@ -55,7 +55,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg ******************************************************************************************************************************************* FUNCTION Evaluate_results LPARAMETERS toEx AS EXCEPTION, tnCodError_Esperado, tc_OutputFile, tcParent, tcClass, tcObjName, toReg_Esperado ; - , toReg, tcTipoBinario + , toReg, tcTipoBinario, tnRecno #IF .F. PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' @@ -69,10 +69,47 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg IF ISNULL(toEx) DO CASE - CASE INLIST(tcTipoBinario, 'FRX') + CASE INLIST(tcTipoBinario, 'FRX', 'LBX') + *-------------------------------------------- + *-- REPORTES + *-------------------------------------------- + LOCAL I, laProps(1) + + *-- Visualización de valores + THIS.messageout( LOWER(PROGRAM(PROGRAM(-1)-1)) ) + + THIS.messageout( 'Recno#' + TRANSFORM(tnRecno) + ' UniqueID="' + toReg_Esperado.UniqueID + '" ObjType=' + TRANSFORM(toReg_Esperado.ObjType) ; + + ' ObjCode=' + TRANSFORM(toReg_Esperado.ObjCode) + ' Expr=[' + LEFT(toReg_Esperado.Expr,20) ; + + IIF(LEN(toReg_Esperado.Expr)>20,'...]',']') ; + + ' vpos=' + TRANSFORM(toReg_Esperado.VPOS) + ' hpos=' + TRANSFORM(toReg_Esperado.HPOS) ; + + ' height=' + TRANSFORM(toReg_Esperado.HEIGHT) + ' width=' + TRANSFORM(toReg_Esperado.WIDTH) ) + + *-- Evaluación de valores + FOR I = 1 TO AMEMBERS( laProps, toReg_Esperado, 0 ) + *-- Formateo + ADDPROPERTY( toReg_Esperado, laProps(I) ; + , '[' + oFXU_LIB.mejorarPresentacionCaracteresEspeciales( TRANSFORM( EVALUATE('toReg_Esperado.'+laProps(I)) ) ) + ']' ) + + ADDPROPERTY( toReg, laProps(I) ; + , '[' + oFXU_LIB.mejorarPresentacionCaracteresEspeciales( TRANSFORM( EVALUATE('toReg.'+laProps(I)) ) ) + ']' ) + + *-- COMPARO + THIS.assertequals( LEN(EVALUATE('toReg_Esperado.'+laProps(I))) ; + , LEN(EVALUATE('toReg.'+laProps(I))) ; + , 'Longitud de ' + laProps(I) + ' para el reg#' + TRANSFORM(tnRecno) ; + + ' UniqueID="' + toReg.UniqueID + '" ObjType=' + TRANSFORM(toReg.ObjType) ) + + THIS.assertequals( (EVALUATE('toReg_Esperado.'+laProps(I))) ; + , (EVALUATE('toReg.'+laProps(I))) ; + , 'Valor de ' + laProps(I) + ' para el reg#' + TRANSFORM(tnRecno) ; + + ' UniqueID="' + toReg.UniqueID + '" ObjType=' + TRANSFORM(toReg.ObjType) ) + ENDFOR CASE INLIST(tcTipoBinario, 'VCX', 'SCX') + *-------------------------------------------- + *-- FORMS / CLASES + *-------------------------------------------- LOCAL laPropsAndValues(1,2), lnPropsAndValues_Count, laPropsAndValues_Esperado(1,2), lnPropsAndValues_Count_Esperado ; , lnPropsAndComments_Count, lnPropsAndComments_Count_Esperado, laPropsAndComments(1,2), laPropsAndComments_Esperado(1,2) ; , laProtected(1), lnProtected_Count, laProtected_Esperado(1), lnProtected_Count_Esperado ; @@ -229,9 +266,9 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg ******************************************************************************************************************************************* FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaElReporte_FB2P_FRX_YValidarLosCamposDelRegistro - *-- REPORTE (FRX) + *-- REPORTES (FRX) LOCAL lnCodError, lnCodError_Esperado ; - , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario, lnRecno ; , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; , loEx AS EXCEPTION @@ -245,6 +282,7 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg *loCnv.l_Debug = .F. loCnv.l_ShowErrors = .F. *loCnv.l_Test = .T. + *loCnv.l_ReportSort_Enabled = .F. *-- DATOS DE ENTRADA @@ -265,8 +303,9 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg SCAN ALL FOR NOT DELETED() *-- DATOS ESPERADOS STORE 0 TO lnCodError_Esperado + lnRecno = RECNO() SCATTER MEMO NAME loReg_Esperado - lcUniqueID = loReg_Esperado.UNIQUEID + lcUniqueID = loReg_Esperado.UNIQUEID *-- TEST IF FILE(lc_OutputFile) @@ -279,14 +318,88 @@ DEFINE CLASS ut__foxbin2prg AS FxuTestCase OF FxuTestCase.prg LOCATE FOR UNIQUEID==lcUniqueID IF NOT FOUND() - ERROR 'No se encontró el registro con UniqueID "' + lcUniqueID + '" en el archivo "' + lc_OutputFile + '"' + ERROR 'No se encontró el registro #' + TRANSFORM(RECNO('ARCHIBOBIN_IN')) + ' con UniqueID "' + lcUniqueID + '" en el archivo "' + lc_OutputFile + '"' ENDIF SCATTER MEMO NAME loReg USE IN (SELECT("TABLABIN")) THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName ; - , loReg_Esperado, loReg, lcTipoBinario ) + , loReg_Esperado, loReg, lcTipoBinario, lnRecno ) + ENDSCAN + + CATCH TO loEx + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado ) + + FINALLY + USE IN (SELECT("ARCHIBOBIN_IN")) + ENDTRY + + ENDFUNC + + + ******************************************************************************************************************************************* + FUNCTION Deberia_Ejecutar_FOXBIN2PRG_ParaElReporte_FB2P_LBX_YValidarLosCamposDelRegistro + *-- ETIQUETAS (LBX) + LOCAL lnCodError, lnCodError_Esperado ; + , lc_File, lc_InputFile, lc_OutputFile, lcParent, lcClass, lcObjName, loReg_Esperado, loReg, lcTipoBinario, lnRecno ; + , loModulo AS CL_CLASE OF "FOXBIN2PRG.PRG" ; + , loCnv AS c_foxbin2prg OF "FOXBIN2PRG.PRG" ; + , loEx AS EXCEPTION + #IF .F. + PUBLIC oFXU_LIB AS CL_FXU_CONFIG OF 'TESTS\fxu_lib_objetos_y_funciones_de_soporte.PRG' + #ENDIF + + TRY + loEx = NULL + loCnv = NEWOBJECT("c_foxbin2prg", "FOXBIN2PRG.PRG") + *loCnv.l_Debug = .F. + loCnv.l_ShowErrors = .F. + *loCnv.l_Test = .T. + *loCnv.l_ReportSort_Enabled = .F. + + + *-- DATOS DE ENTRADA + STORE 0 TO lnCodError + lc_File = 'fb2p_foxuser.lbx' + lc_InputFile = FORCEPATH( lc_File, 'TESTS\DATOS_READONLY' ) + lc_OutputFile = FORCEPATH( lc_File, 'TESTS\DATOS_TEST' ) + lcTipoBinario = UPPER( JUSTEXT( lc_OutputFile ) ) + + oFXU_LIB.copiarArchivosParaTest( FORCEEXT( lc_File, LEFT( JUSTEXT(lc_File),2 ) + '?' ) ) + + loCnv.Convertir( lc_OutputFile, .F., .F., .T. ) + loCnv.Convertir( FORCEEXT(lc_OutputFile, LEFT( JUSTEXT(lc_File),2 ) + '2' ), .F., .F., .T. ) + + SELECT 0 + USE (lc_InputFile) SHARED AGAIN NOUPDATE ALIAS ARCHIBOBIN_IN + + SCAN ALL FOR NOT DELETED() + *-- DATOS ESPERADOS + STORE 0 TO lnCodError_Esperado + lnRecno = RECNO() + SCATTER MEMO NAME loReg_Esperado + lcUniqueID = loReg_Esperado.UNIQUEID + + *-- TEST + IF FILE(lc_OutputFile) + SELECT 0 + USE (lc_OutputFile) SHARED NOUPDATE ALIAS TABLABIN + ELSE + ERROR 'No se encontró el archivo "' + lc_OutputFile + '"' + ENDIF + + LOCATE FOR UNIQUEID==lcUniqueID + + IF NOT FOUND() + ERROR 'No se encontró el registro #' + TRANSFORM(RECNO('ARCHIBOBIN_IN')) + ' con UniqueID "' + lcUniqueID + '" en el archivo "' + lc_OutputFile + '"' + ENDIF + + SCATTER MEMO NAME loReg + USE IN (SELECT("TABLABIN")) + + THIS.Evaluate_results( loEx, lnCodError_Esperado, lc_OutputFile, lcParent, lcClass, lcObjName ; + , loReg_Esperado, loReg, lcTipoBinario, lnRecno ) ENDSCAN CATCH TO loEx diff --git a/foxbin2prg.prg b/foxbin2prg.prg index 3c92211..c6ead22 100644 --- a/foxbin2prg.prg +++ b/foxbin2prg.prg @@ -49,7 +49,7 @@ * 06/12/2013 FDBOZZO v1.9 Arreglo bug pérdida de propiedades causado por una mejora anterior * 06/12/2013 FDBOZZO v1.10 Arreglo del bug de mezcla de métodos de una clase con la siguiente * 07/12/2013 FDBOZZO v1.11 Arreglo del bug de _amembers detectado por Edgar K.con la clase BlowFish.vcx (http://www.tortugaproductiva.galeon.com/docs/blowfish/index.html) -* 06/12/2013 FDBOZZO v1.12 Agregado soporte preliminar de conversión de reportes (FRX/FR2) +* 07/12/2013 FDBOZZO v1.12 Agregado soporte preliminar de conversión de reportes y etiquetas (FRX/LBX) * *--------------------------------------------------------------------------------------------------- * TESTEO Y REPORTE DE BUGS (AGRADECIMIENTOS) @@ -332,6 +332,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM + [] ; + [] ; + [] ; + + [] ; + [] ; + [] ; + [] ; @@ -358,9 +359,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM l_ShowErrors = .F. l_MethodSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias l_PropSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias + l_ReportSort_Enabled = .T. && Para Unit Testing se puede cambiar a .F. para buscar diferencias lFileMode = .F. nClassTimeStamp = '' - n_FB2PRG_Version = 1.11 + n_FB2PRG_Version = 1.12 o_Conversor = NULL c_VC2 = 'VC2' c_SC2 = 'SC2' @@ -437,6 +439,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, THIS.c_FR2 ) THIS.o_Conversor = CREATEOBJECT( 'c_conversor_frx_a_prg' ) + CASE JUSTEXT(THIS.c_InputFile) = 'LBX' + THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, THIS.c_LB2 ) + THIS.o_Conversor = CREATEOBJECT( 'c_conversor_frx_a_prg' ) + CASE JUSTEXT(THIS.c_InputFile) = THIS.c_VC2 THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'VCX' ) THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_vcx' ) @@ -453,6 +459,10 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'FRX' ) THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_frx' ) + CASE JUSTEXT(THIS.c_InputFile) = THIS.c_LB2 + THIS.c_OutputFile = FORCEEXT( THIS.c_InputFile, 'LBX' ) + THIS.o_Conversor = CREATEOBJECT( 'c_conversor_prg_a_frx' ) + OTHERWISE ERROR 'El archivo [' + THIS.c_InputFile + '] no está soportado' @@ -464,9 +474,11 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM THIS.o_Conversor.l_Debug = THIS.l_Debug THIS.o_Conversor.l_Test = THIS.l_Test THIS.o_Conversor.n_FB2PRG_Version = THIS.n_FB2PRG_Version - THIS.o_Conversor.Convertir( @toModulo ) THIS.o_Conversor.l_MethodSort_Enabled = THIS.l_MethodSort_Enabled THIS.o_Conversor.l_PropSort_Enabled = THIS.l_PropSort_Enabled + THIS.o_Conversor.l_ReportSort_Enabled = THIS.l_ReportSort_Enabled + *-- + THIS.o_Conversor.Convertir( @toModulo ) THIS.o_Conversor = NULL CATCH TO toEx @@ -625,6 +637,7 @@ DEFINE CLASS c_conversor_base AS SESSION + [] ; + [] ; + [] ; + + [] ; + [] ; + [] @@ -641,6 +654,7 @@ DEFINE CLASS c_conversor_base AS SESSION c_LogFile = '' l_MethodSort_Enabled = .T. l_PropSort_Enabled = .T. + l_ReportSort_Enabled = .T. ******************************************************************************************************************* @@ -929,51 +943,23 @@ DEFINE CLASS c_conversor_base AS SESSION ******************************************************************************************************************* PROCEDURE doBackup - LOCAL lcNext_Bak + LOCAL lcNext_Bak, lcExt_X, lcExt_T lcNext_Bak = THIS.getNext_BAK( THIS.c_OutputFile ) + lcExt_X = JUSTEXT( THIS.c_OutputFile ) + lcExt_T = LEFT(lcExt_X,2) + 'T' DO CASE - CASE JUSTEXT( THIS.c_OutputFile ) = 'VCX' - IF FILE( FORCEEXT(THIS.c_OutputFile,'VCX') ) - THIS.writeLog( 'backup de: ' + FORCEEXT(THIS.c_OutputFile,'VCX') + '/VCT' ) + CASE JUSTEXT( THIS.c_OutputFile ) = lcExt_X + IF FILE( FORCEEXT(THIS.c_OutputFile,lcExt_X) ) + THIS.writeLog( 'backup de: ' + FORCEEXT(THIS.c_OutputFile,lcExt_X) + '/' + lcExt_T ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'VCX')) TO (FORCEEXT(THIS.c_OutputFile, 'VCX' + lcNext_Bak)) + COPY FILE (FORCEEXT(THIS.c_OutputFile,lcExt_X)) TO (FORCEEXT(THIS.c_OutputFile, lcExt_X + lcNext_Bak)) - IF FILE( FORCEEXT(THIS.c_OutputFile,'VCT') ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'VCT')) TO (FORCEEXT(THIS.c_OutputFile,'VCT' + lcNext_Bak)) + IF FILE( FORCEEXT(THIS.c_OutputFile,lcExt_T) ) + COPY FILE (FORCEEXT(THIS.c_OutputFile,lcExt_T)) TO (FORCEEXT(THIS.c_OutputFile,lcExt_T + lcNext_Bak)) ENDIF ENDIF - - CASE JUSTEXT( THIS.c_OutputFile ) = 'SCX' - IF FILE( FORCEEXT(THIS.c_OutputFile,'SCX') ) - THIS.writeLog( 'backup de: ' + FORCEEXT(THIS.c_OutputFile,'SCX') + '/SCT' ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'SCX')) TO (FORCEEXT(THIS.c_OutputFile,'SCX' + lcNext_Bak)) - - IF FILE( FORCEEXT(THIS.c_OutputFile,'SCT') ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'SCT')) TO (FORCEEXT(THIS.c_OutputFile,'SCT' + lcNext_Bak)) - ENDIF - ENDIF - - CASE JUSTEXT( THIS.c_OutputFile ) = 'PJX' - IF FILE( FORCEEXT(THIS.c_OutputFile,'PJX') ) - THIS.writeLog( 'backup de: ' + FORCEEXT(THIS.c_OutputFile,'PJX') + '/PJT' ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'PJX')) TO (FORCEEXT(THIS.c_OutputFile,'PJX' + lcNext_Bak)) - - IF FILE( FORCEEXT(THIS.c_OutputFile,'PJT') ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'PJT')) TO (FORCEEXT(THIS.c_OutputFile,'PJT' + lcNext_Bak)) - ENDIF - ENDIF - - CASE JUSTEXT( THIS.c_OutputFile ) = 'FRX' - IF FILE( FORCEEXT(THIS.c_OutputFile,'FRX') ) - THIS.writeLog( 'backup de: ' + FORCEEXT(THIS.c_OutputFile,'FRX') + '/FRT' ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'FRX')) TO (FORCEEXT(THIS.c_OutputFile,'FRX' + lcNext_Bak)) - - IF FILE( FORCEEXT(THIS.c_OutputFile,'FRT') ) - COPY FILE (FORCEEXT(THIS.c_OutputFile,'FRT')) TO (FORCEEXT(THIS.c_OutputFile,'FRT' + lcNext_Bak)) - ENDIF - ENDIF - + OTHERWISE ERROR 'Tipo de archivo [' + JUSTFNAME(THIS.c_OutputFile) + '] no soportado para backup!' @@ -1978,7 +1964,7 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base , 'BOTMARGIN' N(3) ; , 'TOTALTYPE' N(2) ; , 'RESETTOTAL' N(2) ; - , 'RESOID' N(2) ; + , 'RESOID' N(3) ; , 'CURPOS' L ; , 'SUPALWAYS' L ; , 'SUPOVFLOW' L ; @@ -2248,6 +2234,28 @@ DEFINE CLASS c_conversor_prg_a_bin AS c_conversor_base ENDPROC + ******************************************************************************************************************* + PROCEDURE getTextFrom_BIN_FileStructure + TRY + LOCAL lcStructure, lnSelect + lnSelect = SELECT() + SELECT 0 + USE (THIS.c_InputFile) AGAIN SHARED ALIAS _TABLABIN + COPY STRUCTURE EXTENDED TO ( FORCEPATH( '_FRX_STRUC.DBF', ADDBS( SYS(2023) ) ) ) + **** CONTINUAR SI ES NECESARIO - SIN USO POR AHORA + + CATCH TO loEx + THROW + + FINALLY + USE IN (SELECT("_TABLABIN")) + SELECT (lnSelect) + ENDTRY + + RETURN lcStructure + ENDPROC + + ******************************************************************************************************************* PROCEDURE defined_PAM2Memo LPARAMETERS toClase @@ -4565,24 +4573,6 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin ENDCASE - *-- ARREGLO ALGUNOS VALORES - DO CASE - CASE TRANSFORM(loReg.ObjType) = "1" && Header - loReg.tag = THIS.decode_SpecialCodes_1_31( loReg.tag ) - loReg.tag2 = STRCONV( loReg.tag2,14 ) - - CASE TRANSFORM(loReg.ObjType) = "25" && Dataenvironment (footer) - IF NOT EMPTY(loReg.tag) - loReg.tag = SUBSTR( loReg.tag, 3 ) && Le quito el CR+LF que le agregué al TEXTualizar - ENDIF - loReg.tag2 = STRCONV( loReg.tag2,14 ) - - OTHERWISE && Resto - loReg.tag = THIS.decode_SpecialCodes_1_31( loReg.tag ) - loReg.tag2 = STRCONV( loReg.tag2,14 ) - - ENDCASE - ENDFOR INSERT INTO TABLABIN FROM NAME loReg @@ -4590,6 +4580,12 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin USE IN (SELECT("TABLABIN")) + IF THIS.c_Type = 'FRX' + COMPILE REPORT (THIS.c_OutputFile) + ELSE + COMPILE LABEL (THIS.c_OutputFile) + ENDIF + CATCH TO loEx lnCodError = loEx.ERRORNO @@ -4693,21 +4689,23 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin EXIT ENDIF - lcValue = STREXTRACT( tcLine, C_DATA_I ) + CR_LF + *-- Tomo la primera parte del valor + lcValue = STREXTRACT( tcLine, C_DATA_I ) + *-- Recorro las fracciones del valor FOR I = I + 1 TO tnCodeLines .set_Line( @tcLine, @taCodeLines, I ) - IF C_DATA_F $ tcLine - lcValue = lcValue + STREXTRACT( tcLine, '', C_DATA_F ) + CR_LF + IF C_DATA_F $ tcLine && Fin del valor + lcValue = lcValue + CR_LF + STREXTRACT( tcLine, '', C_DATA_F ) ADDPROPERTY( toReg, tcPropName, lcValue ) EXIT - ELSE - lcValue = lcValue + tcLine + CR_LF + ELSE && Otra fracción del valor + lcValue = lcValue + CR_LF + tcLine ENDIF ENDFOR - + ENDIF CATCH TO loEx @@ -4745,15 +4743,18 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin IF LOWER( LEFT(tcLine, 10) ) == 'platform="' llBloqueEncontrado = .T. - lnLastPos = 1 + lnLastPos = 1 + tcLine = ' ' + tcLine FOR X = 1 TO AMEMBERS( laProps, toReg, 0 ) - lnPos = AT( LOWER(laProps(X)) + '="', tcLine ) + laProps(X) = ' ' + laProps(X) + lnPos = AT( LOWER(laProps(X)) + '="', tcLine ) IF lnPos > 0 lnLenPropName = LEN(laProps(X)) lnPos2 = AT( '"', SUBSTR( tcLine, lnPos + lnLenPropName + 2 ) ) lcValue = SUBSTR( tcLine, lnPos + lnLenPropName + 2, lnPos2 - 1 ) + ADDPROPERTY( toReg, laProps(X), lcValue ) ENDIF ENDFOR @@ -4811,8 +4812,19 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'picture' ) CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'tag' ) + *-- ARREGLO ALGUNOS VALORES CAMBIADOS AL TEXTUALIZAR + DO CASE + CASE loReg.ObjType == "1" + loReg.TAG = THIS.decode_SpecialCodes_1_31( loReg.tag ) + CASE loReg.ObjType == "25" + loReg.TAG = SUBSTR(loReg.TAG,3) + OTHERWISE + loReg.TAG = THIS.decode_SpecialCodes_1_31( loReg.tag ) + ENDCASE CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'tag2' ) + *-- ARREGLO ALGUNOS VALORES CAMBIADOS AL TEXTUALIZAR + loReg.TAG2 = STRCONV( loReg.TAG2,14 ) CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'penred' ) @@ -4823,6 +4835,7 @@ DEFINE CLASS c_conversor_prg_a_frx AS c_conversor_prg_a_bin CASE .analizarBloque_CDATA_inline( toReport, @tcLine, @taCodeLines, @I, tnCodeLines, @loReg, 'user' ) ENDCASE + ENDFOR ENDWITH && THIS @@ -6949,23 +6962,44 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg DODEFAULT( @toModulo, @toEx ) TRY - LOCAL lnCodError, loRegCab, loRegDataEnv, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1) ; + LOCAL lnCodError, loRegCab, loRegDataEnv, loRegCur, loRegObj, lnMethodCount, laMethods(1), laCode(1), laProtected(1) ; , laPropsAndValues(1), laPropsAndComments(1), lnLastClass, lnRecno, lcMethods, lcObjName, la_NombresObjsOle(1) STORE 0 TO lnCodError, lnLastClass STORE '' TO laMethods(1), laCode(1), laProtected(1), laPropsAndComments(1) - STORE NULL TO loRegObj, loRegCab, loRegDataEnv + STORE NULL TO loRegObj, loRegCab, loRegDataEnv, loRegCur USE (THIS.c_InputFile) SHARED NOUPDATE ALIAS TABLABIN_0 - GO TOP && Tiene que ser objType = 1 - SCATTER MEMO NAME loRegCab - GOTO BOTTOM && Tiene que ser objType = 25 - SCATTER MEMO NAME loRegDataEnv + *-- Header + LOCATE FOR objType = 1 + IF FOUND() + SCATTER MEMO NAME loRegCab + ENDIF - SELECT * FROM TABLABIN_0 ; - WHERE objType NOT IN (1,25) ; - ORDER BY vpos,hpos ; - INTO CURSOR TABLABIN READWRITE + *-- Dataenvironment + LOCATE FOR objType = 25 + IF FOUND() + SCATTER MEMO NAME loRegDataEnv + ENDIF + + *-- Cursor1 (¿puede haber más de 1 cursor?) + LOCATE FOR objType = 26 + IF FOUND() + SCATTER MEMO NAME loRegCur + ENDIF + + IF THIS.l_ReportSort_Enabled + *-- ORDENADO + SELECT * FROM TABLABIN_0 ; + WHERE objType NOT IN (1,25,26) ; + ORDER BY vpos,hpos ; + INTO CURSOR TABLABIN READWRITE + ELSE + *-- SIN ORDENAR (Sólo para poder comparar con el original) + SELECT * FROM TABLABIN_0 ; + WHERE objType NOT IN (1,25,26) ; + INTO CURSOR TABLABIN + ENDIF loRegObj = NULL USE IN (SELECT("TABLABIN_0")) @@ -6973,7 +7007,7 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg THIS.write_PROGRAM_HEADER() - *---------------------------------------------- + *-- Recorro los registros y genero el texto SELECT TABLABIN GOTO TOP THIS.write_CABECERA_REPORTE( @loRegCab ) @@ -6984,8 +7018,9 @@ DEFINE CLASS c_conversor_frx_a_prg AS c_conversor_bin_a_prg ENDSCAN THIS.write_DATAENVIRONMENT_REPORTE( @loRegDataEnv ) + THIS.write_DETALLE_REPORTE( @loRegCur ) - *-- Genero el SC2 + *-- Genero el FR2 IF THIS.l_Test toModulo = C_FB2PRG_CODE ELSE