1s 8.3 құрылымы мәндер кестесіне

Ақша мен тауарларды есепке алу үшін бизнесте әртүрлі кестелер кеңінен қолданылады. Әрбір дерлік құжат кесте болып табылады.

Бір кестеде қоймадан жөнелтілетін тауарлардың тізімі берілген. Басқа кестеде осы тауарларды төлеу бойынша міндеттемелер көрсетілген.

Сондықтан 1С-де кестелермен жұмыс маңызды орын алады.

1С-дегі кестелер «кестелік бөліктер» деп те аталады. Анықтамалар, құжаттар және басқалары бар.

Сұрау орындалған кезде екі түрлі жолмен қол жеткізуге болатын кестені қайтарады.

Біріншісі - жылдамырақ - таңдау, одан жолдарды алу тек тәртіппен мүмкін. Екіншісі - сұрау нәтижесін мәндер кестесіне жүктеп салу, содан кейін оған кездейсоқ қол жеткізу.

//1-нұсқа – сұрау нәтижелеріне ретті қол жеткізу

//үстелді алыңыз
Таңдау = Query.Run().Select();
// сұрау нәтижесінің барлық жолдарын ретімен өтеміз
While Select.Next() циклі
Есеп (Таңдау.Аты);
EndCycle;

//2-нұсқа – мәндер кестесіне жүктеп салу
Сұраныс = Жаңа сұраныс («Каталогтан атауды таңдау. Номенклатура»);
//үстелді алыңыз
Кесте = Query.Run().Unload().
// әрі қарай біз барлық жолдар арқылы қайталай аламыз
Кесте цикліндегі әрбір жол үшін
Report(String.Name);
EndCycle;
//немесе жолдарға еркін қол жеткізу
Жол = Кесте.Табу("Күрек", "Аты");

Маңызды ерекшелігі - сұрау нәтижесінен алынған кестеде барлық бағандар қатаң түрде теріледі. Бұл «Номенклатура» каталогынан «Аты» өрісін сұрау арқылы рұқсат етілген ұзындығы N таңбадан аспайтын Жол түріндегі бағанды ​​алатыныңызды білдіреді.

Пішіндегі кесте (қалың клиент)

Пайдаланушы кесте пішінге орналастырылған кезде онымен жұмыс істейді.

Пішінмен жұмыс істеудің негізгі принциптерін біз сабақта және сабақта талқыладық

Сонымен, кестені пішінге орналастырайық. Ол үшін кестені Басқару тақтасынан сүйреп апаруға болады. Сол сияқты мәзірден Пішін/Кірістіру басқару элементін таңдауға болады.

Деректер конфигурацияда сақталуы мүмкін - содан кейін пішінін өңдеп жатқан конфигурация нысанының бар (бұрын қосылған) кестелік бөлігін таңдау керек.

Деректер сипатындағы «...» түймесін басыңыз. Кестелік бөліктердің тізімін көру үшін Объект тармағын кеңейту керек.

Кестелік бөлікті таңдаған кезде 1С өзі пішіндегі кестеге бағандарды қосады. Мұндай кестеге пайдаланушы енгізген жолдар анықтамалық/құжатпен бірге автоматты түрде сақталады.

Сол Деректер сипатында ерікті атауды енгізіп, Мәндер кестесі түрін таңдауға болады.

Бұл мәндердің ерікті кестесі таңдалғанын білдіреді. Ол бағандарды автоматты түрде қоспайды және автоматты түрде сақталмайды, бірақ онымен қалағаныңызды жасай аласыз.

Кестені тінтуірдің оң жақ түймешігімен басу арқылы баған қосуға болады. Бағанның қасиеттерінде оның атын (1С кодындағы анықтама үшін), пішіндегі баған тақырыбын, кестелік бөліктің атрибутымен байланысын (соңғысы - ерікті кесте таңдалмаса, бірақ кестелік бөлік).

Пішіндегі кесте сипаттарында пайдаланушының жолдарды қосу/жою мүмкіндігін көрсетуге болады. Неғұрлым жетілдірілген пішін - Тек қарау құсбелгісі. Бұл сипаттарды өңдеуге емес, ақпаратты көрсетуге арналған кестелерді ұйымдастыру үшін қолдануға ыңғайлы.

