Արժեքների դինամիկ աղյուսակ 1s. Ինչ մեթոդներ կան և ինչպես որոնել մի քանի արժեքներ միաժամանակ

Փողն ու ապրանքը հաշվի առնելու համար բիզնեսում լայնորեն կիրառվում են տարբեր աղյուսակներ։ Գրեթե յուրաքանչյուր փաստաթուղթ աղյուսակ է:

Մեկ աղյուսակում ներկայացված են պահեստից առաքվող ապրանքները: Մեկ այլ աղյուսակում `այս ապրանքների համար վճարելու պարտավորությունը:

Հետևաբար, 1C-ում աղյուսակների հետ աշխատանքը նշանավոր տեղ է զբաղեցնում:

1C-ի աղյուսակները կոչվում են նաև «սեղանի մասեր»: Դրանք ունեն տեղեկատու գրքեր, փաստաթղթեր և այլք:

Հարցումը իր կատարման արդյունքում վերադարձնում է աղյուսակ, որը կարելի է մուտք գործել երկու տարբեր եղանակներով։

Առաջինը` ավելի արագ, ընտրությունը, դրանից տողեր ստանալը հնարավոր է միայն կարգով: Երկրորդը հարցման արդյունքի բեռնաթափումն է արժեքների աղյուսակում և այնուհետև պատահական մուտք դեպի դրան:

//Ընտրանք 1 - հաջորդական մուտք դեպի հարցման արդյունքներ

// սեղան ստանալ
Ընտրություն = Query.Execute().Select();
// շրջանցել հարցման արդյունքի բոլոր տողերը հերթականությամբ
Մինչ Selection.Next() Loop
Հաշվետվություն (Ընտրություն. Անուն);
End Cycle;

//Ընտրանք 2 - վերբեռնում արժեքների աղյուսակում
Հարցում = Նոր հարցում ("SELECT Name FROM Directory.Nomenclature");
// սեղան ստանալ
Աղյուսակ = Query.Execute().Upload():
// ապա մենք կարող ենք նաև շրջանցել բոլոր տողերը
Սեղանի հանգույցից յուրաքանչյուր տողի համար
Հաշվետվություն (String.Name);
End Cycle;
//կամ կամայականորեն մուտք գործել տողեր
String = Table.Find("Shovel", "Name");

Կարևոր առանձնահատկությունն այն է, որ աղյուսակում, որը ստացվում է հարցման արդյունքում, բոլոր սյունակները խիստ մուտքագրված կլինեն: Սա նշանակում է, որ Անուն դաշտը Անվանակարգի որոնումից պահանջելով, դուք կստանաք String տեսակի սյունակ, որի թույլատրելի երկարությունը ոչ ավելի, քան N նիշ:

Աղյուսակ ձևի վրա (հաստ հաճախորդ)

Օգտագործողը աշխատում է սեղանի հետ, երբ այն տեղադրվում է ձևի վրա:

Մենք քննարկել ենք ձևերի հետ աշխատելու հիմնական սկզբունքները դասին և դասընթացին

Այսպիսով, եկեք սեղանը դնենք ձևաթղթի վրա: Դա անելու համար կարող եք աղյուսակը քաշել կառավարման վահանակից: Նմանապես, ընտրացանկից կարող եք ընտրել Form/Insert կառավարումը:

Տվյալները կարող են պահպանվել կոնֆիգուրացիայի մեջ, այնուհետև դուք պետք է ընտրեք կազմաձևման օբյեկտի գոյություն ունեցող (նախկինում ավելացված) աղյուսակային մասը, որի ձևը խմբագրում եք:

Սեղմեք «...» կոճակը Տվյալների հատկության մեջ: Ցուցակը տեսնելու համար աղյուսակային մասեր, անհրաժեշտ է բացել Object մասնաճյուղը։

