Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol COBOL - General
COBOL - General Discusiones de temática general sobre el lenguaje COBOL y todo lo relacionado con él.
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Discusión] Ayuda programa COBOL dariodr COBOL - General 0 10 de noviembre de 2024 03:53
[Duda] Como insertar un programa C en POWER COBOL 9 FabioYeyo PowerCOBOL (ActiveX, v4 - v11) 10 20 de abril de 2017 10:08
[Compilador] Ejecutar un programa RM Cobol Matias RM/COBOL 2 14 de julio de 2016 02:54

Respuesta
 
Herramientas

  #1
Antiguo 20 de marzo de 2023, 15:36
jorgeamedina2020
Forero Junior
Última Actividad 21.04.2026 20:06
Posts Posts: 24
Likes enviados Enviados: 50
Likes recibidos Recibidos: 4
Consola Escritura distinta de un programa COBOL
0 Inactivo Inactivo

Hola queridos Amigos y Colegas, estoy aquí nuevamente para compartir una inquietud muy especial en cuanto al tipo de escritura de un programa cobol, si, tipo de escritura, y pasare a explicar el tema.

En una escritura normal de un programa y dependiendo del dialecto cobol que se use como compilador, la forma estándar o básica o de reglamento si se puede decir así seria la siguiente (Ejemplo simple)

Código COBOL:
  1.         DATA DIVISION.
  2.         WORKING-STORE SECTION.
  3.         01 CAMPO1 PIC 9(01).
  4.         01 CAMPO2 PIC 9(01).
  5.         01 CAMPO3 PIC 9(01).
  6.         01 CAMPO4 PIC 9(01).
  7.         01 CAMPO5 PIC 9(01).
  8.  
  9.  
  10.         PROCEDURE DIVISION.
  11.              MOVE 1 TO CAMPO1.
  12.              MOVE 1 TO CAMPO2.
  13.              MOVE 1 TO CAMPO3.
  14.              MOVE 1 TO CAMPO4.
  15.              MOVE 1 TO CAMPO5.
  16.              DISPLAY CAMPO1.
  17.              
  18.              EXIT PROGRAM.


Ahora, el tema es el siguiente, debido a que uno quiere ahorrar linea de programación, o achicar el programa cobol para tener menos lineas así pueda ser compilado con mas instrucciones y menos lineas se haría esto:

Código COBOL:
  1.         DATA DIVISION.
  2.         WORKING-STORE SECTION.
  3.         01 CAMPO1 PIC 9(01). 01 CAMPO2 PIC 9(01). 01 CAMPO3 PIC 9(01).
  4.         01 CAMPO4 PIC 9(01). 01 CAMPO5 PIC 9(01).
  5.  
  6.  
  7.         PROCEDURE DIVISION.
  8.              MOVE 1 TO CAMPO1. MOVE 1 TO CAMPO2. MOVE 1 TO CAMPO3.
  9.              MOVE 1 TO CAMPO4. MOVE 1 TO CAMPO5.
  10.              DISPLAY CAMPO1.
  11.              
  12.              EXIT PROGRAM.


Que opinan de esto?, déjeme contarles que Yo, puedo hacer esto usando Micro Focus Cobol, creo que hay una instrucción o paramento o algo que le indica al lenguaje que interprete una linea conteniendo varias instrucciones y no solo una. Siempre aprendimos que en cada linea va una definición de variable o archivo o tabla y también un procedimiento por linea, pero como vemos aquí,
en una linea hay varias definiciones y procedimientos, como fije antes, En Micro Focus Funciona y muy bien, esto me ayudo a crear programas mas grandes, con mas contenido de definiciones y procedimientos y a la vez con menos lineas o renglones para compilar.

La pregunta iría dirigida a todos los demás lenguajes o mejor dicho a todos los dialectos de cobol, como AcuCobol, RmCobol, IbmCobol, etc, etc, etc.
Mas en particular me gustaría saber si en AcuCobol se puede indicar de algún modo mediante paramentos o condiciones al compilador o al entorno para que interprete esta forma de trabajo, actualmente dan error al compilar.

Seria bueno que hagan pruebas con sus lenguajes y comenten que descubrieron y si encuentran o saben como hacer que los demás dialectos interpreten esto comenten , es importante conocer este tema y compartir con los demas.
Atte Jorge.
jorgeamedina2020 is offline   Responder Con Cita
  #2
Antiguo 20 de marzo de 2023, 17:03
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

A ver @jorgeamedina2020, sin que lo consideres un insulto porque nada más lejos de mi intención, me parece esa forma de escribir código "una marraná", a parte de que se quedaría el programa poco claro a la hora de leerlo por ti o por cualquier otra persona, también te digo que, en la PROCEDURE DIVISION, puedes escribir el código casi como quieras, pero la WORKING, tiene unas normas muy estrictas, una de ellas es que "Todo campo a nivel 77 ó 01, ha de empezar en el área A", o lo que es lo mismo, en las columnas 8 a 11, si en vez del COBOL actual, usaras COBOL-74 o COBOL-85, no te funcionaría ni de suerte, en esas versiones, tenías que respetar mucho las áreas A B y C, (columnas 8 a 11, 12 a 72 y 73 a 80 respectivamente).

Por otro lado, imagínate que haces un programa de esa manera y, dentro de seis meses, un año, cuando sea, necesitas modificar algo, te vas a volver loco intentando encontrarlo. El profesor que yo tuve de COBOL, a mediados de los 80, lo tenía muy claro, tu programa podía trabajar mejor que ninguno pero, como no estuviese escrito claro, con sus indentaciones, sus espacios, cambios de línea, comentarios, etc, estabas suspendido. Sólo tienes que descargarte cualquiera de los ejemplos que yo he subido y verás que es casi obsesivo en mí poner indentaciones, saltos de línea, etc, sin importar el largo del programa, eso es lo de menos hoy en día, el compilador, lo va a leer como si fuese un churro todo seguido y creo que nadie se me ha quejado por eso.

Un salu2.-
Josber is offline   Responder Con Cita
  #3
Antiguo 20 de marzo de 2023, 17:33
jorgeamedina2020
Forero Junior
Última Actividad 21.04.2026 20:06
Posts Posts: 24
Likes enviados Enviados: 50
Likes recibidos Recibidos: 4

@Josber, Hola, gracias por tu respuesta sincera, primero no me parece que mi escritura sea (una marrana), segundo son mis programas y nadie debería verlos o acceder mas que yo porque son de mi propiedad intelectual y tercero con respecto a las normas... porque mi compilador me lo permite hacer?, buena pregunta verdad!!!,
Este ejemplo que te comparto lo hice hace varios años atrás, y justo ahora salio una modificación y se hizo al toque sin demorar nada, por que?, por conozco mis programas como los hice, asi de facir.
Mira esto:

Código COBOL:
  1.        ENVIRONMENT DIVISION.
  2.        CONFIGURATION SECTION.
  3.        SOURCE-COMPUTER. PC-IBM.
  4.        OBJECT-COMPUTER. PC-IBM.
  5.        INPUT-OUTPUT SECTION.
  6.        FILE-CONTROL.
  7.            COPY EMPRESA.SEL.  COPY MOVDEU.SEL.   COPY CODICOMP.SEL.
  8.            COPY VENDEDOR.SEL. COPY CONDVTAS.SEL. COPY LOCALIDA.SEL.
  9.            COPY PROVIN.SEL. COPY ZONAS.SEL.    COPY CLIENTES.SEL.
  10.            COPY PROVEDOR.SEL. COPY MARCAS.SEL.   COPY RUBROS.SEL.
  11.            COPY ARTICULO.SEL. COPY TRANSPOR.SEL.
  12.            COPY PROVCOMI.SEL. COPY RUBRCOMI.SEL.
  13.        SELECT AAAA ASSIGN TO DISK
  14.               ORGANIZATION IS INDEXED
  15.               ACCESS MODE  IS DYNAMIC
  16.               RECORD KEY   IS AA-CLAVE = AA-CODI
  17.                                          AA-ORDE
  18.               ALTERNATE RECORD KEY IS AA-CLAVE1 = AA-DESC
  19.                                                   AA-CODI
  20.                                                   AA-ORDE
  21.                                                   WITH DUPLICATES
  22.               ALTERNATE RECORD KEY IS AA-CLAVE2 = AA-CANT
  23.                                                   AA-CODI
  24.                                                   AA-ORDE
  25.                                                   WITH DUPLICATES
  26.               ALTERNATE RECORD KEY IS AA-CLAVE3 = AA-IMPO
  27.                                                   AA-CODI
  28.                                                   AA-ORDE
  29.                                                   WITH DUPLICATES
  30.               FILE STATUS IS FF.
  31.        SELECT BBBB ASSIGN TO DISK
  32.               ORGANIZATION IS INDEXED
  33.               ACCESS MODE  IS DYNAMIC
  34.               RECORD KEY   IS BB-CLAVE = BB-CODI
  35.                                          BB-CODI2
  36.               ALTERNATE RECORD KEY IS BB-CLAVE1 = BB-DESC
  37.                                                   BB-CODI
  38.                                                   BB-DESC2
  39.                                                   BB-CODI2
  40.                                                   WITH DUPLICATES
  41.               ALTERNATE RECORD KEY IS BB-CLAVE2 = BB-CODI
  42.                                                   BB-CANT2
  43.                                                   BB-CODI2
  44.                                                   WITH DUPLICATES
  45.               ALTERNATE RECORD KEY IS BB-CLAVE3 = BB-CODI
  46.                                                   BB-IMPO2
  47.                                                   BB-CODI2
  48.                                                   WITH DUPLICATES
  49.               FILE STATUS IS FF.
  50.        SELECT CCCC ASSIGN TO DISK
  51.               ORGANIZATION IS INDEXED
  52.               ACCESS MODE  IS DYNAMIC
  53.               RECORD KEY   IS CC-CLAVE = CC-CODI
  54.                                          CC-ORDE
  55.               FILE STATUS IS FF.
  56.        SELECT TXT1 ASSIGN TO DISK
  57.               ORGANIZATION IS LINE SEQUENTIAL
  58.               ACCESS MODE  IS SEQUENTIAL
  59.               FILE STATUS IS FF.
  60.        SELECT TXT2 ASSIGN TO DISK
  61.               ORGANIZATION IS LINE SEQUENTIAL
  62.               ACCESS MODE  IS SEQUENTIAL
  63.               FILE STATUS IS FF.
  64.        SELECT IMPRES   ASSIGN TO "C:TEMPESTAVTAS"
  65.               FILE STATUS  IS FF.
  66.            COPY MOVOBA00.SEL.
  67.            COPY MOVOBA02.SEL.
  68.      *±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
  69.        DATA DIVISION.
  70.        FILE SECTION.
  71.            COPY EMPRESA.REC.  COPY MOVDEU.REC.   COPY CODICOMP.REC.
  72.            COPY VENDEDOR.REC. COPY CONDVTAS.REC. COPY LOCALIDA.REC.
  73.            COPY PROVIN.REC. COPY ZONAS.REC.    COPY CLIENTES.REC.
  74.            COPY PROVEDOR.REC. COPY MARCAS.REC.   COPY RUBROS.REC.
  75.            COPY ARTICULO.REC. COPY TRANSPOR.REC.
  76.            COPY PROVCOMI.REC. COPY RUBRCOMI.REC.
  77.        FD AAAA
  78.           LABEL RECORD IS STANDARD
  79.           VALUE OF FILE-ID IS "C:TEMPAAAA.DAT".
  80.        01 R-AAAA.
  81.           02 AA-ORDE    PIC 9(01).
  82.           02 AA-CODI    PIC X(14).
  83.           02 AA-DESC    PIC X(50).
  84.           02 AA-CANT    PIC S9(05)V999.
  85.           02 AA-IMPO    PIC S9(10)V99.
  86.           02 AA-COST    PIC S9(10)V99.
  87.  opci     02 AA-PCOM    PIC 9(03)V99.
  88.  opci     02 AA-ICOM    PIC S9(10)V99.
  89.           02 AA-COST-SF PIC S9(10)V99.
  90.        FD BBBB
  91.           LABEL RECORD IS STANDARD
  92.           VALUE OF FILE-ID IS "C:TEMPBBBB.DAT".
  93.        01 R-BBBB.
  94.           02 BB-CODI    PIC X(14).
  95.           02 BB-DESC    PIC X(50).
  96.           02 BB-CANT    PIC S9(05)V999.
  97.           02 BB-IMPO    PIC S9(10)V99.
  98.           02 BB-COST    PIC S9(10)V99.
  99.  opci     02 BB-PCOM    PIC 9(03)V99.
  100.  opci     02 BB-ICOM    PIC S9(10)V99.
  101.           02 BB-CODI2   PIC X(14).
  102.           02 BB-DESC2   PIC X(50).
  103.           02 BB-CANT2   PIC S9(05)V999.
  104.           02 BB-IMPO2   PIC S9(10)V99.
  105.           02 BB-COST2   PIC S9(10)V99.
  106.  opci     02 BB-PCOM2   PIC 9(03)V99.
  107.  opci     02 BB-ICOM2   PIC S9(10)V99.
  108.           02 BB-COST-SF PIC S9(10)V99.
  109.           02 BB-COST2-SF PIC S9(10)V99.
  110.        FD CCCC
  111.           LABEL RECORD IS STANDARD
  112.           VALUE OF FILE-ID IS "C:TEMPCCCC.DAT".
  113.        01 R-CCCC.
  114.           02 CC-ORDE    PIC 9(01).
  115.           02 CC-CODI    PIC X(14).
  116.           02 CC-DESC    PIC X(50).
  117.           02 CC-CANT    PIC S9(05)V999.
  118.           02 CC-IMPO    PIC S9(10)V99.
  119.        FD TXT1
  120.           LABEL RECORD IS STANDARD
  121.           VALUE OF FILE-ID IS "C:TEMPESTAVTAS".
  122.        01 R-TXT1.
  123.           02 X1-LONG PIC X(159).
  124.        FD TXT2
  125.           LABEL RECORD IS STANDARD
  126.           VALUE OF FILE-ID IS "C:TEMPESTAVTAS.XLS".
  127.        01 R-TXT2.
  128.           02 X2-LONG.
  129.      *      03 X2-01    PIC X.
  130.      *      03 X2-ORDE  PIC X(04).
  131.      *      03 X2-02    PIC X.
  132.      *      03 X2-CODI  PIC X(14).
  133.      *      03 X2-03    PIC X.
  134.      *      03 X2-DESC  PIC X(50).
  135.      *      03 X2-04    PIC X.
  136.      *      03 FILLER   PIC X(31).
  137.      *      03 X2-05    PIC X.
  138.      *      03 X2-COST  PIC 999,999,999.99-.
  139.      *      03 X2-06    PIC X.
  140.      *      03 X2-CANT  PIC 99999-.
  141.      *      03 X2-07    PIC X.
  142.      *      03 X2-IMPO  PIC 999,999,999.99-.
  143.      *      03 X2-08    PIC X.
  144.      *      03 X2-PORC  PIC 999.99-.
  145.      *      03 X2-09    PIC X.
  146.      *      03 FILLER   PIC X(10).
  147.  
  148.              03 X2-ORDE  PIC X(04).
  149.              03 X2-01    PIC X.
  150.              03 X2-CODI  PIC X(14).
  151.              03 X2-02    PIC X.
  152.              03 X2-DESC  PIC X(50).
  153.              03 X2-03    PIC X.
  154.              03 FILLER   PIC X(08).
  155.              03 X2-04    PIC X.
  156.  opci        03 X2-PCOM  PIC 999.99.
  157.              03 X2-05    PIC X.
  158.  opci        03 X2-ICOM  PIC 999,999,999.99-.
  159.              03 X2-06    PIC X.
  160.              03 X2-COST  PIC 999,999,999.99-.
  161.              03 X2-07    PIC X.
  162.              03 X2-CANT  PIC 99999-.
  163.              03 X2-08    PIC X.
  164.              03 X2-IMPO  PIC 999,999,999.99-.
  165.              03 X2-09    PIC X.
  166.              03 X2-PORC  PIC 999.99-.
  167.              03 X2-10    PIC X.
  168.              03 FILLER   PIC X(10).
  169.        FD IMPRES
  170.           LABEL RECORD IS OMITTED
  171.           LINAGE       IS 66 LINES.
  172.        01 R-IMPRES     PIC X(159).
  173. *ESPE* VERTICAL...
  174. *ESPE*  63 lineas -  79 columnas -  80 comando
  175. *ESPE*  77 lineas -  95 columnas -  96 comando
  176. *ESPE*  96 lineas - 129 columnas - 120 comando
  177. *ESPE* 110 lineas - 136 columnas - 140 comando
  178. *ESPE* 129 lineas - 159 columnas - 160 comando
  179. *ESPE* HORIZONTAL...
  180. *ESPE*  68 lineas - 159 columnas - 120 comando
  181. *ESPE*  00 lineas - 000 columnas - 140 comando
  182. *ESPE*  86 lineas - 225 columnas - 160 comando
  183.            COPY MOVOBA00.REC.
  184.            COPY MOVOBA02.REC.
  185.        WORKING-STORAGE SECTION.
  186. Status 01 FF PIC XX.
  187.  "      88 FF-POS VALUE "00" "02" "10" "22" "23" "9A" "9D".
  188. "      88 FF-OK  VALUE "00" "02". 88 FF-FIN VALUE "10".
  189.  "      88 FF-DUP VALUE "22". 88 FF-INE VALUE "23".
  190. "      88 FF-ALU VALUE "9A". 88 FF-RLU VALUE "9D".
  191.  "     01 M-ARC PIC X(08). 01 M-ERR PIC X(30).
  192. Teclas 01 TEC PIC XX.
  193. "      88 T-POS VALUE "00" "01" "02" "05" "53" "54".
  194.  "      88 T-RET VALUE "00". 88 T-ESC VALUE "01". 88 T-F1 VALUE "02".
  195. "      88 T-ARR VALUE "53". 88 T-ABA VALUE "54". 88 T-F4 VALUE "05".
  196. FunTec 01 Z-CAR PIC 9(2) COMP-X.
  197.  "     01 Z-STA.
  198. "      02 Z-STA1 PIC X.
  199.  "      02 Z-STA2 PIC 9(2) COMP-X.
  200. "      02 Z-STA3 PIC 9(2) COMP-X.
  201. |      01 Z-FUN PIC 9(02) COMP-X. 01 Z-PAR. 03 Z-LON PIC 9(04) COMP-X.
  202. |       03 Z-POS PIC 9(04) COMP-X. 03 Z-BAF PIC 9(04) COMP-X.
  203. |      01 Z-CARA  PIC X(2000). 01 Z-ATRI  PIC X(2000).
  204. |      01 Z-CARA1 PIC X(2000). 01 Z-ATRI1 PIC X(2000).
  205.        01 A-FECHA. 03 A-DIA PIC 99. 03 A-MES PIC 99. 03 A-ANO PIC 9999.
  206.        01 A-FECHAX REDEFINES A-FECHA PIC 9(08).
  207.        01 W-FECHA. 03 W-ANO PIC 9999. 03 W-MES PIC 99. 03 W-DIA PIC 99.
  208.        01 W-FECHAX REDEFINES W-FECHA PIC 9(08).
  209.        01 Z-FECHA. 03 Z-ANO PIC 99. 03 Z-MES PIC 99. 03 Z-DIA PIC 99.
  210.        01 FEC PIC 9(8). 01 FEC1 PIC 9(8). 01 FEC2 PIC 9(8).
  211.        01 HOR. 03 HOR1 PIC 99. 03 HOR2 PIC 99. 03 HOR3 PIC 99.
  212.        01 HORX REDEFINES HOR PIC 9(06).
  213.        01 X PIC 9(1). 01 X1 PIC 9(1). 01 X2 PIC 9(1). 01 X3 PIC 9(1).
  214.        01 OPC PIC 9(2). 01 MENS1 PIC X(12). 01 MENS2 PIC X(12).
  215. N4     01 D-CODI  PIC X(14). 01 H-CODI  PIC X(14). 01 MENS3 PIC X(12).
  216. N4     01 D-CODI1 PIC 9(04). 01 H-CODI1 PIC 9(04). 01 COIM PIC 9(4).
  217. N6     01 D-CODI2 PIC 9(06). 01 H-CODI2 PIC 9(06). 01 FEIM PIC 9(8).
  218. A14    01 D-CODI3 PIC X(14). 01 H-CODI3 PIC X(14). 01 ESTA PIC 9.
  219.        01 D-FECH  PIC 9(08). 01 H-FECH  PIC 9(08). 01 COMI PIC 9.
  220.        01 D-FECH1 PIC 9(08). 01 H-FECH1 PIC 9(08). 01 TODO PIC X.
  221.        01 ORDE PIC 9. 01 MODO PIC 9. 01 VIST PIC 9. 01 BAN PIC 9.
  222.        01 D-FE PIC 9(8). 01 H-FE PIC 9(8). 01 XORD PIC 9. 01 BAN2 PIC 9.
  223.        01 EMP PIC X(30). 01 DOM PIC X(30). 01 XORDX PIC 9.
  224.        01 SEN PIC 9. 01 PAG PIC 9(4). 01 MEMOCL PIC X(100).
  225.        01 CORT PIC X(14). 01 CORTX PIC X(50). 01 COSF PIC 9.
  226.        01 SINO PIC X(01). 88 POSI VALUE "S" "s" "N" "n".
  227.         88 SISI VALUE "S" "s".  88 NONO VALUE "N" "n".
  228.        01 ZZ-RES PIC 9(02) COMP-X. 01 ZZ-FUN PIC 9(02) COMP-X VALUE 35.
  229.        01 ZZ-PAR. 03 ZZ-PAR1 PIC 9(02) COMP-X VALUE 0. 03 ZZ-PAR2 PIC X.
  230.  
  231. MesAct 01 TOT-CANT   PIC S9(06)V999. 01 TOT-IMPO  PIC S9(10)V99 .
  232.                                      01 TOT-COST  PIC S9(10)V99 .
  233.                                      01 TOT-ICOM  PIC S9(10)V99 .
  234.                                      01 TOT-COST-SF  PIC S9(10)V99 .
  235. MesAnt 01 TOT-CANTT  PIC S9(06)V999. 01 TOT-IMPOO PIC S9(10)V99 .
  236.                                      01 TOT-COSTT PIC S9(10)V99 .
  237.                                      01 TOT-ICOMM PIC S9(10)V99 .
  238.                                      01 TOT-COSTT-SF PIC S9(10)V99 .
  239. MesAct 01 TOT1-CANT  PIC S9(06)V999. 01 TOT1-IMPO  PIC S9(10)V99.
  240.                                      01 TOT1-COST  PIC S9(10)V99.
  241.                                      01 TOT1-ICOM  PIC S9(10)V99.
  242.                                      01 TOT1-COST-SF  PIC S9(10)V99.
  243. MesAnt 01 TOT1-CANTT PIC S9(06)V999. 01 TOT1-IMPOO PIC S9(10)V99.
  244.                                      01 TOT1-COSTT PIC S9(10)V99.
  245.                                      01 TOT1-ICOMM PIC S9(10)V99.
  246.                                      01 TOT1-COSTT-SF PIC S9(10)V99.
  247. MesAct 01 TOT2-CANT  PIC S9(06)V999. 01 TOT2-IMPO  PIC S9(10)V99.
  248.                                      01 TOT2-COST  PIC S9(10)V99.
  249.                                      01 TOT2-ICOM  PIC S9(10)V99.
  250.                                      01 TOT2-COST-SF  PIC S9(10)V99.
  251. MesAnt 01 TOT2-CANTT PIC S9(06)V999. 01 TOT2-IMPOO PIC S9(10)V99.
  252.                                      01 TOT2-COSTT PIC S9(10)V99.
  253.                                      01 TOT2-ICOMM PIC S9(10)V99.
  254.                                      01 TOT2-COSTT-SF PIC S9(10)V99.
  255.        01 CANITE PIC 9(6). 01 CANITET PIC 9(6).
  256.        01 AUX  PIC S9(10)V99. 01 AUX1 PIC S9(10)V99.
  257.        01 AUX2 PIC S9(10)V99. 01 AUX3 PIC S9(10)V99.
  258.        01 AUX4 PIC S9(10)V99. 01 AUX5 PIC S9(10)V99.
  259.        01 COM1 PIC 9(3)V99. 01 COM2 PIC 9(3)V99. 01 COM3 PIC 9(3)V99.
  260.        01 PCLI PIC 9(4). 01 ZCLI PIC ZZZ9. 01 PORC PIC S9(3)V99.
  261.        01 PPED PIC 9(4). 01 ZPED PIC ZZZ9.
  262.        01 PCAM PIC 9(3)V99. 01 ZCAM PIC ZZ9.99.
  263.        01 PREI PIC 9(3)V99. 01 ZREI PIC ZZ9.99.
  264.  
  265.        01 G1-IMPO PIC S9(10)V99. 01 G1-IMPOO PIC S9(10)V99.
  266.        01 G2-IMPO PIC S9(10)V99. 01 G2-IMPOO PIC S9(10)V99.
  267.        01 G3-IMPO PIC S9(10)V99. 01 G3-IMPOO PIC S9(10)V99.
  268.  
  269.        01 Z1-IMPO PIC S9(10)V99. 01 Z1-IMPOO PIC S9(10)V99.
  270.        01 Z2-IMPO PIC S9(10)V99. 01 Z3-IMPO PIC S9(10)V99.
  271.        01 OBRA PIC 9. 01 OBRA2 PIC 9.
  272.        01 X-VEND PIC 9(4). 01 X-VENDX PIC X(30). 01 X-VENDZ PIC 9(3)V99.
  273.        01 X-COND PIC 9(04). 01 X-CONDX PIC X(30).
  274.        01 X-LOCA PIC 9(06). 01 X-LOCAX PIC X(30).
  275.        01 X-PCIA PIC 9(04). 01 X-PCIAX PIC X(30).
  276.        01 X-ZONA PIC 9(04). 01 X-ZONAX PIC X(30).
  277.        01 X-CLIE PIC 9(04). 01 X-CLIEX PIC X(30).
  278.        01 X-PROV PIC 9(04). 01 X-PROVX PIC X(30).
  279.        01 X-MARC PIC 9(04). 01 X-MARCX PIC X(30).
  280.        01 X-RUBR PIC 9(04). 01 X-RUBRX PIC X(30).
  281.        01 X-ARTI PIC X(14). 01 X-ARTIX PIC X(30).
  282.        01 X-CANT PIC 9(05)V999. 01 X-IMPO PIC 9(10)V99.
  283.        01 X-TIVA PIC 9(03)V99. 01 X-COST PIC 9(10)V99.
  284.  
  285.        INI.
  286.            OPEN INPUT EMPRESA . MOVE "EMPRESA " TO M-ARC.
  287.            IF NOT FF-OK PERFORM VER-ERR GO FIN.
  288.            MOVE EM TO E-CLAVE. READ EMPRESA .
  289.            IF NOT FF-OK PERFORM VER-ERR CLOSE EMPRESA  GO FIN.
  290.            MOVE E-RAZON  TO EMP. MOVE E-DOMICI TO DOM.
  291.            MOVE E-FECHA  TO FEC A-FECHA.
  292.            MOVE A-DIA TO W-DIA. MOVE A-MES TO W-MES.
  293.            MOVE A-ANO TO W-ANO. MOVE W-FECHAX TO FEC1.
  294.            CLOSE EMPRESA .
  295.            MOVE 01 TO OPC.
  296. Opci   INA.
  297.            MOVE 99 TO TEC. DISPLAY P-OPC.
  298.            IF OPC = 01 DISPLAY P-OPC01. IF OPC = 02 DISPLAY P-OPC02.
  299.            IF OPC = 03 DISPLAY P-OPC03. IF OPC = 04 DISPLAY P-OPC04.
  300.            IF OPC = 05 DISPLAY P-OPC05. IF OPC = 06 DISPLAY P-OPC06.
  301.            IF OPC = 07 DISPLAY P-OPC07. IF OPC = 08 DISPLAY P-OPC08.
  302.            IF OPC = 09 DISPLAY P-OPC09. IF OPC = 10 DISPLAY P-OPC10.
  303.            PERFORM LEO-TEC UNTIL T-POS. IF T-ESC GO FIN.
  304.            IF T-ABA IF OPC = 10 GO INA ELSE ADD      1 TO   OPC GO INA.
  305.            IF T-ARR IF OPC = 01 GO INA ELSE SUBTRACT 1 FROM OPC GO INA.
  306.            IF NOT T-RET GO INA.
  307.  
  308.            MOVE SPACES TO D-CODI  H-CODI .
  309.            MOVE ZEROS  TO D-CODI1 H-CODI1.
  310. adic       MOVE ZEROS  TO D-CODI2 H-CODI2.
  311. adic       MOVE SPACES TO D-CODI3 H-CODI3.
  312.            MOVE FEC    TO D-FECH  H-FECH .
  313.            MOVE ZEROS  TO D-FECH1 H-FECH1. MOVE SPACES TO TODO.
  314.            MOVE 0 TO ORDE MODO COSF VIST X COMI OBRA OBRA2.
  315.        INA0.
  316.            PERFORM 0S.
  317.            MOVE "Articulos   " TO MENS1.
  318. Codi   INA1.
  319.            MOVE ZEROS TO TEC. DISPLAY P-CODI . ACCEPT  P-CODI .
  320.            ACCEPT  TEC FROM ESCAPE KEY. IF T-ESC PERFORM 0N GO INA.
  321.            IF T-F1
  322.               CALL   "AYUDARTI" USING ENLACE, D-CODI
  323.               CANCEL "AYUDARTI" MOVE ZEROS TO TEC
  324.               MOVE D-CODI  TO H-CODI  GO INA1.
  325.            IF NOT T-RET GO INA1.
  326.            IF D-CODI = SPACES
  327.               IF H-CODI = SPACES
  328.                  MOVE "*             " TO D-CODI
  329.                  MOVE "ZZZZZZZZZZZZZZ" TO H-CODI .
  330.            IF H-CODI = SPACES
  331.               MOVE "ZZZZZZZZZZZZZZ" TO H-CODI .
  332.            DISPLAY P-CODI .
  333.            IF OPC = 01 GO INA4.
  334.  
  335.            IF OPC = 02 MOVE "Vendedores  " TO MENS2.
  336.            IF OPC = 03 MOVE "Condiciones " TO MENS2.
  337.            IF OPC = 04 MOVE "Localidades " TO MENS2.
  338.            IF OPC = 05 MOVE "Provincias  " TO MENS2.
  339.            IF OPC = 06 MOVE "Zonas       " TO MENS2.
  340.            IF OPC = 07 MOVE "Clientes    " TO MENS2.
  341.            IF OPC = 08 MOVE "Proveedores " TO MENS2.
  342.            IF OPC = 09 MOVE "Marcas      " TO MENS2.
  343.            IF OPC = 10 MOVE "Rubros      " TO MENS2.
  344. Codi1  INA2.
  345.            MOVE ZEROS TO TEC.
  346.            IF OPC = 02 OR = 03 OR = 05 OR = 06 OR = 07 OR = 08 OR = 09
  347.                OR = 10
  348.               DISPLAY P-CODI1 ACCEPT  P-CODI1.
  349.            IF OPC = 04
  350.               DISPLAY P-CODI2 ACCEPT  P-CODI2.
  351.            ACCEPT  TEC FROM ESCAPE KEY. IF T-ESC OR T-F4 GO INA1.
  352.            IF T-F1
  353.               IF OPC = 02
  354.                  CALL   "AYUDVEND" USING D-CODI1
  355.                  CANCEL "AYUDVEND" MOVE ZEROS TO TEC
  356.                  MOVE D-CODI1 TO H-CODI1
  357.               END-IF
  358.               IF OPC = 03
  359. especi           CALL   "AYUDCOND" USING D-CODI1
  360.                  CANCEL "AYUDLOCA" MOVE ZEROS TO TEC
  361.                  MOVE D-CODI1 TO H-CODI1
  362.               END-IF
  363.               IF OPC = 04
  364.                  CALL   "AYUDLOCA" USING EM, D-CODI2
  365.                  CANCEL "AYUDPCIA" MOVE ZEROS TO TEC
  366.                  MOVE D-CODI2 TO H-CODI2
  367.               END-IF
  368.               IF OPC = 05
  369.                  CALL   "AYUDPCIA" USING D-CODI1
  370.                  CANCEL "AYUDPCIA" MOVE ZEROS TO TEC
  371.                  MOVE D-CODI1 TO H-CODI1
  372.               END-IF
  373.               IF OPC = 06
  374.                  CALL   "AYUDZONA" USING D-CODI1
  375.                  CANCEL "AYUDZONA" MOVE ZEROS TO TEC
  376.                  MOVE D-CODI1 TO H-CODI1
  377.               END-IF
  378.               IF OPC = 07
  379.                  CALL   "AYUDCLIE" USING D-CODI1
  380.                  CANCEL "AYUDCLIE" MOVE ZEROS TO TEC
  381.                  MOVE D-CODI1 TO H-CODI1
  382.               END-IF
  383.               IF OPC = 08
  384.                  CALL   "AYUDPROV" USING D-CODI1
  385.                  CANCEL "AYUDPROV" MOVE ZEROS TO TEC
  386.                  MOVE D-CODI1 TO H-CODI1
  387.               END-IF
  388.               IF OPC = 09
  389.                  CALL   "AYUDMARC" USING D-CODI1
  390.                  CANCEL "AYUDMARC" MOVE ZEROS TO TEC
  391.                  MOVE D-CODI1 TO H-CODI1
  392.               END-IF
  393.               IF OPC = 10
  394. especi           CALL   "AYUDRUBR" USING D-CODI1
  395.                  CANCEL "AYUDRUBR" MOVE ZEROS TO TEC
  396.                  MOVE D-CODI1 TO H-CODI1
  397.               END-IF
  398.               GO INA2.
  399.            IF NOT T-RET GO INA2.
  400.            IF OPC = 02 OR = 03 OR = 05 OR = 06 OR = 07 OR = 08 OR = 09
  401.                OR = 10
  402.               IF D-CODI1 = ZEROS
  403.                  IF H-CODI1 = ZEROS
  404.                     MOVE 0001 TO D-CODI1
  405.                     MOVE 9999 TO H-CODI1
  406.                  END-IF
  407.                  IF H-CODI1 = ZEROS
  408.                     MOVE "9999" TO H-CODI1
  409.                  END-IF
  410.               END-IF
  411.               DISPLAY P-CODI1.
  412.            IF OPC = 04
  413.               IF D-CODI2 = ZEROS
  414.                  IF H-CODI2 = ZEROS
  415.                     MOVE 000000   TO D-CODI2
  416.                     MOVE 999999   TO H-CODI2
  417.                  END-IF
  418.                  IF H-CODI2 = ZEROS
  419.                     MOVE 999999   TO H-CODI2
  420.                  END-IF
  421.               END-IF
  422.               DISPLAY P-CODI2.
  423.        INA3.
  424.  
  425. Fech   INA4.
  426.            MOVE ZEROS TO TEC. DISPLAY P-FECH . ACCEPT  P-FECH .
  427.            ACCEPT  TEC FROM ESCAPE KEY. IF T-ESC OR T-F4 GO INA2.
  428.            IF NOT T-RET GO INA4.
  429.            MOVE D-FECH  TO A-FECHA.
  430.            IF A-DIA > 31 OR = ZEROS GO INA4.
  431.            IF A-MES > 12 OR = ZEROS GO INA4.
  432.            IF A-ANO < 1980 OR = ZEROS GO INA4.
  433.            MOVE H-FECH  TO A-FECHA.
  434.            IF A-DIA > 31 OR = ZEROS GO INA4.
  435.            IF A-MES > 12 OR = ZEROS GO INA4.
  436.            IF A-ANO < 1980 OR = ZEROS GO INA4.
  437.            DISPLAY P-FECH .
  438.            IF OPC NOT = 01
  439.               PERFORM 1S
  440.               GO INA6.
  441. Fech1  INA5.
  442.            MOVE ZEROS TO TEC. DISPLAY P-FECH1. ACCEPT  P-FECH1.
  443.            ACCEPT  TEC FROM ESCAPE KEY. IF T-ESC OR T-F4 GO INA4.
  444.            IF NOT T-RET GO INA5.
  445.            IF D-FECH1 NOT = ZEROS
  446.               MOVE D-FECH1 TO A-FECHA
  447.               IF A-DIA > 31 OR = ZEROS GO INA5 END-IF
  448.               IF A-MES > 12 OR = ZEROS GO INA5 END-IF
  449.               IF A-ANO < 1980 OR = ZEROS GO INA5 END-IF.
  450.            IF H-FECH1 NOT = ZEROS
  451.               MOVE H-FECH1 TO A-FECHA
  452.               IF A-DIA > 31 OR = ZEROS GO INA5 END-IF
  453.               IF A-MES > 12 OR = ZEROS GO INA5 END-IF
  454.               IF A-ANO < 1980 OR = ZEROS GO INA5 END-IF.
  455.            DISPLAY P-FECH1.
  456.            PERFORM 1S.
  457. Orde   INA6.
  458.            MOVE ZEROS TO TEC. DISPLAY P-ORDE. ACCEPT  P-ORDE.
  459.            ACCEPT  TEC FROM ESCAPE KEY.
  460.            IF T-ESC OR T-F4
  461.               PERFORM 1N
  462.               IF OPC = 01 GO INA5 ELSE GO INA4.
  463.            IF NOT T-RET GO INA6. IF ORDE > 3 GO INA6.
  464.            DISPLAY P-ORDE.
  465.            IF OPC > 01 MOVE ZEROS TO D-FECH1 H-FECH1.
  466. Modo   INA7.
  467.            MOVE ZEROS TO TEC. DISPLAY P-MODO. ACCEPT  P-MODO.
  468.            ACCEPT  TEC FROM ESCAPE KEY. IF T-ESC OR T-F4 GO INA6.
  469.            IF NOT T-RET GO INA7. IF MODO > 1 GO INA7.
  470.            DISPLAY P-MODO.
  471. CoSf   INA7A.
  472.            MOVE ZEROS TO TEC. DISPLAY P-COSF. ACCEPT  P-COSF.
  473.            ACCEPT  TEC FROM ESCAPE KEY. IF T-ESC OR T-F4 GO INA7.
  474.            IF NOT T-RET GO INA7A. IF COSF > 1 GO INA7A.
  475.            DISPLAY P-COSF.
  476. Vist   INA8.
  477.            MOVE ZEROS TO TEC VIST OBRA OBRA2.
  478.            DISPLAY P-VIST. ACCEPT  P-VIST.
  479.            ACCEPT  TEC FROM ESCAPE KEY. IF T-ESC OR T-F4 GO INA7A.
  480.            IF NOT T-RET GO INA8. IF VIST > 3 GO INA8.
  481.            DISPLAY P-VIST.
  482.            IF MA = 1 GO INA8B.
  483. Especi INA8A.
  484.   ""       MOVE ZEROS TO TEC. MOVE SPACES TO TODO.
  485.   ""       DISPLAY P-TODO. ACCEPT  P-TODO.
  486.   ""       ACCEPT  TEC FROM ESCAPE KEY. IF T-ESC OR T-F4 GO INA8.
  487.   ""       IF NOT T-RET GO INA8A.
  488.   ""       DISPLAY P-TODO.
  489. Obra   INA8B.
  490.            MOVE ZEROS TO TEC OBRA OBRA2.
  491.            DISPLAY P-OBRA. ACCEPT  P-OBRA.
  492.            ACCEPT  TEC FROM ESCAPE KEY. IF T-ESC OR T-F4 GO INA8.
  493.            IF NOT T-RET GO INA8B. IF OBRA > 2 GO INA8B.
  494.            IF OBRA = 1 GO INA9.
  495.            DISPLAY P-OBRA.
  496. Obra2  INA8C.
  497.            MOVE 2 TO OBRA2.
  498.      *    MOVE ZEROS TO TEC OBRA2. DISPLAY P-OBRA2. ACCEPT  P-OBRA2.
  499.      *    ACCEPT  TEC FROM ESCAPE KEY. IF T-ESC OR T-F4 GO INA8B.
  500.      *    IF NOT T-RET GO INA8C. IF OBRA2 < 1 OR > 2 GO INA8C.
  501.      *    DISPLAY P-OBRA2.
  502. Acep   INA9.
  503.            MOVE ZEROS TO TEC. MOVE SPACES TO SINO.
  504.            DISPLAY P-SINO. ACCEPT  P-SINO.
  505.            ACCEPT  TEC FROM ESCAPE KEY. IF T-ESC OR T-F4 GO INA8.
  506.            IF NOT T-RET GO INA9. IF NOT POSI GO INA9.
  507.            DISPLAY P-SINO. IF NONO PERFORM 0N GO INA0.
  508.        INI.
  509.            MOVE 1 TO BAN.
  510.            MOVE D-FECH  TO A-FECHA. MOVE A-DIA TO W-DIA.
  511.            MOVE A-MES TO W-MES. MOVE A-ANO TO W-ANO.
  512.            MOVE W-FECHAX TO D-FE.
  513.            MOVE H-FECH  TO A-FECHA. MOVE A-DIA TO W-DIA.
  514.            MOVE A-MES TO W-MES. MOVE A-ANO TO W-ANO.
  515.            MOVE W-FECHAX TO H-FE.
  516.            OPEN OUTPUT AAAA.
  517.            CLOSE       AAAA.
  518.            OPEN OUTPUT BBBB.
  519.            CLOSE       BBBB.
  520.            OPEN OUTPUT CCCC.
  521.            CLOSE       CCCC.
  522. Vtas       IF OBRA = 0 OR = 1 PERFORM ARMA THRU F-ARMA.
  523. Obra       IF OBRA = 0 OR = 2
  524.               IF OBRA2 = 1 OR = 2
  525.                  PERFORM ERME THRU F-ERME.
  526.            IF D-FECH1 NOT = ZEROS
  527.               IF OPC = 01 AND ORDE < 3
  528.                  MOVE 2 TO BAN
  529.                  MOVE D-FECH1 TO A-FECHA MOVE A-DIA TO W-DIA
  530.                  MOVE A-MES TO W-MES MOVE A-ANO TO W-ANO
  531.                  MOVE W-FECHAX TO D-FE
  532.                  MOVE H-FECH1 TO A-FECHA MOVE A-DIA TO W-DIA
  533.                  MOVE A-MES TO W-MES MOVE A-ANO TO W-ANO
  534.                  MOVE W-FECHAX TO H-FE
  535.                  PERFORM ARMA THRU F-ARMA.
  536.            PERFORM LIST THRU F-LIST.
  537.            PERFORM 1N. GO INA6.
  538.        FIN.
  539.            EXIT PROGRAM.
  540.        PARAR.
  541.            STOP RUN.

