הפקת משיכה דרך תסריט

Function Fman.Request('Create Refund', ReqData: ThJsonNode): Boolean;
עמוד זה מתאר הפקת טופס משיכה של הייפר באמצעות Pascal Script.
המתודה מקבלת אובייקט json המכיל את נתוני המסמך להפקה ומחזירה True/False כללי בתוספת פירוט כמוסבר בהמשך.
בסיום הפעולה המתודה מבצעת
ReqData.Clear
ומחזירה בו תשובת json:
במקרה של הצלחה יוחזר אובייקט
Doc
עם נתוני הכותרת של המסמך שהופק.
במקרה של כישלון יוחזרו הפרמטרים
ErrorCode
ו-
ErrorDesc
.
האחריות על יצירת
ReqData
ועל שחרורו לאחר קריאת התשובה היא של התסריט הקורא.

שים לב, המנגנון הנוכחי אינו בודק את יתרת הלקוח/ספק ומאפשר הפקה בכל מצב.

דוגמת Script מלאה

הדוגמה הבאה מפיקה טופס משיכה עם שורת תשלום אחת בהעברה בנקאית.
ניתן להעתיק אותה ליחידת Script חדשה ולהחליף את מספר הלקוח, החשבון הפנימי ופרטי הבנק לפי הצורך.
Procedure Create_Refund_From_Script;
VAR ReqData, Items, Item, Doc: ThJsonNode;
Begin
  ReqData:= ThJsonNode.Create;
  TRY
  //===// Header
    ReqData.Add_Integer('ClientNumber', 512584);
    ReqData.Add_String('Ticket_ID', 'WD-998877');
    ReqData.Add_Bool('InternalDoc_Dont_Send', True);
    ReqData.Add_String('SalesAgent', 'Dani');
    ReqData.Add_String('Notes', 'משיכת יתרה לחשבון הבנק של הלקוח');
    ReqData.Add_Integer('RefundFormPurpose', 0);

  //===// Items
    Items:= ReqData.Add_Array('Items');
    Item:= Items.Add_Object('');                       // you may repeat this in loop
    Item.Add_Integer('RefundMethod', 2);               // Bank Transfer
    Item.Add_Date('PaymentDate', Server.Today);
    Item.Add_Money('TotalAmount', 1500.00);
    Item.Add_String('Currency', 'ILS');
//    Item.Add_Real('ExchangeRate', 0);                  // auto rate
    Item.Add_String('BankCode', '12');
    Item.Add_String('BranchSwift', '001');
    Item.Add_String('Account', '123456');
    Item.Add_Integer('BankTransferPaymentFormat', 0);
    Item.Add_Integer('FromInternalAccount', 1100);

  //===// Produce refund
    IF Fman.Request('Create Refund', ReqData) Then
      Begin
        Doc:= ReqData.Find_Node_ML(['Doc']);
        // Doc contains the generated refund header record.
        // Example: Doc.Value_Integer(['RefundNumber'])
      End
    Else
      Begin
        PopupMessage('Refund failed: ' +ReqData.Value_String(['ErrorCode'])+' '+ReqData.Value_String(['ErrorDesc']));
      End;
  FINALLY
    ReqData.Free;
  End;
End;

מה המודול עושה בפועל

  1. קורא את
    ClientNumber
    ומוודא שמדובר ביישות לקוח או ספק בהייפר.
  2. בודק שאין כפילות בהחזרים קודמים, לפי מספר הישות ושדה
    Ticket_ID
    הנשמר בתוך
    [Internal Notes]
    של ההחזר.
  3. טוען את כרטיס הישות, אנשי הקשר וחשבונות הבנק המשויכים אליה.
  4. מאתחל כותרת ההחזר חדשה: כולל טלפון, מייל, כתובת, שפה, מטבע לקוח, הערות ב.מ. והגדרות PDF - בהתאם לרשומת הלקוח/ספק ואיש הקשר הנבחר (אם בכלל).
    אחר כך "דורס" את שדות הכותרת שהועברו בקלט (לדוגמה: שדה הערות, שדה סניף).
  5. מעתיק את המערך
    Items
    לטבלת התקבולים ובודק כל שורה: אמצעי תשלום, תאריך, סכום, מטבע, שער המרה וחשבון פנימי.
    במקרה של העברה בנקאית באפשרותך לשדר רק את מספר חשבון הבנק והייפר תנסה לאתר את שאר פרטי הבנק במידה ואלו קיימים בטבלת "hyp_Entity_Banking_and_Credit_Cards" ליישות.
    במקרה של חברה המחוייבת בדיווח הלבנת הון, מתבצעת בדיקת אימות לחשבון המוזן. במידה ולא הוזן חשבון, ממשק המשתמש יקפיץ חלון בחירת חשבון מרשומת היישות. במקרה שלא הוזנו פרטי חשבון ולא נבחר חשבון תקין על ידי המשתמש - תהליך ההפקה יעצור כאן.
  6. מחשב שדות ומעדכן סכומים בכותרת המשיכה.
  7. מכיוון שמדובר ביישום הלקוח של הייפר, מקפיץ "תצוגה לפני הדפסה" עם טופס המשיכה העתידי.
    כאן המשתמש יכול להתערב - ללחוץ על ביטול ולעצור את התהליך טרם השמירה למסד הנתונים.
  8. שומר את המסמך וממספר אותו.
  9. יוצר פקודות יומן, שורות ניהול קופה / מזומן, ומעדכן שימוש אחרון בפרטי בנק של הישות.
  10. מפיק מקור: מסמך חתום דיגיטלית כאשר אפשרי, אחרת הדפסה תרמית או A4 לפי הגדרות התחנה (PC).