Աղյուսակային մաս ընտրելիս 1C-ն ինքն է սյունակներ կավելացնի ձևի աղյուսակին: Նման աղյուսակում օգտագործողի կողմից մուտքագրված տողերը ավտոմատ կերպով կպահվեն գրացուցակի/փաստաթղթի հետ միասին:

Նույն Data հատկության մեջ կարող եք մուտքագրել կամայական անուն և ընտրել ValueTable տեսակը:

Սա նշանակում է, որ ընտրվել է արժեքների կամայական աղյուսակ: Այն ինքնաբերաբար սյունակներ չի ավելացնի, ինքնաբերաբար չի պահպանվի, բայց դուք կարող եք անել այն, ինչ ուզում եք դրա հետ:

Աղյուսակի վրա աջ սեղմելով կարող եք սյունակ ավելացնել: Սյունակի հատկություններում կարող եք նշել դրա անունը (1C կոդում տեղեկանքի համար), ձևի սյունակի վերնագիրը, աղյուսակային մասի հատկանիշի հետ կապը (վերջինս, եթե ոչ կամայական աղյուսակ է ընտրված, բայց աղյուսակային մաս):

Ձևի աղյուսակի հատկություններում կարող եք նշել, թե արդյոք օգտվողը կարող է տողեր ավելացնել/ջնջել: Ավելի առաջադեմ ձևը ViewOnly վանդակն է: Այս հատկությունները օգտակար են տեղեկատվության ցուցադրման համար նախատեսված աղյուսակների կազմակերպման համար, բայց ոչ խմբագրման համար:

Աղյուսակը կառավարելու համար անհրաժեշտ է ձևաթղթի վրա ցուցադրել հրամանի վահանակը: Ընտրեք ընտրացանկի տարրը Ձև / Տեղադրեք Կառավարման / Հրամանի վահանակ:

Հրամանների տողի հատկություններում ընտրեք «Ավտոլրացում» վանդակը, որպեսզի գործիքագոտու կոճակներն ինքնաբերաբար հայտնվեն:

Աղյուսակ ձևի վրա (բարակ/կառավարվող հաճախորդ)

Վրա կառավարվող ձև նշված գործողություններմի փոքր այլ տեսք նայեք: Եթե ​​Ձեզ անհրաժեշտ է ձևաթղթի վրա տեղադրել աղյուսակային բաժին, ընդլայնեք Object ճյուղը և քաշեք աղյուսակային բաժիններից մեկը ձախ: Եվ վերջ։

Եթե ​​Ձեզ անհրաժեշտ է արժեքների աղյուսակ տեղադրել, ավելացրեք նոր հենարաններձևը և դրա հատկություններում նշեք տեսակը՝ արժեքների աղյուսակ:

Սյունակներ ավելացնելու համար օգտագործեք մկնիկի աջ կոճակի ընտրացանկը այս ձևի հատկանիշի վրա, կետ Ավելացնել հատկանիշ սյունակ:

Այնուհետև քաշեք աղյուսակը դեպի ձախ:

Որպեսզի աղյուսակն ունենա հրամանի տող, աղյուսակի հատկություններում ընտրեք արժեքները Usage - Command bar position բաժնում:

Աղյուսակի արտահանում Excel

Ձևաթղթում տեղադրված ցանկացած 1C աղյուսակ կարող է տպվել կամ վերբեռնվել Excel-ում:

Դա անելու համար աջ սեղմեք աղյուսակի դատարկ տարածության վրա և ընտրեք Ցուցադրել ցուցակը:

Կառավարվող (բարակ) հաճախորդում նմանատիպ գործողություններկարող է իրականացվել՝ օգտագործելով ընտրացանկի տարրը Բոլոր գործողությունները/Ցուցադրման ցուցակը:

Ահա մի փոքր փաստ սկսելու համար. պարզ օրինակներաշխատել արժեքների աղյուսակի հետ.

1. Ստեղծեք արժեքների աղյուսակ

ValueTable = New ValueTable;


2. Ստեղծեք արժեքների աղյուսակի սյունակներ.

