1С 8 иерархиясы бойынша топта болу Сұраныстағы «иерархиядағы» оператор. Элементтің барлық ата-аналарын алу

Ильдарович 6489 16.11.12 18:24 Қазіргі уақытта тақырыпта

() Владимир! Мақалаға назар аударғаныңызға қуаныштымын, әсіресе екі жыл бұрынғы «Қиын сұрауды жазу шынайы» талқылауында осы әдісті алғашқылардың бірі болып көрген (және бағалайтын) болғандықтан. Мен өз бетімше қызықты сұрақ қойған жоқпын, бірақ оны форумда көрдім. Сұрақтың авторы - Станислав Шепталов. Келесі - 24.10.12 күні дәл осылай (бұл жай ғана байқадым, өйткені лақап аты басқа) форумға қатысушы ұқсас сұрақ қойды, бірақ иерархияға өтініште. ПРАКТИКАЛЫҚ мәселе шешілді екен. Әрі қарай, «ғылыми» көзқарасқа сәйкес мен бұл әдісті қолдануға болатын практикалық мәселелерді қарастырдым. Тағы 7 мәселе табылды. 5 - осы мақалада. Олардың арасында мен бұрын Ish_2 бір сұраумен шешуге уәде берген спецификациялардағы циклдар туралы мәселе бар. Менің ойымша, Ish_2 сізді бұл тапсырманың өзектілігіне сендіре алады - ол оған көп уақыт жұмсады. Шешім қысқа - нәтижеге қойылатын талап арқылы процедуралық емес стильде тұжырымдалған бірнеше жолдар, сондықтан өте анық. Мақалалар мен форумда басқа да мәселелер кездесті және олар үшін күрделі шешімдер ұсынылды. Сондықтан оның қаншалықты жиі қолданылатынын көру үшін біраз күтейік. Мен дәл осындай кері байланыс күтемін - тырысатындардан.
Айтпақшы, математиканың бұл саласы тәжірибеден алыс емес және есепшілерге қажет екендігін біз қазір айналысып жатқан BP2-дегі «Шығындарды реттеу» жалпы модулі дәлелдейді (стандартты сұраныстың тұрақсыз жұмысы). Онда біз элемент қозғалысы графигінің циклдерін бұзу және созылатын ағашты құру туралы айтып отырмыз.
Енді «нақты тапсырма үшін» деректер қорының құрылымы туралы. 1С-та тапсырманы орындау туралы сұрақ қойылды, сондықтан тапсырма 1С-те шешілді. Егер сізден «кітапханаға қай автобуспен жетуге болады» деп сұраса және сіз дирижабльмен ұшқан дұрыс деп жауап берсеңіз, сізді түсінбейді (мүмкін Мәскеу кептелісінде тұрып қалғандарды қоспағанда). ). Бастапқыда әдіс мүлдем басқа тілде жұмыс істеді.
Жалпы, егер сіз 1С платформасының архитектурасы жақсы емес деп ойласаңыз, мен сізді сендіре алмаймын. Мен тек өз пікірімді айта аламын. Белгілі бір тапсырма үшін дерекқор схемасын нөлден әзірлеу қымбатқа түседі. Егер оны құрылыспен салыстыратын болсақ: 1С - бұл панельді көпқабатты үйлер - арзан тұрғын үй - жаппай автоматтандыру құралы - тар жағдайларда, бірақ құқық бұзушылық жоқ. Жеке ұйымдар талаптарын дәл орындау үшін Норман Фостерді жалдай алады. Қалғандары арзан жаппай шығарылатын жобаларды – қатал нысан үлгісі бар реляциялық ДҚБЖ пайдалануы керек. Сонымен қатар, мен бірнеше жобаларда Cashe пайдаланудың қайғылы тәжірибесімен таныспын. Әзірлеушінің көзімен бәрі теориядағыдай қызғылт болып көрінбейді. 1С нысандық моделі уақыт сынынан өтеді – «кең аумақтар салынып, қоныстанды». Оның үстіне ол дамып келеді. Соңғы уақытта сыртқы деректер көздерінің технологиясы пайда болды. Ал егер қандай да бір тапсырма жоғары реактивтілікті қажет етсе (мысалы, төлем жүйелері), енді 1С-ті басқа ДҚБЖ-мен үздіксіз қосуға болады. Мысалы, біз импортталған ERP-пен осылай айырбастаймыз.
Дегенмен, мен әңгімені негізгі тақырыптан - егжей-тегжейлі ПРАКТИКАЛЫҚ тапсырмаларда ұсынылған әдістемелердің жұмысынан басқа жаққа бұрғым келмейді.