Кестені басқару үшін пішінде пәрмендер тақтасын көрсету керек. Пішін/Кірістіру басқару/Пәрмен жолағы мәзір элементін таңдаңыз.

Панельдегі түймелер автоматты түрде пайда болуы үшін пәрмен жолағы сипаттарында Автотолтыру құсбелгісін қойыңыз.

Пішіндегі кесте (жұқа/басқарылатын клиент)

Басқарылатын пішінде бұл әрекеттер сәл басқаша көрінеді. Пішінге кестелік бөлікті орналастыру қажет болса, Объект тармағын кеңейтіп, кестелік бөліктердің бірін солға қарай сүйреңіз. Болды!

Мәндер кестесін орналастыру қажет болса, жаңа пішін төлсипатын қосыңыз және оның сипаттарында мәндер кестесінің түрін көрсетіңіз.

Бағандарды қосу үшін осы пішін төлсипатында тінтуірдің оң жақ түймешігі мәзірін пайдаланыңыз, Төлсипат бағанын қосу опциясын таңдаңыз.

Содан кейін кестені солға қарай сүйреңіз.

Кестеде пәрмен жолағы болуы үшін кесте сипаттарында Қолдану – Пәрмен жолағы орны бөлімінде мәндерді таңдаңыз.

Кестені Excel бағдарламасына жүктеп салу

Пішінде орналасқан кез келген 1С кестесін басып шығаруға немесе Excel бағдарламасына жүктеуге болады.

Ол үшін кестедегі бос орынды тінтуірдің оң жақ түймешігімен басып, Тізім опциясын таңдаңыз.

Басқарылатын (жұқа) клиентте ұқсас әрекеттерді Барлық әрекеттер/Тізімді көрсету мәзір элементі арқылы орындауға болады.

Барлық infostart оқырмандарына сәлем. Бұл мақала бағдарламалы түрде басқарылатын қосымшаның пішінінде еркін мәндер кестесін құру мәселесіне арналады.

Тапсырманың ерекшеліктері.

Кәдімгі қолданбада бағдарламалаған кез келген адам пішіндегі мәндердің ерікті кестесін алу міндетіне жиі тап болды. Мәндердің ерікті кестесі - бұл бағандардың саны мен түрі алдын ала белгісіз кесте. Яғни, 3 баған немесе мүмкін 6 немесе 8 болуы мүмкін. Қалыпты қолданбада бәрі қарапайым: өңдеу пішініне «Мәндер кестесі» элементін орналастырып, содан кейін жасалған мәндер кестесін тасымалдауға болады. бұл элементке бағдарламалы түрде. Содан кейін қарапайым пәрменмен:

Form Elements.TableField.CreateColumns();

пішіндегі мәндердің дайын кестесін алыңыз. Бұл оңайырақ болуы мүмкін сияқты.

Мұның бәрі әдеттегі қолданбада болды. Басқарылатын қолданбада бәрі өзгерді. Еркін кесте құру оңай емес. Енді сіз пішіндегі мәндер кестесін қатаң түрде параметрлеуіңіз керек немесе оны бағдарламалық түрде жасауыңыз керек (сипаттаңыз, бұл шын мәнінде басқарылатын қолданбаның мәні болып табылады). Біз мұны істеуге тырысамыз: басқарылатын пішінде еркін мәндер кестесін бағдарламалық түрде жасаңыз.

Мәселенің шешімі.

Бізге бірінші кезекте кестенің пішінде қалай көрінетінін анықтау керек. Ең бастысы, өңдеу кезінде ешқандай пішін элементін жасаудың қажеті жоқ. Біз оны бүкіл кесте сияқты бағдарламалық түрде жасаймыз. Яғни, кесте пішінді ашу немесе түймені пайдалану сәтінде сипатталады және жасалады - кімге қажет екеніне байланысты.

