1c мәндер тізімінен элементті табыңыз. Әмбебап коллекция құрылымы

Бұл мақала не туралы?

Бұл мақала «1С дамытудағы алғашқы қадамдар» мақалалар сериясын жалғастырады. Ол әмбебап жинақтармен жұмыс істеу принциптерін қамтиды. Мақаланы оқығаннан кейін сіз мыналарды білесіз:

  • Әмбебап жинақтар дегеніміз не және олар қашан және қандай жағдайларда қолданылуы керек?
  • Барлық әмбебап жинақтардың ортақтығы неде? Олардың барлығымен жұмыс істеу үшін қандай әдістерді қолдануға болады?
  • Массив дегеніміз не, оны қалай және қашан пайдалану керек? Оның қандай әдістері бар?
  • Неліктен құрылымды пайдалану керек? Оның массивтен айырмашылығы неде?
  • Мәндер тізімін қашан пайдалану керек? Оны пішінде қалай көрсетуге болады?
  • Сәйкестік – бұл не және оны қашан пайдалану керек? Құрылымға қатысты қандай артықшылықтар бар?
  • Мәндер кестесі не үшін қолданылады? Оның құрылымын қалай сипаттауға болады? Жолдарды қалай қосуға/жоюға болады? Оны пішінде қалай көрсетуге болады?
  • Құндылықтар ағашы - ол не үшін қолданылады? Пішінді қалай толтыру және көрсету керек? Онымен қалай жұмыс істеу керек?

Қолдану мүмкіндігі

Мақалада ағымдағы басылымның 1C: Enterprise 8.3 платформасы талқыланады.

1С жүйесінде әмбебап жинақтармен қалай жұмыс істеуге болады

Мәндер жинағы әдетте элементтердің кез келген санын қамтуы мүмкін контейнер. Дегенмен, деректер түріне қатысты қатаң шектеулер жиі болмайды.

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

Жинақтардың дерекқорда сақталмайтынын түсіну маңызды (біз деректердің кез келген түрін дерлік сақтай алатын Value Store деректер түрі туралы айтпаймыз).

Бар әртүрлі түрлеріәмбебап жинақтар: массив, құрылым, сәйкестік, тұрақты массив, мәндер кестесі, Кестелік бөлікжәне т.б. Бірақ барлық жинақтардың мінез-құлқы ұқсас.

Коллекция функцияның жұмысының нәтижесінде жасалуы мүмкін (функция әмбебап жиынды мән ретінде қайтарады).

Конструкторды шақыру және сынып данасын жасау арқылы жаңа жинақты қолмен алуға болады.

Мысалы: OurArray = Жаңа массив;

Көптеген жалпы жинақтардың конструкторлары параметрленген.

Сонымен, конструкторда Мүшелер санын сәйкес өлшемдерде көрсетуге болады. Анау. бірден көпөлшемді деп жариялауға болады .

Конструктордың сәйкес сипаттамасы синтаксистік көмекшіде.

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

Бірақ параметрлер міндетті емес; әзірлеуші ​​оларды орната алмайды және Массив әрекетін әрі қарай өзі қалағандай анықтай алмайды.

Кез келген дерлік әмбебап коллекцияны конструктор көмегімен жасауға болады (ерекшелік - конфигурация объектілері ретінде әрекет ететін кесте бөліктері).

Әмбебап жинақтар үшін индекс және сан сияқты жалпы ұғымдар бар. Жинақтың әрбір элементінің индексі бар. Бұл жағдайда индекс нөлден басталады.

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

Мысалы, Біздің массив. Бұл жағдайда жүйе 3 индексі бар Массив элементін қайтаратынын және ретімен бұл массивтің төртінші элементі екенін ескеріңіз.

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

Жол нөмірі ұғымы барлық жинақтарда жоқ, бірақ негізінен пайдаланушы интерфейсінде көрсетілуі мүмкін жинақтарда.

Барлық жинақтар коллекция элементінің өтуін пайдаланады. Айналып өту екі жолмен мүмкін: цикл үшінЖәне цикл Әрқайсысы үшін.

Көптеген жалпы жинақтар үшін қолданылатын әдістер: Санау, Индекс, Қосу, Кірістіру, Жою және Табу.

Санау – жинақтағы элементтер санын қайтаратын функция. Оны цикл алдында қолдануға болады Үшін, суретте көрсетілгендей.

Index әдісі барлық жинақтар үшін жоқ, бірақ элементтеріне сілтеме жасауға болатындар үшін ғана. Мысалы Мәндер кестесі.

Мәндер кестесі– бұл жолдардың белгілі бір жинағы; жолдарда мәндердің әртүрлі түрлері бар әртүрлі бағандар болуы мүмкін.

