RPGLE:RNF2120,不知道为什么我一直收到这个错误

时间:2014-04-09 03:37:21

标签: rpgle

我正在尝试编译我的RPGLE程序,并且我不断收到错误,指出由于没有外部描述而忽略了我在顶部声明的文件。这是什么意思?我一直试图弄清楚它仍然无法提出解决方案。错误低于代码。

 FSHIFTRATESIF   E             DISK    RENAME(SHIFTRATES:SHIFTRATER)
 FALLSHIFT  IF   E           K DISK    RENAME(ALLSHIFT:ALLSHIFTER)
 FCONFIRMPAYCF   E             WORKSTN
 FPAYRPT    O    E             PRINTER OFLIND(*IN01)
 DHOURSOVER        S              3  0
  /FREE

   READ SHIFTRATES;
   WRITE TITLE;
   WRITE COLHDG;
   READ ALLSHIFT;
   DOW NOT %EOF;
     EXSR PAYSR;
     IF *IN01;
       WRITE TITLE;
       WRITE COLHDG;
       *IN01 = *OFF;
       ENDIF;
       WRITE EMPDETAIL;
       READ ALLSHIFT;
   ENDDO;

       WRITE TOTALS;
       EXFMT RECORD1;
       *INLR = *ON;
       RETURN;

       BEGSR PAYSR;
       SELECT;
         WHEN WORKSHIFT = 'D';
           HOURLYRATE = DAYRATE;
           WHEN WORKSHIFT = 'A';
             HOURLYRATE = AFTRATE;
             WHEN WORKSHIFT = 'N';
               HOURLYRATE = NIGHTRATE;
       ENDSL;

       SELECT;
         WHEN PAYGRADE = '1';
           HOURLYRATE = HOURLYRATE * 1.07;
           WHEN PAYGRADE = '2';
             HOURLYRATE = HOURLYRATE * 1.05;
             WHEN PAYGRADE = '3';
               HOURLYRATE = HOURLYRATE * 0.95;
       ENDSL;

       IF HRSWORKED > 40;
         REGULARPAY = 40 * HOURLYRATE;
         HOURSOVER = HRSWORKED - 40;
         OVERPAY = HOURSOVER * HOURLYRATE * 1.5;
         TOTREGPAY = TOTREGPAY + REGULARPAY;
         TOTOVTPAY = TOTOVTPAY + OVERPAY;

         ELSE;
           REGULARPAY = HRSWORKED * HOURLYRATE;
           TOTREGPAY = TOTREGPAY + REGULARPAY;
           TOTALPAY = OVERPAY + REGULARPAY;
           OVERPAY = 0;
           ENDIF;
           TOTEMPPAY = TOTREGPAY + TOTOVTPAY;
           ENDSR;

           /END-FREE

      FSHIFTRATESIF   E             DISK    RENAME(SHIFTRATES:SHIFTRATER)
 FALLSHIFT  IF   E           K DISK    RENAME(ALLSHIFT:ALLSHIFTER)
 FCONFIRMPAYCF   E             WORKSTN
 FPAYRPT    O    E             PRINTER OFLIND(*IN01)
 DHOURSOVER        S              3  0
  /FREE

   READ SHIFTRATES;
   WRITE TITLE;
   WRITE COLHDG;
   READ ALLSHIFT;
   DOW NOT %EOF;
     EXSR PAYSR;
     IF *IN01;
       WRITE TITLE;
       WRITE COLHDG;
       *IN01 = *OFF;
       ENDIF;
       WRITE EMPDETAIL;
       READ ALLSHIFT;
   ENDDO;

       WRITE TOTALS;
       EXFMT RECORD1;
       *INLR = *ON;
       RETURN;

       BEGSR PAYSR;
       SELECT;
         WHEN WORKSHIFT = 'D';
           HOURLYRATE = DAYRATE;
           WHEN WORKSHIFT = 'A';
             HOURLYRATE = AFTRATE;
             WHEN WORKSHIFT = 'N';
               HOURLYRATE = NIGHTRATE;
       ENDSL;

       SELECT;
         WHEN PAYGRADE = '1';
           HOURLYRATE = HOURLYRATE * 1.07;
           WHEN PAYGRADE = '2';
             HOURLYRATE = HOURLYRATE * 1.05;
             WHEN PAYGRADE = '3';
               HOURLYRATE = HOURLYRATE * 0.95;
       ENDSL;

       IF HRSWORKED > 40;
         REGULARPAY = 40 * HOURLYRATE;
         HOURSOVER = HRSWORKED - 40;
         OVERPAY = HOURSOVER * HOURLYRATE * 1.5;
         TOTREGPAY = TOTREGPAY + REGULARPAY;
         TOTOVTPAY = TOTOVTPAY + OVERPAY;

         ELSE;
           REGULARPAY = HRSWORKED * HOURLYRATE;
           TOTREGPAY = TOTREGPAY + REGULARPAY;
           TOTALPAY = OVERPAY + REGULARPAY;
           OVERPAY = 0;
           ENDIF;
           TOTEMPPAY = TOTREGPAY + TOTOVTPAY;
           ENDSR;

           /END-FREE

  FSHIFTRATESIF   E             DISK    RENAME(SHIFTRATES:SHIFTRATER)
 FALLSHIFT  IF   E           K DISK    RENAME(ALLSHIFT:ALLSHIFTER)
 FCONFIRMPAYCF   E             WORKSTN
 FPAYRPT    O    E             PRINTER OFLIND(*IN01)
 DHOURSOVER        S              3  0
  /FREE

   READ SHIFTRATES;
   WRITE TITLE;
   WRITE COLHDG;
   READ ALLSHIFT;
   DOW NOT %EOF;
     EXSR PAYSR;
     IF *IN01;
       WRITE TITLE;
       WRITE COLHDG;
       *IN01 = *OFF;
       ENDIF;
       WRITE EMPDETAIL;
       READ ALLSHIFT;
   ENDDO;

       WRITE TOTALS;
       EXFMT RECORD1;
       *INLR = *ON;
       RETURN;

       BEGSR PAYSR;
       SELECT;
         WHEN WORKSHIFT = 'D';
           HOURLYRATE = DAYRATE;
           WHEN WORKSHIFT = 'A';
             HOURLYRATE = AFTRATE;
             WHEN WORKSHIFT = 'N';
               HOURLYRATE = NIGHTRATE;
       ENDSL;

       SELECT;
         WHEN PAYGRADE = '1';
           HOURLYRATE = HOURLYRATE * 1.07;
           WHEN PAYGRADE = '2';
             HOURLYRATE = HOURLYRATE * 1.05;
             WHEN PAYGRADE = '3';
               HOURLYRATE = HOURLYRATE * 0.95;
       ENDSL;

       IF HRSWORKED > 40;
         REGULARPAY = 40 * HOURLYRATE;
         HOURSOVER = HRSWORKED - 40;
         OVERPAY = HOURSOVER * HOURLYRATE * 1.5;
         TOTREGPAY = TOTREGPAY + REGULARPAY;
         TOTOVTPAY = TOTOVTPAY + OVERPAY;

         ELSE;
           REGULARPAY = HRSWORKED * HOURLYRATE;
           TOTREGPAY = TOTREGPAY + REGULARPAY;
           TOTALPAY = OVERPAY + REGULARPAY;
           OVERPAY = 0;
           ENDIF;
           TOTEMPPAY = TOTREGPAY + TOTOVTPAY;
           ENDSR;

           /END-FREE

