PDA

View Full Version : Umwandlung bricht mit Fehler CPD5D02 ab (Definition für Symbol ... nicht gefunden)



bie-dro
25-02-21, 09:15
Jetzt muss ich mich doch mal an die Profis wenden.

Bei mir bricht die Umwandlung immer mit dem Fehler CPD5D02 ab (Definition für Symbol ... nicht gefunden). Das scheint im Bindeprozess stattzufinden. Ich verstehe nicht warum.

Jetzt aber von Vorne:

ich habe eine Prozedur in einem Serviceprogramm erstellt:


// Control Specifications
Ctl-Opt
Nomain;
.
.
.
// langen Barcode im Format GS128 parsen
Dcl-PR Parse_GS128_Barcode ind;
pi_Barcode char(74) const; //Input
po_EAN zoned(14); //Output
po_MHD date; //Output
po_Charge char(20); //Output
End-PR;
.
.
.
Dcl-Proc Parse_GS128_Barcode export pgminfo(*yes);

// Programm-Interface
Dcl-PI Parse_GS128_Barcode ind;
pi_Barcode char(74) const; //Input
po_EAN zoned(14); //Output
po_MHD date; //Output
po_Charge char(20); //Output
End-PI;

.
.
.
// Wurde eine wichtige Information im Barcode gefunden?
if po_EAN <> 0 //Ja
or po_MHD <> *loval
or po_Charge <> '';
return *on;
else;
return *off;
endif;
.
.
.
End-Proc Parse_GS128_Barcode;


Ich habe diese Prozedur auch im Bindeprogramm aufgeführt:


strpgmexp signature(*gen) lvlchk(*yes) pgmlvl(*current)
export symbol(Parse_GS128_Barcode)
endpgmexp


Dann habe ich das Serviceprogramm ohne Fehler erstellt.

Anschließend habe ich das Serviceprogramm in mein Bindeverzeichnis aufgenommen:


Aus- ------Erstellung------
wahl Objekt Art Bibliothek Aktivierung Datum Zeit

WAWSRV01 *SRVPGM TEST *IMMED 25.02.21 08:44:01



Und nun möchte ich diese Prozedur in meinem Programm WAW165 vom Typ SQLRPGLE nutzen:


* Control Specifications
h DftActGrp(*no) Actgrp(*new) BndDir('*LIBL/BIEBNDD')
.
.
.
d Parse_Barcode pr n extproc('Parse_GS128_Barcode')
d pi_Barcode 74a
d po_EAN 14s 0
d po_MHD d
d po_Charge 20a
.
.
.

// Langen Barcode parsen
if Parse_Barcode(bbarcdl:u25_ean:u25_mhd:u25_charge) = *on;
// Bildschirmfelder füllen
else;
// Fehler ausgeben
endif;


Leider bekomme ich bei der Umwandlung meines Programmes WAW165 über die Auswahl 14 folgende Meldung im Joblog (Fehler CPD5D02):


Nachricht . . . : Definition für Symbol 'Parse_GS128_Barcode' nicht
gefunden.
Ursache . . . . : Für Referenz Parse_GS128_Barcode in *MODULE Objekt WAW165
der Bibliothek QTEMP wurde keine Definition gefunden. Entweder ist die
Definition nicht vorhanden, oder sie gehört nicht zu demselben Datentyp oder
derselben Prozedurart wie die Referenz. Fehlerbeseitigung: Den Befehl
CRTPGM (Programm erstellen) wiederholen, wobei ein Objekt angegeben wird,
das eine Definition für Symbol Parse_GS128_Barcode enthält.


Ich habe schon alles mögliche ausprobiert:
- Programm WAW165 zuerst mit Auswahl 15 zu einem Modul wandeln (geht ohne Probleme)
- anschließend CRTPGM mit Angabe meines Serviceprogrammes

Aber es bleibt bei der gleichen Fehlermeldung.

Was mache ich falsch?

Gruß
Artur Janzen

Fuerchau
25-02-21, 09:35
Die Reihenfolge stimmt schon:
Service:
CRTRPGMOD
CRTSRVPGM

Hauptprogramm:
CRTRPGPGM ...

Hier sind die einzubindenden Serviceprogramme aufzuzählen. Besse wäre es ein Binderverzsichnis zu erstellen, das Serviceprogramm hinzuzufügen und im Hauptprogramm CTL-OPT BNDDIR(); zu verwenden.
Wichtig ist die Beachtung der Groß-Kleinschreibung.
In der SRV-Source gibst du den Namen ohne Hochkomma an, dann wird er in Großbuchstaben übersetzt.
Prüfe mal die Schreibweise im DSPMOD der Exporte.

bie-dro
25-02-21, 09:52
Die Großschreibung hat mein Problem gelöst. Ich danke dir für die schnelle Hilfe.

Ich gebe jetzt in meinem Programm WAW165 die Prototype-Definition folgendermaßen an:
<Code>
d Parse_Barcode pr n extproc('PARSE_GS128_BARCODE')
d pi_Barcode 74a
d po_EAN 14s 0
d po_MHD d
d po_Charge 20a
</Code>

Und damit läuft es jetzt.

Vielen Dank für die schnelle Hilfe.

Gruß
Artur Janzen

mk
25-02-21, 10:50
HI,

bei der dcl-pr Definition kann man auch extproc(*dclcase) angeben.
Dann klappts auch

Fuerchau
25-02-21, 12:22
Aber nur, wenn man in der SRVPGM-Quelle dann die Namen in Hochkomma packt.