טעות בחישוב יתרות ב-SKD ותיקון התוכנה שלו באמצעות דוגמה של דוח אוניברסלי. חישוב שגוי של יתרות בעת שימוש ביתרות ראשוניות וסופיות skd 1s skd

טעות נפוצה נוספת בעת יצירת דוחות על ACS עבור 1s Enterprise היא שהיתרות הראשוניות והסופיות בטבלאות הוירטואליות של אוגרי צבירה מחושבות בצורה שגויה. לדוגמה, בואו ניצור דוח פשוט שיציג יתרות ותנועות בפנקס GoodsInWarehouses. בקשתו תיראה כך:

אנו גם ניצור הגדרות וריאציות פשוטות:

כתוצאה מכך, אנו מקבלים את הדוח הבא:

יש לכם שאלה, האם אתם צריכים עזרה של יועץ?

כי לא ציינו את ההתחלה והסוף של התקופה בשום מקום, הדוח אמור להציג נתונים מתחילת מסד הנתונים. אבל בהקבצות שלנו לפי מחסן ומינוח יש יתרות ראשוניות שאינן אפס. קל להבין שהנתונים מוצגים בצורה שגויה, כי. בתחילת בסיס הנתונים, לא אמורות להיות שאריות. למרות שהבקשה עצמה נכונה.

העובדה היא של-SKD יש מנגנון משלו לחישוב היתרות. לצורך פעולתו הנכונה, נדרש לקבוע באופן חד משמעי את מיקומם של המקליטים על ציר הזמן. במקרה זה, יש רק הפניה בבחירה, כך שמערכת הקישור לא יכולה לעשות זאת. כדי להימנע מהתנהגות כזו של ACS, בחר בשדה PeriodSecond בבקשה. במקרה זה, המערכת תחשב נכון את היתרות:

יש לזכור שלשדות עם התפקיד "תקופה" יש תיבת סימון "נוסף". ואם מסיבה כלשהי הוא נמחק מהשדה PeriodSecond, הדוח יחזור לגרסה השגויה. לצורך חישוב נכון של יתרות, יש לסמן את הדגל "נוסף" בתפקיד, או שהשדה חייב להיות קיים בשדות הנבחרים של הדוח ברמת הגרסה.

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

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

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

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

SOLUTION אינטראקטיבי ( לא מתאים לדוח אוניברסלי):

פתח את ערכת פריסת הנתונים של הדוח שלך ועיין בהגדרות של שדה הנתונים.

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

באופן דומה, עליך להגדיר את התפקיד "מימד" עבור כל הממדים של מערך הנתונים שלך.

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

הגדרות כאלה של שדות נתוני ACS מאפשרות ברוב המקרים להשיג את החישוב הנכון של שאריות לפי קיבוץ כאשר עם הגדרות ברירת מחדלהם מחושבים בצורה לא נכונה.

פתרון תוכנה (בדוגמה של דוח המטא נתונים האוניברסלי):

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

לתפקידים יתרות ראשוניות וסופיות עבור כל אחד מהמשאביםהדרך הקלה ביותר היא לא להמציא את הגלגל מחדש (הכל כבר נכתב לפנינו) ולהשתמש בנוהל המקובל FillDataSetFieldRemainder() ממודול נפוץ GenericReports. אתה מעביר את שדה ערכת הנתונים ואת שם המשאב כפרמטרים לשם, וכתוצאה מכך, שאר השדה עם התפקיד המלא כהלכה נוצר במערך הנתונים.

באופן דומה, כאשר אתה יוצר שדות מערך נתונים עבור מימדים, עליך לתת להם את תפקיד הממד. הקוד יהיה משהו כזה:

NewDimension = GenericReports.AddDataSetField(DataCompositionSchema.DataSets, Dimension.Name, Dimension.Synonym); NewDimension.Role.Dimension = true;

המניפולציות עם שדות המשאבים והמדידה שתוארו לעיל הן הכרחיות, אך אינן מספיקות כדי לפתור את הבעיה - הצרה העיקרית של הדוח האוניברסלי היא היעדר מספור התקופות. שדות תקופה קיימים במערך הנתונים, אך התפקידים שלהם אינם ממולאים.

שדות התקופה מתווספים לדוח על ידי הפרוצדורה של המודול הגנרי GenericReports.AddPeriodFieldsToDataSet(), אשר נקרא מהליך מודול האובייקט AddDataSetFields(). למרבה הצער, נוהל זה אינו מפרט את מספרי התקופה.