ValueTable.Columns.Add(«Անուն»);
ValueTable.Columns.Add («Ազգանուն»);


3. Ավելացրեք նոր տողեր՝ օգտագործելով սյունակների անունները.


NewString.Name = «Վասիլի»;
NewRow.LastName = "Pupkin";


4. Ինչպես որոնել արժեք արժեքների աղյուսակում.
Անհրաժեշտ է գտնել ցանկալի արժեքը պարունակող աղյուսակի տող:

FoundString = ValueTable.Find(LookupValue);


5. Գտեք արժեքների աղյուսակի որոշակի սյունակներում առաջին դեպքը

FoundString = ValueTable.Find(LookupValue, «Supplier, Buyer»);


6. Եթե Ձեզ անհրաժեշտ է գտնել բոլոր երևույթները արժեքների աղյուսակում.
Մենք օգտագործում ենք որոնման կառուցվածքը:

SearchStructure = Կառուցվածք ("Employee", LookupValue);
ArrayFoundStrings = ValueTable.FindStrings(SearchStructure);


Եկեք ստեղծենք որոնման կառուցվածք, որի յուրաքանչյուր տարրը որպես բանալի կպարունակի սյունակի անունը, իսկ այս սյունակում որոնված արժեքը որպես արժեք։ Մենք Search Structure-ը որպես պարամետր փոխանցում ենք FindStrings() մեթոդին։ Արդյունքում մենք ստանում ենք աղյուսակի տողերը:
Եթե ​​որոնման կառուցվածքին ավելացնենք ցանկալի արժեքի որոնումը, օրինակ, նաև Responsible սյունակում, ապա FindRows() մեթոդի կիրառման արդյունքում կստանանք բոլոր տողերը, որտեղ և Employee-ը և Responsible-ը հավասար են ցանկալիին: արժեքը։

7. Ինչպես պտտել արժեքների աղյուսակը պատահական կարգով

Յուրաքանչյուր CurrentRow-ի համար ValueTable Loop-ից
Հաշվետվություն (CurrentLine.Name);
End Cycle;

Նույնը արեք՝ օգտագործելով ինդեքսները.

SeniorIndex = ValueTable.Count() - 1;
MF = 0-ի համար SeniorIndex ցիկլով
Հաշվետվություն(ValueTable[Count].Name);
End Cycle;


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, «Fiscal Accounting Flag»);


Արժեքների աղյուսակի համար օգտագործում ենք FillValues() մեթոդը։ Առաջին պարամետրը լրացման արժեքն է: Երկրորդ պարամետրը լրացված սյունակի անունն է:

12. Ինչպե՞ս լրացնել «TableRecipient» արժեքների աղյուսակը «SourceTable» արժեքների աղյուսակի տվյալներով:

Եթե ​​ստացողի աղյուսակը գործողության պահին դեռ գոյություն չունի, կամ ձեզ հարկավոր չէ պահպանել դրա նախորդ սյունակները, կարող եք այն ստեղծել որպես ամբողջական պատճենըսկզբնական

TableReceiver = TableOriginal.Copy();


Տարբերակ երկու. աղյուսակ TableReceiver-ը գոյություն ունի, և ցավալի է կորցնել դրա սյունակները և սյունակների տվյալների տեսակների սահմանափակումները: Բայց դուք պետք է լրացնեք այն սյունակների տվյալները, որոնց անունները համընկնում են սկզբնաղբյուր աղյուսակի անունների հետ:

Տվյալների մասնակի փոխանցում համապատասխան անուններով սյունակների համար.

SourceTable-ի յուրաքանչյուր տողի համար SourceTable Loop-ից
FillPropertyValues ​​(NewString, SourceTableString);
End Cycle


Աղբյուրի աղյուսակի յուրաքանչյուր տողի համար նոր տող է ավելացվում նպատակակետ աղյուսակում և այդ սյունակների արժեքները լրացվում են նոր սեղան, որոնց անունները համընկնում են սկզբնաղբյուր աղյուսակի սյունակների անունների հետ

