הפקת קבלה דרך תסריט
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;
מה המודול עושה בפועל
-
יוצר TCreate_Sales_Docsומקשר אליו את רכיביFmanשל המסך / הדוח.
-
קורא את ClientNumberומוודא שמדובר בלקוח או ספק תקין בהייפר.
-
בודק כפילות לפי מספר הישות ושדה Ticket_IDשנשמר בתוך[Internal Notes]של הקבלה.
- טוען את כרטיס הישות, אנשי הקשר וחשבונות הבנק המשויכים אליה.
- מאתחל כותרת קבלה חדשה, כולל כתובת, שפה, מטבע לקוח והגדרות PDF.
-
מעתיק את שדות הכותרת ואת מערך Itemsלטבלאות העבודה הפנימיות.
- בודק כל שורת תקבול: אמצעי תשלום, תאריך, סכום, מטבע, שער המרה וחשבון פנימי.
- מחשב שדות ומשלים פרטים בכותרת הקבלה.
-
מכיוון שמדובר ביישום הלקוח של הייפר, מקפיץ "תצוגה לפני הדפסה" עם הקבלה העתידית.
כאן המשתמש יכול להתערב - ללחוץ על ביטול ולעצור את התהליך טרם השמירה למסד הנתונים. - שומר את המסמך וממספר אותו (טבלאות קבלות בשלב הראשון).
- יוצר פקודות יומן, שורות ניהול קופה / מזומן, ומעדכן שימוש אחרון בפרטי בנק של הישות.
- מפיק מקור: מסמך חתום דיגיטלית כאשר אפשרי, אחרת הדפסה תרמית או 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:
|
| MoneyLaundering | Enum |
סיווג בקרת הלבנת הון למסמך. הערכים המותרים הם 0 עד 2:
|
| MoneyLaunderingBundle | Integer |
מספר איחוד מסמכים לבקרת הלבנת הון. כאשר נשלח, מועתק לשדה
[Money Laundering Bundle]
.
|
שורות התקבולים - Items
יש להעביר מערך בשםItems
ברמה הראשית של ReqData
. המערך חייב לכלול לפחות שורה אחת.
המודול מקבל רק את השדות המפורטים בטבלה הבאה; שדות אחרים לא מיועדים לשימוש בקריאה זו.
| שם ב-JSON | סוג / מבנה | תיאור |
|---|---|---|
| PaymentMethod | Enum |
שדה חובה. אמצעי תשלום. חובה לשלוח ערך בטווח 0 עד 9:
|
| 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 |
הגדרת עסקת קרדיט מיוחדת, בשיטות שאינן אשראי / ארנק אלקטרוני, המודול מאפס את השדה.
|
| BankCode | String | קוד בנק. משמש לחיפוש חשבון בנק קיים של הישות או להשלמת פרטים רגולטוריים. |
| BranchSwift | String | מספר סניף או Swift. |
| Account | String | מספר חשבון בנק / IBAN / פרטי חשבון. אם נשלח רק חשבון ללא בנק וסניף, המודול מנסה לזהות אותו מתוך חשבונות הבנק של הישות. |
| BankTransferPaymentFormat | Enum |
פורמט העברה בנקאית:
|
| 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
לאותה ישות.
|