בנוסף, השדות "מספר קו" ו"רשם" אינם מתווספים לדוח באופן תוכניתי בשום מקום. זה נראה לי מוזר, כי. הם נמצאים במערך הנתונים הסופי.

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

להלן אני מציע מתכון שעזר לי לפתור כמעט לחלוטין את הבעיה הזו של הפלטפורמה ודוח המטא נתונים האוניברסלי:

הנה קטע הקוד של מודול האובייקט:

// הוסף שדות תקופה If TableName = "RemaindersAnd Turnovers" OR TableName = "Turnovers" Then GenericReports.AddPeriodFieldsToDataSet(DataCompositionScheme.DataSets); EndIf; צריך להיות מוחלף עם הבא: // הוסף שדות תקופה If TableName = "RemaindersAnd Turnovers" OR TableName = "Turnovers" אז ListPeriods = GenericReports.AddPeriodFieldsToDataSet(DataCompositionScheme.DataSets); //מלא את שדות השירות והגדר את התקופות באופן ידני, כי הפלטפורמה לא ממלאת אותם Field = GenericReports.AddDataSetField(DataCompositionScheme.DataSets, "LineNumber", "LineNumber"); Field.Role.PeriodNumber = 1; Field = GenericReports.AddDataSetField(DataCompositionSchema.DataSets, "Recorder", "Recorder"); Field.Role.PeriodNumber = 2; sc = 3; עבור כל FieldPeriodFromListPeriods לולאה FieldPeriod.Value.Role.PeriodNumber = cn; אם ספירה > 3 אז FieldPeriod.Value.Role.PeriodType = DataCompositionPeriodType.Optional; EndIf; sc = sc + 1; EndCycle; EndIf;

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

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

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

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

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

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

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

בואו נוסיף מערך נתונים של שאילתות. לשם כך, עלינו להפוך את רכיב השורש "בונה שאילתות" לפעיל. נפנה לטבלה הוירטואלית "יתרות ומחזורים" של פנקס הצבירה. מה אנחנו רואים?

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

נניח שבשאילתה בה אנו משתמשים, למשל, אנו משתמשים באופרטור שפת השאילתה "SELECT". נתאר מצב זה:

CHOICE WHEN שאריות ומחזורים של סחורות.מינוח = Value(Catalog.Nomenclature.EmptyReference) THEN Value(Directory.Nomenclature.Shampo) ELSE Remains of GoodsResidualsAnd Turnovers.Nomenclature END

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

כפי שניתן לראות, עבור השדה "מינוח", התפקיד לא מולא. אבל כפי שאתה יכול לראות בתמונה, למעשה, אין לנו הגדרת תפקיד עבור השדה "שדה1", ובמקרה זה השאר לא יחושב נכון.

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

בסוף המאמר אני רוצה לייעץ לך חופשי מאנטולי סוטניקוב. זהו קורס של מתכנת מנוסה. הוא יראה לך על בסיס נפרד כיצד לבנות דוחות ב-ACS. אתה רק צריך להקשיב היטב ולזכור! תקבלו תשובות לשאלות כמו:
  • כיצד ליצור דוח רשימה פשוט?
  • לשם מה מיועדות העמודות שדה, נתיב וכותרת בכרטיסייה שדות?
  • מהן ההגבלות על שדות פריסה?
  • איך להגדיר תפקידים נכון?
  • מהם התפקידים לשדות פריסה?
  • היכן אוכל למצוא את כרטיסיית פריסת הנתונים בשאילתה?
  • כיצד להגדיר פרמטרים ב-SKD?
  • עוד יותר מעניין...
אולי אתה לא צריך לנסות לגלוש באינטרנט בעצמך בחיפוש אחר המידע הדרוש? יתר על כן, הכל מוכן לשימוש. רק להתחיל! כל הפרטים על מה שיש במדריכי הוידאו החינמיים

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

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

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

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

SOLUTION אינטראקטיבי ( לא מתאים לדוח אוניברסלי):

פתח את ערכת פריסת הנתונים של הדוח שלך ועיין בהגדרות של שדה הנתונים.

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

באופן דומה, עליך להגדיר את התפקיד "מימד" עבור כל הממדים של מערך הנתונים שלך.

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

הגדרות כאלה של שדות נתוני ACS מאפשרות ברוב המקרים להשיג את החישוב הנכון של שאריות לפי קיבוץ כאשר עם הגדרות ברירת מחדלהם מחושבים בצורה לא נכונה.

פתרון תוכנה (בדוגמה של דוח המטא נתונים האוניברסלי):

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

