Илья,  а почему не сделать просто:
## Код:
```
PROCEDURE ПервыйЭтап(VAR step:LONGINT):BOOLEAN;
BEGIN
 INC(step)
END ПервыйЭтап;

step := 0;
IF ПервыйЭтап(step) AND ВторойЭтап(step) AND Трет..... THEN
  Завершающие действия
ELSE
  Log.String("Ошибка на этапе "); Log.Int(step)
END
```