RNF2120:找不到文件ALLSHIFT的外部描述。文件被忽略

RNF2120:找不到文件SHIFTRATE的外部描述。文件被忽略

3 个答案:

答案 0 :(得分:2)

最常见的原因是编译时这些文件不在库列表中。

答案 1 :(得分:1)

也许我可以在这里帮助你一些RDi的东西,从长远来看会让生活更轻松,并帮助你在这里。

RDI喜欢它的前身WDSc有3种模式可以运行。绿色黑色(5250)你只有两个是Batch和Interactive。 RDi有Batch,Interactive和一个名为Normal的。 Normal是RDi将编译RPG代码的地方。

正常模式非常灵活,通常会在您登录时从作业说明中加载库列表,该列表会附加到您的用户个人资料中。因此,如果您在多个框上签名,则可能会有不同的库列表,具体取决于您的设置方式。期待不一致,因为它更加一致。

根据您的工作情况,您可能希望能够有多个库列表供您选择。一个很好的方法是创建一个库列表加载器程序,只需单击一下即可加载各种库列表。

为此,请在开发库中创建CLLE(或CLP)源成员。在PGM和ENDPGM命令之间的源成员中,使用更改库列表命令(CHGLIBL)并输入要使用的库列表。 QTEMP在顶部,QGPL在底部(只是一个强烈的建议)。编译这个程序。对于命名约定,我使用SET @XX来告诉我这些程序是库列表加载器。这是你的电话。另一个提示是,当你提示CHGLIBL命令时,使用黑色绿色来构建这个CLLE程序,更容易将库从实际的库列表中剪切并粘贴到命令中。老派但它很快。

在RDI中,在远程系统资源管理器中,您可以为每个系统创建自己的命令。创建一个专门调用新CLLE程序的命令。指定库,程序名称,然后选择NORMAL作为它应该如何运行。

您可以在远程系统资源管理器中查看当前库列表。登录后查看。然后双击您创建的新命令。然后再次查看库列表。它将使用更新的库列表重新加载。

试一试。一旦习惯了使用RDi的三种运行时模式,有很多方法可以在这个奇妙的工具中扩展你的工作。

更改库列表CHGLIBL文档:

http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Fcl%2Fchglibl.htm

答案 2 :(得分:0)

另外,请确保您编辑的库位于EDITLIBL列表中。这是我的问题。

相关问题