Әрбір жол тәуелсіз нысанды білдіреді. Сіз оған сілтеме ала аласыз, осы жол арқылы сіз осы жолдағы бағандардың мәндеріне қол жеткізе аласыз.

Index әдісі берілген жолға қай индекс сәйкес келетінін анықтауға мүмкіндік береді (яғни кестедегі жолдың ағымдағы орны). Индекс мәндері нөлден басталады.

Кез келген дерлік әмбебап жинақта берілген жинаққа жаңа мәндерді қосу әдістері бар. Суретте массивті 0-ден 10-ға дейінгі мәндермен екі жолмен толтыру жолы көрсетілген.

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

Жинаққа мән қосуға мүмкіндік беретін тағы бір әдіс Кірістіру. Бұл әдіспен ерекшеленеді қосуонда қосылған элементті қайда кірістіру керектігін көрсетуге болады.

Синтаксис: (,) енгізу

Бірінші параметр жаңа мән кірістірілетін индексті көрсетеді. Анау. мысалы, әрбір мән тізімнің басына енгізілуі керек екенін көрсетуге болады (жоғарыдағы суреттегі екінші әдіс).

Топтамадан элементтерді жою үшін әдісті пайдаланыңыз Жою. Delete әдісі индекс бойынша қай элементті жоятынымызды анықтайды.

Синтаксис: Жою()
Қолдану мысалы: OurArray.Delete(5);

Айта кету керек, жолдар тәуелсіз нысанды білдіретін жинақтар үшін (мысалы, үшін Мәндер кестелері), біз де осы жолды кейінірек жою үшін индексті алу әдісін пайдалана аламыз.

Барлық дерлік жинақтарда мәнді іздеу әдісі бар - Табу. Біз тапқымыз келетін мән әдіске беріледі. Кейбір жинақтар кейбір шектеулерді орнатуға мүмкіндік береді.

Мысалы, в Мәндер кестесііздеу керек жолдар мен бағандарды көрсетуге болады.

Мән табылса, бұл әдіс индексті немесе көрсетілген жолды қайтарады. Мән табылмаса, түрдің мәні қайтарылады Белгісіз. Массивке қатысты қайтарады Индекс, немесе мән Белгісіз.

Қолдану мысалы: OurVariable = OurArray.Find(8);

Әмбебап жинақтарды өте жылдам тазалауға болады, яғни. барлық элементтерді толығымен алып тастаңыз. Осы мақсатта әдіс қолданылады Таза(), ол массив элементтерін, жолдарды жояды Мәндер кестелері, немесе басқа жинақтардағы деректер.

Массив үшін қосымша әдістер

Әдіс BBorder()элементтердің санын бір минус қайтарады. Анау. егер біз циклды қолдансақ Үшін, онда Саны әдісінің орнына бірден әдісті қолдануға болады Шекара().

Атап айтқанда, QuantityInArray айнымалысы басқаша анықталуы мүмкін:

QuantityInArray = OurArray.InBorder();
Содан кейін, циклдің өзін сипаттағанда, бұл айнымалыны алып тастауға болмайды.

Set әдісі Array элементіне индекс бойынша мән тағайындауға мүмкіндік береді.

Синтаксис: Орнату(,)

Мысалы: OurArray.Set(2,8);

Балама нұсқа: OurArray = 8;

Массив үшін әдісті қолдануға болады Алу, шаршы жақшаларды қолданбай индекстегі мәнді оқу үшін.

Синтаксис: Get()

Мысалы: OurVariable = OurArray.Get(2);

Балама нұсқа: OurVariable = OurArray;

Әмбебап коллекция құрылымы

Құрылымда массив сияқты элементтердің шектеусіз саны болуы мүмкін, бірақ элементтің мазмұны массивтен ерекшеленеді.

Құрылым - жиынтық, оның әрбір мәні жұптан тұрады. Жұптың бірінші элементі деп аталады Кілт. Жұптың екінші элементі Мағынасы.

Кілтмәнді сипаттайтын қатаң жолды деректер түрі болып табылады. Мысалы, Кілтке«Код» 113 мәніне сәйкес келуі мүмкін; Кілтке«Аты» «Вася» дегенді білдіреді. Мәннің өзі деректер түріне шектеуге бағынбайды.

Құрылымды пайдалану өте ыңғайлы, егер біз параметрлердің белгілі бір тізімін жасағымыз келсе. Егер бұл Құрылымшақырды Біздің құрылым, содан кейін біз оның екі мәніне келесідей сілтеме жасаймыз: OurStructure.Code және OurStructure.Name.

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

Құрылым бағдарлама кодын оқылатын (түсінікті) етеді. Құрылым массивке қарағанда жиі пайдаланылады.

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

Сонымен қатар, егер процедура мен функцияда берілген параметрлердің көп саны болса, Құрылым пайдаланылады.