הסבר על שדות הקלט באובייקט ReqData

שם ב-JSON סוג / מבנה תיאור
ClientNumber Integer שדה חובה. מספר לקוח או ספק בהייפר.
Ticket_ID String אסמכתא חיצונית / מזהה פעולה. נשמר בשדה
[Internal Notes]
ומשמש למניעת הפקת טופס משיכה כפול לאותה ישות.
InternalDoc_Dont_Send Boolean כאשר הערך
True
המסמך מסומן כמסמך פנימי:
[Electronic Signed PDF] = 3
.
PersonalIdVerificationMadeBy String שם משתמש בהייפר שביצע בדיקת זהות. הערך ייקלט רק אם המשתמש קיים ופעיל. אם לא נשלח ערך תקין, בגרסת Client יירשם המשתמש הנוכחי.
SalesAgent String שם משתמש של סוכן המכירות. הערך ייקלט רק אם המשתמש קיים ופעיל.
Notes String הערות שיועתקו לשדה
[Notes]
בכותרת המשיכה.
IPAddress String כתובת IP לתיעוד מקור הפעולה. מועתקת לשדה
[IP Address]
כאשר נשלח ערך.
OriginProductionTime DateTime מועד הפקת מקור. אם לא נשלח תאריך תקין, הייפר משתמש ב-
Server.NOW
.
התאריך חייב להיות בטווח המותר של השדה (עד 14 יום אחורה) ולא בעתיד.
ContactPerson String שם איש קשר מתוך אנשי הקשר הפעילים של הלקוח / הספק. כאשר נמצא איש קשר מתאים, הייפר מעתיק ממנו גם את שדות הכתובת למסמך.
Agency Integer מספר סניף. ייקלט רק אם הערך בטווח הסניפים הקיימים במערכת.
RefundFormPurpose Enum מטרת טופס המשיכה. הערכים המותרים הם 0 עד 3, לפי רשימת הערכים של השדה
[Refund Form Purpose]
במערכת.
MoneyLaundering Enum סיווג בקרת הלבנת הון למסמך. הערכים המותרים הם 0 עד 2:
  1. Normal
  2. Report Anyway
  3. DO NOT Report
MoneyLaunderingBundle Integer מספר איחוד מסמכים לבקרת הלבנת הון. כאשר נשלח, מועתק לשדה
[Money Laundering Bundle]
.

שורות המשיכה - Items

יש להעביר מערך בשם
Items
ברמה הראשית של
ReqData
. המערך חייב לכלול לפחות שורה אחת.
המודול מקבל רק את השדות המפורטים בטבלה הבאה; שדות אחרים אינם מיועדים לשימוש בקריאה זו.
שם ב-JSON סוג / מבנה תיאור
RefundMethod Enum שדה חובה. אמצעי המשיכה. חובה לשלוח ערך בטווח 0 עד 9:
  1. Cash
  2. Credit Card
  3. Bank Transfer
  4. Return Client Cheque
  5. Cheque
  6. Return Assignment of Rights
  7. Return Security Bill
  8. Bill of Exchange
  9. Traveller Check
  10. E. Wallet
PaymentDate Date שדה חובה. תאריך פירעון / ביצוע המשיכה. חייב להיות בטווח של היום ועד 366 ימים אחורה.
TotalAmount Money שדה חובה. סכום המשיכה בשורה. חייב להיות גדול מ-
0.1
.
Currency String שדה חובה. מטבע המשיכה. המטבע חייב להיות מוגדר בטבלת המטבעות של הייפר ולהיות מטבע Fiat.
ExchangeRate Real שער המרה למטבע הנהלת החשבונות. אם לא נשלח שער, או שנשלח ערך 0, הייפר ישלים שער אוטומטי לפי
ConvertCcy_Live_Feed
.
אם נשלח שער ידני, הוא נשמר כמקור
M
ומוגבל לטווח של כ-10% סביב השער האוטומטי.
MonthlyPayments Integer מספר תשלומים. רלוונטי בעיקר לאשראי ולארנק אלקטרוני.
FirstPaymentAmount Money סכום התשלום הראשון בעסקת תשלומים.
NextPaymentsAmount Money סכום כל אחד מהתשלומים הבאים. בשיטות שאינן אשראי / ארנק אלקטרוני, המודול מאפס את השדה.
AdvancedPaymentSys Enum הגדרת עסקת קרדיט מיוחדת. בשיטות שאינן אשראי / ארנק אלקטרוני, המודול מאפס את השדה.
  1. No
  2. External Credit
  3. +30 Days
