Iniciar Sesión

Ver la Versión Completa : [Sintaxis] Leer archivos Cobol desde VB6


drvedia1981
24 de enero de 2018, 00:51
Hola a todos, sera posible leer un archivo cobol desde una aplicación vb6 el archivo cobol es asi
esta en power v3 en una aplicacion que hice hace un tiempo.

000001 FD ARTICULO GLOBAL EXTERNAL.
000002 01 REG-ARTICULO.
000003 02 ART-CLAVE-PRIN.
000004 05 ARTCODIGO PIC 9(5).
000005 02 ART-CLAVE-BARRA.
000006 05 ARTBARRA PIC 9(13).
000007 02 ART-CLAVE-NOMBRE.
000008 05 ARTNOMBRE PIC X(35).
000009 02 ARTTPV PIC X(20).
000010 02 ARTIVA PIC 9(4).
000011 02 ART-CLAVE-PROVEEDOR.
000012 05 ARTPROVEEDOR PIC 9(5).
000013 02 ART-CLAVE-RUBRO.
000014 05 ARTRUBRO PIC 9(3).
000015 02 ARTENVASE PIC 9(5).
000016 02 ARTCOSTO PIC 9(7)V99.
000017 02 ARTMINORISTA PIC 9(7)V99.
000018 02 ARTMAYORISTA PIC 9(7)V99.
000019 02 ARTDESCUENTO PIC 9(2).
000020 02 ARTCANTIDAD PIC 9(2).
000021 02 ARTMINIMO PIC 9(4).
000022 02 ARTGANANCIA1 PIC 9(2).
000023 02 ARTGANANCIA2 PIC 9(2).
000024 02 ARTSTOCK OCCURS 4 PIC S9(6)V99.
000025 02 ARTVENDIDO OCCURS 31 PIC S9(7)V99.
000026 02 ARTCANTIDADVEND PIC 9(6)V99.
000027 02 ARTCOMPRA PIC 9(6).
000028 02 ARTFOTOGRAFIA PIC X(128).



Solo quiero buscar por ARTBARRA y que me devuelva el ARTMINORISTA no lo puedo hacer en cobol porque usa el puerto serie y en power nunca pude usar un ocx que funcione como quiero, alguna pista de como lo puedo hacer .
Muchas gracias Saludos

---------- Post añadido : 00:51 ---------- Post anterior : 00:49 ----------

000001 SELECT ARTICULO ASSIGN TO "E:\FSC\ARCHIVOS\ARARTIC.DAT"
000002 ORGANIZATION INDEXED
000003 ACCESS DYNAMIC
000004 RECORD KEY IS ART-CLAVE-PRIN
000005 ALTERNATE RECORD IS ART-CLAVE-BARRA
000006 ALTERNATE RECORD IS ART-CLAVE-NOMBRE WITH DUPLICATES
000007 ALTERNATE RECORD IS ART-CLAVE-PROVEEDOR WITH DUPLICATES
000008 ALTERNATE RECORD IS ART-CLAVE-RUBRO WITH DUPLICATES
000009 FILE STATUS ART-STATUS.

Joseg
24 de enero de 2018, 17:36
Hola a todos, sera posible leer un archivo cobol desde una aplicación vb6 el archivo cobol es asi
esta en power v3 en una aplicacion que hice hace un tiempo.

000001 FD ARTICULO GLOBAL EXTERNAL.
000002 01 REG-ARTICULO.
000003 02 ART-CLAVE-PRIN.
000004 05 ARTCODIGO PIC 9(5).
000005 02 ART-CLAVE-BARRA.
000006 05 ARTBARRA PIC 9(13).
000007 02 ART-CLAVE-NOMBRE.
000008 05 ARTNOMBRE PIC X(35).
000009 02 ARTTPV PIC X(20).
000010 02 ARTIVA PIC 9(4).
000011 02 ART-CLAVE-PROVEEDOR.
000012 05 ARTPROVEEDOR PIC 9(5).
000013 02 ART-CLAVE-RUBRO.
000014 05 ARTRUBRO PIC 9(3).
000015 02 ARTENVASE PIC 9(5).
000016 02 ARTCOSTO PIC 9(7)V99.
000017 02 ARTMINORISTA PIC 9(7)V99.
000018 02 ARTMAYORISTA PIC 9(7)V99.
000019 02 ARTDESCUENTO PIC 9(2).
000020 02 ARTCANTIDAD PIC 9(2).
000021 02 ARTMINIMO PIC 9(4).
000022 02 ARTGANANCIA1 PIC 9(2).
000023 02 ARTGANANCIA2 PIC 9(2).
000024 02 ARTSTOCK OCCURS 4 PIC S9(6)V99.
000025 02 ARTVENDIDO OCCURS 31 PIC S9(7)V99.
000026 02 ARTCANTIDADVEND PIC 9(6)V99.
000027 02 ARTCOMPRA PIC 9(6).
000028 02 ARTFOTOGRAFIA PIC X(128).