Содан кейін барлық параметрлерді Құрылымға жазып, оны беру әлдеқайда ыңғайлы. Анау. процедуралар мен функциялардың параметрлері «оралған».

ретінде бөлек атап өту керек КілтҚұрылымда мүлдем кез келген жол пайда болмайды. Белгілі бір шектеулер қолданылады.

Кілтидентификатор қызметін атқаруы керек. Бұл дегеніміз, в Ключебос орындар болмауы керек және ол саннан басталуы мүмкін емес.

Қолайлы бастау Кілтәріппен немесе астын сызу арқылы. Осылайша, Кілтидентификаторларды құру талаптарын қанағаттандыруы керек.

Құрылымның массивтен қандай айырмашылығы бар екенін атап өтейік. Құрылымда әдіс бар Кірістіру, массивке енгізудің екі әдісі бар: Кірістіру(белгілі бір позицияға) және қосу(тізімнің соңына дейін). Массивте барлық элементтер реттелген.

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

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

Құрылым элементтеріне тек Кілт аты арқылы қол жеткізіледі. Дегенмен, For Every циклі Құрылым үшін де жұмыс істейді, бірақ сіз Құрылым элементтерінің ретіне сенбеуіңіз керек.

Құрылым Құрылым деректер түрін көрсете отырып, Жаңа конструкторды пайдалану арқылы басқа жалпы жинақтар сияқты жасалады.

Массив сияқты, құрылымның конструкторында параметрлер болуы мүмкін. Анау. конструктордың көмегімен Құрылымның мазмұнын сипаттауға болады.

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

Мысалы: OurStructure = Жаңа құрылым («Код, Атау», 133, «Вася»);

Үтірмен бөлінген, алдымен Кілттердің атаулары тізімделеді, содан кейін сәйкес реттілікпен параметрлердің мәндері көрсетіледі.

Құрылымға жаңа мән қосу әдісі бар Кірістіру, ол жаңа жұпты енгізеді (Кілт және Мән).

Мысалы: OurStructure.Insert («Отбасы мүшелері»,3);

Құрылым жиі қолданылатын басқа әдіспен сипатталады. Бұл әдіс Меншік.

Бұл әдісті қолдана отырып, сіз осы Құрылымда Кілттің осындай және осындай атауы бар элементтің бар-жоғын түсінуге болады.

Егер мұндай элемент бар болса, жүйе True мәнін қайтарады, әйтпесе – False.

Мысалы, өрнек OurStructure.Property («Отбасы мүшелері») True мәніне тең болады. Бұл әдіс Құрылымды талдау кезінде жиі қолданылады.

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

Мысалы: Есеп(Біздің құрылым[“Отбасы мүшелері”]);

Дегенмен, Құрылым нысандардың реттелмеген жиыны екенін ұмытпауымыз керек, сондықтан 0, 1, 2 индексі бойынша қол жеткізу мүмкін емес.

Жалпы жинақ Мәндер тізімі

ListValuesкез келген деректер түрінің элементтерінің сызықтық тізімі болып табылады.

Әрбір элемент бірнеше мәндерден тұрады. Схемалық түрде мәндер тізімі төрт бағанды ​​тізім ретінде ұсынылуы мүмкін.

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

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

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

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

ListValues– бұл пайдаланушы көрнекі түрде жұмыс істей алатын нысан. Анау. ListValuesпішінде көрсетуге болады.

Пайдаланушы онымен кейбір әрекеттерді орындай алады. Бұдан басқа, ListValuesәдістерді пайдалана отырып, өз бетінше қорытынды жасауға болады, яғни. экранда алгоритмнің кейбір тармағында (сервер кодын қоспағанда) көрсету, осылайша пайдаланушы кейбір жолды таңдайды немесе кейбір ұяшықтарды белгілейді.

Біз табамыз ListValues sitaks көмекшісінде. Конструктор ListValuesпараметрленбеген (ешбір әдепкі мәндерді орнату мүмкін емес).

сияқты әдістер бар:

  • Insert(,) ;
  • Add(,);
  • Саны();
  • Индекс().

Сондай-ақ арнайы әдістер бар, мысалы, UnloadValues(). Бұл мәндер тізімі көшірілетін массив жасайды. Мысалы:

Элементтер массиві = PriceTypes.OutloadValues();

Сондай-ақ кері әдіс бар:
ListPriceTypes.LoadValues(ArrayItems);

Іздеу әдістері бар:
FindByValue(); FindByIdentifier().

Көшіру әдісі бар:
ListCopy = PriceTypeList.Copy();
Бұл әдіскөшірмеге қандай да бір өзгертулер енгізуге арналған.

Әдістері бар:
SortByValue();
SortByView().

