הפעלת מודולים של הייפר דרך תסריט

Function Fman.Request(ReqName: String; ReqData: ThJsonNode): Boolean;
זהו מנגנון קריאה מתוך Pascal Script אל Router של מתודות פנימיות בקוד של הייפר.
התסריט מעביר בקשה בשם ידוע (ReqName), לדוגמה הפעלת דוח 'TrialBalance', והקוד הראשי של הייפר מנתב אותה למתודה המתאימה.
הפרמטרים נכנסים דרך אובייקט
ThJsonNode
בשם מקובל
ReqData
. אותו אובייקט יכול לשמש גם להעברת שמות של רכיבי פלט, כמו טבלת תוצאה שהתסריט יצר מראש.
כל מתודה מחליטה מה לעשות עם ReqData. יש מתודות ללא פרמטרים כלל ואז הוא יהיה NIL ויש מתודות המחזירות תשובה ואובייקטים בתוך ReqData (לאחר איפוס תוכן הקלט).

הפונקציה מחזירה פרמטר בוליאני, הערך True אומר ששם הבקשה (ReqName) נמצא בנתב ושהקוד רץ בהצלחה. יתכן מצב של תשובה False ושדות המתארים את מהות השגיאה בתוך
ReqData
.
הפסקה הזו היא רק מבוא כללי, עליך לקרוא את התיעוד של כל מודול (ReqName) וללמוד ממנו על הקלט והפלט שלו.

חשוב: האחריות על יצירת
ThJsonNode
ועל שחרורו לאחר השימוש היא של המתכנת הקורא ל-
Fman.Request
.
לכן יש לעטוף את הקריאה ב-
try..finally
ולקרוא ל-
ReqData.Free
גם אם המתודה נכשלה.

הפעלת דוח מאזן בוחן

הדוגמה הבאה יוצרת טבלת פלט בשם
Balance
ומפעילה את דוח מאזן בוחן, אפשר להעתיק אותה כבסיס ליחידות Script חדשות בהייפר.
בדוגמה נעשה שימוש ברשימת מספרי חשבונות, אבל ניתן להחליף אותה בסינון לפי מטרות חשבון, כפי שמפורט בטבלת הפרמטרים בהמשך.
// script אירוע אתחול מובנה של כל מודול
Procedure Init;
VAR Balance: ThPrvTable;
Begin
  Balance:= Fman.Create_PrvTable('hyp_Accounts', 'Balance',    // שני השדות הראשונים כאן הכרחיים. השניים האחרים לפי הצורך, פשוט הם חלק מהסכמה
                                 ['Account ID','Account Name','Export Account to 3rd party'{חשבון ליצוא},'Account Purpose'{מטרת חשבון}], False);

// 'hyp_Accounts' מכאן שדות חישוביים שאינם חלק מהטבלה
  Balance.Add_Field('Balance', 'יתרה', he_Real, False, 0, he_Edit);
  Balance.Add_Field('Currency', 'מטבע', he_String, False, 4, he_Edit);
  Balance.Add_Field('Balance LC', 'יתרה בשקלים', he_Money, False, 0, he_Edit);
  Balance.Add_Field('Floating Balance LC', 'שערוך לשקלים', he_Money, False, 0, he_Edit);
  Balance.Add_Field('Entries Amount', 'כמות תנועות', he_Integer, False, 0, he_Edit);
  Balance.Add_Field('Last BK Entry Date', 'תאריך רישום אחרון', he_Date, False, 0, he_SelectEdit);
  Balance.Add_Field('Last Cash Flow Date', 'תאריך תזרים אחרון', he_Date, False, 0, he_SelectEdit);
  Balance.Add_Field('Last Doc Type Date', 'תאריך סיווג אחרון', he_Date, False, 0, he_SelectEdit);

  Balance.GlobalInit;
End;


//===// Run Trial Balance
Procedure Run_TrialBalance;
VAR ReqData, AN: ThJsonNode;
    Balance: ThPrvTable;
    I: Integer;
Begin
  ReqData:= ThJsonNode.Create;
  TRY
    ReqData.Add_Value('outputTbl', 'Balance', False);

//===// Optional date filters
    // ReqData.Add_Date('From_Date', SomeFromBKEntryDate);
    // ReqData.Add_Date('Until_Date', SomeUntilBKEntryDate);
    // ReqData.Add_Date('From_CF_Date', SomeFromCashFlowDate);
    // ReqData.Add_Date('Until_CF_Date', SomeUntilCashFlowDate);

//===// Account numbers to include in the report
    AN:= ReqData.Add_Array('ByAccountNumbers');
    AN.Add_Array_Value('79', False);
    AN.Add_Array_Value('80', False);
    AN.Add_Array_Value('81', False);

//===// Optional output cleanup
    ReqData.Add_Value('Delete_Accounts', 'Without Entries', False);

//===// run the report now (under this thread, request will block until the end)
    IF NOT Fman.Request('TrialBalance', ReqData) Then  EXIT;
  FINALLY
    ReqData.Free;
  End;

//===// Use the result table
  Balance:= Fman.Find_PrvTable('Balance');
  Balance.Sort(['Account ID','Currency']);

  For I:= 0 to Balance.RowCount-1 Do
    Begin
    // Read result values from Balance.Cell / Balance.ICell / Balance.RCell
    End;
End;

פרמטרים בהפעלה

הטבלה הבאה מפרטת את כל הפרמטרים שהמתודה 'TrialBalance' יודעת לקרוא מתוך
ReqData
.
שם הפרמטר סוג / מבנה חובה תיאור
outputTbl String כן שם טבלה מסוג
ThPrvTable
שהתסריט יצר מראש או שהוגדרה במחולל הדוחות.
פשוט רשום שם את שם ה- instance של הטבלה והמתודה תעתיק אליה את תוצאת הדוח.
ByAccountNumbers JSON Array of Integers אחד מתוך שני מסלולי בחירה מערך של מספרי חשבונות הייפר, אלו יכולים להיות מכל סוג (ראשיתיים, לקוחות, ספקים וכו). הדוח יריץ שאילתה למציאת שמות החשבונות.
ByAccountPurpose JSON Array of Strings אחד מתוך שני מסלולי בחירה מערך מטרות חשבון. משתמשים בו כאשר רוצים לבנות את רשימת החשבונות לפי סיווגים במקום לפי מספרים.
להלן רשימת הערכים הנתמכים, ללא רגישות לאותיות גדולות/קטנות:
  • Clients
  • Suppliers
  • Projects
  • General static
  • General
  • Revenue
  • Expense
  • Continuous Bank
  • Cash Income
  • Cheque Income
  • Electronic Income
  • Cash Payments
  • Cheque Payments
  • Electronic Payments
  • Settling of VAT
  • Institution
  • Hired Worker
From_Date
Until_Date
Date לא טווח לפי תאריך רישום (ערך) של פקודות היומן.
From_CF_Date
Until_CF_Date
Date לא טווח לפי תאריך תזרים (cash flow) של פקודות היומן.
Philosophy Enum לא סינון לפי תקן חשבונאי - השדה
[Standard / Philosophy]
.
הדוח תמיד רץ על ערך 0 שהוא המשותף לכל התקנים, אם הערך שנשלח גדול מ-0 הוא מוסיף תנאי לערך המבוקש.
Delete_Accounts String לא קובע אילו שורות (חשבון + מטבע) יוסרו מפלט הדוח.
ברירת המחדל היא להסיר שורות עם יתרה (Balance) אפס.
הערך
Without Entries
מסיר שורות ללא תנועות, כלומר חשבון שהיו לו תנועות במטבע X והיתרה אפס - אכן יופיע בפלט הדוח.
הערך
None
מכבה את הסינון. הפלט יכיל שורות של חשבונות שביקשת גם אם אין להם תנועות כלל.

פלט הדוח

פלט הדוח מועתק אל הטבלה ששמה נשלח בפרמטר
outputTbl
. המתכנת חייב ליצור את הטבלה מראש, לפני הקריאה ל-
Fman.Request
.
אב הטיפוס של הפלט הוא טבלת החשבונות הראשיתיים, הדוח מתחיל בה ולאחר מכן מצרף גם תוצאות של לקוחות, ספקים, פרויקטים ושכירים אם קיימות.
במקרים אלו שני השדות הראשונים מותאמים לשמות
Account ID
ו-
Account Name
כדי לשמור על מבנה אחיד.
שם שדה פלט סוג הערה
Account ID he_Integer מספר חשבון הייפר. מקורו בשדה
[Account ID]
בטבלת
[hyp_Accounts]
.
Account Name String שם החשבון. מקורו בשדה
[Account Name]
.
Balance he_Real יתרה במטבע החשבון / המטבע המקורי של התנועות.
Currency String קוד מטבע, עד 4 תווים.
Balance LC he_Money יתרה במטבע מקומי לפי שערים סטטיים בפקודות.
Floating Balance LC he_Money יתרה משוערכת למטבע מקומי לפי שער יציג אחרון.
Entries Amount he_Integer כמות התנועות שנכללו ביתרה עבור המטבע והשורה.
Export Account to 3rd party he_Integer מספר חשבון ליצוא למערכת צד שלישי, כאשר מוגדר בכרטיס החשבון.
Last BK Entry Date he_Date תאריך הרישום המאוחר ביותר שנמצא בתנועות שנכללו בדוח.
Last Cash Flow Date he_Date תאריך התזרים המאוחר ביותר שנמצא בתנועות שנכללו בדוח.
Last Doc Type Date he_Date תאריך הרישום המאוחר ביותר לאחר סיווג לפי סוג מסמך / פעולה מוחשית.
Account Purpose he_Status מטרת החשבון כפי שמוגדרת בחשבון ראשיתי בלבד ! מקורו בטבלה
[hyp_Accounts]

בקשות נוספות

כל מודול המחובר למנוע הזה, מתועד בתתי העמודים (ראה מצד ימין).
באופן חריג יש כמה פעולות שניתן לבקש במחולל הדוחות בלבד, ואותן נפרט כאן.

שליטה על המדפסת

למחולל הדוחות יש instance פרטי של מנוע ההדפסה (גם ל PDF וגם למדיה טרמית/מדבקות), לכן השליטה עליו אינה פוגעת בדוחות / מודולים אחרים.

  Fman.Request('Disconnect Prn Logo', NIL);            // ניתוק אירוע הדפסת לוגו ברירת מחדל
  Fman.Request('Connect Prn to A4 Logo', NIL);         // חיבור מחדש לאירוע הדפסת לוגו על עמוד חדש