1С каталогы дегеніміз не және ол не үшін қажет? Каталог шартты түрде тұрақты ақпаратты сақтайды, яғни. ұзақ уақыт бойы дерлік өзгеріссіз қалатын ақпарат. Мысалы, «Номенклатура» анықтамалығында сатылған немесе өндірілген тауарлар тізімі бар. Сондай-ақ, каталог каталог элементін сипаттайтын көптеген сипаттарды қамтуы мүмкін.

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

Жаңа каталог жасағаннан кейін біз келесі суретті көреміз.

Оның барлық бетбелгілерін қарастырайық.

Негізгі

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

Иерархия

Бұл қойындыда каталог элементтерінің кірістіру тереңдігін конфигурациялауға болады. Бұл параметрді пайдалану арқылы элементтерді кейбір критерийлер бойынша саралау және егжей-тегжейлі көрсету ыңғайлы. Мысалы, «Шкафтар» өнімдері бір топта, ал «Үстелдер» өнімдері басқа топта. Әдепкі бойынша, құрылған кезде каталог көрсетіледі элементтер тізімі. Иерархиялық каталог құсбелгісін қойсаңыз, онда әрбір элемент басқа элементке (топқа) бағынуы мүмкін. Төменде осы бетбелгіні теңшеуге және пайдаланушы режимінде дисплейді өзгертуге арналған опциялар берілген.

Иерархия түрі:

Топтар мен элементтердің иерархиясы

Бұл параметрмен элементтерді тек топтарға (қалталарға) кірістіруге болады.

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

Топтарды үстіне қойыңыз

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

Иерархиялық деңгейлердің санын шектеу

Егер бұл жерде құсбелгі қойылмаса, ұя салу шектеусіз болады.

Егер құсбелгі қойылса, төменде деңгейлер санын көрсетуге болады.

Меншік иелері

Бетбелгіде иелері осы бағынышты болып табылатын басқа анықтамалықтар көрсетілуі мүмкін. Бағынышты каталогтардың қатынас диаграммасы иерархиялық каталогтың қарым-қатынас диаграммасына ұқсас, тек мұнда басқа каталог ата-аналық рөл атқарады және иесі деп аталады. Әдеттегі конфигурацияларда «Келісімдер» каталогының «Контрагенттер» каталогына бағынуы жақсы мысал болып табылады, өйткені Ешбір контрагентке тиесілі емес келісім болуы мүмкін емес.

«Каталог иелерінің тізімі» өрісі осы каталогтың элементтеріне ие каталогтар тізімін көрсетеді.

Төмендегі «Бағыныстылықты пайдалану» өрісінде осы каталогтың элементтері неге бағынатыны көрсетілген.

Каталогтың иерархиялық немесе иерархиялық еместігін программалық түрде қалай білуге ​​болады

Мұны істеу үшін метадеректерге сілтеме жасау керек

Бұл HierarchicalDirectory = Metadata.Directories.Counterparties.Иерархиялық;

Жалғасы бар...

1С каталогтары статикалық анықтамалық ақпаратты сақтауға қызмет ететін мамандандырылған метадеректер ағашының нысаны болып табылады. Мысалы, типтік конфигурацияларда келесі көріністерді көруге болады: , Номенклатура, Қызметкерлер, Негізгі құралдар және т.б. Анықтамалардағы ақпарат, әдетте, жиі өзгермейді. Анықтамалықтар кейіннен есеп бөлімі немесе анықтамалық ақпарат ретінде барлық дерлік есеп объектілерінде қолданылады.

Төменде мысал ретінде «Номенклатура» каталогын пайдаланып конфигуратордан каталогты орнату және жобалауды қарастырамыз.

Негізгі қойынды

«Негізгі» қойындысы атауды, синонимді, нысанды көрсетуді және мақсаттың сипаттамасын көрсетеді.