Әдістері SelectItem(,)Және Белгілер()Пайдаланушы терезені жапқанша алгоритмнің орындалуын тоқтататын модальды диалогтық терезені шақырыңыз.

Бұл әдістерді конфигурация сипаттарында қолдану Модальды пайдалану режимідеп орнату керек Қолдану.

Басқарылатын қолданба модулінен шақырылған мысал код:

Бұл кодты пайдаланушы режимінде көрсетіңіз (модальды диалог).

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

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

Пайдаланушы режимінде өңдеу пішініндегі «Сыйлықтарды толтыру» түймесін басқан кезде толтырылған тізім пайда болады.

Қажет болса, тізімді өңдеуге болады: кейбір элементтерді қосуға, кейбіреулерін жоюға болады.

Жан-жақты жинақ сәйкестігі

Бұл жинақ өте ұқсас Құрылым. Құрылым сияқты, салыстырулар - бұл кілт пен мәннің өзінен тұратын мәндер жиыны.

Негізгі айырмашылығы - кез келген деректер түрін Кілт ретінде де, мән үшін де көрсетуге болады. Осы мүмкіндікті ескере отырып, сәйкестік мәніне индекс бойынша қол жеткізу қажет, негізгі мән индекс мәні ретінде көрсетіледі.

Кілт жолдан басқа деректер түрі болуы мүмкін. Compliance-пен жұмыс істеудің қасиеттері мен әдістері Құрылыммен бірдей дерлік.

Сәйкестік конструкторында Құрылымға қарағанда, параметрлерді көрсету мүмкіндігі жоқ.

Қолдану мысалы:

Корреспонденция кез келген екі құрылымды қосу қажет болғанда қолдануға ыңғайлы. Мысалы, кестелік бөлімдегі әрбір жол мәндер кестесіндегі жолмен сәйкес келуі керек.
Бұл жағдайда Match пернесі ретінде кесте бөлімінің жолы пайдаланылады және сәйкес мән көрсетіледі.

Жинаққа элементтерді кірістіру кезінде әдіске қосымша Match Кірістіру(,)Мәнді енгізудің тағы бір жолы - кәдімгі тағайындау операторын пайдалану.

Мысалы: OurMatch = NewMatch;
Сәйкестік = 999;

Анау. егер элемент жинақта болмаса, онда ол тағайындау операторы арқылы қосылады, ал егер ол бар болса, ол жаңартылады.

Бұл Құрылымға қарама-қайшы.

Әмбебап коллекциялық құндылықтар кестесі

Мәндер кестесіжолдардың ерікті саны мен бағандарының ерікті саны бар кесте болып табылады. Қиылысу кез келген деректер түрінің мәндерін сақтай алады. Қажет болса, бағандарды теруге болады, яғни қай бағанда деректердің қандай түрі сақталатынын анықтауға болады.

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

Айырмашылықтар Мәндер кестелеріекі өлшемді массивтен:

  • бұл пайдаланушы жұмыс істей алатын нысан (экранда мәндер кестесін көрсетуге болады, пайдаланушы оны толтыра алады, содан кейін енгізілген деректерді оқуға болады);
  • жылдам іздеу үшін индекстерді құру;
  • клондау, бүкіл бағанды ​​белгілі бір мәнмен толтыру, барлық бағандарды массивке жүктеп салу.

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

Сонымен, Мәндер кестесіжолдар мен бағандар жиынынан тұрады. Жолдар да, бағандар да жинақтар.

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

Қолдау көрсетілетін деректер түрлері: өзі Мәндер кестесі, ол жолдардан тұрады. Әрбір жол деректер түрімен ұсынылған RowTableValues, оның өзіндік қасиеттері мен өзіндік әдістері бар. Қол жетімді Кесте бағандарының мәндерінің жинағыбелгілі бір қасиеттері де бар.

Маңызды нүкте! Құратын процедура Мәндер кестесі, &OnServer компиляциясы қажет.

Жұмысты бастамас бұрын Мәндер кестесі, онда қандай бағандар болатынын анықтау керек (яғни, оларды жасау). Синтаксис:

Қосу(,)
(міндетті емес)
Түрі: жол.
(міндетті емес)
Түрі: СипаттамаТүрлері
(міндетті емес)
Түрі: жол.
(міндетті емес)
Түрі: Сан.

Мысалы:

Бұл процедураны шақыру үшін біз пәрменді қолданамыз.

Сипаттамада Мәндер кестелеріколлекцияның элементтері дәл RowsTableValues.

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

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

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

Толтыру үшін Мәндер кестелеріКелесі әдістерді қолдануға болады:

Таза()– барлық жолдарды жою үшін Мәндер кестелері.

FillValues(,)– барлық бағандарды немесе таңдалған бағандарды бір мәнмен толтыруға мүмкіндік береді.
LoadColumn(,)– массивтен бағанды ​​жүктейді.
UnloadColumn()– бағанды ​​массивке түсіреді.