Пішінде кестені құру атрибут ретінде мәндер кестесін сипаттау арқылы жүзеге асады:
SelectionTypeArray = Жаңа массив; SelectionType массиві.Add(Type("Мәндер кестесі")); ChoiceTypeDescription = New TypeDescription(ChoiceTypeArray); Мәліметтер массиві = Жаңа массив; Атрибуттар массиві.Қосу(Жаңа пішін атрибуттары("Кесте кестесі", SelectionType сипаттамасы, "", "TZN")); Енді біз деректерден тұратын бағдарлама мәндерінің кестесін құруымыз керек. Егер мәндер кестесі сұраудан алынса, онда бәрі азды-көпті тәртіпте болады. Егер кесте қолмен жасалса, онда сандар немесе күндер болатын бағандардың мағынасын «Түрлердің сипаттамасы» арқылы жасауға болады. Мәселе мынада, мәндер кестесіндегі бағандардың қандай да бір түрі болуы керек. Егер, мысалы, пайдаланушы осы бағандардағы деректерді интерактивті түрде толтырады деп күтілсе, онда сіз мәндер кестесінің бағанын жай атаумен қоса алмайсыз, оның түрі болуы керек. Есіңізде болсын - бұл өте маңызды, өйткені... Бұл түрлерді формадағы кестеге көшіреміз.
Біз бірнеше бағандардан тұратын кесте жасаймыз:
CD = NewDateQualifiers(DateParts.Time); ArrayKD = Жаңа массив; ArrayCD.Add(Type("Күн")); DescriptionTypesTime = New DescriptionTypes(ArrayCD,CD); TZ = Жаңа мәндер кестесі;
TK.Columns.Add("With", DescriptionTypesTime);
TK.Columns.Add("Бұрын", DescriptionTypesTime);
TK.Columns.Add("Аты");
TK.Columns.Add("Note"); // Толық аты және Ескерту - жолдар Әрі қарай біз TK бағдарламасының кестесін қажетті деректермен толтырамыз. Біз қажетті мәндерді қамтитын және жасалған пішін атрибутына көшіруге дайын TK кестесін аламыз. TK әрбір баған үшін.Бағандар циклі

Атрибуттар массиві.Қосу(Жаңа пішін төлсипаттары(Баған.Аты, Баған.Мән түрі,"Кесте кестесі"));
EndCycle;
ChangeDetails(ArrayDetails);
SelectionFieldsTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldsTable.DataPath = "Кесте кестесі";
SelectionFieldTable.Display = TableDisplay.List;

Бұл қарапайым комбинация және біздің үстел дайын.

TK әрбір баған үшін.Бағандар циклі

NewElement = Elements.Add(Column.Name, Type("FormField"), SelectionFieldTable);
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "Кесте кестесі." + Column.Name;
NewElement.Width = 10;
EndCycle;

Шартты дизайн, егер қажет болса, біз оны қолмен де жазамыз, командалық мәзір - қолмен. Кесте өңдеушілер де қолмен жазылады. Мысалы, «Таңдау» кестесіне оқиға өңдеушісін қосу үшін:

SelectionFields.SetAction кестесі("Таңдау","TZNSsection");

Бұл оқиғаны өңдеу үшін процедура түрінде жеке процедура тағайындалады:

&OnClient
TKNSelection процедурасы(TK, SelectedRow, Field, StandardProcessing)
// өңдеуші командалары EndProcedure

Кесте өңдеушілері клиентке жұмыс істейтінін ескеріңіз, сондықтан компилятор көрсеткішінің пәрмені болуы керек

&OnClient

Мен қосқым келетін соңғы нәрсе - осы қадамдардың барлығынан кейін дайын кестені пішін төлсипатына беруді ұмытпаңыз:

ValueВFormAttributes(ToR, "ScheduleTable");

Нәтижесінде бізде мыналар бар:


Міне, «Таңдау» оқиғасының өңделуі:



Кейінгі сөз.

Мақала пішінде кестелерді бағдарламалық түрде құруды бастаған 1С бағдарламашыларына көмектеседі деп үміттенемін.

Мәндер кестесін бағдарламалық түрде жасайтын және оны жеке кестелеріңізді жасауға көмектесетін түсініктемелері бар басқарылатын пішінде көрсететін өңдеуді жүктеп алуға болады.