Última edición por Josber fecha: 20 de marzo de 2023 a las 19:09. Razón: Por favor, usa el resaltado de texto para el lenguaje COBOL, (botón CBL)
jorgeamedina2020 is offline   Responder Con Cita
  #4
Antiguo 20 de marzo de 2023, 19:10
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

@jorgeamedina2020, es que el segundo ejemplo que has puesto, está correctamente escrito, con sus saltos de líneas, sus espacios, cada cosa en su sitio, pero el ejemplo del primer post

Citación del post de jorgeamedina2020 Ver Mensaje
DATA DIVISION.
WORKING-STORE SECTION.
01 CAMPO1 PIC 9(01). 01 CAMPO2 PIC 9(01). 01 CAMPO3 PIC 9(01).
01 CAMPO4 PIC 9(01). 01 CAMPO5 PIC 9(01).


PROCEDURE DIVISION.
MOVE 1 TO CAMPO1. MOVE 1 TO CAMPO2. MOVE 1 TO CAMPO3.
MOVE 1 TO CAMPO4. MOVE 1 TO CAMPO5.
DISPLAY CAMPO1.

EXIT PROGRAM.
tú intenta hacer el segundo ejemplo, como el primero, (y eso que es un programa cortito y sencillo, piensa en un programa que haga facturas), y aunque los programas sean tuyos, teniendo en cuenta que una aplicación, se puede componer de al menos 300 ó 400 programas, unos muy cortos, otros de miles de líneas, dentro de un año, no te puedes acordar "al dedillo" de qué hiciste, en qué lugar del programa, cuando, si lo tienes bien comentado, y bien indentado, claro y limpio, puedes ir al sitio en un momento, de la otra manera, también llegarás al sitio, por supuesto, pero estoy seguro que tardarás muuuuuuucho más, y eso, digas lo que digas, ni tú ni nadie puede discutírmelo. Porque, puestos a ahorrar, porqué en vez de PIC 9(01), no usas PIC 9, es lo mismo, y por esa misma razón, le ahorrarías un supuesto trabajo al compilador, (y reconozco que, en mi caso, esto último, ya es demagogia barata )