Соңғы екі әдіс бағанды ​​бір мәндер кестесінен екіншісіне ауыстыру қажет болғанда қолдануға ыңғайлы.

Көшіру(,)– бар кесте негізінде жаңасын жасауға мүмкіндік береді Мәндер кестесі, және барлық жолдар мен барлық бағандар емес, тек кейбіреулері. Қайтару мәні – Мәндер кестесі.

Құрылымды көшіруге болады Мәндер кестелері. Бұл үшін сәйкес әдіс бар Columns(). Біз бос біреуін аламыз Мәндер кестесіқажетті құрылыммен.

IN Мәндер кестесіәдісі бар Барлығы(). Сандық мәндерді қосқыңыз келетін бағанды ​​көрсетуге болады. Кестеде бұрын көрсетілген кодқа қатысты мәнді есептеуге болады: ТК.Барлығы («Сома»).

IN Мәндер кестесіәдісті пайдалана отырып, белгілі бір бағандардың бірдей мәндері бойынша сандық мәндерді топтастыруға (жиыру) болады Жинау(,).

Кестеде бұрын көрсетілген кодқа қатысты мәнді есептеуге болады: TK.Collapse («Апта күні», «Сома»).

Мәндер кестесібойынша көрсетуге болады пайдаланушы экраныонымен кез келген әрекеттерді орындауға болады. Бірақ айырмашылығы ListValuesБағдарлама кодынан экрандағы кестені шақыра алмайсыз.

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

Осыдан кейін алынған кесте пішінде көрсетілуі керек.

Бұрын құрастырылған алгоритмнің соңындағы пішін модулінде (мәндер кестесін құру процедурасында) мыналарды қосу керек:
ValueInFormData(TK, Кесте);

Әмбебап коллекция Құндылықтар ағашы

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

Мұны экранда да көрсетуге болады. Мәндер ағашы жолдар жинағынан және бағандар жинағынан тұрады. Ағашта екі қасиет бар: Жолдар және Бағандар.

Жолдар бір-біріне бағынышты бола алатындықтан, әрбір жолдың Ата-анасы, сондай-ақ оның бағыныңқы жолдары болуы мүмкін.

Сәйкес Tree командасын және оны өңдеу процедурасын құрайық.

Құрайық онда бір негізгі жол және екі бағыныңқы қатар бар.

Пішін атрибуттарын жасайық DerZn(деректер түрі – Мәндер ағашы).

Бұл төлсипат үшін біз Жыл және Ай бағандарын жасаймыз.

Сәйкес элементті жылжытыңыз DerZnпішінде.

Соңында TreeOnServer() процедураларықосайық:

ValueInFormData(TreeZn, DerZn);

Пайдаланушы режимінде не болғанын тексерейік.

Түймені пайдалану қосужаңа жолдарды қосуға болады. Олар сондай-ақ иерархия құра алады.

Мәндер ағашының барлық элементтерін айналып өту үшін біз рекурсияны пайдалануымыз керек, яғни. процедураны өзінен шақыру. Мысалы, мән ағашын өңдеу келесідей болуы мүмкін:

Осымен әмбебап жинақтармен алғашқы танысуымыз аяқталды.

Келесі мақалада әзірлеуші ​​​​бағдарлама кодынан каталог элементіне қол жеткізуді жеңілдету үшін қандай маңызды механизмді пайдалана алатынын қарастырамыз.

Толық синтаксис (кеңейту үшін басыңыз)

ListValues

Сипаттама:

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

Коллекция элементтері: ValueListElement

Оператордың көмегімен нысан коллекцияны айналып өтуі мүмкін Әрқайсысы үшін... бастап... Цикл. Айналма жинақтың элементтерін таңдайды.

[...] операторы арқылы коллекция элементіне қол жеткізуге болады. Элементтің индексі аргумент ретінде беріледі ( 0-ден бастап нөмірлеу).

Қасиеттер:

Әдістері:

Кірістіру (индекс, мән, өкілдік, белгі, сурет) Көрсетілген индекстегі орындағы мәндер тізіміне жаңа элементті кірістіреді.SelectElement (Тақырып, Элемент) Мәндер тізіміне енгізілген элементтердің бірін интерактивті таңдау үшін терезені шақырады. Элемент- интерактивті таңдау кезінде мәндер тізімі бастапқыда орналасуы керек элемент. Егер параметр мәні енгізілген мән тізімінің элементі болмаса бұл тізім, орналастыру орын алмайды.Мәндерді түсіру()Массив жасайды және оған мәндер элементтерінің тізімінің мәндерін көшіреді.Add(Value, Representation, Label, Image)Мәндер тізімінің соңына жаңа элемент қосады.LoadValues(МассивМәндері) Өткізілген массивтің мәндері бар мәндер тізімін жүктейді. Бұл жағдайда тізімнің барлық алдыңғы элементтері жойылады.Жазбаларды толтырыңыз(Белгілеу) Мәндер тізімінің барлық элементтері үшін белгіні орнатады.Index(Element)Мәндер тізіміндегі элементтің индексін алады. Егер табылмаса, -1 қайтарылады.Count() Мәндер тізіміндегі элементтер санын алады.FindByValue(SearchValue) Мәндер тізіміндегі элемент мәнін іздейді. Ешбір элемент іздеу мәніне тең мәнді сақтамаса, мән қайтарылады Белгісіз. ID бойынша табу(Идентификатор) Идентификатор бойынша мәндер элементінің тізімін шығарады. Егер элемент табылмаса, ол қайтарылады Белгісіз. Элементтерді белгілеу(Тақырып) Мәндер тізіміндегі элементтерді орнатады немесе алып тастайды (интерактивті). Қайтарады Рас, диалогтық терезеде «OK» түймесі басылса, Өтірік- әйтпесе.Clear() Мәндер тізімін одан барлық элементтерді алып тастайды.ShowElementSelection(DescriptionNotificationsOnClosing, Title, Element) Мәндер тізіміне енгізілген элементтердің бірін интерактивті таңдау үшін терезені шақырады.Белгі элементтерін көрсету(Жабу туралы ескертулердің сипаттамасы, тақырып) Мәндер тізімінің элементтері үшін белгі күйлерін интерактивті орнатуға арналған.Get(Index)Мәнді индекс бойынша шығарады. Операторға ұқсас жұмыс істейді.Shift (Элемент, Офсет) Мәндер тізімінің элементін белгіленген позициялар саны бойынша алға немесе артқа жылжытады.Copy() Мәндер тізімінің көшірмесін жасайды.SortByValue(Бағыт) Мәндер тізімін элементтермен сақталған мәндердің өсу немесе кему реті бойынша сұрыптайды. Төмендегі мысалды қараңыз.SortByView(Бағыт) Мәндер тізімін мәндер тізіміне енгізілген элементтер көріністерінің алфавиттік ретімен өсу немесе кему ретімен сұрыптайды. Төмендегі мысалды қараңыз.Жою (элемент) Мәндер тізімінен элементті жояды, мұнда Элемент- жойылатын элементтің индексі немесе элементтің өзі.

Дизайнерлер:

Мәндердің жаңа тізімі
&OnClient процедурасының орындау коды(пәрмені) /// 1s 8.3, 8.2 мәндер тізімін қалай құруға боладыТізім = Жаңа мән тізімі; /// 1s 8.3, 8.2 мәндер тізіміне элемент қосу жолы // әдіс параметрлерін қосу:// - мағынасы // - орындау // - белгілеу (міндетті) // - сурет (міндетті)Тізім. Қосу(1980, // элемент мәні «Васяның туған жылы»// орындау); Тізім. Қосу(1985, «Юлияның туған жылы») ; // мәндер әр түрлі болуы мүмкінТізім. Қосу("Полина" , "Баланың аты" ); /// 1s 8.3, 8.2 мәндер тізіміне элементті енгізу жолы // №2 позицияға енгізу (элементтер 0-ден бастап нөмірленеді) // 2010 мәні және көрінісі бар элемент // «Олардың бірлескен қызы дүниеге келген жылы»Тізім. Кірістіру(2, 2010, «Олардың ортақ қызы дүниеге келген жылы») ; /// 1s 8.3, 8.2 мәндер тізімінің элементтерін айналып өту жолыӘрбір элемент үшін тізімнен цикл есебі( Элемент. Өкілдік + ": " + Жол(Элемент. Мән) ); EndCycle; /// 1s 8.3, 8.2 мәндер тізімін қалай тазартуға боладыТізім. Clear(); Тізім. Қосу («дүйсенбі»); Тізім. Қосу («сейсенбі»); Тізім. Қосу («Сәрсенбі»); /// Мәндер тізімінің элементтерінің санын қалай білуге ​​болады, сонымен қатар /// тізім элементін индексі бойынша 1s 8.3, 8.2 // нөлден бастап нөмірлеуИндекс үшін = 0 тізім бойынша. Quantity() - 1 Цикл есебі(Тізім[Индекс]) ; EndCycle; /// 1s 8.3, 8.2 мәні бойынша тізім элементін қалай табуға болады ValueTuesday = Тізім. FindByValue("сейсенбі"); /// 1s 8.3, 8.2-де тізімдегі элементтің индексін қалай табуға боладыЕсеп(List.Index(ValueTuesday)) ; // 1, өйткені нөмірлеу нөлден басталады /// Тізімді мәндері бойынша 1с 8.3, 8.2 сұрыптау жолы // болды: дүйсенбі, сейсенбі, сәрсенбіТізім. SortByValue(SortDirection. Кему бойынша) ; // болды: сәрсенбі, дүйсенбі, сейсенбі /// 1s 8.3, 8.2 мәндер тізімінен элементті қалай жоюға болады // бірінші элементті алып тастаңыз // параметр: тізім элементі // немесе элемент индексі// сіз бұл тізімді жасай аласыз. Жою(Тізім[ 0 ]); // немесе солай // List.Delete(0); /// 1s 8.3, 8.2 мәндер тізімінің элементін қалай ауыстыруға болады // нөлдік элементті бір орынға алға жылжытыңыз // болды: дүйсенбі сейсенбіТізім. Жылжыту(0, 1); // болды: сейсенбі дүйсенбі /// 1s 8 ішінде тізімнің көшірмесін қалай жасауға болады ListCopy = Тізім. Көшіру(); Түстер = NewValueList; Түстер. Қосу («Қызыл»); Түстер. Қосу («Жасыл»); Түстер. Қосу («Көк»); /// Тізім мәндерін массивке 1s 8.3, 8.2 ішінде қалай жүктеуге болады ArrayColors = Түстер. UnloadValues() ; /// 1с 8.3, 8.2-де массивтен тізім мәндерін қалай жүктеуге боладыТүстер. LoadValues(ArrayColors) ; Процедураның соңы /// Тізімнен мәнді үлгісіз таңдауды қалай жасауға болады /// мәндері 1с 8.3, 8.2&Клиент процедурасында Модальды емес мәнді таңдау(пәрмен) Түстер = Жаңа мәндер тізімі; Түстер. Қосу («Қызыл»); Түстер. Қосу («Жасыл»); Түстер. Қосу («Көк»); // AfterSelectingElement процедурасы төменде анықталған AlertAfterElementSelection = Жаңа сипаттама ескертулері( "AfterElementSelection", ThisObject ); Түстер. ShowElementSelection( NotificationAfterElementSelection, «Сүйікті түсіңді таңда»); Элементті таңдағаннан кейін (Элемент, Параметрлер) Процедураның соңы & On Client процедурасы Элемент болса экспорттау<>Анықталмаған Содан кейін есеп (Element.Value) ; EndIf; Процедураның соңы /// Тізімнен мәндерді үлгісіз белгілеуді қалай жасауға болады /// мәндері 1с 8.3, 8.2&Клиент процедурасы туралы Мәндердің модальды емес таңбасын қалай жасауға болады (пәрмен) Түстер = Мәндердің жаңа тізімі; Түстер. Қосу («Қызыл»); Түстер. Қосу («Жасыл»); Түстер. Қосу («Көк»); // AfterMarkingElements процедурасы төменде анықталған AlertAfterMarkingItems = Жаңа сипаттама ескертулері( "Белгіленгеннен кейін", ThisObject ); Түстер. ShowTagItems( AlertAfterTagItems, «Сүйікті түстеріңізді таңдаңыз»); Түстер. FillNotes(True) ; Элементтерді (элементтерді, параметрлерді) таңбалаудан кейінгі процедураның соңы & Клиенттік процедурасы Элементтер болса экспорттау<>Анықталмаған Содан кейін элементтердің әрбір түсі үшін Түс циклі. Есепті белгілеу(Түс.Мән) ; EndIf; EndCycle; EndIf; Процедураның соңы /// 1s 8.3, 8.2 ішінде тізімнен мәннің модальды таңдауын қалай жасауға болады&Клиент процедурасында ModalValueSelection(пәрмен) жасау жолы Түстер = Жаңа мәндер тізімі; Түстер. Қосу («Қызыл»); Түстер. Қосу («Жасыл»); Түстер. Қосу («Көк»); Түсті таңдаңыз = Түстер. Элементті таңдау( «Сүйікті түсіңді таңда»); Егер Түсті таңдаңыз<>Анықталмаған Содан кейін есеп (SelectColor.Value) ; EndIf; Процедураның соңы /// Тізімнен мәндерді модальды түрде белгілеу жолы /// мәндері 1с 8.3, 8.2&Клиент процедурасында Мәндердің модальды белгісін қалай жасауға болады (пәрмен) Түстер = Мәндердің жаңа тізімі; Түстер. Қосу («Қызыл»); Түстер. Қосу («Жасыл»); Түстер. Қосу («Көк»); Түстер болса. Белгілер( «Сүйікті түстеріңізді таңдаңыз») Содан кейін түс циклінен әрбір түс үшін If Color. Есепті белгілеу(Түс.Мән) ; EndIf; EndCycle; EndIf; // осылайша барлық белгілерді бірден орнатуға болады // белгілі бір мәнге тізімТүстер. FillNotes(True) ; Процедураның соңы /// Осы мысалдарды компьютеріңізге жүктеп алып, іске қосыңыз