Міне, жаңадан бастағандар үшін шағын факт – мәндер кестесімен жұмыс істеудің қарапайым мысалдары:

1. Мәндер кестесін құру

ValueTable = Жаңа мәндер кестесі;


2. Мәндер кестесі үшін бағандарды жасаңыз:

ValueTable.Columns.Add("Атау");
Value Table.Columns.Add("Тегі");


3. Баған атауларын пайдаланып жаңа жолдарды қосыңыз:


NewLine.Name = "Василий";
NewLine.LastName = "Асбақ";


4. Мәндер кестесінде мәнді іздеу жолы:
Қажетті мәнді қамтитын кесте жолын табу керек.

FoundRow = ValueTable.Find(SearchValue);


5. Мәндер кестесінің белгілі бағандарындағы бірінші ретті табыңыз

FoundRow = ValueTable.Find(SearchValue, "Жабдықтаушы, Сатып алушы");


6. Мәндер кестесіндегі барлық көріністерді табу қажет болса:
Біз іздеу құрылымын қолданамыз.

SearchStructure = Құрылым («Қызметкер», SearchValue);
FoundRows массиві = ValueTable.FindRows(SearchStructure);


Іздеу құрылымын жасайық, оның әрбір элементі кілт ретінде бағанның атын және мән ретінде осы бағандағы қажетті мәнді қамтитын болады. FindLines() әдісіне параметр ретінде Іздеу құрылымын береміз. Нәтижесінде біз кесте жолдарын аламыз.
Қажетті мәнді іздеу құрылымына іздеуді қоссаңыз, мысалы, Жауапты бағанында, онда FindLines() әдісін қолдану нәтижесінде біз Қызметкер де, Жауапты да тең болатын барлық жолдарды аламыз. ізделген мән.

7. Кездейсоқ ретпен мәндер кестесі арқылы қалай қайталауға болады

Мәндер циклінің әрбір ағымдағы жолы үшін
Есеп(CurrentRow.Name);
EndCycle;

Индекстерді пайдаланатын бірдей нәрсе:

SeniorIndex = ValueTable.Quantity() - 1;
Есептік жазба үшін = 0 SeniorIndex цикліне
Есеп(Кесте мәндері[Тіркелгі].Аты);
EndCycle;


8. Бар мәндер кестесі жолын жою

ValueTable.Delete(Жойылатын жол);

индексі бойынша

ValueTable.Delete(0);


9. Мәндер кестесінің бар бағанын жою

ValueTable.Columns.Delete(ColumnDeleted);


индексі бойынша

ValueTable.Columns.Delete(0);

Мәндер кестесінің «ортасынан» жолды (немесе бағанды) жою жойылғандардан «кейін» орналасқан жолдар индекстерінің бір есе азаюына әкелетінін ескеру қажет.

10. Баған атаулары айнымалыларда болса, мәндер кестесін қалай толтыруға болады?

NewRow = ValueTable.Add();
NewRow[ColumnName] = Мән;


11. Мәндер кестесінің барлық бағанасын қажетті мәнмен қалай толтыруға болады?
Мәндер кестесіндегі фискалдық есеп жалаушасы бағаны False мәнімен толтырылуы керек.

Мәндер кестесі. Мәндерді толтырыңыз (жалған, «Фискалдық есеп жалауы»);


Мәндер кестесі үшін FillValues() әдісін қолданамыз. Бірінші параметр толтырылатын мән болып табылады. Екінші параметр - толтырылатын бағанның аты.

12. «Қабылдағыш кестесі» мәндер кестесін «Сурстық кесте» мәндер кестесінің деректерімен қалай толтыруға болады?

Егер операция кезінде алушы кестесі әлі болмаса немесе оның алдыңғы бағандарын сақтау қажет болмаса, оны түпнұсқаның толық көшірмесі ретінде жасауға болады.

Қабылдаушы кестесі = Source table.Copy();


Екінші нұсқа: ReceiverTable кестесі бар және оның бағандары мен баған деректер түрлеріндегі шектеулерін жоғалту өкінішті болар еді. Бірақ атаулары бастапқы кестенің атауларына сәйкес келетін бағандар үшін деректерді толтыру керек.