«Каталог иерархиясы» қойындысы

Мұнда каталогтың иерархиясы орнатылады.

1С 8.3-те иерархия екі түрге бөлінеді - « топтар мен элементтер« Және » элементтері«. Оның айырмашылығы, бірінші жағдайда тек қана қалта (топ) тектік (қалта) болуы мүмкін, ал екінші жағдайда элемент те аталық болуы мүмкін.

«Топтарды жоғарғы жағына орналастырыңыз» - жалауша топтарды тізім түрінде көрсетуге жауапты.

Сондай-ақ параметрлерде сәйкес параметрді пайдаланып каталог иерархиясындағы топтардың санын шектей аласыз.

Иелер қойындысы

Каталог басқа каталогқа бағынуы мүмкін. 1С 8.3 конфигурациялау тұрғысынан бұл «Ие» атрибуты бағынышты элемент үшін міндетті болады дегенді білдіреді. «Номенклатура – ​​өлшем бірліктері», «Контрагенттер – мердігерлердің келісімдері» стандартты конфигурацияларындағы анықтамалықтар арасындағы осындай байланыстың мысалы.

Каталог иесі де келесі метадеректер нысандары болуы мүмкін: , .

Деректер қойындысы

1С-те 267 бейне сабақты тегін алыңыз:

Бағдарламашы тұрғысынан ең маңызды қойынды. Ол каталог мәліметтерін қамтиды.

Анықтамада 1С 8.2 бағдарламашысы өңдемейтін стандартты мәліметтер жиынтығы бар, олардың тізімін «Стандартты мәліметтер» түймесін басу арқылы көруге болады:

Мен әрқайсысына толығырақ тоқталамын:

  • Бұл топ— топ немесе элемент екенін көрсететін логикалық типті атрибут. Тек иерархиялық каталогта қол жетімді. Назар аударыңыз, бұл атрибуттың мәнін 1С: Кәсіпорын режимінде өзгерту мүмкін емес.
  • Код— реквизиттер, нөмірді немесе жолды теріңіз (әдетте жол). Жүйе автоматты түрде тағайындайтын нөмір. Әдетте (алдыңғы код + 1) ретінде есептеледі. Мен жол түрін пайдалануды ұсынамын, өйткені сандық мәндерді сұрыптау күткендей жұмыс істемейді. Тізімде және енгізу өрістерінде каталог көрсетілімі ретінде пайдалануға болады. Әдетте жолды енгізу кезінде элементті іздеу үшін қолданылады. Код өрісін жою қажет болса, жол ұзындығына нөлді енгізіңіз.
  • Аты— міндетті реквизиттер, жол түрі. Максималды жол ұзындығы - 150 таңба. Тізімде және енгізу өрістерінде каталог көрсетілімі ретінде пайдалануға болады. Әдетте жолды енгізу кезінде элементті іздеу үшін қолданылады. Атау өрісін жою қажет болса, жол ұзындығына нөлді енгізіңіз.
  • Ата-ана— DirectoryLink түрінің атрибуты.<ИмяТекущегоСправочника>. Тек иерархиялық каталогта қол жетімді. Иерархиядағы жоғары ата-анаға нұсқайды. Егер Элемент немесе Топ каталогтың түбірінде болса, Каталог мәні көрсетіледі.<ИмяТекущегоСправочника>.EmptyLink.
  • Меншік иесі— ағымдағы каталог элементінің (топтың) иесі элементіне сілтеме. Қол жетімді тек бағынышты 1С каталогында.
  • FlagDeletion— логикалық түрдегі реквизиттер. Жүйеде «жою белгісін» көрсетуге жауапты. Жою үшін белгіленген элемент жарамсыз болып саналады, бірақ онда ескі құжат қозғалысы қалуы мүмкін.
  • Сілтеме— жол түрінің өрісі. Бұл атрибут бірегей нысан идентификаторын сақтайды - GUID. Жүйеде «сілтеме» деп аталатын визуалды дисплейде көретініміз объектінің көрінісі ғана. Өзгерту мүмкін емес.
  • Алдын ала анықталған— логикалық тип, элементтің алдын ала анықталғанын көрсетеді, бұл туралы кейінірек. Өзгерту мүмкін емес.