Solo quiero buscar por ARTBARRA y que me devuelva el ARTMINORISTA no lo puedo hacer en cobol porque usa el puerto serie y en power nunca pude usar un ocx que funcione como quiero, alguna pista de como lo puedo hacer .
Muchas gracias Saludos

---------- Post añadido : 00:51 ---------- Post anterior : 00:49 ----------

000001 SELECT ARTICULO ASSIGN TO "E:\FSC\ARCHIVOS\ARARTIC.DAT"
000002 ORGANIZATION INDEXED
000003 ACCESS DYNAMIC
000004 RECORD KEY IS ART-CLAVE-PRIN
000005 ALTERNATE RECORD IS ART-CLAVE-BARRA
000006 ALTERNATE RECORD IS ART-CLAVE-NOMBRE WITH DUPLICATES
000007 ALTERNATE RECORD IS ART-CLAVE-PROVEEDOR WITH DUPLICATES
000008 ALTERNATE RECORD IS ART-CLAVE-RUBRO WITH DUPLICATES
000009 FILE STATUS ART-STATUS.



Não dá para criar um ficheiro LINE-SEQUENTIAL temporário só com a informação a processar?

Rapinto
29 de enero de 2018, 18:48
Para testar, precisava dum exemplo do ficheiro com alguns dados.
Posso tentar fazer em PowerCobol 9 uma DLL para utilizar em VB6.
Sem o ficheiro, não consigo fazer nada.
Un saludo,
Rui Pinto

Kuk
29 de enero de 2018, 20:55
drvedia1981, puedes crear un programa "normal", es decir en modo Batch sin GUI, y compilarlo vía línea de comandos con el compilador que viene con el PowerCOBOL V3L10 y linkearlo a una DLL.

Tendrás que mirar las opciones, pero no es nada complicado.

Mira crea un programa cualquiera con un DISPLAY y complílalo con este script CMD/BAT:

C:\ruta_powercobol_3\cobol32.exe -WC"MAIN,MESSAGE,FLAG(I),SOURCE" C:\ruta_de_tu_programa\PROGRAMA.COB > SYSOUT.txt
C:\ruta_powercobol_3\link.exe C:\ruta_de_tu_programa\PROGRAMA.OBJ C:\ruta_powercobol_3\*.lib >> SYSOUT.txt
pause

drvedia1981
30 de enero de 2018, 20:25
Hola Kuk gracias por la ayuda , no entiendo como seria, yo creo un programa sin GUI y lo compilo con el script y eso que me genera una .dll ? después esa dll la uso en vb ? como le pasaría parámetros ?
Saludos

---------- Post añadido : 20:18 ---------- Post anterior : 20:11 ----------

