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

טבלה אחת מפרטת את הסחורה שיש לשלוח מהמחסן. בטבלה אחרת - חובת תשלום עבור סחורות אלו.

לכן, ב-1C, העבודה עם שולחנות תופסת מקום נכבד.

טבלאות ב-1C נקראות גם "חלקי שולחן". ספרי עיון, מסמכים ואחרים יש אותם.

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

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

//אפשרות 1 - גישה רציפה לתוצאות השאילתה

// קבל טבלה
Selection = Query.Execute().Select();
// לעקוף את כל השורות של תוצאת השאילתה לפי הסדר
בעוד Selection.Next() Loop
Report(Selection.Name);
EndCycle;

//אפשרות 2 - העלאה לטבלת הערכים
Query = New Query("SELECT Name FROM Directory.Nomenclature");
// קבל טבלה
טבלה = Query.Execute().Upload().
// אז נוכל גם לעקוף את כל הקווים
עבור כל שורה מלולאת שולחן
Report(String.Name);
EndCycle;
//או גישה שרירותית למחרוזות
String = Table.Find("שופל", "שם");

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

טבלה בטופס (לקוח עבה)

המשתמש עובד עם הטבלה כאשר היא ממוקמת בטופס.

דנו בעקרונות הבסיסיים של עבודה עם טפסים בשיעור על ובשיעור על

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

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

לחץ על הלחצן "..." במאפיין הנתונים. על מנת לראות את רשימת החלקים הטבלאיים, עליך להרחיב את ענף האובייקט.

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

באותו מאפיין Data, אתה יכול להזין שם שרירותי ולבחור בסוג ValueTable.

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

בלחיצה ימנית על הטבלה ניתן להוסיף עמודה. במאפייני העמודה ניתן לציין את שמה (לעיון בקוד 1C), את כותרת העמודה בטופס, את הקשר עם התכונה של החלק הטבלאי (האחרון - אם לא טבלה שרירותית, אלא טבלה חלק נבחר).

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

כדי לנהל את הטבלה, עליך להציג את לוח הפקודות בטופס. בחר בפריט התפריט טופס/הוסף בקרה/לוח פקודות.

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

טבלה בטופס (לקוח דק/מנוהל)

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

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

כדי להוסיף עמודות, השתמש בתפריט הלחצן הימני של העכבר בתכונת הטופס הזו, פריט הוסף עמודת תכונה.

לאחר מכן גרור גם את הטבלה שמאלה.

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

ייצוא טבלה לאקסל

ניתן להדפיס או להעלות כל טבלת 1C הממוקמת בטופס לאקסל.

לשם כך, לחץ לחיצה ימנית על מקום ריק בטבלה ובחר הצג רשימה.

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

חפש בטבלת הערכים 1C

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

ישנן שתי שיטות מיוחדות לחיפוש בטבלת ערכים:

1. מצא

TVHorizon = Directories.Nomenclature.FindBy Name("Horizon TV");
FoundString = TZNomenclature.Find(TVHorizon);
//נוכל גם לציין באילו עמודות לחפש כדי להאיץ את החיפוש
FoundString = TKNomenclature.Find(TVHorizon, "Nomenclature");

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

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

2. FindStrings


Selection Structure.Insert("מינוח", TVHorizon); // ראשית אנו מציינים את העמודה היכן לחפש, ולאחר מכן מה לחפש.

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

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


SelectionStructure = מבנה חדש;
Selection Structure.Insert("מינוח", TVHorizon);
Selection Structure.Insert("כמות", 10);
FoundStringArray = TKNomenclature.FindStrings(SelectionStructure);

השלילי היחיד, כפי שאתה יכול לראות, אתה לא יכול להשתמש בסוגים אחרים של השוואה מלבד "שווה"

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

1. צור טבלת ערכים

ValueTable = New ValueTable;


2. צור עמודות של טבלת הערכים:

ValueTable.Columns.Add("שם");
ValueTable.Columns.Add("שם משפחה");


3. הוסף שורות חדשות באמצעות שמות העמודות:


NewString.Name = "Vasily";
NewRow.LastName = "Pupkin";


4. כיצד לחפש ערך בטבלת הערכים:
יש צורך למצוא שורת טבלה המכילה את הערך הרצוי.

FoundString = ValueTable.Find(LookupValue);


5. מצא את המופע הראשון בעמודות מסוימות של טבלת ערכים

FoundString = ValueTable.Find(LookupValue, "ספק, קונה");