«Деректер» қойындысы сонымен қатар жүйедегі каталогтың көрінісін көрсетеді, 8.2.16 нұсқасына дейін ұсыну тек Код немесе Атау болуы мүмкін. Платформаның соңғы нұсқаларында (8.3-тен бастап) көріністі «ViewReceivingProcessing» өңдеушісі арқылы басқарушы модулінде дербес сипаттауға болады.

Нөмірлеу қойындысы

Мұнда нөмірлеуге қатысты каталог параметрлерін көрсетуге болады. Автоматты нөмірлеуді қолдану ұсынылады. Бірегейлікті басқару - қажет болған жағдайда кодты бірегей етуге көмектесетін жалауша. Егер жалау орнатылған болса, бірегей емес кодпен каталог элементін жазуға әрекеттенсеңіз, 1С жүйесінде сіз «Каталог коды бірегей емес болды» хабарын аласыз.

Код сериясы - каталогты нөмірлеу жолын анықтайды; каталогтың нөмірленуін иесі бойынша енгізуге болады. Мысалы, «Мүйіздер мен тұяқтар» контрагентінің келісім-шарттардың жеке нөмірленуі болады - «1, 2, 3» және т.б.

Пішіндер қойындысы

Каталогқа арналған пішіндер осы жерде сипатталған. Егер конфигурация қалыпты және басқарылатын режимдерде іске қосылса, әдепкі бойынша пішіндері бар екі қойынды болады: «негізгі» және «қосымша» - қалыпты және басқарылатын қолданбалар үшін әртүрлі.

Бұл бетте каталогтың маңызды мүмкіндігі бар - ““. Бұл 1С 8 өте ыңғайлы функциясы, ол енгізу өрісінде деректерді толтыру кезінде каталогқа кірмей, оның атын, кодын және т.б. теруге мүмкіндік береді. және ашылмалы тізімнен қажетті элементті таңдаңыз. Бұл келесідей көрінеді:

Басқа қойынды

Қойындыда каталогтың негізгі модульдеріне – нысан модуліне және басқару модуліне жылдам қол жеткізуге болады.

Сондай-ақ беттегі алдын ала анықталған каталог элементтерінің тізімін анықтауға болады. Бұл Кәсіпорын режимінде жойылмайтын элементтер. Алдын ала анықталған элементтерге тікелей конфигураторда аты бойынша қол жеткізуге болады, мысалы: Directories.Nomenclature.Service.

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

1C:Enterprise 8.x сұрауларындағы «ИЕРАРХИЯДА» дизайны берілген таңдауға сәйкес иерархиялық конфигурация нысанының бағынышты элементтерін алуға мүмкіндік береді. Бүгін мақалада біз оны пайдаланудың мысалын, сонымен қатар ДҚБЖ жағындағы платформаның әрекеттерін және оның өнімділікке әсерін қарастырамыз.

Қолданылуы

«ИЕРАРХИЯДА» конструкциясын қолданудың қарапайым мысалын қарастырайық. Келесі сұранысты орындау кезінде «Сілтеме» айнымалысының берілген мәні үшін «Өнім» иерархиялық каталогының бағынышты элементтері алынады.

Сұрау мәтіні = " ТАҢДАУ | Өнімдер . Сілтеме,| Тауарлар . жеткізуші коды |FROM| Каталог . Өнімдер AS өнімдері|ҚАЙДА | Тауарлар . ИЕРАРХИЯДАҒЫ сілтеме(& сілтеме)"

Сынақ деректер базасында «Өнімдер» каталогында келесі сынақ деректері бар:

Әрине, кескін барлық каталог жазбаларын көрсетпейді. Скриншот иерархиялық каталогтағы деректерді сақтау құрылымын ғана көрсетеді. Каталог кестесі 10 жоғарғы деңгейлі топты сақтайды, олардың әрқайсысында әрқайсысы 200 элементі бар 5 кірістірілген топ бар.

Тест сұрауына қайта оралайық. «Топ – 1» тобына сілтемені «&Сілтеме» параметріне берейік (жоғарыдағы скриншотты қараңыз). Содан кейін сұраудың нәтижесі келесідей болады:

Көріп отырғанымыздай, сұрау жоғарғы топтың өзіне (параметр ретінде жіберілген), сондай-ақ элементтері бар кірістірілген топтарға сілтемені қайтарды. Осылайша, «ИЕРАРХИЯДА» конструкциясын пайдалану иерархиялық бағынышты деректерді ыңғайлы алуға мүмкіндік береді.

1С: Кәсіпорын сұрау тілінің синтаксисі классикалық SQLкейбір жағынан өте ұқсас. Бірақ «ИЕРАРХИЯДА» өрнегі үшін SQL сұрау тілінде аналогы жоқ, мысалы, «B» платформасының сұрау тілінің өрнегі үшін «IN» ұқсас SQL операторы бар. Сондықтан бұл операторды пайдалану кезінде платформаның ДҚБЖ-мен жұмысы қызықты.

Сахна артында

Ендеше, бастайық. Мысалы, біз «Өнімдер» каталогы үшін бұрын жазылған сұранысты қолданамыз. Біз платформаның әрекеттерін екі жағдай бойынша талдаймыз:

  1. Біз жоғарғы деңгейдегі «1-топ» тобын «&Сілтеме» параметрі ретінде береміз (бұрынғыдай).
  2. Параметрде біз жоғары деңгейлі «1-топ» тобына кірістірілген «1-топ - 1» тобына сілтеме береміз.

Енді, ретімен. Бірінші жағдайда платформа SQL серверінде келесі әрекеттерді орындайды:

1. Біріншіден, параметр ретінде берілген каталогтар тобына және барлық бағынышты топтарға сілтеме алу үшін SQL сұрауы орындалады. Нәтиже уақытша «#tt1» кестесіне орналастырылады.

2. Екінші кезеңде бір сұрау екі рет орындалады:

Скриншотта SQL сұрауының мәтініне егжей-тегжейлі түсініктемелер бар. Қысқаша айтқанда, сұрау уақытша кестеде сілтеме жасалған топтар үшін бағынышты элементтерді таңдауға мүмкіндік береді. Сұрақ: «Сұрау неге екі рет орындалады?» Мұнда жауап қарапайым: біріншіден, сұрау уақытша кестеде бар бірінші деңгейлі топтар үшін бағынышты элементтерді алады (1 тармақты қараңыз). Екінші сұрау екінші деңгейдегі ішкі топтар үшін ішкі элементтерді шығарып алады. Иерархияның үшінші деңгейінде ешбір каталог тобы болмағандықтан, бұл сұрау енді орындалмайды.

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

3. Сұраудың соңғы нәтижесін алу үшін платформа келесі SQL сұрауын жасайды:

Осы нақты сұраудың нәтижесі платформаның кірістірілген тілінде алгоритмдер арқылы әрі қарай өңделуі мүмкін. Осылайша, "#tt1" уақытша кестесіндегі жазбалар "_Reference41" анықтамалық кестесінен іріктеу шартын орнату үшін пайдаланылады.

4. Соңғы қадамда 1C: Enterprise 8.x платформасы «#tt1» уақытша кестесін жояды, өйткені ол болашақта енді қолданылмайды.

Бұл «ИЕРАРХИЯДА» операторын орындау процесін аяқтайды.Естеріңізге сала кетейін, SQL серверіндегі қарастырылған әрекеттер тізбегі біз платформа жағындағы сұрауға «Топ - 1» жоғарғы деңгейлі тобына сілтеме бергенде орындалды. Бірақ «&Сілтеме» параметрі ретінде екінші деңгейлі «Топ - 1 - 1» тобына сілтемені жіберсек, платформа қалай әрекет етеді? Келесі тармақты қоспағанда, бәрі бірдей болады: жоғарыда, платформамен SQL сұрауларын орындаудың екінші кезеңінде бағынышты элементтерді алу сұранысы екі рет орындалды деп жазылған - бағынышты элементтерді алу жағдайында. «Топ - 1 - 1» тобы бұлай емес. Сұраныс тек бір рет орындалады.

Өйткені, бағынышты элементтерді алуға сұраныстардың саны иерархиядағы топтардың санына байланысты. Басқаша айтқанда, элемент иерархиясының деңгейі кем дегенде бір топты қамтыса, онда 2-тармақтан сұрау.

