עריכה: לא שמתי לב קודם שהשאילתה שלך לא נותנת לך מענה – שימי לב שיש לך 2 טעויות מהותיות שמוסברות מטה :-).
1. את מעוניין לדעתי בשאילתה הבאה:
ERRMSG 900 WHERE EXISTS(SELECT 'X'
FROM INVOICES
WHERE CUST = :$.CUST
);
***חשוב לציין שהשאילתה מראש לא נראית שעומדת בתנאים שאת מעוניינת והייתי בוחן במקומך את התהליך העסקי לעומק כדי להבין באיזה מצבים של אי חשבוניות צריך לתת שגיאה. כלומר, האם להתייחס לחשבוניות מבוטלות כואלידיות? כי בקוד שלנו, אם תהיה ללקוח הזה חשבונית מבוטלת המערכת תתייחס אליה כאילו קיימת חשבונית כבר ללקוח ולא תציג שגיאה).
2.
POST-FIELD קורה אחרי שכבר הפעולה קרתה.
כלומר: בהנחה שהצלחתי לעדכן בהצלחה את השדה, הקוד שלך מתחיל לרוץ.
מה שאת צריכה זה CHECK-FIELD, כלומר, לפני שהצלחתי לצאת מהשדה, המערכת מריצה את הקוד שלך ובודקת ואם הואליציה קיבלה שגיאה, היא תוצג ולא תאפשר למשתמש לבצע את הפעולה שלו.
post – תמיד יהיה אחרי שהפעולה קרתה (לכן רצוי להשתמש בו עבור פעולות עדכון כגון: כל פעם שהמשתמש משנה את הערך, הקוד מתחיל לרוץ וממלא ערכים במקומות נוספים).
PRE\CHECK – תמיד יהיה לפני שהפעולה שהמשתמש מנסה לבצע קרתה. (לכן רצוי להשתמש בטריגרים מסוג זה עבור ואלידציות – כמו במקרה שלך).