Hola Rapinto te dejo el link del archivo cobol
Saludos gracias
MEGA (https://mega.nz/#!3lAwEaoQ!VlPFbawMdVETmqTH0Sxpk9flukyJSn2EUU-gE4FaBWE)

---------- Post añadido : 20:25 ---------- Post anterior : 20:18 ----------

Link definicion del archivo
MEGA (https://mega.nz/#!OthQlDwb!8wHiXsc4zQCrxmpZWiRf871jvfhu7HIadN38mSd YML8)

Kuk
30 de enero de 2018, 21:06
drvedia1981, eso es. Los parámetros los defines en LINKAGE de tu programa COBOL. Para importar una DLL en VB hay un montón de ejemplos en Google, sería como una DLL cualquiera.

Para la opción de hacer LINK en una DLL es la opción /DLL

Para la lista completa del LINK mira aquí: Linker Options (https://msdn.microsoft.com/en-us/library/y0zzbyt4.aspx)

drvedia1981
30 de enero de 2018, 21:36
Hola Kuk

Arme esto y con el script que me dijiste me genero un .exe para generar la dll como seria, esta bien el codigo como lo ves Gracias Saludos

000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. DLL.
000030 ENVIRONMENT DIVISION.
000031 CONFIGURATION SECTION.
000042
000043 INPUT-OUTPUT SECTION.
000044 FILE-CONTROL.
000055 SELECT ARTICULO ASSIGN TO "C:\FSC\ARCHIVOS\ARARTIC.DAT"
000056 ORGANIZATION INDEXED
000057 ACCESS DYNAMIC
000058 RECORD KEY IS ART-CLAVE-PRIN
000059 ALTERNATE RECORD IS ART-CLAVE-BARRA
000060 ALTERNATE RECORD IS ART-CLAVE-NOMBRE WITH DUPLICATES
000061 ALTERNATE RECORD IS ART-CLAVE-PROVEEDOR WITH DUPLICATES
000062 ALTERNATE RECORD IS ART-CLAVE-RUBRO WITH DUPLICATES
000063 FILE STATUS ART-STATUS.
000064
000065 DATA DIVISION.
000066 FILE SECTION.
000067 FD ARTICULO GLOBAL EXTERNAL.
000068 01 REG-ARTICULO.
000069 02 ART-CLAVE-PRIN.
000070 05 ARTCODIGO PIC 9(5).
000071 02 ART-CLAVE-BARRA.
000072 05 ARTBARRA PIC 9(13).
000073 02 ART-CLAVE-NOMBRE.
000074 05 ARTNOMBRE PIC X(35).
000075 02 ARTTPV PIC X(20).
000076 02 ARTIVA PIC 9(4).
000077 02 ART-CLAVE-PROVEEDOR.
000078 05 ARTPROVEEDOR PIC 9(5).
000079 02 ART-CLAVE-RUBRO.
000080 05 ARTRUBRO PIC 9(3).
000081 02 ARTENVASE PIC 9(5).
000082 02 ARTCOSTO PIC 9(7)V99.
000083 02 ARTMINORISTA PIC 9(7)V99.
000084 02 ARTMAYORISTA PIC 9(7)V99.
000085 02 ARTDESCUENTO PIC 9(2).
000086 02 ARTCANTIDAD PIC 9(2).
000087 02 ARTMINIMO PIC 9(4).
000088 02 ARTGANANCIA1 PIC 9(2).
000089 02 ARTGANANCIA2 PIC 9(2).
000090 02 ARTSTOCK OCCURS 4 PIC S9(6)V99.
000091 02 ARTVENDIDO OCCURS 31 PIC S9(7)V99.
000092 02 ARTCANTIDADVEND PIC 9(6)V99.
000093 02 ARTCOMPRA PIC 9(6).
000094 02 ARTFOTOGRAFIA PIC X(128).
000098 WORKING-STORAGE SECTION.
000100 01 ART-STATUS PIC 9(2).
000104 LINKAGE SECTION.
000105 01 DATA1 PIC X(13).
000106 01 DATA2 PIC S9(14)V9(4) COMP-5.
000117
000118 PROCEDURE DIVISION WITH STDCALL LINKAGE USING DATA1 DATA2 .
000121 OPEN INPUT ARTICULO
000128 MOVE DATA1 TO ARTBARRA.
000130 READ ARTICULO KEY IS ART-CLAVE-BARRA.
000147 MOVE ARTMINORISTA TO DATA2
000153 CLOSE ARTICULO
000154
000157 EXIT PROGRAM.

Kuk
30 de enero de 2018, 22:24
drvedia1981, para la DLL tiene que ser:


C:\ruta_powercobol_3\cobol32.exe -WC"MESSAGE,FLAG(I),SOURCE" C:\ruta_de_tu_programa\PROGRAMA.COB > SYSOUT.txt
C:\ruta_powercobol_3\link.exe /DLL C:\ruta_de_tu_programa\PROGRAMA.OBJ C:\ruta_powercobol_3\*.lib >> SYSOUT.txt


Para llamar el programa desde el VB, es el nombre de la PROGRAM-ID con el prefijo de guion bajo. Es decir, si tu PROGRAM-ID es PROGRAMA, desde VB debes llamar a _PROGRAMA

Desde VB debes declarar la función de la siguiente manera:

Declare Function PROGRAMA Lib "PROGRAMA.DLL" Alias "_PROGRAMA@8" (ByRef DATA1 As String, ByRef DATA2 As Long) As Integer

drvedia1981
31 de enero de 2018, 00:53
Muchas gracias Kuk voy a probar Saludos !!!!