Salu2.-

Última edición por Josber fecha: 20 de marzo de 2023 a las 19:25.
Josber is offline   Responder Con Cita
  #5
Antiguo 20 de marzo de 2023, 19:51
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

@jorgeamedina2020, yo estoy con @Josber.

Los programas deben de estar lo mas claro posibles.

Los programas que yo hago son propiedad de la empresa que me paga por ello y además deben de poder comprender el resto de programadores que trabajan para la misma empresa.

Si quiero quitar líneas o información redundante lo meto en copys. Y dentro de copys puedo tener copys.

Tengo programas que modifican programas ya hechos ( analizadores - cambiadores ) y el resultado debe de ser lo mas claro posible para otro programa que venga cambiando cosas o programadores que vengan cambiando cosas.

Te podría decir mas cosas, pero en lo que apuntas no veo nada positivo.
JCantero is offline   Responder Con Cita
  #6
Antiguo 20 de marzo de 2023, 20:02
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

@jorgeamedina2020, hablando de estilo de programación si me lo permites....

esto:
Código COBOL:
  1. MesAct 01 TOT-CANT   PIC S9(06)V999. 01 TOT-IMPO  PIC S9(10)V99 .
  2.                                      01 TOT-COST  PIC S9(10)V99 .
  3.                                      01 TOT-ICOM  PIC S9(10)V99 .
  4.                                      01 TOT-COST-SF  PIC S9(10)V99 .
  5. MesAnt 01 TOT-CANTT  PIC S9(06)V999. 01 TOT-IMPOO PIC S9(10)V99 .
  6.                                      01 TOT-COSTT PIC S9(10)V99 .
  7.                                      01 TOT-ICOMM PIC S9(10)V99 .
  8.                                      01 TOT-COSTT-SF PIC S9(10)V99 .