Եթե ​​աղյուսակները չունեն նույն անունով սյունակներ, ապա նպատակակետ աղյուսակը կավարտվի նույնքան տողերով, որոնք զրոյական արժեքներ ունեին, որքան տողեր կային սկզբնաղբյուր աղյուսակում:
Եթե ​​նույն անունով որոշ սյունակների համար սկզբնաղբյուր աղյուսակից տվյալների արժեքի տեսակը չի մտնում նպատակակետ աղյուսակի սյունակի թույլատրելի տեսակների զանգվածի մեջ, ապա այդպիսի դաշտերում մենք դատարկ արժեքներ կստանանք:
Դիտարկենք երրորդ դեպքը. Նույն անունով սյունակների դեպքում նպատակակետ աղյուսակի սյունակը պետք է լիովին համապատասխանի սկզբնաղբյուր աղյուսակի սյունակին:

Տվյալների ամբողջական պատճենը համապատասխան անուններով սյունակների համար

SimilarColumns = New Array();

SourceTable.Columns Loop-ից յուրաքանչյուր սյունակի համար
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

Եթե ​​MatchedColumn<>Չսահմանված Հետո

// Ստացեք սյունակի հատկությունները:
Անուն = Column.Name;
ValueType = Column.ValueType;
Title = 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;

End Cycle;

// Անցեք սկզբնաղբյուր աղյուսակի տողերի միջով:
SourceTable-ի յուրաքանչյուր տողի համար SourceTable Loop-ից

// Նոր տող ավելացրեք նպատակակետ աղյուսակում:
NewString = TableReceiver.Add();

// Լրացրեք արժեքները համապատասխան բջիջներում:
Նույն Անվան Սյունակների յուրաքանչյուր Անվան Սյունակների Համար
NewString[ColumnName] = SourceTableString[ColumnName];

End Cycle;

End Cycle;


Մենք պետք է փոխարինենք նպատակակետ աղյուսակի սյունակը նորով, որի հատկությունները լիովին կհամապատասխանեն սկզբնաղբյուր աղյուսակի սյունակին:
Հետևաբար, եթե ստացողի աղյուսակում գտնվի նույնանուն սյունակ, մենք փոփոխականներում հավաքում ենք նոր սյունակի բոլոր հատկությունները: Հաջորդը, ջնջեք հինը և ստեղծեք նոր սյունակ: Այնուհետև մենք շրջանցում ենք աղբյուրի աղյուսակի տողերը:
Հանգույցում մենք նոր տող ենք ավելացնում ստացողի աղյուսակում և բացում ենք հանգույց համապատասխան սյունակների զանգվածի սյունակների անունների միջոցով:
Այս ներդիր օղակի ներսում մենք լրացնում ենք ստացողի աղյուսակի բջիջները սկզբնաղբյուր աղյուսակի բջիջի տվյալներով։

13. Ինչպե՞ս սյունակներ ավելացնել «Արժեքների աղյուսակ» արժեքների աղյուսակում՝ տիպային սահմանափակումներով:

Սյունակ ավելացնելիս կարող եք պարզապես նշել դրա անունը և չդիպչել Add() մեթոդի երկրորդ պարամետրին։ Այս դեպքում սյունակի տվյալների տեսակը կամայական է:

Սյունակի ավելացում՝ առանց տվյալների տեսակը նշելու

// Ավելացնել սյունակ առանց տեսակի սահմանափակումների:
ValueTable.Columns.Add(«Օբյեկտ»);


Դուք կարող եք լրացնել երկրորդ պարամետրի արժեքը: Այնտեղ անհրաժեշտ է փոխանցել սյունակի համար թույլատրված տեսակի նկարագրությունը։ Նկարագրությունն ինքնին կարելի է ստանալ կոնստրուկտորի միջոցով՝ որպես պարամետր փոխանցելով տիպի տողի անունը (եթե կան շատ տեսակներ, ապա բաժանվում են ստորակետերով) կամ վավեր տիպերի զանգված։

