Difference between revisions of "He/שימוש ב API"

From GnuCash
Jump to: navigation, search
(יצירת תנועה חדשה)
(יצירת תנועה חדשה: format)
Line 35: Line 35:
  
 
== יצירת תנועה חדשה ==
 
== יצירת תנועה חדשה ==
להלן הקוד ליצירת תנועה חדשה (בקיצור "txn") ואכלסה בנתונים תוך שימוש בקוד C "כמעט אמיתי" (במציאות כל הצהרות המשתנים חייבות להופיע בתחילת הקוד בראש התסריט ולא משולב בתוך שורות הקוד):
+
להלן הקוד ליצירת תנועה חדשה (להלן '''תנועה''') ואכלסה בנתונים תוך שימוש בקוד C "כמעט אמיתי" (במציאות כל הצהרות המשתנים חייבות להופיע בתחילת הקוד בראש התסריט ולא משולב בתוך שורות הקוד):
 
<syntaxhighlight lang="C">
 
<syntaxhighlight lang="C">
 
  Account *account = ...; // לקבל זאת מהיכן שהו
 
  Account *account = ...; // לקבל זאת מהיכן שהו
Line 44: Line 44:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
קוד txn נוצר. כעת ניתן להגדיר את שדות המידע הקשורים לקוד ה-txn:
+
קוד התנועה נוצר. כעת ניתן להגדיר את שדות המידע הקשורים לקוד ההתנועה:
  
 
<syntaxhighlight lang="C">
 
<syntaxhighlight lang="C">
  xaccTransSetDatePostedSecs(transaction, 1234567); // ה-txn תאריך
+
  xaccTransSetDatePostedSecs(transaction, 1234567); // תאריך התנועה
 
  xaccTransSetNum(transaction, "X23");
 
  xaccTransSetNum(transaction, "X23");
 
  xaccTransSetNotes(transaction, "הערות כל שהן...");
 
  xaccTransSetNotes(transaction, "הערות כל שהן...");
 
</syntaxhighlight>
 
</syntaxhighlight>
  
מכיוון שגנוקאש מסוגלת לטפל ברבוי-מטבעות , כל txn חייב לכלול גם את הגדרת ''מטבע תנועה'':
+
מכיוון שגנוקאש מסוגלת לטפל ברבוי-מטבעות, כל תנועה חייבת לכלול גם את הגדרת ''מטבע תנועה'':
 
   
 
   
 
<syntaxhighlight lang="C">
 
<syntaxhighlight lang="C">
 
  Commodity *currency = xaccAccountGetCommodity(account);
 
  Commodity *currency = xaccAccountGetCommodity(account);
  xaccTransSetCurrency(transaction, currency); //  חייב לכלול הגדרות /סחורה/מטבעTxn
+
  xaccTransSetCurrency(transaction, currency); //  תנועה חייבת לכלול גם הגדרות /סחורה/מטבעת
 
</syntaxhighlight>
 
</syntaxhighlight>
  
הסכום/הערך בפועל של התנועה יתקבל על ידי שנים (או יותר) הפיצולים שלה. הקוד ייצור את הפיצול הראשון:
+
הסכום/הערך בפועל של התנועה יתקבל על ידי שנים (או יותר)הפיצולים שלה. תחילה ייצורים את הפיצול הראשון:
  
 
<syntaxhighlight lang="C">
 
<syntaxhighlight lang="C">
 
  Split *split = xaccMallocSplit(book);
 
  Split *split = xaccMallocSplit(book);
  xaccTransAppendSplit(transaction, split); // הפיצול שייך זהtxn ל-
+
  xaccTransAppendSplit(transaction, split); // הפיצול שייך לתנועה זו
  xaccAccountInsertSplit(account, split); // הפיצול שייך לחזבון זה
+
  xaccAccountInsertSplit(account, split); // הפיצול שייך לחשבון זה
  gnc_numeric amount = gnc_numeric_create(123, 100); // 1.23
+
  gnc_numeric amount = gnc_numeric_create(123, 100); // 1.23 הסכום
 
  xaccSplitSetValue(split, amount);
 
  xaccSplitSetValue(split, amount);
 
  xaccSplitSetAmount(split, amount);
 
  xaccSplitSetAmount(split, amount);
 
</syntaxhighlight>
 
</syntaxhighlight>
  
באשר ל- SetValue ו- SetAmount:  ב-txn למסחר רב-מטבעי או במסחר במניות, הסכום  והערך אינם בהכרך זהים, להפך. כל עוד מתמודדים עם מטבע אחד בלבד, הערך והסכום מוגדרים להיות זהים.
+
באשר ל- SetValue ו- SetAmount:  בתנועה למסחר רב-מטבעי או במסחר במניות, הסכום  והערך אינם בהכרך זהים, להפך. כל עוד מתמודדים עם מטבע אחד בלבד, הערך והסכום מוגדרים להיות זהים.
Tכעת נדרש לייצור גם את הפיצול השני כך שהתנועה תהיה מאוזנת ובעלת שני פיצולים לפחות (שורת חובה ושורת זכות), בדיוק כפי שתנועות נרשמות בהנהלת חשבונות כפולה:
+
כעת נדרש לייצור גם את הפיצול השני כך שהתנועה תהיה מאוזנת ובעלת שני פיצולים לפחות (שורת חובה ושורת זכות), בדיוק כפי שתנועות נרשמות בהנהלת חשבונות כפולה:
  
 
<syntaxhighlight lang="C">
 