Son 5 grupos de 6 campos iguales (30 variables).
Eso yo lo meteria en una tabla. (occurs)

esto:

Código COBOL:
  1.   IF OPC = 02 MOVE "Vendedores  " TO MENS2.
  2.            IF OPC = 03 MOVE "Condiciones " TO MENS2.
  3.            IF OPC = 04 MOVE "Localidades " TO MENS2.
  4.            IF OPC = 05 MOVE "Provincias  " TO MENS2.
  5.            IF OPC = 06 MOVE "Zonas       " TO MENS2.
  6.            IF OPC = 07 MOVE "Clientes    " TO MENS2.
  7.            IF OPC = 08 MOVE "Proveedores " TO MENS2.
  8.            IF OPC = 09 MOVE "Marcas      " TO MENS2.
  9.            IF OPC = 10 MOVE "Rubros      " TO MENS2.

un evaluate.

esto que lo tienes repetido 20 veces con etiquetas diferentes:

Código COBOL:
  1. INA7.
  2.            MOVE ZEROS TO TEC. DISPLAY P-MODO. ACCEPT  P-MODO.
  3.            ACCEPT  TEC FROM ESCAPE KEY. IF T-ESC OR T-F4 GO INA6.
  4.            IF NOT T-RET GO INA7. IF MODO > 1 GO INA7.
  5.            DISPLAY P-MODO.