לתפקידים יתרות ראשוניות וסופיות עבור כל אחד מהמשאביםהדרך הקלה ביותר היא לא להמציא את הגלגל מחדש (הכל כבר נכתב לפנינו) ולהשתמש בנוהל המקובל FillDataSetFieldRemainder() ממודול נפוץ GenericReports. אתה מעביר את שדה ערכת הנתונים ואת שם המשאב כפרמטרים לשם, וכתוצאה מכך, שאר השדה עם התפקיד המלא כהלכה נוצר במערך הנתונים.

באופן דומה, כאשר אתה יוצר שדות מערך נתונים עבור מימדים, עליך לתת להם את תפקיד הממד. הקוד יהיה משהו כזה:

NewDimension = GenericReports.AddDataSetField(DataCompositionSchema.DataSets, Dimension.Name, Dimension.Synonym); NewDimension.Role.Dimension = true;

המניפולציות עם שדות המשאבים והמדידה שתוארו לעיל הן הכרחיות, אך אינן מספיקות כדי לפתור את הבעיה - הצרה העיקרית של הדוח האוניברסלי היא היעדר מספור התקופות. שדות תקופה קיימים במערך הנתונים, אך התפקידים שלהם אינם ממולאים.

שדות התקופה מתווספים לדוח על ידי הפרוצדורה של המודול הגנרי GenericReports.AddPeriodFieldsToDataSet(), אשר נקרא מהליך מודול האובייקט AddDataSetFields(). למרבה הצער, נוהל זה אינו מפרט את מספרי התקופה.

בנוסף, השדות "מספר קו" ו"רשם" אינם מתווספים לדוח באופן תוכניתי בשום מקום. זה נראה לי מוזר, כי. הם נמצאים במערך הנתונים הסופי.

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

להלן אני מציע מתכון שעזר לי לפתור כמעט לחלוטין את הבעיה הזו של הפלטפורמה ודוח המטא נתונים האוניברסלי:

הנה קטע הקוד של מודול האובייקט:

// הוסף שדות תקופה If TableName = "RemaindersAnd Turnovers" OR TableName = "Turnovers" Then GenericReports.AddPeriodFieldsToDataSet(DataCompositionScheme.DataSets); EndIf; צריך להיות מוחלף עם הבא: // הוסף שדות תקופה If TableName = "RemaindersAnd Turnovers" OR TableName = "Turnovers" אז ListPeriods = GenericReports.AddPeriodFieldsToDataSet(DataCompositionScheme.DataSets); //מלא את שדות השירות והגדר את התקופות באופן ידני, כי הפלטפורמה לא ממלאת אותם Field = GenericReports.AddDataSetField(DataCompositionScheme.DataSets, "LineNumber", "LineNumber"); Field.Role.PeriodNumber = 1; Field = GenericReports.AddDataSetField(DataCompositionSchema.DataSets, "Recorder", "Recorder"); Field.Role.PeriodNumber = 2; sc = 3; עבור כל FieldPeriodFromListPeriods לולאה FieldPeriod.Value.Role.PeriodNumber = cn; אם ספירה > 3 אז FieldPeriod.Value.Role.PeriodType = DataCompositionPeriodType.Optional; EndIf; sc = sc + 1; EndCycle; EndIf;

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

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

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

41
לאחרונה הכנתי דוח עם מספר בלתי מוגבל של עמודות. לא רצה להתעסק עם הקוד, החלטתי לעשות את זה ב-ACS. לא הייתה בעיה עם זה, היה צורך למתוח את התוצאה לפריסה שרירותית (כותרת משלו + ... 27
למרות שלומדי SKD נתקלים בזה ביום הראשון או השני, זה צריך להיות בסעיף השאלות הנפוצות. דוגמה פשוטה של ​​הפלט פרוגרמטי של דוח על פריסה באמצעות הגדרות ברירת המחדל. //קבל סכימה מ... 18
בעת הפקת דוחות על ה-ACS, כברירת מחדל, כל הקבוצות מורחבות, אך קורה שיש צורך להציג דוח עם קבוצות מכווצות מיד לאחר היצירה! קוד זה במודול הדוחות מאפשר לך לכווץ... 10
בלשונית זו, ניתן לציין איזה סוג של חיבורים נעשים בין שני מערכי נתונים או יותר, לפי אילו פרמטרים ותנאים..png 1. "מקור קישור" - מערך הנתונים הראשון מצוין, מ... 9
שכאשר מפתחים דוחות, נדרש שמשתמש בעל זכויות מוגבלות יפיק דו"ח לחלוטין ללא בדיקת זכויות! במיוחד אם RLS מוגדר. ישנן מספר דרכים לעשות זאת: 1. התקן ...