<syntaxhighlight lang="C">
 
  Account* other_account = ...; // נדרש לקבל זאת מהיכן שהו
 
  Account* other_account = ...; // נדרש לקבל זאת מהיכן שהו
 
  Split *split2 = xaccMallocSplit(book);
 
  Split *split2 = xaccMallocSplit(book);
  xaccTransAppendSplit(transaction, split2); // הפיצול שייך ל- txn הזה
+
  xaccTransAppendSplit(transaction, split2); // הפיצול שייך לתנועה הזו
 
  xaccAccountInsertSplit(other_account, split2); // הפיצול שייך לחשבון זה
 
  xaccAccountInsertSplit(other_account, split2); // הפיצול שייך לחשבון זה
  gnc_numeric other_amount = gnc_numeric_create(-123, 100); // -1.23, הסכום מהפיצול הקודם אבל בסימן הפוך(חמייצג חובה / זכות)
+
  gnc_numeric other_amount = gnc_numeric_create(-123, 100); // -1.23, הסכום מהפיצול הקודם אבל בסימן הפוך (מייצג חובה / זכות)
 
  xaccSplitSetValue(split, other_amount);
 
  xaccSplitSetValue(split, other_amount);
 
  xaccSplitSetAmount(split, other_amount);
 
  xaccSplitSetAmount(split, other_amount);

Revision as of 07:32, 13 May 2021

שפות אנגלית גרמנית ספרדית עִברִית פורטוגזית צרפתית

כללי

עמוד זה מרכז מספר דוגמאות אודות אופן השימוש ב- C API של גנוקאש לצורך מניפולציה בסיסית בסוגי נתונים. C API (מכונה גם "המנוע") הוא שכבה שהפשטה מכל שרת. כלומר, מתכנת של מנשק המשתמש או מתכנת המתקעים לעולם לא יוכלו לגשת לאף אחד מתוכניות ה-XML או ה-SQL ישירות, במקום זאת הוא משתמש רק בפונקציות של מנשק ה- API כדי לגשת לנתונים.

תיעוד

As for documentation: Unfortunately there doesn't exist any up-to-date coherent set of documentation. Part of it is in דוקסיג'ן, but part of it are only in the C header files.

A module overview is available for those parts that are documented in doxygen. For example, there is a module group entitled "GnuCash Engine: Core, Non-GUI Accounting Functions" which contains the doxygen-ized parts of this, including the "Account", but not including Transaction and Split which are the other important basic data types.

Entity-Relationship Diagram is an up-to-date (May 2011, but the schema is unchanged in mid-2017) Entity-Relationship-Diagram (ERD) which shows those most important types of gnucash (in the form of tables, as common for an ERD):

  • פיצול
  • תנועה
  • חשבון
  • סחורה (typedef name: gnc_commodity)
  • ספר (typedef name: QofBook)

המקום היחיד בו ניתן למצוא מידע עדכני לבטח הם בכותרות הקבצים:

  • libgnucash/engine/Split.h
  • libgnucash/engine/Transaction.h
  • libgnucash/engine/Account.h
  • libgnucash/engine/gnc-commodity.h
  • libgnucash/engine/qofbook.h

יצירת תנועה חדשה

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

 Account *account = ...; // לקבל זאת מהיכן שהו
 QofBook *book = gnc_account_get_book(account);
 
 Transaction *transaction = xaccMallocTransaction(book); // יצירת התנועה החדשה
 xaccTransBeginEdit(transaction); // פתיחת התנועה לעריכה

קוד התנועה נוצר. כעת ניתן להגדיר את שדות המידע הקשורים לקוד ההתנועה:

 xaccTransSetDatePostedSecs(transaction, 1234567); // תאריך התנועה 
 xaccTransSetNum(transaction, "X23");
 xaccTransSetNotes(transaction, "הערות כל שהן...");

מכיוון שגנוקאש מסוגלת לטפל ברבוי-מטבעות, כל תנועה חייבת לכלול גם את הגדרת מטבע תנועה:

 Commodity *currency = xaccAccountGetCommodity(account);
 xaccTransSetCurrency(transaction, currency); //   תנועה חייבת לכלול גם הגדרות /סחורה/מטבעת

הסכום/הערך בפועל של התנועה יתקבל על ידי שנים (או יותר)הפיצולים שלה. תחילה ייצורים את הפיצול הראשון:

 Split *split = xaccMallocSplit(book);
 xaccTransAppendSplit(transaction, split); // הפיצול שייך לתנועה זו
 xaccAccountInsertSplit(account, split); // הפיצול שייך לחשבון זה
 gnc_numeric amount = gnc_numeric_create(123, 100); // 1.23 הסכום
 xaccSplitSetValue(split, amount);
 xaccSplitSetAmount(split, amount);

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

 Account* other_account = ...; // נדרש לקבל זאת מהיכן שהו
 Split *split2 = xaccMallocSplit(book);
 xaccTransAppendSplit(transaction, split2); // הפיצול שייך לתנועה הזו
 xaccAccountInsertSplit(other_account, split2); // הפיצול שייך לחשבון זה
 gnc_numeric other_amount = gnc_numeric_create(-123, 100); // -1.23, הסכום מהפיצול הקודם אבל בסימן הפוך (מייצג חובה / זכות)
 xaccSplitSetValue(split, other_amount);
 xaccSplitSetAmount(split, other_amount);

לבסוף, סיום עריכת התנועה על ידי קריאה לפונקציה CommitEdit:

 xaccTransCommitEdit(transaction); // סיום העריכה

דוגמאות שימוש

ניתן למצא מספר דוגמאות ב- Python_shell#Usage_examples.