se hace un perform general con condiciones.

esto:
Código COBOL:
  1. Fech   INA4.
  2.            MOVE ZEROS TO TEC. DISPLAY P-FECH . ACCEPT  P-FECH .
  3.            ACCEPT  TEC FROM ESCAPE KEY. IF T-ESC OR T-F4 GO INA2.
  4.            IF NOT T-RET GO INA4.
  5.            MOVE D-FECH  TO A-FECHA.
  6.            IF A-DIA > 31 OR = ZEROS GO INA4.
  7.            IF A-MES > 12 OR = ZEROS GO INA4.
  8.            IF A-ANO < 1980 OR = ZEROS GO INA4.
  9.            MOVE H-FECH  TO A-FECHA.
  10.            IF A-DIA > 31 OR = ZEROS GO INA4.
  11.            IF A-MES > 12 OR = ZEROS GO INA4.
  12.            IF A-ANO < 1980 OR = ZEROS GO INA4.
  13.            DISPLAY P-FECH .
  14.            IF OPC NOT = 01
  15.               PERFORM 1S
  16.               GO INA6.

Lo tienes repetido un monton de veces. Pues lo mismo un perform a INA-GENERAL y quitas 100 lineas

O sea que hay que hacer cosas generales, con condiciones y no repetir siempre lo mismo.
JCantero is offline   Responder Con Cita
  #7