Өнімділікке әсер ету

Сұраудағы кез келген операторды дұрыс пайдаланбау жүйенің оңтайлы емес өнімділігіне әкелуі мүмкін. «ИЕРАРХИЯДА» қарастырылатын оператор да ерекшелік емес. Оны сақтықпен пайдалану керек, өйткені ол дерекқорға SQL сұрауларын орындау алгоритмін айтарлықтай қиындатады және осылайша ДҚБЖ серверіне жүктемені арттырады.

Жоғарыда айтылған қайғылы салдарға әкелетін оңтайлы емес сұраудың мысалын келтірейін:

Өнімдерді ТАҢДАУ. Каталогтан сілтеме. Өнімдер ҚАЙДАҒЫ өнімдер ретінде (Өнімдер. ИЕРАРХИЯДАҒЫ сілтеме (& Сілтеме) НЕМЕСЕ Өнімдер. ИЕРАРХИЯДАҒЫ сілтеме (& Сілтеме1) НЕМЕСЕ Өнімдер. ИЕРАРХИЯДАҒЫ сілтеме (& Сілтеме2) )

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

Қорытындыларыңызды жасаңыз!

Қорытынды жасау өз еркіңізде. Айта кетейін, «ИЕРАРХИЯДА» операторы таңдау шарттарына «IN GROUP», «IN GROUP FROM THE LIST» және т.б. кірген кезде деректерді құрау жүйесі үшін платформа пайдаланылады. Менің ойымша, дұрыс емес манипуляциялармен пайдаланушылар өте күрделі таңдауларды орнатып, 1С сервері мен ДҚБЖ жүктемесін бірнеше есе арттыра алады деп түсіндірудің қажеті жоқ. Параметрлерді тәжірибелі пайдаланушылар үшін ғана өзгертейік.

Және, әрине, өз механизмдеріңізді жазғанда, «ИЕРАРХИЯДА» операторына назар аударыңыз. Бір жағынан өте ыңғайлы, екінші жағынан қауіпті.

Бұл бөлімде иерархиялық каталогтармен жұмыс істеу кезінде типтік есептерді шешу мысалдары көрсетілген.

Берілген топқа бағынатын иерархиялық каталог элементтерін алу

Иерархиялық каталогтың бағынышты элементтерін алу үшін сұрау тілі IN HIERARCHY құрылымын береді. ИЕРАРХИЯДА қолдану мысалы:


ТАҢДАУ
Номенклатура.Код,
Номенклатура.Сатып алу бағасы
FROM

Бұл мысалда &Топ тобында орналасқан Номенклатура каталогының барлық жазбалары алынады, соның ішінде өзі, оның бағынышты топтары және бағынышты топтарға жататын элементтері.

Егер бізді тек берілген топта тікелей орналасқан элементтер мен топтар қызықтырса, онда мұндай элементтерді Ата-ана өрісіне шарт орнату арқылы алуға болады. Мысалы:


ТАҢДАУ
Номенклатура.Код,
Номенклатура Атауы AS Атауы,
Номенклатура.Сатып алу бағасы
FROM
Анықтамалық.Номенклатура AS Номенклатура

ҚАЙДА
Номенклатура.Ата-ана = &Топ

Бұл сұрау &Топ сілтемесі бар топқа бағынатын топтар мен элементтерді таңдайды.

Каталог элементінің бағынышты элементтерінің болуын тексеру

Каталог элементінің бағынышты жазбаларының болуын тексеру үшін ұсынылғанға ұқсас сұрауды пайдалануға болады:

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


Егер Request.Execute().Empty() болса
Есеп («Ешқандай жазбалар»);
Әйтпесе
Есеп («Жазбалар бар»);
endIf;

Элементтің барлық ата-аналарын алу

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


CurrentItemItem = ItemItem;