Տվյալների տեսակը նշելով սյունակի ավելացում

// Սահմանափակումներ սյունակի տվյալների տեսակների վրա.
// Միայն «Կապալառուներ» գրացուցակի տարրեր:
ValueTable.Columns.Add("Account", New TypeDescription("ReferenceReference.Accounts"));


Եթե ​​սյունակի տվյալները լրացնելու համար թույլատրված տեսակների մեջ կա տող, կարող եք սահմանափակել դրա բիթերի խորությունը (երկարությունը), նշել փոփոխական կամ ֆիքսված երկարության օգտագործումը: Այս ամենը տրամադրվում է StringQualifiers կոնստրուկտորի միջոցով օբյեկտ ստեղծելով։ Ավելին, այս օբյեկտը կօգտագործվի որպես TypeDescription կոնստրուկտորի պարամետրերից մեկը:

Օգտագործելով որակիչներ՝ արժեքների աղյուսակի սյունակի տվյալների տեսակը նշելու համար

// Պատրաստել և սահմանել սահմանափակումներ String տեսակի տվյալների համար:
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("Note", ExtendedAllowedTypes);

Որոնեք 1C արժեքների աղյուսակում

Ինչ մեթոդներ կան և ինչպես որոնել մի քանի արժեքներ միաժամանակ:

Արժեքների աղյուսակը որոնելու երկու հատուկ մեթոդ կա.

1. Գտեք

TVHorizon = Directories.Nomenclature.FindBy Name("Horizon TV");
FoundString = TZNomenclature.Find(TVHorizon);
//կարող ենք նաև նշել, թե որ սյունակներում փնտրել որոնումն արագացնելու համար
FoundString = TKNomenclature.Find(TVHorizon, «Nomenclature»);

Այս մեթոդը վերադարձնում է առաջին հայտնաբերված տողը ձեր փնտրած արժեքով կամ Undefined, եթե այն չի գտնում: Ուստի հարմար է օգտագործել այն եզակի արժեքներ որոնելու համար, քանի որ հակառակ դեպքում արժեք գտնելիս պետք է այն ջնջեք աղյուսակից՝ հաջորդը գտնելու համար։

Չտառապելու համար գոյություն ունի հետևյալ մեթոդը, որը թույլ է տալիս գտնել համապատասխան տողերի զանգված.

2. Գտնել լարերը


Ընտրություն Structure.Insert("Nomenclature", TVHorizon); // նախ նշում ենք սյունակը, որտեղ փնտրել, իսկ հետո ինչ փնտրել։

Այս մեթոդը միշտ վերադարձնում է զանգված, բայց այն կարող է դատարկ լինել, եթե ոչինչ չգտնվի: Եվ այս մեթոդը, ինչպես նախորդը, վերադարձնում է արժեքների աղյուսակի տողերն իրենք, և ոչ թե իրենց արժեքները առանձին զանգվածում: Հետևաբար, փոխելով արժեքները զանգվածի տողում կամ, ինչպես նախորդ մեթոդով, գտնված տողի համար, դուք կփոխեք արժեքը մշակված արժեքների աղյուսակում:

Ուրիշ ինչ լավ է այս մեթոդի համար այն է, որ այն կարող է միանգամից որոնել արժեքների աղյուսակի մի քանի սյունակներ.


SelectionStructure = Նոր կառուցվածք;
Ընտրություն Structure.Insert("Nomenclature", TVHorizon);
Ընտրություն Structure.Insert("Quantity", 10);
FoundStringArray = TKNomenclature.FindStrings(SelectionStructure);

Միակ բացասականը, ինչպես տեսնում եք, դուք չեք կարող օգտագործել համեմատության այլ տեսակներ, բացի «հավասարից».