6. אם אתה צריך למצוא את כל המופעים בטבלת הערכים:
אנו משתמשים במבנה החיפוש.

SearchStructure = Structure("Employee", LookupValue);
ArrayFoundStrings = ValueTable.FindStrings(SearchStructure);


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

7. איך לעבור לולאה דרך טבלת ערכים בסדר אקראי

עבור כל שורה נוכחית מלולאת ValueTable
Report(CurrentLine.Name);
EndCycle;

עשה את אותו הדבר באמצעות אינדקסים:

SeniorIndex = ValueTable.Count() - 1;
עבור MF = 0 לפי SeniorIndex Cycle
Report(ValueTable[Count].Name);
EndCycle;


8. מחיקת שורת טבלת ערכים קיימת

ValueTable.Delete(RemoveRow);

לפי אינדקס

ValueTable.Delete(0);


9. מחיקת עמודה קיימת בטבלת הערכים

ValueTable.Columns.Delete(RemoveColumn);


לפי אינדקס

ValueTable.Columns.Delete(0);

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

10. כיצד למלא את טבלת הערכים אם שמות העמודות כלולים במשתנים?

NewRow = ValueTable.Add();
NewRow[ColumnName] = ערך;


11. כיצד למלא את כל העמודה של טבלת הערכים בערך הרצוי?
יש למלא את העמודה FiscalAccounting Flag בטבלת הערכים של טבלת הערכים בערך False

ValueTable.FillValue(False, "דגל חשבונאות פיסקלית");


אנו משתמשים בשיטת FillValues() עבור טבלת הערכים. הפרמטר הראשון הוא הערך למילוי. הפרמטר השני הוא שם העמודה המלאה.

12. כיצד למלא את טבלת הערכים "TableRecipient" בנתונים של טבלת הערכים "SourceTable"?

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

TableReceiver = TableOriginal.Copy();


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

העברת נתונים חלקית עבור עמודות עם שמות תואמים:

עבור כל שורה של SourceTable מ-SourceTable Loop
FillPropertyValues(NewString, SourceTableString);
EndCycle


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

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

עותק נתונים מלא עבור עמודות עם שמות תואמים

SimilarColumns = New Array();

עבור כל עמודה מ-SourceTable.Loop Columns
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

אם תואמתעמודה<>לא מוגדר אז

// קבל מאפייני עמודה.
שם = Column.Name;
ValueType = Column.ValueType;
כותרת = Column.Title;
Width = Column.Width;

// החלף עמודות בטבלת היעד.
Index = TableReceiver.Columns.Index(CoincidentColumn);

TableReceiver.Columns.Delete(Index);
TableReceiver.Columns.Insert(Index, Name, ValueType, Title, Width);

// הוסף את השם הבא של העמודות התואמות למערך.
Same-nameColumns.Add(Column.Name);

EndIf;

EndCycle;

// עברו בלולאה בין השורות של טבלת המקור.
עבור כל שורה של SourceTable מ-SourceTable Loop

// הוסף שורה חדשה לטבלת היעד.
NewString = TableReceiver.Add();

// מלא ערכים בתאים תואמים.
עבור כל לולאת NameColumns של אותו שםColumns
NewString[ColumnName] = SourceTableString[ColumnName];

EndCycle;

EndCycle;


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

13. כיצד להוסיף עמודות לטבלת הערכים "טבלת ערכים" עם הגבלות סוג?

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

הוספת עמודה מבלי לציין סוג נתונים

// הוסף עמודה ללא הגבלות סוג.
ValueTable.Columns.Add("Object");


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

הוספת עמודה המציינת את סוג הנתונים

// הגבלות על סוגי נתוני עמודות:
// רק אלמנטים של ספריית "קבלנים".
ValueTable.Columns.Add("Account",NewTypeDescription("ReferenceReference.Accounts"));


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

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

// הכן והגדר מגבלות לנתונים מסוג מחרוזת.
String Qualifiers = New String Qualifiers(20, ValidLength.Variable);
AllowedTypes = NewTypeDescription("String",StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


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

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

// הרחבה של תיאור הטיפוסים ששימש בעבר.
Number Qualifiers = New Number Qualifiers(10, 2, ValidSign.Non-negative);
DateQualifiers = New DateQualifiers(DateParts.Date);
ExtendedValidTypes = NewTypeDescription(ValidTypes, "Number, Date",NumberQualifiers,DateQualifiers);

ValueTable.Columns.Add("הערה", ExtendedAllowedTypes);