Сәйкес атаулары бар бағандар үшін деректерді ішінара тасымалдау:

SourceTable циклінен бастапқы кестенің әрбір жолы үшін
FillPropertyValues(NewRow, SourceTableRow);
Циклдың соңы


Бастапқы кестенің әрбір жолы үшін қабылдау кестесіне жаңа жол қосылады және мәндер атаулары бастапқы кестедегі бағандардың атауларына сәйкес келетін жаңа кестенің бағандарында толтырылады.

Кестелерде бірдей атаулары бар бағандар болмаса, тағайындалған кесте бастапқы кестеде қанша жол болса, сонша нөл мәндері бар жолдарды қамтиды.
Егер аттас кейбір бағандар үшін бастапқы кестедегі деректер мәнінің түрі тағайындалған кестенің рұқсат етілген баған түрлерінің массивіне түспесе, біз мұндай өрістерде бос мәндерді аламыз.
Үшінші жағдайды қарастырайық. Бір аттас бағандар болған жағдайда тағайындалған кестенің бағанасы бастапқы кестенің бағанына толық сәйкес келуі керек.

Сәйкес атаулары бар бағандар үшін деректерді толық көшіру

Бірдей бағандар = Жаңа массив();

SourceTable.Columns цикліндегі әрбір баған үшін
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

Сәйкес келетін баған болса<>Анықталмаған Содан кейін

// Баған сипаттарын алу.
Name = Column.Name;
ValueType = Column.ValueType;
Тақырып = Column.Header;
Width = Column.Width;

// Тағайындалған кестедегі бағандарды ауыстырыңыз.
Index = TableReceiver.Columns.Index(MatchingColumn);

TableReceiver.Columns.Delete(Index);
ReceiverTable.Columns.Insert(индекс, атау, мән түрі, тақырып, ені);

// Жиымға сәйкес келетін бағандардың келесі атын қосыңыз.
Same Columns.Add(Column.Name);

endIf;

EndCycle;

// Бастапқы кестенің жолдары бойынша айналдыру.
SourceTable цикліндегі бастапқы кестенің әрбір жолы үшін

// Тағайындалған кестеге жаңа жолды қосыңыз.
NewRow = TableReceiver.Add();

// Сәйкес ұяшықтарға мәндерді толтырыңыз.
Әрбір атау үшін бағандар Бір атаулы бағандардан Цикл
NewRow[ColumnName] = SourceTableRow[ColumnName];

EndCycle;

EndCycle;


Біз тағайындалған кестедегі бағанды ​​жаңасымен ауыстыруымыз керек, оның қасиеттері бастапқы кестенің бағанына толығымен сәйкес келеді.
Сондықтан, егер алушы кестесінде аттас баған табылса, біз айнымалылардағы жаңа бағанның барлық қасиеттерін жинаймыз. Содан кейін ескісін жойып, жаңа баған жасаңыз. Содан кейін біз бастапқы кестенің жолдарын айналдырамыз.
Циклда біз қабылдау кестесіне жаңа жол қосамыз және сәйкес бағандар массивіндегі баған атауларының үстінен цикл ашамыз.
Осы кірістірілген цикл ішінде біз тағайындалған кестенің ұяшықтарын бастапқы кесте ұяшығының деректерімен толтырамыз.

13. «Мәндер кестесі» мәндер кестесіне түр шектеулері бар бағандарды қалай қосуға болады?

Бағанды ​​қосқанда жай ғана оның атын көрсетуге және Add() әдісінің екінші параметрін қозғамай қалдыруға болады. Бұл жағдайда баған деректерінің түрі ерікті болады.

Деректер түрін көрсетпей бағанды ​​қосу

// Бағанды ​​түрі бойынша шектеусіз қосыңыз.
ValueTable.Columns.Add("Объект");


Екінші параметрдің мәнін толтыруға болады. Онда бағанға рұқсат етілген түрдің сипаттамасын беру керек. Сипаттаманың өзін конструктор арқылы алуға болады, оған параметр ретінде түрдің жол атын (егер көп түрлер болса, үтірмен бөлінген) немесе жарамды типтер массивін береді.