Сұрау = Жаңа сұрау («ТАҢДАУ
| Номенклатура. Ата-ана,
| Номенклатура.Ата-ана.Ата-ана,
| Номенклатура.Ата-ана.Ата-ана.Ата-ана,
| Номенклатура.Ата-ана.Ата-ана.Ата-ана.Ата-ана,
| Номенклатура.Ата-ана.Ата-ана.Ата-ана.Ата-ана.Ата-ана
|FROM
| Анықтамалық.Номенклатура AS Номенклатура
|ҚАЙДА
| Номенклатура.Сілтеме = &АғымдағыNomenclatureElement»;

Ақиқат циклі кезінде
Request.SetParameter("CurrentItemItem", CurrentItemItem);
Нәтиже = Query.Run();
Егер Result.Empty() болса
Тоқтату;
endIf;
Таңдау = Нәтиже.Таңдау();
Selection.Next();
ColumnNumber үшін = 0 Нәтиже бойынша.Columns.Quantity() - 1 цикл
CurrentItemItem = Таңдау[ColumnNumber];
Тоқтату;
Әйтпесе
Есеп (ағымдағы элемент);
endIf;
EndCycle;

Егер CurrentItemItem = Directories.Nomenclature.EmptyLink() болса
Тоқтату;
endIf;
EndCycle;

Бұл мысалда ElementNomenclature айнымалысында жазылған сілтемеге арналған барлық ата-аналар қызмет хабары терезесінде көрсетіледі. Циклде 5 сілтеме ата-ана таңдалады.

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

Есепте иерархиялық каталогты көрсету

Иерархияны сақтай отырып есепте иерархиялық каталогты көрсету үшін келесіге ұқсас сұрауды пайдалану керек:


ТАҢДАУ
Номенклатура.Код,
Номенклатура Атауы AS Атауы,
Номенклатура.Сатып алу бағасы
FROM
Анықтамалық.Номенклатура AS Номенклатура
БОЙЫНША СҰРЫПТАУ
HIERARCHY деп атаңыз

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

Каталог топтарын элементтердің үстіне орналастыру үшін осы сұраудағы ORDER BY тармағын келесімен ауыстыру қажет:


БОЙЫНША СҰРЫПТАУ
Номенклатура. Бұл Топ ИЕРАРХИЯСЫ,
Аты

Нәтиже әлі де иерархиялық реттелген болады, бірақ топтар элементтердің үстінде пайда болады.

Сондай-ақ, «ТАПСЫРЫС БЕРУ» опциясын «АВТО ТАПСЫРЫС БЕРУ» опциясымен ауыстыруға болады. Бұл жағдайда нәтиже каталогтың параметрлеріне сәйкес реттеледі, яғни. егер каталогта топтардың элементтердің үстінде орналасуы керек болса, онда олар жоғарыда орналасады.

Сондай-ақ нәтижелерді пайдалана отырып, каталогтың иерархиялық құрылымын алуға болады.


ТАҢДАУ
Номенклатура.Код,
Номенклатура Атауы AS Атауы,
Номенклатура.Сатып алу бағасы

Справочниктен.Номенклатура AS Номенклатура

ҚАЙДА
(Номенклатура.ThisGroup = ЖАЛҒАН)

Аты бойынша ТАПСЫРЫС

Иерархия бойынша қорытындыларды алу

Сұраудағы иерархия бойынша қорытындыларды алу үшін жиынтықтар есептелетін өрісті көрсеткеннен кейін SOFTWARE TOTAL сөйлемінде HIERARCHY кілт сөзін көрсету керек. Иерархия бойынша қорытындыларды алумен «Зат айналымы» есебінің мысалы:


ТАҢДАУ

FROM

Номенклатура ИЕРАРХИЯ

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

Элементтер үшін қорытындылар қажет емес, тек топтар үшін қорытындылар қажет болған жағдайда, біз жиынтықта ТЕК ИЕРАРХИЯЛЫҚ құрылысты пайдалануымыз керек. Мысалы:


ТАҢДАУ
Номенклатура айналымын есепке алу. Номенклатура AS Номенклатура,
Номенклатуралық айналым есебі. Номенклатура. Презентация,
Номенклатуралық айналымның есебі
FROM
Жинақтаушы реестр.Номенклатуралық есеп.Айналым ҚАЛАЙ Номенклатуралық есепАйналым
НӘТИЖЕЛЕР СУМА (QuantityTurnover) PO
Номенклатура ТЕК ИЕРАРХИЯ

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