[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2016
    Beiträge
    24

    Subfile - Versuch, einen doppelten Satz in Datei zu schreiben ( RNX1021 )

    Servus,

    ich muss nach langer Zeit wider ein Programm schreiben welches eine Subfile enthält....
    Nun laufe ich aber auf ein Problem und habe keine Ahnung warum das Problem auftritt.

    Wäre super wenn mir hier einer Input liefern kann was schief läuft, damit ich mit dem Programm weiterkomme.

    Folgende Prozeduren dürften von interesse sein:
    Code:
    dcl-s rrn zoned(4) inz(1);
    
    
    dcl-proc Main;
      dcl-pi Main;
        auftragsnummer like(auftragsnummer_t) const;
      end-pi;
      dcl-ds Header likeds(Header_t);
      dcl-ds Geraete likeds(Geraete_t) dim(99);
    
    
      clear Header;
      clear Geraete;
    
    
      GetHeaderData(auftragsnummer:Header);
      SetHeader(Header);
      dow (key <> F12);
        InitSubfile();
        GetGeraeteData(Header.lgnrNummer:Header.nutzeinheit:Geraete);
        SetSubFile(Geraete);
        exfmt geraeteCtl;
        if (key = ENTER);
          dou %eof;
            readc geraetesfl;
            if (not %eof);
              if (io_auswahl = 'X' or io_auswahl = 'x');
                WriteDatabase(Header:o_laufendeNummer:
                 o_geraetenummer:o_seriennummer:h_gId:h_messstellenId);
              endif;
            endif;
          enddo;
        endif;
      enddo;
    end-proc;
    Code:
    dcl-proc InitSubfile;
      reset rrn;
      Subfile.wipe = *on;
      Subfile.display = *off;
      Subfile.end = *off;
      write GERAETECTL;
      Subfile.wipe = *off;
      Subfile.display = *on;
      Subfile.end = *on;
    end-proc;
    Code:
    dcl-proc SetSubFile;
      dcl-pi SetSubFile;
        Geraete likeds(Geraete_t) dim(99);
      end-pi;
    
    
      dow (Geraete(rrn).geraeteNummer <> '');
        io_auswahl = '';
        o_geraetetyp = Geraete(rrn).geraeteTyp;
        o_seriennummer = Geraete(rrn).serienNummer;
        o_laufendenummer = Geraete(rrn).laufendeNummer;
        o_raum = Geraete(rrn).raum;
        o_geraetenummer = Geraete(rrn).geraeteNummer;
        h_gid = Geraete(rrn).geraeteId;
        h_messstellenid = Geraete(rrn).messstellenId;
        write geraetesfl;
        rrn += 1;
      enddo;
    end-proc;
    In der letzten Prozedur bekomme ich beim write den Fehler geworfen. Das passiert immer wenn er die Subfile neu bauen soll, aber ich initialisiere die Subfile davor ja in der Main Prozedur neu, so klappt es ja auch beim ersten Aufbau, warum also nicht beim zweiten?

    Bin für jede Hilfe dankbar.
    "Mit dem ersten Glied ist die Kette geschmiedet. Wenn die erste Rede zensiert, der erste Gedanke verboten, die erste Freiheit verweigert wird, dann sind wir alle unwiderruflich gefesselt." - Cpt. Jean-Luc Picard

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.300
    Die Satznummer für die Subfile startet mit 1!
    Der "reset rrn" setzt aber 0, es sei denn, du machst einen Init von rrn mit 1 in einer *INZSR-Routine.
    Also den "rrn+=1" vor dem write ausführen.

    Und natürlich musst du per Bezugszahl einen SFLCLR ansteuern.

    Erklärung:
    reset = Init der Variablen mit dem Wert, der in einer *INZSR gesetzt wurde, ansonsten wie clear.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Nov 2003
    Beiträge
    2.327
    Ein INZ-Wert genügt dem RESET aber auch...

    The RESET operation is used to restore a variable to the value held at the end of the *INIT phase. This value is called the reset value. If there is no *INZSR subroutine, the reset value is the same as the initial value (either the value specified by the INZ{(initial value)}, or the default value). If there is a *INZSR subroutine, the reset value is the value the variable holds when the *INZSR subroutine has completed. - (Quelle)

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.300
    Ich denke der SFLCLR fehlt, da ja der Fehler ab dem 2. Laden auftritt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Oct 2016
    Beiträge
    24
    Danke euch allen, Problem ist gefunden. Wie Fuerchau sagte lag es am SFLCLR, ich weiß nicht wie aber irgendwie ist die Deklaration von SFLCLR aus meiner Subfile verschwunden.....wieder hinzugefügt klappt nun alles wie es soll.

    Kein Plan wie es verschwunden ist, vorhanden war es definitiv mal, da ich ja bereits das Overlay per DS erstellt habe und dazu brauchte ich die vergebene Bezugszahl.

    Aber bin nun auch schlauer als davor . Dachte nämlich das SFLCLR bereits für den ersten Aufbau wichtig ist, dem ist ja anscheinend nicht so, den sonst hätte das PGM garnicht funktioniert.

    Und gut zu wissen das es doch mit reset + inz() klappt, hatte das auch so im Kopf und daher auch so geschrieben, mit der *inzsr wäre das blöd gewesen, da ich keine Subroutinen nutze.

    Nochmals Danke und allen einen schönen Abend
    "Mit dem ersten Glied ist die Kette geschmiedet. Wenn die erste Rede zensiert, der erste Gedanke verboten, die erste Freiheit verweigert wird, dann sind wir alle unwiderruflich gefesselt." - Cpt. Jean-Luc Picard

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.300
    Noch zum Hintergrund:
    Nach dem Open existiert keine Subfile, deshalb ist ein SFLCLR auch nicht erforderlich.
    Eine DSPF unterstützt (ob das immer noch so ist habe ich nicht probiert) max. 12 aktive Subfiles.
    Per SFLDLT wird die Subfile tatsächlich aus dem Speicher entfernt, so dass man durchaus mehr als 12 SFL's haben kann. Allerdings ist dann ggf. konzeptionell was falsch.
    Un dann gibt es noch SFLINZ. Mit diesem Schlüsselwort werden SFLSIZ leere Sätze in die Subfile geschrieben (z.B. für eine Erfassungsmaske).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Eine lokale Datei lesen/schreiben*** C:\test.txt
    By svit in forum NEWSboard Programmierung
    Antworten: 21
    Letzter Beitrag: 30-01-17, 09:45
  2. Antworten: 10
    Letzter Beitrag: 14-12-16, 15:45
  3. SQL - Mehrere Sätze in einen Satz mit mehreren Spalten
    By wti in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 11-09-15, 12:47
  4. Satz in Datenbankdatei in CL schreiben??
    By JonnyRico in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 02-04-03, 15:52
  5. Subfile auf letztem bearbeiteten Satz aufsetzen
    By Fertig in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 21-02-03, 11:28

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •