דוח עסקאות קריפטו מול משווקים

הדוח מחשב את התגמול המגיע למשווקים (Affiliates) על פי אחוז קבוע מהרווח הגולמי בכל עסקה או על פי קוד (Code Script) שבאפשרותך לכתוב על גבי הייפר.
הסריקה מתבצעת על טבלת העסקאות
hyp_CryptoCurr Exchange Trades
, בעסקאות מסוג: קניה או מכירה של מטבע דיגיטלי מבוזר.
לכל עסקה יש לקוח הרשום בתוכה. ללקוח יש קישור למשווק (ספק) שהביא אותו לחברה, ברשומת הספק יש שדה "עמלה קבועה".
מעקב על שינוי שיוך לקוח למשווק נעשה דרך "יומן השינויים". החלק הזה עדיין לא פותח ולכן אינו עובד עדיין.

הוראות הפעלה

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

כעת נסקור את לחצני ההפעלה:
הפעל דוח על כל הלקוחות הדוח יפעל על כל העסקאות (BUY + SELL) לפי טווח התאריכים מהכותרת.
הפעל דוח על רשימה מפולחת ראשית יופעל אשף החיפוש אשר יבנה רשימת לקוחות לבחינה. אח"כ המנוע של הדוח יחפש עסקאות (כמו בלחצן הקודם) רק עבור הלקוחות מהרשימה.
יצא נתונים יצוא של טבלת התוצאה לפי העיצוב שלה (סדר העמודות) על המסך.
סנכרן אל טבלת העמלות בספקים הלחצן הזה הוא חלק ממוצר המדף.
מכיל מנגנון סנכרון חד ערכי, עבור כל עסקה בעלת תגמול בדוח - יוצר או מעדכן רשומה אחת בטבלה hyp_Supplier Commission List.
את התוצאה ניתן לראות בתיק הספק > מודולים > עמלות לתשלום.
עורך תסריט הדוח הזה מחייב כתיבת קוד, אין אפשרות להשתמש בו אחרת. הסבר על כתיבת הקוד, בהמשך העמוד.
הלחצן הזה זמין רק למנהל הבכיר של הייפר.

טבלת התוצאות של הדוח

הטבלה מבוססת על hyp_CryptoCurr Exchange Trades אבל נוספים אליה שדות רבים ממקורות אחרים (לקוחות, ספקים) ושדות מחושבים (וירטואלים).
שם השדה תיאור
מספר עסקה בהייפר
תאריך רישום (אסמכתא)
ושאר השדות של העסקה עצמה
ההסבר אודות השדות הללו נמצא בעמודים קודמים (ראה סימניה מימין).
קליק כפול או Enter על שדה של העסקה, פותח את עמוד העסקה על המסך.
מספר חשבון לקוח (בהייפר)
שם הלקוח
איש קשר (מבצע הפעולה)
שם הלקוח ואיש קשר כפי שנרשמו בעסקה (ללא רענון מול טבלת הלקוחות).
קליק כפול או Enter על שדה של הלקוח, פותח את עמוד הלקוח על המסך.
שווי העסקה USD
שווי העסקה יציג ₪
רווח חדר עסקאות במטבע 2
שער ההמרה ממטבע 2 לשקלים
עלויות ביצוע ₪
אלו השדות מהם מתחיל חישוב התגמול, להלן "המקור". כולם מגיעים מטבלת העסקאות, הדוח אינו מחשב / מעדכן אותם.
מספר חשבון מתווך על פי השדה "חשב מחדש את העמלות" בהגדרות להפעלת הדוח. ערך "לא" מציג את חשבון המתווך כפי שנרשם בעסקה.
ערך "כן" מבצע בחינה חוזרת של הקישור מטבלת הלקוחות (כולל בחינה על ציר הזמן מול יומן השינויים).
שם המתווך השדה עובר רענון מול טבלת הספקים.
איש קשר/סוכן מטעם המתווך מגיע מטבלת הלקוחות, לאחר קישור לקוח אל משווק (ספק) ניתן לבחור איש קשר מתוך אותו תיק ספק.
איש הקשר יכול להוות אינדיקטור ל- "משפיען רשת" או פלטפורמת תוכן ספציפית תחת הספק הכללי.
רווח תפעולי ₪ שדה מחושב בדוח = [רווח חדר עסקאות בשקלים] מינוס [עלויות ביצוע].
עמלה למשווק ₪ זהו סכום התגמול למשווק בעבור העסקה הזאת, בשקלים (מטבע ניהול ספרים).
תוכנת המדף (לפני התסריט) מחשבת את הנוסחא = [רווח תפעולי ₪] * [עמלת תיווך באחוזים מרשומת הספק].
עבור ספקים שאינם מקבלים תגמול או שהחישוב שלהם יבוצע דרך תסריט - יש להגדיר אפס בשדה "עמלת תיווך באחוזים".
רווח נקי ₪ שדה המחושב אחרי שכל הדוח מוכן (גם אחרי התסריט) שווה = [רווח תפעולי ₪] מינוס [עמלה למשווק ₪].
הערות הטקסט כאן בשליטת התסריט (קוד) שנכתב על גבי הייפר. חישוב של תוכנת המדף רושם את הטקסט: "% מהרווח הגולמי"
התראות המשווק הוא ספק, רשום בטבלת הספקים. ההתראות כאן נוצרות בעזרת בחינת רשומת הספק, כל התראה עומדת בפני עצמה:
  • אם השדה תפקיד [Role] שונה ממשווק, אזי תופיע התראה "הספק אמור להיות מוגדר כמשווק".
  • אם הספק עדיין לא מאושר לפעילות, אזי תופיע התראה "הספק אינו מאושר בהנהלת חשבונות".
מועד יצירת הלקוח
תאריך אישור הלקוח
תאריך עסקה ראשונה של הלקוח
סניף הלקוח
מגיעים מרשומת הלקוח בזמן הפעלת הדוח. השדות הללו מאפשרים לנו לכתוב קוד לחישוב תגמול עבור עסקה ראשונה וכו'.

כתיבת קוד תסריט

אירוע המופעל על ידי הדוח הסבר
Procedure Init; כאשר המשתמש מפעיל את המודול (דוח), האירוע הזה מופעל בטרם העמוד מופיע על המסך. זה המקום המומלץ לטפל ברשימת השדות (הוספה ושינוי כותרות).
האירוע מופעל לפני החיבור למערכת העיצוב וההרשאות !
Procedure After_Showing; האירוע הזה מופעל לאחר שהדוח מופיע על המסך (ריק). אין לנו רעיון טוב מה לעשות איתו... אבל הוא קיים.
Procedure Calc_Fields_For_Report_View; האירוע מופעל בסוף יצירת הדוח, כאשר השדה "חשב מחדש את העמלות" = "לא". כאן יש לטפל רק בשדות המחושבים (אם הוספתם כאלו).
Function Process_Report_Data: Boolean; האירוע מופעל בסוף יצירת הדוח, כאשר השדה "חשב מחדש את העמלות" = "כן".
ראשית מדובר בפונקציה שאם אינה קיימת או שמחזירה False - הפקת הדוח מוכרזת ככישלון וטבלת התוצאות תאופס !
כלומר גם בכדי להשתמש במוצר המדף בלבד חייבים לשים את הפונקציה הזאת ריקה ולו רק שתחזיר True.
כמו בדוגמה בהמשך, זה האירוע לחשב בו תגמולים לפי שיטות שונות (אפשר לכתוב הכל ולגשת עצמאית לטבלאות נוספות).
לאחר האירוע הזה, השדה [רווח נקי ₪] מחושב עצמאית על ידי תוכנת המדף ואין צורך לכתוב קוד עבורו.


להלן דוגמה לתסריט עם כל האלמנטים הנ"ל:

Procedure Init;
Begin
  ReportTb.FldSet.Set_VisualName('Gross Profit LC', 'רווח בניכוי עלויות ₪', he_Hebrew);
  ReportTb.Add_DB_Field('Broker Fee %', '');
  ReportTb.Add_Field('Broker Cost %', '% עלות ביצוע', he_Money, False, 0, he_Edit);
  ReportTb.Add_Field('Broker Fee ILS', 'רווח חדר עסקאות ₪', he_Money, False, 0, he_Edit);
  ReportTb.Add_Field('Broker Commission', '% עמלת משווק', he_Money, False, 0, he_Edit);
  ReportTb.GlobalInit;