Бұл бөлімде біз 1С тілінің жаңа деректер түрімен танысамыз, ол аталады ListValues.

Мәндер тізімімассив, бірақ үлкен мүмкіндіктері бар. Егер солай болса, онда бұл да деректер жинағы және оған сандар жиынын қоюға болады:

// мәндер тізімін жасады

List.Add(23);

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

// тізімнің әрбір элементі бойынша цикл Тізімнен әрбір элемент үшін цикл есебі(Element.Value);

// EndCycle элементінің мәнін көрсету;

Міне, бірінші айырмашылық. Тұрақты массивтің элементтері сандардың өздері болып табылады. Және элементтің ағымдағы мәніне қол жеткізу Тізімопциясын пайдаланамыз Мағынасы, конструкциясын пайдалана отырып Элемент. Мағынасы.

Кейбір қосымша мүмкіндіктерді қарастырайық Құндылықтар.

Сұрыптай алады

Мысалы, біз мәндер тізімін оңай сұрыптай аламыз. Тізім мұны өздігінен жасай алады:

List.SortByValue(SortDirection.Age); Кәдімгі массив жағдайында сұрыптау алгоритмдерінің бірін орындауға тура келеді (мысалы, «көпіршік»).

Іздей алады

Мәндер тізімі өз элементтерін өздігінен іздей алады. Біздің тізімде пайдаланушы енгізген нөмірдің бар-жоғын білгіміз келеді делік:

EnterNumber(Number); // пайдаланушыдан сан енгізілді FoundElement = List. FindByValue(Number);

FoundItem = Анықталмаған болса, OpenValue("Нөмір " + Сан + " тізімде табылмады!"); Әйтпесе

OpenValue("Number " + Number + " тізімде. Мұнда ол:" + FoundElement.Value);

endIf; ListValues

Енгізуді және жоюды қолдайды

Массив сияқты мәндер тізімі элементтерді енгізуді және жоюды қолдайды:

Тізім. Кірістіру(0, 1000);

// тізімнің ең басына мыңды енгізіңіз List.Delete(O); // және оны бірден Тізім тізімінен алып тастаңыз. Insert(List.Quantity(), 13);

// тізімнің соңына 13 енгізіңіз Report(List[List.Quantity() - 1]);

// тізімнің соңғы элементін көрсету (13)

Шаршы жақшаларды қолдайды

Түсінгеніңіздей, тізім элементтерінің нөмірленуі де нөлден басталады және біз кез келген элементке тік жақшаларды пайдаланып индексі бойынша қол жеткізе аламыз:

Report(List.Value); // тізімнің екінші элементін көрсету Осылайша, тізімнің барлық элементтерін келесідей аралап шығуға болады:

A = 0 үшін List.Quantity() бойынша - 1 цикл есебі(List[A].Value);

EndCycle;

Өзінің көшірмесін жасай алады

Мәндер тізімінің керемет ерекшелігі бар - ол өзінің көшірмесін жасай алады:

ListCopy = List.Copy();

// тізімнің көшірмесі жасалды // енді біз Тізімнің көшірмесін қауіпсіз өзгерте аламыз // бастапқы тізім Тізімнің көшірмесін өзгертпейді. Мән = 123456;

Массивке айналуы мүмкін

Ақырында, тізімнің барлық элементтерін кез келген уақытта массивке оңай тастауға болады:

ArrayNumbers = Тізім. UnloadValues();

// массивке тасталды

A = 0 үшін ArrayNumber.Quantity() бойынша - 1 Цикл

Есеп(массив сандары[A]); // көрсету қажет емес // параметр Мәні

EndCycle;

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

Пайдаланушыдан 5 санды енгізіп, олардың ең үлкенін және ең кішісін тауып, пайдаланушыға көрсету керек. Шешім мәндер тізімін пайдалануы керек.

Шешім

Тізім = Жаңа мән тізімі;

// A = 1-ден 5-ке дейінгі цикл саны = 0 үшін мәндер тізімі жасалды;

EnterNumber(Number); // пайдаланушыдан санды енгізіңіз List.Add(Number); // және оны EndCycle тізіміне қосыңыз; // және т.б. 5 рет

// сандар тізімін сұрыптау

Тізім. Мәні бойынша сұрыптау(SortDirection.Age);

// сұрыптаудан кейін тізімнің бірінші элементі // ең кіші элемент, ал соңғысы ең үлкен OpenValue («Ең кіші элемент» + Тізім +

", және ең үлкені " + Тізім[List.Quantity() - 1]);




Жоғарғы