我正在尝试在我的程序中实现一个计数器,它将在记录的末尾给出一个总数。目前,我在一个名为TotalCalls += 1;的过程中有一个计数器,它对工作正常的调用进行计数,并且在我的打印文件中有一个Totals字段,我需要将它移到其中。问题是我有一个数据结构Dcl-ds PrinterTotalDS likeRec(PrinterFile.Totals:*output);,我需要将计数器数据移入其中,然后将其写入打印文件。我目前使用这个作为write:Write PrinterFile.Totals PrinterTotalDS;,但是什么也没有显示。当我调试程序时,计数器可以工作,但不会将任何内容移动到写入总计。下面是完整的代码:任何帮助都非常感谢!
/Copy IMPWR126/QRPGLESRC,S071303CPY
Dcl-F PrinterFile PRINTER Qualified Alias ExtFile(*extdesc) OfLind(EndOfPage) USROPN
ExtDesc('S071303P');
Dcl-F S071303LF Keyed;
Dcl-s EndofPage ind inz(*on);
Dcl-s DateConv Date;
Dcl-s TimeConv Time;
Dcl-s Tempstring Char(25);
Dcl-s DayofWk Char(15);
Dcl-s InputDate Zoned(8:0);
Dcl-s TotalCalls Zoned(5:0);
Dcl-ds PrinterHeadDS likeRec(PrinterFile.Header:*output);
Dcl-ds OutputDS likeRec(PrinterFile.Detail:*output);
Dcl-ds InputDS likeRec(CALLREC);
Dcl-Proc Driver;
Dcl-Pi *N;
CALDAT Zoned(8:0);
END-PI;
Dcl-ds PrinterTotalDS likeRec(PrinterFile.Totals:*output);
Open PrinterFile;
Clear InputDS;
Read S071303LF InputDS;
Clear OutputDS;
DOW not %eof(S071303LF);
TotalCalls += 1;
MoveDS();
Eval-Corr OutputDS = InputDS;
IF EndofPage;
EndOfPage = *off;
Write PrinterFile.Header PrinterHeadDS;
ENDIF;
Write PrinterFile.Detail OutputDS;
Read S071303LF InputDS;
Clear OutputDS;
Enddo;
TotalCalls = %dec('0' + %trim(PrinterTotalDS):5:0);
Write PrinterFile.Totals PrinterTotalDS;
close S071303LF;
close PrinterFile;
return;
END-PROC Driver;
Dcl-Proc MoveDS;
OutputDS.DateConv = CONVDATE(InputDS.CALDAT);
OutputDS.TimeConv = CONVTIME(InputDS.CALTIM);
TempString = InputDS.CFNAME;
OutputDS.FirstName = PROPCASE(TempString);
TempString = InputDS.CLNAME;
OutputDS.LastName = PROPCASE(TempString);
OutputDS.DayofWk = GetDayofWeek(InputDS.CalDat);
End-Proc;发布于 2021-11-04 21:28:29
你的问题就在这里:
TotalCalls = %dec('0' + %trim(PrinterTotalDS):5:0);您正在使用PrinterTotalDS中的一些值覆盖TotalCalls。我甚至不确定为什么要对前导为0的数据结构进行修剪,并将其转换为小数,但这与实际问题并不相关。
相反,我认为你想要这样的东西:
PrinterTotalDS.MyOutputField = TotalCalls;
Write PrinterFile.Totals PrinterTotalDS;发布于 2021-11-05 13:08:12
我认为您可以在PrinterTotalDS中使用计数器,而不是使用单独的TotalCalls字段。
但请确保将INZ关键字添加到PrinterTotalDS的定义中。
(初始化所有数据结构是一个好主意。在有些奇怪的默认情况下,数据结构被初始化为空格,这意味着大多数子字段都被初始化为无效值。)
https://stackoverflow.com/questions/69843391
复制相似问题