Antiguo 20 de marzo de 2023, 21:08
jorgeamedina2020
Forero Junior
Última Actividad 21.04.2026 20:06
Posts Posts: 24
Likes enviados Enviados: 50
Likes recibidos Recibidos: 4

@JCantero, Comprendido su punto de vista

- - - Updated - - -

@JCantero, Si, estoy de acuerdo, conozco esa forma de trabajo tambien. lo hice en algunos de mis programas
jorgeamedina2020 is offline   Responder Con Cita
  #8
Antiguo 20 de marzo de 2023, 21:23
jorgeamedina2020
Forero Junior
Última Actividad 21.04.2026 20:06
Posts Posts: 24
Likes enviados Enviados: 50
Likes recibidos Recibidos: 4

El primer ejemplo que subí fue algo sencillo para mostrar o explicar el tema de usar en un solo renglón dos o mas definiciones o dos o mas procedimientos, solo eso.
Es por eso que querían que UDs prueben esto en su lenguaje, por supuesto respetando desde la columna 8 a la 72. Es solo prueba y comprensión.

El segundo ejemplo (que no es un ejemplo), es parte de un programa que hace estadísticas de ventas tomando archivos de movimientos y creando pantallas e impresiones. Aquí quería mostrar que uso mucho varias variables con nombres distintos y con longitudes distintas, y que las fui escribiendo una a lado de la otra, separaras por el punto. El punto separa instrucciones y no el fin de linea.
Lo mismo hice en la sección de procedimientos, puse en una linea varias tareas, intento con esto usar toda la linea posible para escribir todo lo que pueda para no hacer largo el programa, esto esta bien, mi compilador Micro Focus Cobol Version 3.00 del año 1989 lo permite, lleve el mismo programa para compilar con Acucobol y no le gusto que escribiera así las lineas, lo mismo me paso con GnuCobol en una de sus versiones.