Деректер түрін көрсететін бағанды ​​қосу

// Баған деректерінің түрлеріне шектеулер:
// Тек «Контрагенттер» каталогының элементтері.
Cable of Values.Columns.Add("Тіркелгі", Түрлердің жаңа сипаттамасы("DirectoryLink.Accounts"));


Баған деректерін толтыруға рұқсат етілген түрлердің ішінде жол болса, оның разрядтық тереңдігін (ұзындығын) шектей аласыз, айнымалы немесе тіркелген ұзындықты пайдалануды көрсетіңіз. Осының барлығына String Qualifiers конструкторы арқылы объект құру арқылы қол жеткізіледі. Содан кейін бұл нысан TypeDescription конструкторының параметрлерінің бірі ретінде пайдаланылады.

Мәндер кестесі бағанының деректер түрін көрсету үшін жіктеуіштерді пайдалану

// Жол типінің деректері үшін шектеулерді дайындаңыз және орнатыңыз.
Жолдық сараптауыштар = Жаңа жол квалификациялары(20, AllowedLength.Variable);
ValidTypes = NewTypeDescription("String", StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Ұқсас әрекеттер сандар мен күн квалификацияларына қатысты орындалуы мүмкін.
Назар аударыңыз: типтің сипаттамаларын конструктор «нөлден» құрастыра алады немесе негіз ретінде бұрыннан бар түр сипаттамасын пайдалануға болады.

Мәндер кестесі бағанының деректер түрін көрсету үшін бар түр мәлімдемелерін пайдалану

// Бұрын қолданылған тип сипаттамасының кеңейтімі.
QualifiersNumbers = New QualifiersNumbers(10, 2, ValidSign.Non-negative);
DateQualifiers = Жаңа DateQualifiers(DateParts.Date);
Extended ValidTypes = New TypeDescription(ValidTypes, "Number, Date", Сандардың біліктіліктері, Date Qualifiers);

ValueTable.Columns.Add("Ескертпе", ExtendedAcceptableTypes);

Мәндер кестесін іздеудің екі арнайы әдісі бар:

1. Табыңыз

TVHorizon = Directories.Nomenclature.FindByName("TVHorizon");
FoundString = TZNomenclature.Find(TVHorizon);
//іздеуді жылдамдату үшін қай бағандарда іздеу керектігін де көрсете аламыз
FoundString = TZNomenclature.Find(TVHorizon, "Номенклатура");

Бұл әдіс қажетті мәнмен табылған бірінші жолды немесе оны таппаса, Анықталмағанды ​​қайтарады. Сондықтан оны бірегей мәндерді іздеу үшін пайдалану ыңғайлы, өйткені әйтпесе, мән табылғанда, келесісін табу үшін оны кестеден алып тастау керек болады.

Бұл қиындықты болдырмау үшін сәйкес жолдар массивін табуға мүмкіндік беретін келесі әдіс бар:

2. FindStrings


Selection Structure.Insert("Номенклатура", TVHorizon); // алдымен қайда іздеу керектігін, содан кейін нені іздеу керектігін көрсетіңіз.

Бұл әдіс әрқашан массивді қайтарады, бірақ ештеңе табылмаса, ол бос болуы мүмкін. Және бұл әдіс, алдыңғы сияқты, мәндердің өзін емес, жеке массивтегі мәндер кестесінің жолдарын қайтарады. Сондықтан, массив жолындағы мәндерді өзгерту арқылы немесе алдыңғы әдістегідей, табылған жол үшін өңделген мәндер кестесіндегі мәнді өзгертесіз.

Бұл әдістің тағы бір жақсы жағы - ол бір уақытта мәндер кестесінің бірнеше бағандарын іздей алады:


SelectionStructure = Жаңа құрылым;
Selection Structure.Insert("Номенклатура", TVHorizon);
Selection Structure.Insert("Саны", 10);
FoundArray of Rows = TZNomenclature.FindLines(SelectionStructure);

Жалғыз теріс, өзіңіз көріп отырғандай, сіз «тең» дегеннен басқа салыстырудың басқа түрлерін пайдалана алмайсыз.