Iniciar Sesión

Ver la Versión Completa : [Sintaxis] USE AFTER ERROR ......


Gusaiello
21 de febrero de 2022, 12:00
Hola colegas, necesito de vuestra ayuda.
Siempre he usado en DECLARATIVES la sentencia USE AFTER ERROR PROCEDURE ON y a continuación la lista de archivos que usará el programa para evitar abortos provocados por errores imprevistos.
USE AFTER ERROR PROCEDURE ON ARCHIVO1 ARCHIVO2.

Ahora tengo algunos programas que usan Excel o Word (total novedad para mi)

Todo funciona perfectamente siempre y cuando esten instalados, pero en caso de no estarlos (cosa rara), el programa aborta dando un error "Clase no registrada".

Mi pregunta es como puedo agregar un control mediante la sentencia USE, para poder controlar este error ademas de controlar los posibles errores que pudieran provocar los archivos.

Desde ya, muchas gracias.

Fito
21 de febrero de 2022, 13:38
Hola Gustavo.

Para la factura electrónica, uso un ocx de terceros. pero no lo incrusto en el formulario, lo instancio en tiempo de ejecución. Por eso uso el REPOSITORY con este código.


CLASS OLE AS "*OLE"
CLASS EXCEP AS "*COM-EXCEPTION"


Despues a mi declaratives le agrego


err section.
use after exception excep.
invoke exception-object "GET-SOURCE" returning SRC.
invoke exception-object "GET-DESCRIPTION" returning MSG.
invoke pow-self "DisplayMessage" using MSG SRC POW-DMICONERROR.
exit program.


Es lo único que tengo para ayudarte, no sé si se adecuará a lo tuyo.

Saludos...

Fito...

Gusaiello
21 de febrero de 2022, 13:45
No encaja exactamente en AcuCobol, pero gracias @Fito. en base a esto iré probando hasta que lo emboque.

fastpho
21 de febrero de 2022, 14:01
Hola @Gusaiello, te paso un ejemplo sacado del manual de cobol debe ser parecido en AcuCobol para el manejo de errores OLE.


IDENTIFICATION DIVISION.
PROGRAM-ID. PROGRAM-A.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
CLASS OLE AS "*OLE"
CLASS OLE-EXCEPTION AS "*OLE-EXCEPTION".
* :
DATA DIVISION.
WORKING-STORAGE SECTION.
01 OLE-SV-OBJ USAGE IS OBJECT REFERENCE OLE.
01 OLE-ERROR-INFORMATION.
03 OLE-ER-TYPE PIC X(01).
03 OLE-WCODE PIC X(02).
01 OLE-SERVER PIC X(20) VALUE "OLESERVER.OLECLASS".
01 METHOD-NAME PIC X(20) VALUE SPACE.
01 SERVER-PASSWORD PIC X(04).
*:
PROCEDURE DIVISION.
DECLARATIVES.
ERR SECTION.
USE AFTER EXCEPTION OLE-EXCEPTION.
INVOKE EXCEPTION-OBJECT "GET-ERROR-TYPE"
RETURNING OLE-ER-TYPE. *> [1]
IF OLE-ER-TYPE = "1"
THEN
DISPLAY "ERROR OCCURED IN " METHOD-NAME "METHOD" *> [2]
SET OLE-SV-OBJ TO NULL.
EXIT PROGRAM
ELSE
INVOKE EXCEPTION-OBJECT "GET-WCODE"
RETURNING OLE-WCODE *> [3]
IF OLE-WCODE NOT = X"0001"
THEN *> [4]
DISPLAY "ERROR OCCURED IN " METHOD-NAME "METHOD"
SET OLE-SV-OBJ TO NULL.
EXIT PROGRAM
END-IF
END-IF.
END DECLARATIVES.
:
MOVE SPACE TO OLE-ER-TYPE.
MOVE "CREATE-OBJECT" TO METHOD-NAME.
INVOKE OLE "CREATE-OBJECT" USING OLE-SERVER *> [5]
RETURNING OLE-SV-OBJ.


Saludos ...

Gusaiello
22 de febrero de 2022, 17:04
@fastpho, excelente, muchas gracias.