End;

Procedure Calc_Fields_For_Report_View;
VAR Y: Integer;
    D: Double;
Begin
  For Y:= 0 to ReportTb.Rowcount-1 Do
    Begin
    // Calc the Broker Fee in ILS
      D:= Round_By_Money_Mask(ReportTb.RField['Broker Fee ccy2',Y] * ReportTb.RField['Execution ccy2 to LC Exch Rate',Y]);
      ReportTb.RField['Broker Fee ILS',Y]:= D;
      ReportTb.RField['Broker Cost %',Y]:= Round_By_Money_Mask(ReportTb.RField['Broker Cost LC',Y] / D);
    // Calc the Broker Fee % (for export to excel by user)
      ReportTb.RField['Broker Commission',Y]:= Round_By_Money_Mask(Safe_Div(ReportTb.RField['Broker Marketing Cost LC',Y],
                                                                            ReportTb.RField['Gross Profit LC',Y]) * 100);
    End;
End;

Function Process_Report_Data: Boolean;
VAR Y, FromDate, Z: Integer;
    D,P: Double;
    Flag: Boolean;
Begin
//======// הספק הזה מקבל נתח מנפח העסקה ולא מהרווח עצמו
  For Y:= 0 to ReportTb.Rowcount-1 Do
    IF ReportTb.ICell[18,Y]{Middleman Account} = 10196 Then
      Begin
        ReportTb.RField['Broker Marketing Cost LC',Y]:= ReportTb.RField['Trade Volume LC',Y] * 0.001;
        ReportTb.Field['Notes',Y]:= '0.1% ממחזור העסקה בשקלים';
      End;

//======// דוגמה מדרגות לפי ווליום בדולר
  FromDate:= EnDate(2024,8,1);                                // החוזה נחתם החל מתאריך הזה
  D:= 0;
  For Y:= 0 to ReportTb.Rowcount-1 Do
    IF (ReportTb.ICell[18,Y]{Middleman Account} = 10187) AND (ReportTb.ICell[1,Y]{BK Entry Date} >= FromDate) Then
      Begin
        D:= D + ReportTb.RField['Trade Volume USD',Y];        // D = מונה מחזור
        P:= 18.5;                                             // P = אחוז עמלה מרווח תפעולי
        IF D > 1000000 Then  P:= 22.5;
        IF D > 5000000 Then  P:= 25;

        ReportTb.RField['Broker Marketing Cost LC',Y]:= ReportTb.RField['Gross Profit LC',Y] * (P/100);
        ReportTb.Field['Notes',Y]:= _Money_To_Str(P,False) + '% עמלה מדורגת לפי מחזור בדולר: '+_Money_To_Str(D,False);
      End;

//======// דוגמה לתגמול על עסקה ראשונה מאז ההצטרפות של הלקוח
  For Y:= 0 to ReportTb.Rowcount-1 Do
    IF (ReportTb.ICell[18,Y]{Middleman Account} = 10137) Then
      Begin
        Flag:= ReportTb.IField['Client First Transaction Date',Y] = ReportTb.IField['BK Entry Date',Y];
        IF Flag Then
          For Z:= 0 to Y-1 Do
            IF ReportTb.ICell[8,Z]{Client Number} = ReportTb.ICell[8,Y] Then
              Begin
                Flag:= False;      // מצאתי עסקה קודמת של הלקוח ולכן אין צורך לשלם למשווק
                BREAK;
              End;
        IF Flag Then
          Begin
            ReportTb.RField['Broker Marketing Cost LC',Y]:= 450;
            ReportTb.Field['Notes',Y]:= '450 שח עמלה לעסקה ראשונה';
          End
              Else
          Begin
            ReportTb.RField['Broker Marketing Cost LC',Y]:= 0;
            ReportTb.Field['Notes',Y]:= 'העסקה נבדקה. אין צורך לשלם עמלה.'
          End;
      End;

  Calc_Fields_For_Report_View;     // Calculate the Broker Fees and Commission data
  Result:= True;                   // survived to this point...
End;