No intento Discutir el tema ni estar en contra de nadie, mi idea de esto es mostrar o compartir una forma de trabajo y saber si otros lenguajes se los permiten, meramente informativo queridos colegas.

- - - Updated - - -

Ademas imagino que algún parámetro o referencia o variable de entorno permite este tipo de escritura, la idea principal fue saber que lo permite...
jorgeamedina2020 is offline   Responder Con Cita
  #9
Antiguo 21 de marzo de 2023, 03:42
Fito
Guardián del Foro
Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por el Avatar Activista del Foro: Activista del Foro - Issue reason: Por aportar ideas 
Última Actividad 19.09.2026 13:19
Posts Posts: 458
Likes enviados Enviados: 267
Likes recibidos Recibidos: 243

Hola Amigos:

Estuve probando con PowerCobol.

Los niveles 01 y 77 necesariamente los quiere en la columna 8.
Los niveles 02 en adelante se pueden poner uno al lado del otro, separado por puntos.
En la Procedure los comandos pueden ponerse a continuación en la misma lína, separados con puntos o sin ellos.
Las Instrucciones #include tambien pueden ponerse en la misma línea.

La claridad del código es indispensable, ya sea para retomar algún programa viejo o para que otros puedan leer nuestro código. Pero como sobre gustos no hay nada escrito, cada uno tiene que tomar la forma que le resulte conveniente, por ejemplo yo programo en minúsculas, me cuesta seguir un código escrito en mayúsculas. Respetar las indentaciones me parece fundamental, para seguir las estructuras.
Yo pierdo mucho tiempo en tratar de tener un código claro, alineando por picture por ejemplo. Eso me ayuda mucho para cuando tengo que encontrar errores o tengo que realizar alguna modificación.

Los objetos les pongo un prefijo siempre, no dejo el "name" que le pone el editor.
Todos mis cuadros de texto empiezan con txt... los combos con cmb... las etiquetas con lbl, etc. Y después le sigue un nombre nemotécnico que me indica qué contiene, txtNombre, txtApellido, etc.

Los campos de los archivos tambien les pongo un prefijo de tres o más letras que lo saco de una pseudo abreviatura del nombre del archivo. El archivo de cuentas corrientes se llama CTACTE y el campo nombre se llama ccnom, cctelef, cccuit. cccodpos. etc.

Las propiedades y métodos tambien trato de respetar como se escriben, porque en la mayoría de los objetos como se escriba es los mismo, pero pueden haber controles activex que necesariamente tengan que respetarse las mayúsculas o minúsculas. Entonces trato de acostubrarme.
"SetFocus", "Value", "BackColor", "ForeColor", "CallForm", "OpenForm".

Todas estas nomenclaturas para escribir el código, lo he ido desarrollando con el tiempo, por eso por ahi tengo mezcla si comparamos programas viejos con nuevos. Y a veces un programa nuevo que haya hecho un copiar y pegar de uno viejo, en la medida que el tiempo me de, trato de "traducirlo".

Saludos...

Fito...
Fito is offline   Responder Con Cita
  #10
Antiguo 21 de marzo de 2023, 09:00
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

Citación del post de jorgeamedina2020 Ver Mensaje
Es por eso que querían que UDs prueben esto en su lenguaje, por supuesto respetando desde la columna 8 a la 72. Es solo prueba y comprensión.

@jorgeamedina2020, eso es standard de cobol, hasta el rmcobol 5.35 lo admite (AÑO 1985).

Mientras te ciñas a los márgenes, puedes poner las líneas que entren.

En la actualidad, cada compilador tiene opciones o parámetros de escribir después de la columna 73 sin ceñirte a los márgenes. Con lo cual puedes aprovechar mucho mas tu forma de escribir los programas.
JCantero is offline   Responder Con Cita
Respuesta



Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:21.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.