На первый взгляд программа выглядит не так уж плохо, но есть несколько проблем.
TEFP-TEFLE DEFINE может использовать NO-UNDO.
Вам, вероятно, следует использовать «FOR EACH ttdata:» вместо «FOR EACH ttdata». который в старом стиле.
Вы используете CallProc.p, который является внешней программой, а не внутренней процедурой, включенной в ваш пример. Если ваш код действительно работает, вам нужно будет показать нам код в CallProc.p.
Исходя из кода CallProc, открываемый файл называется cPath. (Я не понимаю, почему говорят, что два файла записаны.) Если вы хотите, чтобы файл назывался "*******", вы должны написать значение (cPath) вместо cPath, но "**** *** "в любом случае это недопустимое имя в Windows.
Не слишком больно запускать процедуру для каждой строки. Большая проблема в том, что вы открываете и закрываете файл каждый раз. Откройте файл перед каждым и закройте его потом. Если вы используете текущую версию OpenEdge, вы должны закрыть ее внутри блока finally.
Также вы открываете файл без APPEND, что означает, что вы перезаписываете его каждый раз, поэтому записывается только последняя запись.
Что касается неиспользования процедуры, то это должно быть довольно тривиально, тем более что вы не используете параметры, передаваемые процедуре. В настоящее время вы выводите ttdata.GetName дважды, хотя это, вероятно, ошибка. Также вы пропускаете SKIP в конце оператора put и пробел между ними, так как UNFORMATTED не добавляет пробелы. Я полагаю, вы должны были написать PUT UNMORMATTED getName "" iValue skip.
Полагаю, это какая-то домашняя работа?