BankCode String קוד בנק. משמש לחיפוש חשבון בנק קיים של הישות או להשלמת פרטים רגולטוריים.
BranchSwift String מספר סניף או Swift.
Account String מספר חשבון בנק / IBAN / פרטי חשבון. אם נשלח רק חשבון ללא בנק וסניף, המודול מנסה לזהות אותו מתוך חשבונות הבנק של הישות.
BankTransferPaymentFormat Enum פורמט העברה בנקאית:
  1. -unknown-
  2. Swift + IBAN
  3. SEPA + IBAN
  4. Swift + BSB
  5. ABA (US)
  6. Swift + CNAPS
  7. Swift Hong Kong
  8. Swift + IBAN + UK sort
ChequeCcNumber String מספר המחאה או 4 ספרות אחרונות של כרטיס אשראי. מועתק לשדה
[Cheque/CC Number]
.
ClearingCompany String חברת סליקה. בשיטות שאינן אשראי / ארנק אלקטרוני, המודול מאפס את השדה.
CcEwBrand String מותג כרטיס אשראי או ארנק אלקטרוני. בשיטות שאינן אשראי / ארנק אלקטרוני, המודול מאפס את השדה.
ClearingVoucher String מספר שובר / אישור סליקה.
RegRefundToCountry String המדינה שאליה נמשכים הכספים לצורכי רגולציה. אם לא נשלח ערך ויש פרטי בנק, המודול עשוי להשלים את המדינה מכרטיס הישות.
RegBankName String שם הבנק לצורכי רגולציה.
RegBankAddress String כתובת הבנק לצורכי רגולציה.
RegAccountOwnerAsContactPerson String בעל החשבון כאיש קשר, כאשר הגורם שאליו מועברים הכספים אינו זהה בהכרח ללקוח / ספק שבכרטיס.
FromInternalAccount Integer מספר חשבון פנימי שממנו יוצאת המשיכה. המודול קורא ל-
Set_Internal_Account_Name_On_Receipt_Refund
כדי לוודא שהחשבון תקין ופעיל.

הפלט באובייקט ReqData

כאשר נוצר טופס משיכה, הפונקציה עצמה תחזיר True. בנוסף,
ReqData
יכיל
Success = True
ואובייקט אחד עם רשומת הכותרת במלואה:
{
  "Success": true,
  "Doc":{
    "RefundNumber":24817,
    "Agency":0,
    "DrawerStationId":0,
    "SalesAgent":"דני התותח",
    "ClientNumber":512584,
    "ClientFullName":"לקוח 512584",
    "ContactPerson":"",
    "Address":"24 sesame st. Tel aviv",
    "Phone":"03-1234567",
    "Email":"cookie@monster.com",
    "IdNumber":"987654321",
    "Language":1,
    "InternationalDocument":0,
    "TotalRefundLc":1500.00,
    "PurchaserCurrency":"ILS",
    "TotalAmountInPc":1500.00,
    "OriginProductionTime":"2026-04-26 10:07:41",
    "CreatedOnUtc":"2026-04-26 07:07:41",
    "ProducedBy":"שם משתמש אנושי",
    "ElectronicSignedPdf":3,
    "Notes":"משיכת יתרה לחשבון הבנק של הלקוח",
    "InternalNotes":"WD-998877",
    "RefundFormPurpose":0,
    "MoneyLaundering":0,
    "MoneyLaunderingBundle":0,
    "PersonalIdVerificationMadeBy":"Online SelfService",
    "IpAddress":"",
    "CancellationTime":"",
    "CancelledBy":"",
    "CancellationReason":""
  }
}

במקרה של כישלון מקבלים את הסיבה

{
  "Success": false,
  "ErrorCode": 14,
  "ErrorDesc": "[Payment Date] must be in range of Today downto -366 days; Items[0]"
}
קוד משמעות
2 המשתמש המפעיל עצר את התהליך בזמן תצוגה מקדימה של המסמך העתידי.
4 שגיאת מסד נתונים בצד השרת.
5 שגיאה טכנית או לוגית בצד השרת.
7 חסרים שדות חובה לפי הגדרת הטבלאות.
9 אחד מערכי הטקסט אינו עומד בשפות הקלט המותרות.
14 שדות שגויים או חסרים במבנה הקלט.
30 כבר קיים טופס משיכה עם אותו
Ticket_ID
לאותה ישות.