הפקת קבלה דרך תסריט

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

דוגמת Script מלאה

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

  //===// Items
    Items:= ReqData.Add_Array('Items');
    Item:= Items.Add_Object('');                       // you may repeat this in loop
    Item.Add_Integer('PaymentMethod', 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('IntoInternalAccount', 1100);

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

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

  1. יוצר
    TCreate_Sales_Docs
    ומקשר אליו את רכיבי
    Fman
    של המסך / הדוח.
  2. קורא את
    ClientNumber
    ומוודא שמדובר בלקוח או ספק תקין בהייפר.
  3. בודק כפילות לפי מספר הישות ושדה
    Ticket_ID
    שנשמר בתוך
    [Internal Notes]
    של הקבלה.
  4. טוען את כרטיס הישות, אנשי הקשר וחשבונות הבנק המשויכים אליה.
  5. מאתחל כותרת קבלה חדשה, כולל כתובת, שפה, מטבע לקוח והגדרות PDF.
  6. מעתיק את שדות הכותרת ואת מערך
    Items
    לטבלאות העבודה הפנימיות.
  7. בודק כל שורת תקבול: אמצעי תשלום, תאריך, סכום, מטבע, שער המרה וחשבון פנימי.
  8. מחשב שדות ומשלים פרטים בכותרת הקבלה.
  9. מכיוון שמדובר ביישום הלקוח של הייפר, מקפיץ "תצוגה לפני הדפסה" עם הקבלה העתידית.
    כאן המשתמש יכול להתערב - ללחוץ על ביטול ולעצור את התהליך טרם השמירה למסד הנתונים.
  10. שומר את המסמך וממספר אותו (טבלאות קבלות בשלב הראשון).
  11. יוצר פקודות יומן, שורות ניהול קופה / מזומן, ומעדכן שימוש אחרון בפרטי בנק של הישות.
  12. מפיק מקור: מסמך חתום דיגיטלית כאשר אפשרי, אחרת הדפסה תרמית או 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
. התאריך חייב להיות בטווח המותר של השדה ולא בעתיד.
ContactPerson String שם איש קשר מתוך אנשי הקשר הפעילים של הלקוח / הספק. כאשר נמצא איש קשר מתאים, הייפר מעתיק ממנו גם את שדות הכתובת למסמך.
Agency Integer מספר סניף. ייקלט רק אם הערך בטווח הסניפים הקיים במערכת.
ReceiptFormPurpose Enum מטרת טופס הקבלה. הערכים המותרים הם 0 עד 3:
  1. Retail Payment
  2. Deposit to Account
  3. Loan Repayment
  4. Property Exchange Service
MoneyLaundering Enum סיווג בקרת הלבנת הון למסמך. הערכים המותרים הם 0 עד 2:
  1. Normal
  2. Report Anyway
  3. DO NOT Report
MoneyLaunderingBundle Integer מספר איחוד מסמכים לבקרת הלבנת הון. כאשר נשלח, מועתק לשדה
[Money Laundering Bundle]
.

שורות התקבולים - Items

יש להעביר מערך בשם
Items
ברמה הראשית של
ReqData
. המערך חייב לכלול לפחות שורה אחת.
המודול מקבל רק את השדות המפורטים בטבלה הבאה; שדות אחרים לא מיועדים לשימוש בקריאה זו.
שם ב-JSON סוג / מבנה תיאור
PaymentMethod Enum שדה חובה. אמצעי תשלום. חובה לשלוח ערך בטווח 0 עד 9:
  1. Cash
  2. Credit Card
  3. Bank Transfer
  4. Cheque
  5. Security Bill
  6. Assignment of Rights
  7. Deduction at Source
  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 מספר שובר / אישור סליקה.
RegReceivedFromCountry String המדינה שממנה התקבל הכסף לצורכי רגולציה. אם לא נשלח ערך ויש פרטי בנק, המודול עשוי להשלים את המדינה מכרטיס הישות.
RegBankName String שם הבנק לצורכי רגולציה.
RegBankAddress String כתובת הבנק לצורכי רגולציה.
RegAccountOwnerAsContactPerson String בעל החשבון כאיש קשר, כאשר הגורם המשלם אינו זהה בהכרח ללקוח / ספק שבכרטיס.
IntoInternalAccount Integer מספר חשבון פנימי שאליו התקבול נכנס. המודול קורא ל־
Set_Internal_Account_Name_On_Receipt_Refund
כדי לוודא שהחשבון תקין ופעיל.
השדה אינו חובה וביישום לקוח הייפר יפתח דיאלוג לבחירת החשבון הנגדי

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

כאשר נוצרה קבלה הפונקציה עצמה תחזיר True ואובייקט אחד עם רשומת הכותרת במלואה:
{
  "Doc":{
    "ReceiptNumber":65619,
    "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,
    "TotalAmountLc":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":"REQ-998877",
    "AccountCountryCode":"IL",
    "ReceiptFormPurpose":1,
    "MoneyLaundering":0,
    "MoneyLaunderingBundle":0,
    "PersonalIdVerificationMadeBy":"Online SelfService",
    "IpAddress":"",
    "ResponsibleManager":"",
    "OldDocReference":"",
    "OldSoftwareName":"",
    "CancellationTime":"",
    "CancelledBy":"",
    "CancellationReason":"",
    "AccountBalanceAtProductionTime":0.00,
    "CreditLineUsageRiskLc":0,
    "ReceiptCollectionTargetLc":0.00
  }
}

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

{
  "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
לאותה ישות.