Програмистын дэвтэр. Бичлэгийн түвшинд хандалтыг хязгаарлах зөвшөөрөгдсөн удирдамжийг ашиглах


1С 8 асуулгын хэл нь 1С програмистын хувьд зайлшгүй шаардлагатай хэрэгсэл бөгөөд өгөгдөлтэй ажиллахдаа илүү товч, энгийн, ойлгомжтой код бичих, системийн нөөцийг бага ашиглах боломжийг олгодог. Энэ нийтлэл нь 1C 8 query хэлэнд зориулсан цуврал хичээлүүдийг нээнэ. Эхний хичээлээр бид энэ хэлний үндсэн операторын бүтцийг авч үзэх болно - СОНГОХ.Энэ операторыг ашигласнаар та өгөгдлийн сангийн хүснэгтүүдээс сонголт хийх боломжтой. Сонгосон хүснэгтийн өгөгдлийг эрэмбэлэх, түүн дээр байрлуулах нөхцөл, бусад хүснэгтийн өгөгдөлтэй холбож, нэгтгэх, янз бүрийн талбараар бүлэглэх гэх мэт олон зүйлийг хийх боломжтой.

Асуулгын хэл 1С аж ахуйн нэгж 8 - Операторын бүтэц СОНГОХ

SELECT операторын бүтцийг авч үзье (операторын нэмэлт хэсгүүдийг дөрвөлжин хаалтанд заасан). 1С асуулгын хэл нь өгөгдлийн дээж үүсгэх өргөн хүрээний хэрэгслээр хангадаг.

[ЗӨВШӨӨРӨЛТ] [ӨӨР] [ЭХНИЙ A] [Талбар1] [Нийтийн нэр1], [Талбар2] [Алиар2], ... [ТалбарM] [Түр зуурынХүснэгтНэр] [Түр зуурынХүснэгтНэрээс] [Хүснэгт 1-ээс AliasTableTable1-ээр НЭГДСЭН] [[ДОТООД НЭГДСЭН] [ЗҮҮН НЭГДСЭН] [БҮРЭН НЭГДСЭН] Хүснэгт 2-г Хуваарилах нэр Хүснэгт2 [[ДОТООД НЭГДСЭН] [ЗҮҮН НЭГДСЭН] [БҮРЭН НЭГДСЭН] ХүснэгтC AS Alias ​​ХүснэгтC Илэрхийлэл1-ээр [Ба илэрхийлэл2]...[Ба илэрхийлэлD]] .. ... ... Илэрхийлэл1-ээр [Ба Илэрхийлэл2]...[Ба ИлэрхийлэлЕ]] ... [ХүснэгтF-г ХүснэгтF-ийн нэрээр] ... ] [Бүлэглэх талбар11-р бүлэглэх[,] ... [Бүлэглэх талбарG]] [ХАААН Илэрхийлэл1 [БА Илэрхийлэл2] ... [БА илэрхийлэлH]] [БҮГДИЙГ НЭГДЭЕ...] [; ...] [Нөгөө нэр1-ээр ИНДЕКС ... AliasB] [НИЙТ [Нэгдүүлэх функц(талбар1)][,] [Нэгтлүүлэх функц(талбар2)][,] ... [Нэгтлэх функц(талбарI)] [ЕРӨНХИЙ] [,] [ GroupingField1][,] ... [GroupingFieldj]]

Талбаруудтай ажиллах түлхүүр үг, блокууд

  • СОНГОХ— операторын эхлэлийг харуулсан түлхүүр үг;
  • ЗӨВШӨӨРӨЛТЭЙСонголтонд тухайн хэрэглэгчийн унших эрх бүхий хүснэгтийн бичлэгүүдийг оруулах ёстойг харуулж байна;
  • ТӨРӨЛтүүвэрт зөвхөн өөр өөр (бүх талбарт) урсгалыг оруулах ёстойг харуулж байна. Өөрөөр хэлбэл, давхардсан мөрүүдийг дээжээс хасах болно;
  • АНХНЫ Ахэрэв та энэ түлхүүр үгийг зааж өгвөл асуулгад сонгосон мөрүүдийн зөвхөн эхний А-г оруулах ба энд А нь натурал тоо;
  • Талбайн блок— энэ блок нь сонголтонд оруулах шаардлагатай талбаруудыг заана. Эдгээр талбарууд нь сонгосон багана байх болно. Маш их энгийн тохиолдолталбар нь дараах байдалтай байна: Хүснэгтийн Alias.TableFieldName AS Талбарын Alias

    Ингэснээр бид энэ талбарыг аль хүснэгтээс авч байгаагаа зааж өгнө. 1С асуулгын хэл нь танд ямар нэгэн өөр нэр зааж өгөх боломжийг олгодог боловч тэдгээрийг ижил SELECT мэдэгдэлд давтаж болохгүй. Талбар нь хүснэгтийн талбарууд, асуулгын хэлний функцууд болон нэгтгэх функцуудын янз бүрийн хослолуудаас бүрдэх илүү төвөгтэй байж болох ч бид энэ зааварт эдгээр тохиолдлыг авч үзэхгүй;

Хүснэгттэй ажиллах түлхүүр үг, блокууд

  • Түр хүснэгтийн нэр PUT- түлхүүр үг PLACEнь тодорхой нэр бүхий түр хүснэгтийг үүсгэх зорилготой бөгөөд үүнийг хадгалах болно санамсаргүй хандалт санах ойэнэ 1С 8 хуралдаанд дуусах хүртэл эсвэл түр зуурын хүснэгтийг устгах хүртэл. Нэг 1С 8 сессийн түр зуурын хүснэгтүүдийн нэрийг давтаж болохгүй гэдгийг тэмдэглэх нь зүйтэй;
  • Хүснэгт ба харилцааны блок- блок нь ашигласан бүх хүснэгтийг заана энэ хүсэлт, түүнчлэн тэдгээрийн хоорондын холболт. Блок нь түлхүүр үгээр эхэлдэг FROM,дараа нь эхний хүснэгтийн нэр болон бусад нэрийг оруулна. Хэрэв энэ хүснэгт нь бусад хүснэгттэй холбоотой бол харилцааг зааж өгнө. 1С асуулгын хэл нь дараах холболтын төрлүүдийг агуулдаг.
    • ДОТООД НЭГДСЭН— зүүн талын хүснэгтийн бичлэгийг зөвхөн холболтын нөхцөл хангагдсан тохиолдолд, баруун талын хүснэгтийн бичлэгийг зөвхөн холболтын нөхцөл хангагдсан тохиолдолд сонгоход оруулна;
    • ЗҮҮН ХОЛБОО— зүүн талын хүснэгтийн бичлэгийг ямар ч тохиолдолд сонгон шалгаруулалтад оруулах, баруун талын хүснэгтийн бичлэгийг зөвхөн холболтын нөхцөл хангагдсан тохиолдолд сонгон шалгаруулалтад оруулна;
    • БҮРЭН ХОЛБООТОЙ— зүүн талын хүснэгтийн бичлэгийг ямар ч тохиолдолд эхлээд сонголтонд оруулна, дараа нь зөвхөн холболтын нөхцөл хангагдсан тохиолдолд баруун талын хүснэгтийн бичлэгийг ямар ч тохиолдолд эхлээд сонголтонд оруулна. уулзаж байна. Энэ тохиолдолд үүссэн давхардсан мөрүүдийг дээжээс хасна.

    Холболтын төрлүүдийн дараа хоёр дахь хүснэгтийн нэр ба бусад нэрийг зааж өгсөн болно. Дараа нь түлхүүр үг гарч ирнэ BY, дараа нь логик операторууд хоорондоо холбогдсон харилцааны нөхцөлүүд БА, OR.Нөхцөл дэх илэрхийлэл бүр нь логикийн утгыг буцаах ёстой (Үнэн, Худал). Хэрэв эхний хүснэгт нь хоёр дахь хүснэгтээс бусад хүснэгтэд холбогдсон бол холболтын төрлийг дахин зааж өгнө гэх мэт. Холболтод оролцож буй хүснэгт бүр нь эргээд бусад хүснэгтүүдтэй холбогдож болох бөгөөд үүнийг асуулгын бүтцийн диаграммд харуулав. Хэрэв хүснэгт нь эхнийхтэй холбоогүй бол холболтын төрөлгүйгээр зааж өгсөн бол түүний холболтыг дагаж болно гэх мэт;

Түлхүүр үг болон өгөгдөл хувиргах блокууд

  • Бүлэг блок- энэ блок нь хүснэгтийн мөрүүдийг бүлэглэхэд ашиглагддаг. Түлхүүр үгийн дараа заасан талбаруудын утгууд байвал мөрүүдийг нэг болгон нэгтгэнэ GROUP BYадилхан болж хувирна. Энэ тохиолдолд бусад бүх талбаруудыг нэгтгэх функцийг ашиглан нийлбэрлэж, дундажлаж, ихэсгэж эсвэл багасгана. Талбарын блокт нэгтгэх функцийг ашигладаг. Жишээ: Хамгийн их(TableAlias.TableFieldName) AS FieldAlias
  • Нөхцөл байдлын блок- түлхүүр үгийн дараа энэ блокт ХААНАлогик оператороор тусгаарлагдсан нөхцөлт илэрхийллүүдийг зааж өгсөн болно БА, OR, сонгосон мөрүүдийн аль нэгийг түүвэрт оруулахын тулд нийлбэр дэх бүх нөхцөл нь утгатай байх шаардлагатай Үнэн.
  • БҮХИЙГ НЭГДҮҮЛ— энэ түлхүүр үг нь асуулга (оператор СОНГОХ). 1С асуулгын хэл нь хэд хэдэн асуултыг нэг дор нэгтгэх боломжийг олгодог. Асуултуудыг нэгтгэхийн тулд тэдгээр нь ижил талбартай байх ёстой;
  • «;» - цэг таслалыг бие биенээсээ хамааралгүй хэллэгийг салгахад ашигладаг СОНГОХ;
  • INDEX BY- түлхүүр үг нь түүний дараа заасан талбаруудыг индексжүүлэхэд ашиглагддаг;
  • Хураангуй блок- мод шиг дээжийг бүтээхэд ашигладаг. Түлхүүр үгийн дараа заасан бүлэглэх талбар бүрийн хувьд BY,сонголтод тусдаа мөр үүснэ. Энэ мөрөнд нэгтгэх функцийг ашиглан түлхүүр үгийн дараа заасан талбаруудын нийт утгыг тооцоолно. ҮР ДҮН.

Та 1С 8 асуулгын хэлийг үргэлжлүүлэн сурмаар байна уу? Дараа нь дараагийн нийтлэлийг уншина уу.

   

1С мэдээллийн сангийн өгөгдөлд оновчтой QUERY гаргах 17 дүрэм

1С платформ дахь мэдээллийн сангийн хүснэгтэд асуулга үүсгэх, гүйцэтгэхийн тулд тусгай програмчлалын хэлний объектыг ашигладаг. Хүсэлт. Энэ объектыг уг байгууламжийг дуудаж үүсгэнэ Шинэ хүсэлт. Асуулга нь шаардлагатай бол бүлэглэж, эрэмбэлсэн нарийн төвөгтэй өгөгдлийн дээж авах шаардлагатай үед ашиглахад тохиромжтой. Асуулга ашиглах сонгодог жишээ бол хуримтлал регистрийн төлөв байдлын хураангуйг тодорхой цаг хугацаанд олж авах явдал юм. Мөн асуулгын механизм нь янз бүрийн хугацаанд мэдээлэл авахад хялбар болгодог.

Хүсэлтийн байгууллага нь хүсэлтийг биелүүлэх ёстой заавар юм. Хүсэлтийн байгууллага нь дараахь зүйлийг тодорхойлдог.

  • асуулгын мэдээллийн эх сурвалж болгон ашигладаг мэдээллийн сангийн хүснэгтүүд;
  • асуулгад боловсруулах шаардлагатай хүснэгтийн талбарууд;
  • бүлэглэх дүрэм;
  • үр дүнг эрэмбэлэх;
  • гэх мэт.

Зааврыг тусгай хэлээр - асуулгын хэлээр эмхэтгэсэн бөгөөд тусдаа хэсгүүд - хэсэг, өгүүлбэр, түлхүүр үг, функц, арифметик болон логик оператор, тайлбар, тогтмол ба параметрүүдээс бүрдэнэ.

1С платформын асуулгын хэл нь бусад SQL хэлнүүдийн синтакстай маш төстэй боловч ялгаа бий. Суурилуулсан асуулгын хэлний гол давуу талууд нь: талбаруудыг ялгах, виртуал хүснэгтүүд байх, үр дүнтэй ажиллахад тохиромжтой, асуулгад бичээгүй талбарууд.

1С платформ асуулгын хэл дээр мэдээллийн сангийн асуулга бичих зөвлөмжүүд:

1) Хүсэлтийн хэсэг нь урьдчилан тодорхойлсон тохиргооны өгөгдлийг агуулж болно, тухайлбал:

  • тооллын утгууд;
  • урьдчилан тодорхойлсон өгөгдөл:
  • лавлах ном;
  • шинж чанарын төрлүүдийн төлөвлөгөө;
  • дансны бүдүүвч;
  • тооцооны төрлүүдийн төлөвлөгөө;
  • хоосон холбоосууд;
  • бизнесийн үйл явцын маршрутын цэгийн утгууд.

Мөн хүсэлтийн текст нь өгөгдлийн сангийн хүснэгтийн талбаруудад оноож болох системийн дугаарлалтын утгыг агуулж болно: Хуримтлалын хөдөлгөөний төрөл, Дансны төрөл, Нягтлан бодох бүртгэлийн хөдөлгөөний төрөл. Асуулгад VALUE функцийн төрлийг ашиглан урьдчилан тодорхойлсон тохиргооны өгөгдөл болон системийн тооллын утгуудад ханддаг. Энэхүү шууд утга нь асуулгын уншигдах чадварыг сайжруулж, асуулгын параметрийн тоог багасгах боломжийг олгодог.

Шууд утгыг ашиглах жишээ УТГА:

  • ХААНА Хот = ҮНЭ ЦЭНЭ(Лавлах.Хотууд.Москва)
  • ХААНА Хот = ҮНЭТ (Лавлах.Хотууд.ХоосонХолбоос)
  • WHEREProductType = VALUE(Тооцоо. Бүтээгдэхүүний Төрөл. Үйлчилгээ)
  • WHEREMMotionType = VALUE(Хөдөлгөөний Төрөл Хуримтлал. Ирж буй)
  • WHERE RoutePoint = VALUE(BusinessProcess.BusinessProcess1.RoutePoint.Action1)

2) Зааврыг ашиглах АВТО ЗАХИАЛГААсуулга дуусгахад удаан хугацаа шаардагдах тул эрэмбэлэх шаардлагагүй бол үүнийг огт ашиглахгүй байх нь дээр. Ихэнх тохиолдолд зааврыг эрэмбэлэх нь хамгийн сайн арга юм АНХААРУУЛАХ.

Автомат захиалга нь дараах зарчмын дагуу ажилладаг.

  • Хэрэв хүсэлтэд ORDER BY заалтыг заасан бол энэ зүйлд байгаа хүснэгтийн холбоос бүрийг хүснэгтийг анхдагчаар эрэмбэлсэн талбаруудаар солино (лавлах номын хувьд энэ нь код эсвэл нэр, баримт бичгийн хувьд - баримт бичгийн огноо). Хэрэв эрэмбэлэх талбар нь шаталсан лавлахыг хэлж байгаа бол энэ лавлахаар эрэмбэлэгдсэн эрэмбэлэгдэнэ.
  • Хэрэв асуулгад ORDER BY заалт байхгүй, харин TOTAL заалт байгаа бол асуулгын үр дүнг TOTAL заалтын түлхүүрийн ард байгаа талбаруудаар эрэмбэлнэ. үгсийн програм хангамж, ижил дарааллаар, хэрэв нийлбэр дүнг лавлагааны талбаруудаар тооцсон бол холбоосууд байсан хүснэгтүүдийн анхдагч эрэмбэлэх талбаруудаар.
  • Хэрэв асуулгад ORDER BY болон TOTAL заалт байхгүй, харин GROUP BY заалт байгаа бол асуулгын үр дүнг тухайн зүйлд байгаа талбаруудаар ижил дарааллаар эрэмбэлэх ба хэрэв бүлэглэлийг лавлагааны талбараар гүйцэтгэсэн бол , дараа нь өгөгдмөлөөр лавлагаа авсан хүснэгтүүдийг эрэмбэлэх.
  • Хэрэв асуулгад ORDER BY, TOTAL, GROUP BY гэсэн заалт байхгүй бол үр дүн нь тухайн өгөгдлийг сонгосон хүснэгтүүдийн анхдагч эрэмбэлэх талбаруудаар асуулгад гарч ирэх дарааллаар эрэмблэгдэнэ.
  • Хэрэв асуулгад TOTAL заалт байгаа бол нийт түвшин тус бүрийг тусад нь эрэмбэлнэ.

3) Асуулгын үр дүнг хэрэглэгчдэд үзүүлэх үед (жишээлбэл, асуулга үүсгэх эсвэл асуулгын үр дүнг хүснэгтийн баримт бичгийг ашиглан харуулах) мэдээллийн санд хүсэлтийг давтахаас зайлсхийхийн тулд зааварчилгааг ашиглах нь зүйтэй. ТАНИЛЦУУЛГА ХОЛБООС, энэ нь танд лавлагааны утгын дүрслэлийг авах боломжийг олгодог. Жишээ:

Мөн зааврыг ашиглах боломжтой ГҮЙЦЭТГЭЛ- дурын төрлийн утгын мөрт дүрслэлийг олж авахад зориулагдсан. Эдгээр заавруудын ялгаа нь эхний тохиолдолд зааврууд нь холбоосоор дамжих тохиолдолд үр дүн нь мөр байх болно.Бусад тохиолдолд дамжуулсан параметрийн утга нь үр дүн болно. Хоёр дахь тохиолдолд зааврын үр дүн нь үргэлж мөр байх болно!

4) Хэрэв хүсэлт нь нийлмэл төрлийн талбарыг агуулж байгаа бол ийм талбаруудын хувьд зааврыг ашиглан талбарын утгыг тодорхой төрөл болгон хөрвүүлэх шаардлагатай болно. ЭКСПРЕСС, энэ нь шаардлагагүй хүснэгтүүдийг зүүн талаас нь арилгах, нарийн төвөгтэй өгөгдлийн төрлийн талбарт нэгтгэх, асуулгын гүйцэтгэлийг хурдасгах боломжийг олгоно. Жишээ:

Үлдсэн барааны хуримтлалын бүртгэл байдаг бөгөөд үүнд Бүртгүүлэгч талбар нь нийлмэл төрөлтэй байдаг. Хүсэлтэд бараа хүлээн авсан огноо, баримт бичгийн дугаарыг сонгосон бол Бүртгэлийн талбараар дамжуулан баримт бичгийн дэлгэрэнгүй мэдээлэлд хандах үед хуримтлалын бүртгэлийн хүснэгтийн бүртгэгчийн баримт бичгийн хүснэгттэй зүүн талын олон холболт байхгүй байна.

Код 1C v 8.x СОНГОХ
EXPRESS(Үлдсэн бараа.Бүртгэгч АС Баримт бичиг. Бараа хүлээн авсан).Дугаар AS Хүлээн авсан дугаар,
EXPRESS(Үлдсэн бараа. Бүртгүүлэгч АС Баримт бичиг. Бараа хүлээн авсан). Date AS Хүлээн авсан огноо
FROM
Хуримтлалын бүртгэл.Үлдсэн бараа AS Үлдсэн бараа

Хэрэв төрлөөр цутгах нь боломжгүй гэж үзвэл тухайн төрлийн цутгасны үр дүн нь утга болно NULL.

5) Зааврын талаар бүү мартаарай ЗӨВШӨӨРӨЛТЭЙ, энэ нь асуулга нь зөвхөн одоогийн хэрэглэгчийн эрхтэй бичлэгүүдийг сонгоно гэсэн үг юм. Хэрэв энэ үгийг заагаагүй бол хүсэлт нь хэрэглэгч эрхгүй бичлэгүүдийг сонговол хүсэлтийг алдаатай боловсруулах болно.

6) Хэрэв асуулгад холболтыг ашигладаг бөгөөд холболтын зарим хэсэг нь үүрлэсэн хүснэгтүүдийг (хүснэгт хэсэгтэй баримт бичиг) агуулж байгаа бол заримд нь байхгүй бол сонголтын жагсаалтыг талбарууд - хоосон үүрлэсэн хүснэгтүүдээр нэмэх шаардлагатай болно. Үүнийг түлхүүр үг ашиглан хийдэг ХООСОН ХҮСНЭГТ, үүний дараа үүрлэсэн хүснэгтийг бүрдүүлэх талбаруудын нэрсийг хаалтанд зааж өгсөн болно. Жишээ:

Код 1С v 8.x // Тоо ба Зохиолын талбаруудыг сонгоно уу
// виртуал хүснэгтээс Document.Expendture
Холбоосыг СОНГОХ.Дугаар, ХООСОН ХҮСНЭГТ.(No., Бараа, Тоо хэмжээ) БҮРДЭЛЭЭР
Баримтаас. Зардлын нэхэмжлэх
БҮХИЙГ НЭГДҮҮЛ
Холбоос СОНГОХ.Тоо, Агуулга.(Мөрийн дугаар, Бүтээгдэхүүн, Тоо хэмжээ)
Баримтаас.Нэхэмжлэх баримтаас.Нэхэмжлэхээс.Бүрдэл.*

7) Асуулгын үр дүнд давхардсан мөр гарахаас сэргийлэхийн тулд та зааврыг ашиглах хэрэгтэй ТӨРӨЛ, учир нь энэ нь илүү ойлгомжтой, ойлгомжтой, зааварчилгаа GROUP BYнэгтгэх функцийг ашиглан бүлэглэхэд ашигладаг. Ксати, нэгтгэх функцийг ашиглахдаа санал болгож байна GROUP BYогт заагаагүй байж болох ч бүх асуулгын үр дүнг нэг мөрөнд бүлэглэнэ. Жишээ:

Код 1C v 8.x // Аль эсрэг талуудыг олж мэдэх шаардлагатай
// барааг тухайн хугацаанд ачуулсан.
Төрөл бүрийн хэсгийг сонгоно уу
Баримт бичиг.Нэхэмжлэх.Харилцагч тал

8) Заавар GROUP BYХэрэв үүрлэсэн хүснэгтийн талбарт нэгтгэх функцүүд хэрэглэгдэж байгаа бол үр дүнг эдгээр талбараар бүлэглэхгүйгээр дээд түвшний талбарт хандах боломжийг танд олгоно. Хэдийгээр 1С тусламж нь асуулгын үр дүнг бүлэглэхдээ сонгох талбаруудын жагсаалтад нэгтгэх функцийг зааж өгөх ёстой бөгөөд сонгох талбаруудын жагсаалтад нэгтгэх функцээс гадна зөвхөн бүлэглэх талбаруудыг зааж өгөхийг зөвшөөрдөг. . Жишээ:

Код 1C v 8.x СОНГОХ
Бараа, үйлчилгээний хүлээн авалт.Бараа.(СУМ (Тоо хэмжээ), Нэршил),
Бараа, үйлчилгээний хүлээн авалт. Холбоос,
бараа үйлчилгээ хүлээн авах.Харилцагч тал
FROM
Баримт бичиг.Бараа, үйлчилгээний хүлээн авалт ХЭРХЭН Бараа, үйлчилгээг хүлээн авах
GROUP BY
Бараа, үйлчилгээний хүлээн авалт.Бараа.(Нэршил)

9) Заавар ISNULLутгыг орлуулах зорилготой юм NULLөөр утга руу шилжүүлнэ, гэхдээ эхний параметрийн төрөл нь мөр эсвэл тоо байвал хоёр дахь параметрийг эхнийх рүү хөрвүүлэх болно гэдгийг бүү мартаарай.

10) Холбоо барих үед үндсэн ширээТа дэд хүснэгтийн өгөгдөлд хандах боломжтой. Энэ функцийг дэд хүснэгтийн талбаруудыг ялгах гэж нэрлэдэг.

Жишээ (хүснэгт хэсгээс тодорхой бүтээгдэхүүн агуулсан баримт бичгийг хайх):

Receipt.Gods дэд хүснэгтийн асуулгаас энэ асуулгын давуу тал нь хэрэв баримт бичигт давхардсан тоо байгаа бол асуулгын үр дүн нь DIFFERENT түлхүүр үг ашиглахгүйгээр зөвхөн өвөрмөц баримтуудыг буцаана.

11) B операторын сонирхолтой хувилбар нь эдгээр олонлогуудын багцад эрэмбэлэгдсэн олонлог орсон эсэхийг шалгах явдал юм (Field1, Field2, ..., FieldN) B (Field1, Field2, ..., FieldN).

Код 1C v 8.x СОНГОХ
Эсрэг талууд.Холбоос
ХААНА
(Counterparties.Link, Products.Link) Б
(Борлуулалт. Үйлчлүүлэгч, Борлуулалт. Бүтээгдэхүүнийг сонго
FROM RegisterAccumulation.Sales AS Sales)
FROM
Лавлах.Харилцагч талууд,
Лавлах.Бүтээгдэхүүн

12) Боломжтой бол виртуал асуулгын хүснэгтийг ашигла. Асуулга үүсгэх үед систем нь өгөгдлийн эх сурвалж болгон хэд хэдэн виртуал хүснэгтүүдийг өгдөг - эдгээр нь кодын харгалзах хэсгийг гүйцэтгэх үед систем үүсгэсэн асуулгын үр дүн юм.

Хөгжүүлэгч нь системээс түүнд өгсөн виртуал хүснэгттэй ижил өгөгдлийг бие даан олж авах боломжтой боловч эдгээр өгөгдлийг олж авах алгоритмыг оновчтой болгохгүй, учир нь:

Бүх виртуал хүснэгтүүдийг параметржүүлсэн, өөрөөр хэлбэл хөгжүүлэгч нь виртуал хүснэгт үүсгэх хүсэлтийг үүсгэх үед систем ашиглах зарим параметрүүдийг тохируулах боломжийг олгодог. Виртуал хүснэгтийн ямар параметрүүдийг хөгжүүлэгч тодорхойлсоноос хамааран систем үүсгэж болно ТӨРӨЛижил виртуал хүснэгтийг олж авахын тулд асуулга хийх бөгөөд тэдгээр нь дамжуулсан параметрүүдийн хувьд оновчтой байх болно.

Хөгжүүлэгч нь системд хандах боломжтой өгөгдөлд хандах нь үргэлж боломжгүй байдаг.

13) Үйлчлүүлэгч-серверийн горимд функц SUBSTRING() SQL Server мэдээллийн баазын серверт дамжуулсан харгалзах SQL мэдэгдлийн SUBSTRING() функцийг ашиглан хэрэгжүүлдэг бөгөөд энэ нь SUBSTRING() функцийн үр дүнгийн төрлийг параметрийн төрөл, утгаас хамааран нарийн төвөгтэй дүрмүүдийг ашиглан тооцоолдог. түүнчлэн ашигласан нөхцөл байдлаас хамааран . Ихэнх тохиолдолд эдгээр дүрмүүд нь асуулгын гүйцэтгэлд ямар ч нөлөө үзүүлэхгүй боловч SQL Server-ийн тооцоолсон хамгийн их үр дүнгийн мөрийн урт нь асуулгын гүйцэтгэлд чухал ач холбогдолтой байдаг. Зарим нөхцөл байдалд SUBSTRING() функцийг ашиглах үед түүний үр дүнгийн хамгийн их урт нь SQL Server дээрх 4000 тэмдэгт бүхий хязгаарлагдмал урттай мөрийн хамгийн их урттай тэнцүү байж болохыг санах нь чухал юм. Энэ нь асуулга гэнэтийн эвдрэлд хүргэж болзошгүй:

SQL серверт зориулсан Microsoft OLE DB Provider: Анхааруулга: GROUP BY эсвэл ORDER BY заалтын бүх баганын нийт урт нь 8000 байтаас хэтэрсэн тул асуулгын процессор оновчтой болгогчоос асуулгын төлөвлөгөө гаргаж чадсангүй.

HRESULT=80040E14, SQLSTATE=42000, уугуул=8618

14) болгоомжтой хэрэглээрэй ЭСВЭЛдизайн дээр ХААНА, учир нь OR нөхцөлийг ашиглах нь асуулгыг ихээхэн хүндрүүлдэг. Асуудлыг дизайнаар шийдэж болно БҮХИЙГ НЭГДҮҮЛ. Жишээ:

Код 1C v 8.x СОНГОХ

FROM

ХААНА
_Demo Contractors.Link =Link1
БҮХИЙГ НЭГДҮҮЛ
СОНГОХ
_Demo Contractors.NameFull
FROM
Лавлах._Demo Counterparties ХЭРХЭН _Demo Conterparties
ХААНА
_Demo Contractors.Link = Link2

15) Нөхцөл байдал ОРНОдизайн дээр ХААНАЭнэ нь нэг төрлийн зүйл тул асуулгын гүйцэтгэлийн хугацааг нэмэгдүүлдэг БИШ (OR1 OR2 ... ORn), тиймээс том ширээг ашиглахыг хичээ ЗҮҮН НЭГДСЭН НӨХЦӨЛ НӨХЦӨЛ БАЙНА. Жишээ:

Код 1C v 8.x СОНГОХ
_Demo Contractors.Link
FROM
Лавлах._Demo Counterparties ХЭРХЭН _Demo Conterparties
ЗҮҮН ХОЛБОГДОЛЫН Баримт бичиг._Худалдан авагчийн Демо захиалга ХЭРХЭН _Худалдан авагчийн Демо захиалга
Програм хангамжийн _Демо эсрэг талууд.Холбоос = _Худалдан авагчийн Демо захиалга.Харилцагч тал
ХААНА
_Худалдан авагчийн загвар захиалга.Харилцагч тал ХҮМҮҮС БАЙНА

16) Ашиглах үед Түр зуурын ширээТа нөхцөлийг индексжүүлж, эдгээр хүснэгтийн талбаруудыг нэгтгэх хэрэгтэй, ГЭХДЭЭ индексийг ашиглах үед асуулга бүр удааширч болно. Иймд индекстэй болон индексгүй асуулга бүрд дүн шинжилгээ хийж, асуулгын гүйцэтгэлийн хурдыг хэмжиж, эцсийн шийдвэр гаргах шаардлагатай.

Хэрэв та эхлээд зарим талбараар индексжүүлсэн түр зуурын хүснэгтэд өгөгдлийг байрлуулах юм бол түр хүснэгтэд эдгээр талбарууд дээр индекс байхаа болино.

17) Хэрэв та ашиглахгүй бол Түр зуурын ширээний менежер, дараа нь түр зуурын хүснэгтийг тодорхой устгах шаардлагагүй, багц асуулга дууссаны дараа устгагдах болно, эс тэгвээс та дараах аргуудын аль нэгийг ашиглан түр хүснэгтийг устгах хэрэгтэй: тушаал. УСТГАХхүсэлтэд аргыг дуудна уу TemporaryTableManager.Close().

Евгений Гилевийн видео бичлэгээс гадна: 1С дээр асуулга бичихэд гардаг ердийн алдаанууд:

Асуулгын хэл нь хөгжүүлэгчдэд зориулсан 1С 8.3-ийн үндсэн механизмуудын нэг юм. Асуулга ашиглан та мэдээллийн санд хадгалагдсан аливаа өгөгдлийг хурдан авах боломжтой. Түүний синтакс нь SQL-тэй маш төстэй боловч зарим нэг ялгаа бий.

SQL-ээс 1С 8.3 (8.2) асуулгын хэлний гол давуу талууд:

  • лавлагааны талбаруудын лавлагааг хасах (объектийн дэлгэрэнгүй мэдээлэлд нэг буюу хэд хэдэн цэгийг шилжүүлэх);
  • үр дүнтэй ажиллах нь маш тохиромжтой;
  • виртуал хүснэгт үүсгэх чадвар;
  • хүсэлтийг англи, орос хэл дээр бичиж болно;
  • түгжрэлээс зайлсхийхийн тулд өгөгдлийг хаах чадвар.

1С дахь асуулгын хэлний сул талууд:

  • SQL-ээс ялгаатай нь 1С асуулгад өгөгдлийг өөрчлөхийг зөвшөөрдөггүй;
  • хадгалагдсан журмын дутагдал;
  • мөрийг тоо болгон хувиргах боломжгүй.

1С query хэлний үндсэн бүтцийн талаархи бидний бяцхан хичээлийг харцгаая.

1С дахь асуулга нь зөвхөн өгөгдөл хүлээн авах боломжийг олгодог тул аливаа асуулга "SELECT" гэсэн үгээр эхлэх ёстой. Энэ командын дараа өгөгдөл авах ёстой талбаруудыг зааж өгсөн болно. Хэрэв та "*" гэж зааж өгвөл боломжтой бүх талбарыг сонгох болно. Өгөгдлийг сонгох газрыг (баримт бичиг, регистр, лавлах гэх мэт) "FROM" гэсэн үгийн дараа заана.

Доор авч үзсэн жишээнд "Нэршил" лавлахаас бүх нэрсийн нэрийг сонгосон. "ХЭРХЭН" гэсэн үгийн дараа хүснэгт болон талбаруудын хоцрогдсон нэрийг (нэр) зааж өгсөн болно.

СОНГОХ
Нэршил.Нэр AS Нэршлийн нэр
FROM
Лавлах.Нэршил AS Нэршил

"SELECT" командын хажууд та түлхүүр үгсийг зааж өгч болно:

  • ТӨРӨЛ. Асуулга нь зөвхөн дор хаяж нэг талбарт ялгаатай мөрүүдийг сонгох болно (давхардалгүйгээр).
  • FIRST n, Хаана n– үр дүнгийн эхнээс сонгох шаардлагатай мөрүүдийн тоо. Ихэнхдээ энэ бүтцийг ангилахтай хамт ашигладаг (ORDER BY). Жишээлбэл, та огноогоор нь сүүлийн үеийн тодорхой тооны баримт бичгийг сонгох шаардлагатай үед.
  • ЗӨВШӨӨРӨЛТЭЙ. Энэхүү загвар нь мэдээллийн сангаас зөвхөн одоогийн хэрэглэгчдэд байгаа бичлэгүүдийг сонгох боломжийг олгодог. Энэ түлхүүр үгийн хэрэглээнд үндэслэн хэрэглэгч хандах эрхгүй байгаа бичлэгүүдийг асуух гэж оролдох үед алдааны мессеж хүлээн авах болно.

Эдгээр түлхүүр үгсийг хамтад нь эсвэл тусад нь ашиглаж болно.

ӨӨРЧЛӨЛТИЙН ТӨЛӨӨ

Энэхүү санал нь харилцан зөрчилдөөнөөс урьдчилан сэргийлэхийн тулд өгөгдлийг блоклодог. Гүйлгээ дуусах хүртэл түгжигдсэн өгөгдлийг өөр холболтоос уншихгүй. Энэ зүйлд та түгжих шаардлагатай тодорхой хүснэгтүүдийг зааж өгч болно. IN өөрөөрбүгд хаагдах болно. Дизайн нь зөвхөн автомат түгжих горимд хамаарна.

Ихэнх тохиолдолд үлдэгдлийг хүлээн авахдаа "ӨӨРЧЛӨЛТИЙН ТӨЛӨӨ" заалтыг ашигладаг. Эцсийн эцэст, хэд хэдэн хэрэглэгчид програм дээр нэгэн зэрэг ажиллаж байхад нэг нь үлдэгдэл хүлээн авах үед нөгөө нь тэдгээрийг өөрчлөх боломжтой. Энэ тохиолдолд гарсан үлдэгдэл зөв байхаа болино. Хэрэв та энэ саналын дагуу өгөгдлийг хаах юм бол эхний ажилтан зөв үлдэгдлийг хүлээн авч, шаардлагатай бүх залруулга хийх хүртэл хоёр дахь ажилтан хүлээхээс өөр аргагүй болно.

СОНГОХ
харилцан тооцоо.Ажилтан,
харилцан төлбөр тооцоо.Харилцан тооцооны дүн Үлдэгдэл
FROM
Хуримтлалын бүртгэл.Ажилчидтай харилцан тооцоо хийх.Үлдэл AS Харилцан тооцоо хийх
ӨӨРЧЛӨЛТИЙН ТӨЛӨӨ

ХААНА

Загвар нь байршуулсан өгөгдөл дээр ямар нэгэн сонголт хийх шаардлагатай. Бүртгэлээс мэдээлэл авах зарим тохиолдолд виртуал хүснэгтийн параметрүүдэд сонгох нөхцөлийг зааж өгөх нь илүү үндэслэлтэй байдаг. "WHERE"-г ашиглах үед эхлээд бүх бүртгэлийг татаж авах бөгөөд зөвхөн дараа нь сонголт хийх бөгөөд энэ нь асуулгын явцыг ихээхэн удаашруулдаг.

Тодорхой албан тушаалд холбогдох хүмүүсийг авах хүсэлтийн жишээг доор харуулав. Сонгох параметр нь дараах форматтай байна: &ParameterName (параметрийн нэр дур зоргоороо байна).

СОНГОЛТ (ХЭРЭГСЭЛ)

Загвар нь хүсэлтийн үндсэн хэсэгт нөхцөлийг шууд зааж өгөх боломжийг олгодог.

Доорх жишээн дээр "Нэмэлт талбар" нь баримт бичиг байрлуулсан эсэхээс хамаарч текстийг агуулна.

СОНГОХ
ЭлсэлтийнT&U.Link,
СОНГОЛТ
Элсэлтийн болон U.Гүйцэтгэсэн ХЭЗЭЭ
Дараа нь "Баримт бичиг батлагдсан!"
БУСДАА "Баримт бичгийг нийтлээгүй..."
Нэмэлт талбараар Төгсгөл
FROM
Баримт бичиг.Бараа, үйлчилгээний хүлээн авалт ХЭРХЭН хүлээн авах Т&C

НЭГДЭХ

Тодорхой харилцааны нөхцөл дээр тулгуурлан хоёр хүснэгтийг холбодог.

ЗҮҮН/БАРУУН ХОЛБОО

ЗҮҮН холболтын мөн чанар нь эхний заасан хүснэгтийг бүхэлд нь авч, хоёр дахь нь холболтын нөхцлийн дагуу үүнтэй холбогддог. Хэрэв хоёр дахь хүснэгтийн эхний хүснэгтэд тохирох бичлэг байхгүй бол NULL-ийг тэдгээрийн утгаар орлуулна. Энгийнээр хэлбэл, үндсэн хүснэгт нь эхний заасан хүснэгт бөгөөд хоёр дахь хүснэгтийн өгөгдөл (хэрэв байгаа бол) аль хэдийн түүний өгөгдлөөр орлуулсан байна.

Тухайлбал, “Бараа, үйлчилгээний хүлээн авсан баримт”-аас нэр төрлийн бараа, “Барааны үнэ” мэдээллийн бүртгэлээс үнийг авах шаардлагатай. Энэ тохиолдолд ямар нэгэн албан тушаалын үнэ олдохгүй бол оронд нь NULL-г орлуулна. Баримт бичгийн бүх зүйлийг үнэ байгаа эсэхээс үл хамааран сонгоно.

СОНГОХ
Баримт ба U.Нэршил,
Үнэ.Үнэ
FROM
Баримт бичиг.Бараа, үйлчилгээний хүлээн авалт.Бараа ХЭРХЭН хүлээн авах Т&C
ДОТООД НЭГДСЭН БүртгэлМэдээлэл.ҮнэНэршил.ЗүсмэлСүүлийн AS үнэ
Програм хангамжийн баримт&U.Нэршил = Үнэ.Нэршил

ЗӨВ БАЙДАЛ бүх зүйл яг эсрэгээрээ байна.

БҮРЭН ХОЛБООТОЙ

Энэ төрлийн холболт нь өмнөхөөсөө ялгаатай бөгөөд үүний үр дүнд эхний болон хоёр дахь хүснэгтийн бүх бүртгэл буцаагдах болно. Хэрэв заасан холбоосын нөхцөл дээр үндэслэн эхний эсвэл хоёр дахь хүснэгтэд ямар ч бичлэг олдохгүй бол оронд нь NULL-г буцаана.

Өмнөх жишээнд бүрэн холболтыг ашиглах үед "Бараа, үйлчилгээний хүлээн авалт" баримт бичигт байгаа бүх зүйл, "Барааны үнэ" бүртгэлээс хамгийн сүүлийн үеийн бүх үнийг сонгох болно. Эхний болон хоёр дахь хүснэгтэд олдоогүй бичлэгийн утга NULL-тэй тэнцүү байна.

ДОТООД НЭГДСЭН

INNER JOIN болон FULL JOIN хоёрын ялгаа нь хэрэв хүснэгтүүдийн аль нэгнээс нь бичлэг олдохгүй бол асуулга нь огт харуулахгүй. Үүний үр дүнд, өмнөх жишээн дээр "БҮРЭН" гэснийг "ДОТООД" гэж сольсон бол "Бараа, үйлчилгээ хүлээн авсан" баримт бичгийн "Барааны үнэ" мэдээллийн бүртгэлд бүртгэлтэй зүйлүүдийг л сонгоно.

GROUP BY

1С асуулгад бүлэглэх нь хүснэгтийн мөрүүдийг (бүлэглэх талбаруудыг) тодорхой дагуу хумих боломжийг олгодог. нийтлэг шинж чанар(бүлэглэсэн талбарууд). Бүлэглэх талбаруудыг зөвхөн нэгтгэх функцийг ашиглан харуулах боломжтой.

Дараах асуулгын үр дүн нь бүтээгдэхүүний төрлүүдийн жагсаалт бөгөөд тэдгээрийн үнэ хамгийн их байх болно.

СОНГОХ
,
MAX(Price.Price) AS Үнэ
FROM

GROUP BY
Үнэ.Нэршил.Нэршлийн төрөл

ҮР ДҮН

Бүлэглэхээс ялгаатай нь нийлбэрийг ашиглах үед бүх бичлэгүүд гарч ирэх бөгөөд тэдгээрт нийт мөрүүд нэмэгддэг. Бүлэглэх нь зөвхөн ерөнхий бүртгэлийг харуулдаг.

Үр дүнг хүснэгтийн бүхэлд нь ("ЕРӨНХИЙ" гэсэн түлхүүр үг ашиглан), хэд хэдэн талбарууд, шаталсан бүтэцтэй талбаруудын хувьд ("ШИЕРАРХИ", "ЗӨВХӨН HIERARCHY" түлхүүр үгс) нэгтгэн дүгнэж болно. Үр дүнг нэгтгэхдээ нэгтгэх функцийг ашиглах шаардлагагүй.

Бүлэглэх аргыг ашиглан дээрх жишээтэй төстэй жишээг авч үзье. Энэ тохиолдолд асуулгын үр дүн нь зөвхөн бүлэглэсэн талбарууд төдийгүй нарийвчилсан бүртгэлүүдийг буцаана.

СОНГОХ
Үнэ.Нэршил.Нэршлийн төрөл AS Нэршлийн төрөл,
Үнэ.Үнэ AS үнэ
FROM
Мэдээллийн бүртгэл Нэршлийн үнэ. Хамгийн сүүлийн үеийн AS үнийн агшин зураг
ҮР ДҮН
МАКСИМУМ(Үнэ)
BY
Төрөл Нэршил

БАЙХ

Энэ оператор нь WHERE оператортой төстэй боловч зөвхөн нэгтгэсэн функцэд ашиглагддаг. Энэ операторын ашигладаг талбараас бусад үлдсэн талбаруудыг бүлэглэх ёстой. WHERE оператор нь нэгтгэх функцүүдэд тохирохгүй.

Доорх жишээн дээр 1000-аас хэтэрсэн тохиолдолд барааны дээд үнийг барааны төрлөөр бүлэглэн сонгосон.

СОНГОХ

MAX(Price.Price) AS Үнэ
FROM
Мэдээллийн бүртгэл Нэршлийн үнэ. Хамгийн сүүлийн үеийн AS үнийн агшин зураг
GROUP BY
Үнэ.Нэршил.Нэршлийн төрөл
БАЙХ
МАКСИМУМ(Үнэ. Үнэ) > 1000

АНХААРУУЛАХ

ORDER BY оператор нь асуулгын үр дүнг эрэмбэлдэг. Бичлэгүүдийг дарааллаар нь харуулахын тулд AUTO ORDER-ийг ашигладаг. Анхан шатны төрлүүдийг ердийн дүрмийн дагуу ангилдаг. Лавлах төрлүүдийг GUID-ээр эрэмбэлсэн.

Ажилчдын жагсаалтыг нэрээр нь эрэмбэлсэн жишээ:

СОНГОХ
Ажилтнууд.Нэр AS Нэр
FROM
Лавлах.Ажилтнууд ХЭРХЭН Ажилтнууд
АНХААРУУЛАХ
Нэр
АВТО ЗАХИАЛГА

Бусад 1С асуулгын хэлний бүтэц

  • НЭГДЭХ– хоёр асуулгын үр дүнг нэг болгон.
  • БҮХИЙГ НЭГДҮҮЛ– COMBINE-тэй төстэй, гэхдээ ижил мөрүүдийг бүлэглэхгүй.
  • ХООСОН ширээ– заримдаа хоосон хүснэгтийг тодорхойлохын тулд асуулгад нэгдэх үед ашиглагддаг.
  • PLACE– 1С-ийн нарийн төвөгтэй асуулгыг оновчтой болгох түр зуурын хүснэгтийг үүсгэдэг. Ийм хүсэлтийг багц хүсэлт гэж нэрлэдэг.

Асуулгын хэлний онцлогууд

  • SUBSTRINGзаасан байрлалаас тэмдэгтийн тоо хүртэл тэмдэгт мөрийг таслана.
  • ЖИЛ...ХОЁРтоон төрлийн сонгосон утгыг авах боломжийг танд олгоно. Оруулах параметр нь огноо юм.
  • ҮЕИЙН ЭХЛҮҮЛЭЛТ ба ҮЕИЙН Төгсгөлогноотой ажиллахад ашигладаг. Хугацааны төрлийг (ӨДӨР, САР, ЖИЛ гэх мэт) нэмэлт параметр болгон зааж өгсөн болно.
  • ADDKDATEогнооноос (SECOND, MINUTE, DAY гэх мэт) тодорхой төрлийн тодорхой цагийг нэмэх, хасах боломжийг танд олгоно.
  • ЗӨРҮҮЛЭХ огноогаралтын утгын төрлийг (ӨДӨР, ЖИЛ, САР гэх мэт) зааж, хоёр огнооны зөрүүг тодорхойлдог.
  • ISNULLдутуу утгыг заасан илэрхийллээр орлуулна.
  • ТӨЛӨӨЛӨЛ, ТӨЛӨӨЛӨЛИЙН ХОЛБООСзаасан талбарын стринг дүрслэлийг авах. Аливаа утгууд болон зөвхөн лавлагаа утгуудад тус тус хэрэглэнэ.
  • ТӨРӨЛ, ТӨРЛИЙН УТГАоролтын параметрийн төрлийг тодорхойлоход ашигладаг.
  • ХОЛБООСшинж чанарын утгын төрлийн логик харьцуулах оператор юм.
  • ЭКСПРЕССутгыг хүссэн төрөл рүү хөрвүүлэхэд ашигладаг.
  • ОН САР ӨДӨР ЦАГтоон утгуудаас (Жил, Сар, Өдөр, Цаг, Минут, секунд) "Огноо" төрлийн утгыг авдаг.
  • УТГА 1С хүсэлтэд энэ нь урьдчилан тодорхойлсон утгыг зааж өгөхөд ашиглагддаг - лавлах, тооллого, шинж чанарын төрлүүдийн төлөвлөгөө. Хэрэглээний жишээ: " Хуулийн хувь хүн = үнэ цэнэ(Тооцоо. Хууль ёсны хувь хүн. Хувь хүн) хаана«.

Query Builder

1С-ээр асуулга үүсгэхийн тулд маш тохиромжтой суурилуулсан механизм байдаг - асуулга зохион бүтээгч. Энэ нь дараах үндсэн табуудыг агуулна.

  • "Хүснэгт ба талбарууд" - сонгох шаардлагатай талбарууд болон тэдгээрийн эх сурвалжийг агуулна.
  • "Холболтууд" - ХОЛБОГДОЛЫН бүтцийн нөхцлийг тодорхойлдог.
  • “Бүлэглэх”—бүлэглэх бүтэц, тэдгээрт үндэслэн нэгтгэсэн талбаруудын тайлбарыг агуулна.
  • "Нөхцөл" - хүсэлт дэх өгөгдлийг сонгох үүрэгтэй.
  • "Нэмэлт" - Нэмэлт сонголтуудхүсэлт, тухайлбал "SELECT" командын түлхүүр үгс гэх мэт.
  • “Нэгдмэл/Алиас” - хүснэгтүүдийг нэгтгэх боломжуудыг зааж өгсөн ба бусад нэрүүдийг зааж өгсөн ("ХЭРХЭН" бүтэц).
  • "Захиалга" нь асуулгын үр дүнг эрэмбэлэх үүрэгтэй.
  • "Нийт" - "Бүлэглэх" табтай төстэй, гэхдээ "НИЙТ" бүтцэд ашигладаг.

Хүсэлтийн текстийг зүүн доод буланд байрлах "Хүсэлт" товчийг дарж харах боломжтой. Энэ маягт дээр гараар засах эсвэл хуулж болно.


Хүсэлтийн консол

Аж ахуйн нэгжийн горимд асуулгын үр дүнг хурдан харах эсвэл нарийн төвөгтэй асуулгад дибаг хийх бол -г ашиглана уу. Энэ нь хүсэлтийн текстийг агуулж, параметрүүдийг тохируулж, үр дүнг харуулна.

Та асуулгын консолыг ITS диск дээр эсвэл .

20.09.2014

Асуулгын хэлэнд "Зөвшөөрөгдсөн" заавар байдаг. Энэ нь өгөгдлийн сангийн бичлэгийн түвшинд хязгаарлалт тогтоох үед хэрэглэгч эрхгүй бичлэгүүдийг шүүж авах боломжийг платформд олгох зорилготой юм.

Энэ удирдамжийг асуулгад үргэлж ашиглах нь илүү дээр юм шиг санагдаж байна. Энэ нь тийм биш гэдгийг би маргах болно. Боломжтой бол үүнийг ашиглахаас зайлсхийх хэрэгтэй гэж би маргах болно, яагаад гэвэл энд байна.

Харилцан тооцоо хийх тайлан гаргаж байна гэж бодъё хувь хүмүүс. Хэрэглэгч нэг байгууллагад эрхтэй, мэдээллийн санд нэгээс олон байгууллага байгаа, мэдээллийн санд рекорд түвшний хязгаарлалтыг идэвхжүүлсэн. Мөн мэдээллийн санд "Байгууллага", "Хувь хүн" гэсэн хэмжээс бүхий "Харилцан тооцоо" бүртгэл байдаг. Хэрэв системд хүсэлт байгаа бол

"Сонгох

Байгууллага,

Хувь хүн

мөн нэг байгууллагын зөвшөөрөлтэй хэрэглэгчийн нэрийн өмнөөс гүйцэтгэх бөгөөд энэ бүртгэлд бусад байгууллагын бүртгэл байгаа тохиолдолд хүсэлтийг биелүүлэхгүй. Алдаа гарах бөгөөд алдааны тайлбар нь "Хэрэглэгч хүсэлтийг биелүүлэх хангалттай эрхгүй байна!" Энэ нь үнэн, платформ нь энэ бүртгэлд байгаа бусад байгууллагын бүртгэлд хамрагдах эрхгүй тул хуурч мэхлэхгүй.

Энэ тохиолдолд юу хийх вэ, "Зөвшөөрөгдсөн" удирдамжийг ашиглах уу? Миний бодлоор энэ нь үнэ цэнэтэй зүйл биш юм. Та зүгээр л байгууллагаараа сонголтоо хийх хэрэгтэй бөгөөд хэрэглэгч тайлан гаргах боломжтой болно. Өгөгдлийн найрлагатай тайлангийн асуулга иймэрхүү харагдах болно

"Сонгох

Байгууллага,

Хувь хүн

(Сонгох

Байгууллага

Хувь хүн)

Хуримтлалын бүртгэлээс.Харилцан тооцоо

(Хаана

Байгууллага

Хувь хүн)

Хэрэв хэрэглэгч хүснэгтэн дээрх хүсэлтийг сонголтгүйгээр гүйцэтгэвэл тайлан гарахгүй бөгөөд хэрэглэгч бусад байгууллагын өгөгдлийг танихгүй, харин өөрийн байгууллагад сонгосон тохиолдолд зөв өгөгдөлтэй болно.

Та дахин асууж болно - "Та яагаад Зөвшөөрөгдсөн удирдамжийг ашиглаж болохгүй гэж?" Энэ нь шууд сонголт хийх бөгөөд хэрэглэгчийг шаардлагагүй мессежээс хамгаалах болно!

Энэ асуултын хариулт нь энэ тохиолдолд хэрэглэгч шаардлагатай бүх өгөгдлийг тайланд оруулсан гэдгийг хэрхэн мэдэх болно. Өмнө нь энэ хэрэглэгч бүрэн эрхийнхээ дагуу ажиллаж, алдаа гаргаж, баримт бичигт өөр байгууллагын хүнийг сонгосон гэж бодъё. Өгөгдлийг татаж авсан, өөр байгууллагын хэлтэс нь байгууллагын баримт бичигт бүртгэгдсэн байх тохиолдол байж магадгүй юм (ZUP нь тэдний эзэмшигчдэд хязгаарлалт тавьдаг). Энэ тохиолдолд "Зөвшөөрөгдсөн" заавар нь хэрэглэгчдэд ямар ч мессеж илгээхгүйгээр хориглосон өгөгдлийг таслах бөгөөд тайланд тусгах ёстой бүх зүйл биш гэдгийг тэр мэдэхгүй.

Иймд та энэ удирдамжийг алдаа гэж үзэн стандарт тохиргооны хүсэлтэд ялгахгүйгээр оруулах ёсгүй. Зохицуулалттай тайлагнах хүсэлтэд үүнийг хийхийг маш ихээр хориглодог. Мэдээллийн үнэн зөв байх шаардлагатай бусад тайлан, баримт бичигт үүнийг хийх ёсгүй.

Гэхдээ танд хангалттай эрх байхгүй бол програмын "гацах" алдаанаас хэрхэн зайлсхийх вэ?

Тийм ээ, энэ нь маш энгийн, та "Оролдох" командыг ашиглах хэрэгтэй, энд жишээ байна:

оролдлого

Request.Run();

Үл хамаарах зүйл

Тайлан (Алдааны тайлбар());

EndAttempt;

-аас ирсэн тайланд ACS ашигланТайланг гүйцэтгэх програмын кодыг гараар, мөн оролдлого хийх замаар бичих ёстой.

Үүний үр дүнд хэрэглэгч буруу мэдээлэл хүлээн авахгүй бөгөөд боломжийн алдааны мэдэгдэл хүлээн авах болно.

Та RLS-ийг тохируулах нарийн ширийн зүйлстэй танилцаж болно тусдаа хэлтэсманай нийтлэлд.

"Үүрэг" тохиргооны объект нь тохиргооны объектууд дээрх үйлдлүүдийн (үйл ажиллагааны) эрхийг өгдөг.

"Бүтэн эрх" үүрэг.

Энэ бол зүгээр л бүх тохиргооны объектын бүх төрлийн эрхийг шалгадаг үүрэг (урьдчилан тодорхойлоогүй) юм.

Бусад үүргээс ялгарах зүйл нь “Захиргааны” эрх байдаг.

Хэрэв дор хаяж нэг хэрэглэгч үүссэн бол систем нь "Захиргааны" эрх байгаа эсэхийг шалгаж эхэлдэг - дор хаяж нэг хэрэглэгч үүнийг эзэмшсэн байх ёстой.

Бичлэгийн түвшний хандалтын хязгаарлалт

Row Level Security (RLS) – рекорд түвшний хязгаарлалт.

Өгөгдлийн хандалтыг хязгаарлах механизм нь зөвхөн мета өгөгдлийн объектын түвшинд төдийгүй мэдээллийн сангийн объектын түвшинд нэвтрэх эрхийг удирдах боломжийг олгодог. Мэдээллийн хандалтыг хязгаарлахад дараах объектуудыг ашиглаж болно.

  • дүрүүд,
  • сессийн параметрүүд,
  • функциональ сонголтууд,
  • давуу эрхтэй хуваалцсан модулиуд,
  • асуулгын хэл дээр ЗӨВШӨӨРӨЛТЭЙ түлхүүр үг.

Энэхүү механизм нь эдгээр хүснэгтийн мөрийн талбаруудын утгуудад тогтоосон дурын нөхцөл дээр үндэслэн мета өгөгдлийн объектын хүснэгтийн бүртгэлд хандах хандалтыг хязгаарлах зорилготой юм. Жишээлбэл, зөвхөн "таны" түншүүд, байгууллагууд гэх мэт бүртгэлийг харах.

1С дахь хандалтын хязгаарлалтын техникийн хэрэгжилт

1С нь DBMS-д хүсэлт гаргадаг. Серверийн кластер нь хүсэлтэд RLS-ээр нэвтрэхийг хязгаарлах нөхцлийн текстийг агуулсан ХААНА гэсэн хэсгийг нэмж, дараа нь энэ хүсэлтийг DBMS руу илгээж, задалсан өгөгдлийг 1С клиент рүү буцаана.


Энэ механизм нь үйлчлүүлэгчийн хүсэлтийн дагуу ажиллах болно:

  • тайланд,
  • динамик жагсаалт болон ердийн жагсаалт хэлбэрээр
  • захиалгат асуулгад.

Механизмын ийм хэрэгжилт нь гүйцэтгэлд ихээхэн нөлөөлдөг.

Хандалтын хязгаарлалтыг тойрч гарах арга замууд.

Томоохон нөөц шаардсан үйлдлүүдэд (жишээлбэл, баримт бичгийг дахин байршуулах) кодын зарим хэсгийг давуу эрхтэй модулиуд руу шилжүүлж болно.

A) Давуу эрхтэй модуль шинж чанарт "Эрх олгогдсон" туг бүхий нийтлэг модуль юм.

Үүний онцлог нь түүний доторх код нь RLS гэх мэт хандалтын эрхийн хяналтгүйгээр хийгддэг явдал юм.


B) Мөн давуу эрхтэйгоримыг асааж болно баримт бичгийн объектын модулиудын хувьд. Үүнийг баримт бичгийн шинж чанар, туг дээр хийдэг

  • Хийх үед давуу эрх олгох
  • Гүйлгээг цуцлах үед давуу эрхтэй горим


B) арга SetPrivilegedMode()

Системийн команд нь аливаа модулийн кодын нэг хэсгийг давуу эрхтэй болгох боломжийг олгодог.

Кодын дараагийн мөрөөс давуу эрхтэй гүйцэтгэх горим ажиллах болно.

Энэ горимыг идэвхгүй болгох шугам хүртэл эсвэл процедур / функц дуусах хүртэл ажиллана

(Үнэн);

// энд байгаа аливаа кодыг эрхийн хяналт болон RLSгүйгээр гүйцэтгэх болно

PrivilegedMode тохируулах(Худлаа); // эсвэл процедурын төгсгөл / функц

Давуу эрхтэй горимыг хэдэн удаа идэвхжүүлсэн нь түүнийг идэвхгүй болгосон тоотой тохирч байх ёстой. Гэсэн хэдий ч, хэрэв процедур эсвэл функц дотор давуу эрхтэй горим асаалттай (нэг ба түүнээс дээш удаа) байсан ч унтраагаагүй бол процедур эсвэл функцэд бүрэн бус асаалттай байсан ч систем автоматаар унтрах болно.

Хэрэв процедур эсвэл функцэд аргыг дуудвал PrivilegedMode тохируулах(Худал) аргын дуудлагаас илүү хийсэн PrivilegedMode тохируулах(Үнэн), дараа нь үл хамаарах зүйл хаягдах болно

Чиг үүрэг PrivilegedMode() давуу горим идэвхжсэн хэвээр байвал Үнэн, бүрэн идэвхгүй бол Худал буцаана. Энэ нь тодорхой функц дэх давуу горимын тохиргооны тоог шинжлэхгүй.

Бүх дуудагдсан процедур, функцууд нь давуу эрхтэй горимд ажиллах болно.


Мөн давуу эрхтэй сессийг эхлүүлэх боломжтой. Энэ бол системийн эхэн үеэс давуу эрхтэй горимыг бий болгосон сесс юм. Түүнээс гадна, үйл ажиллагааны явцад арга PrivilegedMode() нь үргэлж Үнэнийг буцаадаг бөгөөд давуу горимыг идэвхгүй болгох чадварыг дэмждэггүй. Зөвхөн захиргааны эрхтэй хэрэглэгч (Захиргааны эрх) давуу эрхтэй сессийг эхлүүлэх боломжтой. Та товчлуурыг ашиглан сесс эхлүүлж болно тушаалын мөрҮйлчлүүлэгчийн UsePrivilegedMode програм эсвэл холболтын мөр параметрийг ажиллуулж байна мэдээллийн бааз prmod.


Асуулт мэдээжийн хэрэг гарч ирнэ: Хэрэв үүнийг амархан тойрч гарах боломжтой юм бол яагаад нэвтрэх хязгаарлалт тавих болов?

Аюулгүйн горим.

Тийм ээ, та давуу эрх бүхий гүйцэтгэх горимоор гадаад боловсруулалтыг бичиж, өгөгдлийг буулгах / эвдэх боломжтой. Үүнээс урьдчилан сэргийлэхийн тулд системд глобал контекст арга байдаг

SetSafeMode().

Аюулгүй горим нь бусад зүйлсийн дунд давуу горимыг үл тоомсорлодог.

Гадны процессоруудыг программчлан дуудах эсвэл тэдгээрийн модулиудаас процедур, функцуудыг экспортлохоос өмнө үүнийг суулгасан байх ёстой.

Хориотой үйлдлүүдийг гүйцэтгэх үед ажиллах үед онцгой тохиолдол гардаг.

Нэмж дурдахад, үүргийн тохиргооны түвшинд та хэрэглэгчдэд гадны тайлан, боловсруулалтыг интерактив байдлаар эхлүүлэх боломжийг идэвхгүй болгож болно.

Хандалтын хязгаарлалтыг тохируулж байна

RLS-ийг зөвхөн эрхээр тохируулах боломжтой:

  • унших (сонгох)
  • нэмэх (оруулах)
  • өөрчлөх (шинэчлэх)
  • устгах

Унших үйлдлүүдийн хувьдустгах ба өгөгдлийн санд байгаа объект нь өгөгдөлд хандах хязгаарлалтыг дагаж мөрдөх ёстой.

Нэмэх үйлдлийн хувьдӨгөгдлийн хандалтын хязгаарлалт нь мэдээллийн санд бичихээр төлөвлөж буй объекттой тохирч байх ёстой.

Өөрчлөх үйл ажиллагаанд зориулагдсанӨгөгдлийн хандалтын хязгаарлалт нь өөрчлөлт хийхээс өмнө (объектыг уншихын тулд) болон өөрчлөлтийн дараа (объектыг бичихийн тулд) хоёуланд нь нийцсэн байх ёстой.

Бусад бүх эрхийн хувьд ийм сонголт байхгүй.

“Нэршил” лавлахын “унших” эрхэнд шинэ хязгаарлалт оруулъя. Нэмэгдсэн хязгаарлалтыг тохируулах боломжтой талбаруудын жагсаалт нээгдэнэ.

Энэ нь хэрэв та шалгагдсан талбарт хандахыг оролдвол хязгаарлалт идэвхжих боловч шалгаагүй талбарт хандахыг оролдвол хязгаарлалт ажиллахгүй гэсэн үг юм.

Хэрэв та туг сонговол " Бусад талбарууд", хязгаарлалтыг тодорхой тохируулсан талбаруудаас бусад бүх хүснэгтийн талбаруудад хязгаарлалт тохируулагдах болно.


* Онцлог: нэмэх, өөрчлөх, устгах эрхийн хувьд:

  • Хязгаарлалтыг зөвхөн бүх талбарт тохируулах боломжтой.
  • Зөвхөн нэг хязгаарлалт байж болно.

"Унших" эрхийг авахын тулд та хэд хэдэн нөхцлийг тохируулах боломжтой бөгөөд тэдгээрийг "AND" логик оператортой хослуулах болно.

Үндсэн хязгаарлалтын өгөгдлийн объектын бүх талбарыг дараах төрлийн өгөгдлийн сангийн объектын хязгаарлалтад ашиглаж болохгүй.

  • хуримтлалын бүртгэлд нэвтрэх хязгаарлалт нь зөвхөн хязгаарлалтын үндсэн объектын хэмжилтийг агуулж болно;
  • нягтлан бодох бүртгэлийн бүртгэлд хязгаарлалт нь зөвхөн хязгаарлалтын үндсэн объектын балансын хэмжилтийг ашиглаж болно

Хэрэв өгөгдөлд нэвтрэх хязгаарлагдмал нөхцөлд тохиролцох боломжтой бүртгэлхуримтлал, нийлбэрт ороогүй хэмжилтийг ашигладаг бол эргэлтийн виртуал хүснэгтэд хандах үед хадгалагдсан нийлбэрийг ашиглахгүй бөгөөд асуулга нь хөдөлгөөний хүснэгтийн дагуу бүрэн гүйцэтгэгдэнэ.

Хандалтын хязгаарлалт тавих механизм.

1C: Enterprise дахь мэдээллийн санд хадгалагдсан өгөгдөл дээр хийсэн аливаа үйлдэл нь эцсийн дүндээ өгөгдлийг унших, өөрчлөх хүсэлт бүхий мэдээллийн сан руу залгахад хүргэдэг. Өгөгдлийн санд асуулга явуулах явцад 1С: Enterprise-ийн дотоод механизм нь хандалтын хязгаарлалтыг тавьдаг. Үүнд:

  • Эрхийн жагсаалтыг гаргана(унших, нэмэх, өөрчлөх, устгах), өгөгдлийн сангийн хүснэгтүүдийн жагсаалт, энэ асуулгад ашигласан талбаруудын жагсаалт.
  • Одоогийн хэрэглэгчийн бүх дүрээс хандалтын хязгаарлалтыг сонгосонхүсэлтэд хамаарах бүх эрх, хүснэгт, талбарын өгөгдөлд. Түүнээс гадна, хэрэв үүрэг нь хүснэгт эсвэл талбарын өгөгдөлд хандах хязгаарлалтыг агуулаагүй бол энэ нь ямар ч бүртгэлээс шаардлагатай талбаруудын утгыг энэ хүснэгтэд авах боломжтой гэсэн үг юм. Өөрөөр хэлбэл, өгөгдөлд хандах хязгаарлалт байхгүй байна гэдэг нь ХААНА ҮНЭН БАЙНА гэсэн хязгаарлалт байгаа гэсэн үг юм.
  • Бүх сессийн параметрүүд болон функциональ сонголтуудын одоогийн утгыг татаж авнасонгосон хязгаарлалтад оролцох.

Сеансын параметрийн утгыг авахын тулд эсвэл функциональ сонголтОдоогийн хэрэглэгч энэ утгыг сэргээх зөвшөөрөлтэй байх шаардлагагүй. Гэсэн хэдий ч, хэрэв зарим сесс параметрийн утгыг тохируулаагүй бол алдаа гарч, мэдээллийн сангийн хайлтыг гүйцэтгэхгүй.

Нэг дүрээс үүссэн хязгаарлалтуудыг AND үйлдлийг ашиглан нэгтгэдэг.

Янз бүрийн дүрүүдээс үүссэн хязгаарлалтуудыг OR үйлдлийг ашиглан нэгтгэдэг.

1С: Enterprise нь DBMS-д ханддаг SQL асуулгад бүтээгдсэн нөхцөлүүдийг нэмж оруулсан болно. Хандалтын хязгаарлалтын нөхцлөөс өгөгдөлд хандах үед эрхийг шалгахгүй (мета өгөгдлийн объект болон мэдээллийн сангийн объектын хувьд ч биш). Нэмж дурдахад нөхцөл нэмэх механизм нь "бүх" эсвэл "зөвшөөрөгдсөн" хязгаарлалтын сонгосон аргаас хамаарна.


* Онцлог: Хэрэв хэрэглэгч нэг объектын рекорд түвшинд тохируулсан хязгаарлалт бүхий хэд хэдэн үүрэгт хандах боломжтой бол энэ тохиолдолд хязгаарлалтын нөхцлийг "OR" логик үйлдлийг ашиглан нэмнэ. Өөрөөр хэлбэл, хэрэглэгчийн эрх мэдэл хуримтлагдсан байна.

Энэ нь дараахь дүгнэлтэд хүргэдэг: өөр өөр үүрэг бүхий нэг объект руу нэвтрэх эрхийг хязгаарлах нөхцлийг огтлолцохыг бүү зөвшөөр, учир нь энэ тохиолдолд хүсэлтийн текст нь ихээхэн төвөгтэй байх бөгөөд энэ нь гүйцэтгэлд нөлөөлнө.

"Бүх зүйл" арга.

"Бүх" аргыг ашиглан хязгаарлалт тавихдаа SQL асуулгад нөхцөл, талбаруудыг нэмдэг бөгөөд ингэснээр 1С: Enterprise нь мэдээллийн сангийн асуулга гүйцэтгэх явцад тухайн хэрэглэгчдэд хориглосон өгөгдлийг ашигласан эсэх талаар мэдээлэл авах боломжтой болно. Хэрэв хориглосон өгөгдлийг ашигласан бол хандалтын зөрчлийн улмаас хүсэлт гацах болно.

"Бүх" аргыг ашиглан нэвтрэх хязгаарлалтыг зурагт схемээр үзүүлэв.


"Зөвшөөрөгдсөн" арга.

"Зөвшөөрөгдсөн" аргыг ашиглан хязгаарлалт хийхдээ SQL асуулгад нөхцөл нэмж оруулснаар одоогийн хэрэглэгчдэд хориглосон бичлэгүүд асуулгын үр дүнд нөлөөлөхгүй. Өөрөөр хэлбэл, "зөвшөөрөгдсөн" горимд хязгаарлалт тавих үед тухайн хэрэглэгчдэд хориглосон бичлэгүүд байхгүй гэж тооцогдох бөгөөд зурагт схемээр үзүүлсэн үйлдлийн үр дүнд нөлөөлөхгүй.


1C: Enterprise нь мэдээллийн санд хандах үед мэдээллийн сангийн объектуудад өгөгдөлд хандах хязгаарлалт тавигддаг.

1C: Enterprise-ийн клиент-сервер хувилбарт хязгаарлалтууд 1C: Enterprise сервер дээр хэрэгждэг.

Гэсэн хэдий ч, хэрэв бид асуулгад хандалтын хязгаарлалт тохируулагдаагүй, гэхдээ тохируулсан хязгаарлалттай хүснэгтийн мөрүүдийн лавлагаа агуулсан хүснэгтийг харвал энэ сонголт (ЗӨВШӨӨРӨЛТ) ажиллахгүй. Энэ тохиолдолд асуулгын үр дүн гарч ирнэ "<Объект не найден>......" лавлагааны талбарын утгын оронд.


Хэрэв та стандарт эсвэл захиалгат тохиргооны асуулга ашиглан тайлан боловсруулж байгаа бол, "Зөвшөөрөгдсөн" тугийг үргэлж шалгана уутайлан ажиллахын тулд дурын хэрэглэгчийн дораливаа багц эрхтэй.

Өгөгдлийн сангаас өгөгдлийг объектоор унших тохиолдолд "Зөвшөөрөгдсөн" тугийг тохируулах боломжгүй. Тиймээс зайлшгүй шаардлагатай боломжит хандалтын эрхийн хязгаарлалтыг харгалзан объект унших сонголтыг тохируулаххэрэглэгчийн хувьд. Объект технологид зөвхөн зөвшөөрөгдсөн өгөгдлийг олж авах арга хэрэгсэл байдаггүй.

Хэрэв асуулгад ALLOWED түлхүүр үг заагаагүй бол тухайн асуулгад заасан бүх сонголт нь асуулгад ашигласан мэдээллийн сангийн объектын унших хязгаарлалттай зөрчилдөхгүй байх нь чухал. Түүнээс гадна, хэрэв асуулга нь виртуал хүснэгтийг ашигладаг бол холбогдох сонголтыг виртуал хүснэгтэд өөрөө хийх ёстой.

Дадлага 1. RLS тохиргоон дахь Query builder.

Лавлах асуулгын "ХАААН" хэсгийн текстийг бичье. Та асуулга үүсгэгчийг ашиглаж болно.
Загвар зохион бүтээгч нь хуучирсан дүр төрхтэй байдаг.


"Хүснэгтүүд" таб

Үндсэн хүснэгт нь хязгаарлалтыг тохируулж буй объектын хүснэгт байх болно.

Та мөн "Харилцаа" таб дээрээс бусад хүснэгтүүдийг сонгож, тэдгээрийн хооронд янз бүрийн холболтыг тохируулах боломжтой.

"Нөхцөл" таб

Энд та бодит хандалтын хязгаарлалтын нөхцлийг тохируулах боломжтой

Хүснэгтийн бүх талбарт "унших" эрхийн нөхцөлийг нэрлэсэн лавлахын "Үнэ" шинж чанарт нэмж оруулцгаая.

“Нэршил ХААНА Нэршил.Үнэ > 500”

Энэхүү энгийн дүрэм хэрхэн ажилладагийг харцгаая. Лавлах хүснэгт нь дараах элементүүдийг агуулна.


Хандалтын хязгаарлалтыг тохируулсны дараа хүснэгт нь зөвхөн нөхцөлийг хангасан элементүүдийг харуулах болно:


Бүлгүүд бас алга болсон. Хязгаарлалтын текстийг өөрчилье

“Нэршил ХААНА Нэршил.Үнэ > 500

ЭСВЭЛ Нэршил. Энэ бол бүлэг"

За, одоо танд хэрэгтэй зүйл.


Хэрэв та жагсаалтын тохиргоон дахь "код" талбарын дэлгэцийг устгавал лавлах бүх элементүүд гарч ирэх болно, жишээлбэл. хязгаарлалт ажиллаагүй. Хэрэв та "Код" талбарыг харуулахаар тохируулбал хязгаарлалт ажиллах болно.


Энэ тохиолдолд лавлах элемент жагсаалтын талбарт харагдаж байгаа хэдий ч атрибутад хязгаарлалт тохируулагдсан тул түүний хэлбэрийг нээх боломжгүй. Дурын хүсэлтийн хувьд ижил зүйл тохиолддог: "хязгаарлагдсан" өмчийг авахыг оролдох үед хандалтын алдаа гарах болно.


Хэрэв та "хязгаарлагдсан" итгэмжлэлүүдийг программчлан авахыг оролдвол хандалтын алдаа гарч ирнэ.


Түүнчлэн, холбоосоор дамжуулан объектын аль ч талбарт хандах боломжгүй болно, учир нь холбоосыг хүлээн авах үед систем нь объектыг бүхэлд нь уншдаг бөгөөд хэрэв "хязгаарлагдсан" дэлгэрэнгүй мэдээллийг агуулж байвал объектыг уншихгүй.

Тиймээс мэдээллийн сангийн объектуудтай программчлан ажиллахдаа бичлэгийн түвшинд байж болох хязгаарлалтуудыг санаж, шаардлагатай бүх объектын өгөгдлийг хүсэлтээр олж аваад дараа нь бүтцэд байршуулах эсвэл давуу эрхтэй модульд кодын хэсгийг гүйцэтгэх хэрэгтэй.

Хандалтын хязгаарлалтыг тохируулсны дараа эрхийн жагсаалт дахь шугамын дэлгэц өөрчлөгдсөн - саарал болж, дүрс гарч ирэв.

Хандалтыг (RLS) тохируулах үеийн хязгаарлалт.

  • Хураангуй хэсэг байхгүй;
  • Виртуал бүртгэлийн хүснэгтэд хандах боломжгүй;
  • Та параметрүүдийг тодорхой ашиглах боломжгүй;
  • Үүрчилсэн асуулгад ашиглаж болно дурын>/span> асуулгын хэлний хэрэглүүрээс бусад нь:
    • ШАТНАЛТЫН оператор;
    • Үр дүнгийн санал;
    • үүрлэсэн асуулгын үр дүн хүснэгтийн хэсгүүдийг агуулж болохгүй>>/span>;
    • виртуал хүснэгтүүд, ялангуяа үлдэгдэл ба эргэлт

Дадлага 2. Тухайн үеийн үнэ бүхий нэршил.

Хэрэв та одоогийн үнэ нь тодорхой утгаас, жишээлбэл, 100-аас дээш байгаа зүйлсийг харуулах шаардлагатай бол хандалтын хязгаарлалт хийнэ үү.

Шийдэл:

Бид "унших" эрхтэй "Нэршил" лавлахын хандалтыг хязгаарлах шинэ дүрмийг нэмж байна.
"Бусад талбарууд" -ыг сонгоно уу.
Бүтээгч дээр бид үүрлэсэн асуулга нэмнэ. Үүнд "Барааны үнэ" мэдээллийн бүртгэлийн хүснэгтийг сонгоно уу.
"Захиалга" таб байхгүй - энэ нь хандалтыг хязгаарлах хүсэлтийг бий болгох асуулгын дизайнерын онцлог юм.
"Нарийвчилсан" таб дээр "эхний 999999999" гэж тохируулснаар "захиалга" таб гарч ирнэ.
Бид "Хугацаа" талбараар буурах дарааллаар эрэмбэлдэг.
Дараа нь бид лавлагаагаар үндсэн хүснэгт болон дэд асуулга хооронд холболтыг тохируулна.


Хандалтыг хязгаарлах загварууд.

Дадлага 3. Тогтмол утгаар “эсрэг талууд”-ыг хязгаарлах.

Constant-д хадгалагдсан утга дээр үндэслэн Counterparties лавлах хандалтын хязгаарлалтыг тохируулъя.

Нэмж дурдахад та "Харилцагч талууд" лавлахыг ашигладаг бүх объектод хязгаарлалт тавих хэрэгтэй.

Шийдэл

"Харилцагч талууд" лавлахын хувьд "Нөхцөл" хэсэгт тогтмол тоонд үүрлэсэн асуулга нэмж "унших" эрхийн хязгаарлалтыг тохируулна. Энэ бол групп гэдгийг битгий мартаарай.

Бид асуудалтай байгааг харж байна, Counterparty лавлах зөв шүүгдэж, "Counterparty" шинж чанартай бүх баримт бичиг гарч ирэх бөгөөд зарим нь "Counterparty" шинж чанарт "эвдэрсэн" холбоостой байна.

Одоо та "Бүртгэл" холбоосыг ашигладаг бүх объектын хандалтын хязгаарлалтыг тохируулах хэрэгтэй. Тэдгээрийг "объект руу холбоос хайх" үйлчилгээг ашиглан олъё.

"Counterparties" лавлахаас RLS нөхцлийн текстийг хуулж, бага зэрэг өөрчилье. Үүнийг олдсон объект байгаа хэрээр олон удаа хийх ёстой.

Эсвэл код давхардахаас зайлсхийхийн тулд хандалтын хязгаарлалтын загварыг ашиглана уу.

Хандалтын хязгаарлалтын загварууд нь дүрийн түвшинд тохируулагдсан бөгөөд засварласан дүрийн аль ч объектод ашиглагдах боломжтой.

Та загварт хандалтыг хязгаарлах текстийн дурын хэсгийг нэмж болно. Загварыг "#" тэмдэг ашиглан дууддаг. Жишээ нь, # TemplateCounterparty.

# in 1C-ээр дамжуулан зааварчилгааг урьдчилсан процессорт бичдэг. Хандалтын хязгаарлалтын тохиргоог гүйцэтгэх хүрээнд платформ нь загвар дуудлагын текстийг загварын текстээр сольдог.

EtoGroup-ын тухай бичвэрээс бусад тохиолдолд "Гүйцэтгэгчийн загвар" загварт ХААНА гэдэг үгийн ард бичье.

Хандалтын хязгаарлалтын загвар дахь параметрүүд.

2-р асуудлыг үргэлжлүүлэн шийдье.

Одоо асуудал бол лавлах дахь үндсэн хүснэгтийг "Төлбөрийн нэхэмжлэх" баримт бичигт "эсрэг тал" гэж нэрлэсэн явдал юм. Лавлах дахь шалгаж буй талбарыг "холбоос", баримт бичигт "Counterparty" гэж нэрлэдэг.

Загварын текст дэх үндсэн хүснэгтийн нэрийг "#CurrentTable" болгон өөрчилье.

"#CurrentTable" нь урьдчилан тодорхойлсон параметр юм.

Мөн цэгээр бид оролтын параметрийн дугаарыг заана - “.#Parameter(1)

“#Parameter” нь мөн урьдчилан тодорхойлсон утга юм. Дурын тооны оролтын параметрүүдийг агуулж болно. Тэд серийн дугаараар хаяглагдсан.

Лавлах хандалтын хязгаарлалтын текстэнд бид дараахь зүйлийг зааж өгсөн болно.

Баримт бичгийн хувьд дараахь зүйлийг хийнэ.

“#ЗагварCounterparty (“Counterparty”) ХААНА бараа борлуулах”

Хандалтын хязгаарлалтын загварыг дуудахдаа параметрүүдийг зөвхөн мөр хэлбэрээр, өөрөөр хэлбэл хашилтанд оруулах ёстой.

Үндсэн хүснэгт - Нэршил

Загварын текст нь:

#ОдоогийнХүснэгт ХААНА #ОдоогийнХүснэгт.#Параметр(1) = #Параметр(2)

Загварын текст нь өгөгдлийн хандалтыг хязгаарлах хэл дээрх текстийн хэсгийг агуулж байгаа бөгөөд "#" тэмдгийг ашиглан тодруулсан параметрүүдийг агуулж болно.

"#" тэмдэгтийн араас:

  • Түлхүүр үгсийн нэг нь:
    • Загвар дахь параметрийн дугаарыг хаалтанд оруулсан параметр;
    • CurrentTable – хязгаарлалтыг барьж буй хүснэгтийн бүтэн нэрийг текстэнд оруулахыг заана;
    • Одоогийн хүснэгтийн нэр– Суурилуулсан хэлний одоогийн хувилбарт зааврыг ашигласан хүснэгтийн бүтэн нэрийг текстэнд оруулахыг илэрхийлнэ (мөртийн утга, хашилтанд);
    • NameCurrentAccessRight– УНШИХ, НЭМЭХ, ОРУУЛАХ, ӨӨРЧЛӨХ, ШИНЭЧЛЭХ, УСТГАХ, одоогийн хязгаарлалтыг гүйцэтгэх эрхийн нэрийг агуулсан;
  • загварын параметрийн нэр – текстэд тохирох загварын параметрийн хязгаарлалтыг оруулахыг хэлнэ;
  • "#" тэмдэг нь текстэнд нэг "#" тэмдэгт оруулахыг заана.

Хандалтын хязгаарлалтын илэрхийлэл нь дараахь зүйлийг агуулж болно.

  • Форматад заасан хандалтын хязгаарлалтын загвар #ЗагварНэр("Загвар параметрийн утга 1", "Загвар параметрийн утга 2",...). Загварын параметр бүрийг давхар хашилтанд оруулсан болно. Хэрэв та параметрийн текстэнд давхар хашилтын тэмдэгтийг зааж өгөх шаардлагатай бол хоёр давхар хашилтыг ашиглах ёстой.
  • Функц Str(WhereWeLook, WhatWeLook) агуулна. Энэ функц нь WhereWeLook мөрөнд байгаа WhatWeLook мөрийг хайхад зориулагдсан. Хэрэв үзэгдэл олдвол үнэн, үгүй ​​бол худал буцаана.
  • + оператор нь мөрийг холбоход зориулагдсан.

Загварын текстийг засварлахад хялбар болгохын тулд дүрийн маягтын Хязгаарлалтын загвар таб дээрээс Загвар текстийг тохируулах товчийг дарна уу. Нээгдэх харилцах цонхонд загварын текстийг оруулаад OK дарна уу.

Тэдгээрийг ашиглан суулгах боломжгүй SetParameter()эсвэл үүнтэй төстэй зүйл.

Энэ тохиолдолд параметрүүд нь:

  • Сешн сонголтууд
  • Функциональ сонголтууд

Хандалтыг хязгаарлах хүсэлтэд сессийн параметрүүдийг унших нь давуу эрхтэй горимд, өөрөөр хэлбэл тэдэнтэй ажиллах эрхийг хянахгүйгээр явагддаг.

Дадлага 4. "Таны" түншүүд рүү нэвтрэх

Одоогийн хэрэглэгчийн "тэдний" түншүүд рүү нэвтрэх хязгаарлалтыг тохируулах шаардлагатай.

"Хэрэглэгчид" лавлах, "Харилцагч талууд" лавлах, "Харилцагч" гэсэн дэлгэрэнгүй мэдээлэл бүхий баримт бичиг байдаг.

Одоогийн хэрэглэгч зөвхөн өөртэй нь холбоо тогтоосон түншүүдийн мэдээллийг харах ёстой.

Мөн харилцаа холбоог тохируулах шаардлагатай.

Боломжит сонголтууд:

Хэрэглэгч болон эсрэг талын хооронд холбоо тогтоох

  • Эсрэг талуудын лавлах дахь дэлгэрэнгүй мэдээлэл
  • Мэдээллийн бүртгэл

Асуудлын боломжит шийдлүүд:

  • Хэрэглэгчийг тогтмол хэмжээнд хадгалах нь муу сонголт бөгөөд тогтмолыг бүх хэрэглэгчид ашиглах боломжтой.
  • Сеансын параметрүүдэд одоогийн хэрэглэгчийн эсрэг талуудын тогтмол массивыг хадгалах нь тийм ч сайн биш юм. сайн сонголт, олон тооны эсрэг талууд байж болно
  • Одоогийн хэрэглэгчийн сессийн параметрүүдийг хадгалах, дараа нь "түүний" түншүүдийн жагсаалтыг хүсэх нь хүлээн зөвшөөрөгдсөн сонголт юм.
  • Бусад сонголтууд.

Шийдэл.

"CurrentUser" сессийн шинэ параметрийг үүсгэж, сессийн модульд бөглөцгөөе.

"Менежер ба гүйцэтгэгч нарын дагаж мөрдөх журам" мэдээллийн бүртгэлийг үүсгэцгээе.

"Нэхэмжлэх" баримт бичигт шинэ үүрэг, түүнд хандах хандалтын шинэ хязгаарлалт үүсгэцгээе.

Хүсэлтийн текстэд бид үндсэн хүснэгтийг Account = Account and Manager = &CurrentUser гэсэн мэдээллийн бүртгэлтэй холбох болно. Холболтын төрөл дотоод.

Боломжтой бол өгөгдлийн сангаас энэ объектоос өгөгдлийг унших болгонд хийгдэх тул хандалтыг хязгаарлах бичвэрт үүрлэсэн асуулга хийхээс зайлсхийх нь дээр.

Шалгаж байна - хязгаарлалтууд ажилладаг

* Онцлог: Хэрэв та бүртгэл дэх хэрэглэгчийн эсрэг талуудын жагсаалтыг өөрчилбөл хандалтын хязгаарлалт нь хэрэглэгчийн сессийг дахин эхлүүлэхгүйгээр шууд хүчин төгөлдөр болно.

Дадлага 5. Өөрчлөлт хийхийг хориглосон огноо.

Өөрчлөлт хийхийг хориглохын тулд тогтоосон хугацаанаас өмнө өгөгдлийг засварлах хязгаарлалтыг хэрэгжүүлэх шаардлагатай.
Та үүнийг хэрэглэгчдэд хязгаарлах хэрэгтэй.

"Өөрчлөлтийг хориглосон огноо" мэдээллийн бүртгэлийг хэрэглэгч хэмжигдэхүүнээр үүсгэцгээе.

Шийдлийн логикийг дараах байдлаар бүтээцгээе.

  • хэрэв хэрэглэгчийг заагаагүй бол хориг нь бүх хэрэглэгчдэд хамаарна
  • хэрэв бүх хэрэглэгчдэд зориулсан хязгаарлалт, тодорхой хэрэглэгчдэд зориулсан хязгаарлалт байгаа бол хязгаарлалт нь тодорхой хэрэглэгчдэд болон бусад хүмүүст ерөнхий зарчмын дагуу хамаарна.

Мэдээжийн хэрэг, ийм хязгаарлалтыг цагийн тэнхлэг дээр тодорхой байрлалтай мэдээллийн сангийн объектуудад тохируулж болно. Энэ нь байж болох юм

  • Баримт бичиг
  • Тогтмол мэдээллийн бүртгэл

"Өөрчлөлтийг хориглосон огнооны хязгаарлалт" гэсэн шинэ дүр бүтээцгээе.

Үүнд зөв "өөрчлөлт" хийх "Нэхэмжлэх" баримт бичгийн хувьд бид шинэ хандалтын хязгаарлалтыг нэмж оруулах болно.

Бид бүх талбарт тохиргоог зааж өгдөг.

Хязгаарлалтын текст нь:

Баримтаас хүлээн авсан нэхэмжлэх. Хүлээн авалтын нэхэмжлэх

Хориглох огноог өөрчлөх. Хориглох огноог хориглох огноо
FROM

ДОТООД НЭГДСЭН (СОНГОХ
MAX(Өөрчлөх хориотой огноо.Хэрэглэгч) АС Хэрэглэгч
FROM
Мэдээллийн бүртгэл.Өөрчлөлт оруулахыг хориглосон огноо.
ХААНА
(Хориотой огноог өөрчлөх.Хэрэглэгч = &Одоогийн хэрэглэгч
ЭСВЭЛ Хориотой өөрчлөлтүүд.Хэрэглэгч = VALUE(Directory.users.EmptyLink))) AS VZ_User
Өөрчлөлтийг хориглосон огноогоор.User = VZ_User.User) AS NestedQuery
Програм хангамжийн хүлээн авалтын нэхэмжлэх.Огноо > Оруулсан асуулга.Хориг огноо

Шалгаж үзье - хязгаарлалт ажиллаж байна.

Урьдчилан процессорын зааврыг ашиглах

#Нөхцөл1 бол #Тэгвэл

Хүсэлтийн хэсэг 1

#ElseIf2 нөхцөл #Тэгвэл

Хүсэлтийн хэсэг 2

#Үгүй бол

Хүсэлтийн хэсэг 3

#EndIf

Нөхцөл байдалд та логик үйлдлүүд (ба, эсвэл, үгүй ​​гэх мэт) болон сессийн параметрүүдэд хандах боломжтой.

Хандалтын хязгаарлалтыг бий болгох энэ арга нь нөхцөл байдлаас хамааран илүү богино хүсэлтийн текстийг эмхэтгэх тул тохиромжтой юм. Илүү энгийн асуулга нь системийг бага ачаалдаг.

Сул тал нь асуулга үүсгэгч ийм тексттэй ажиллахгүй.

* Онцлог:

Хандалтыг хязгаарлах бичвэрт суулгасан хэлний препроцессорын заавраас ялгаатай нь операторын өмнө Дараа нь та хэш оруулах хэрэгтэй - #Дараа нь

Дасгал 6. “RLS ашиглах”-ыг солино

Хязгаарлалтын системээ рекорд түвшинд хязгаарлалтын хэрэглээг асаах/унтраах свичээр нэмэгдүүлцгээе.

Үүнийг хийхийн тулд бид Constant болон "UseRLS" нэртэй сесс параметрийг нэмнэ.

Тогтмол утгаас сессийн параметрийн утгыг тохируулахын тулд Session Module-д бичье.

Бүх хандалтыг хязгаарлах бичвэрт дараах кодыг нэмье.

“#Хэрэв &UseRLS #Тэгвэл….. #Төгсгөл”

Бид шалгадаг - бүх зүйл ажилладаг.

Гэсэн хэдий ч одоо "радар ашиглах" тугийг асаасны дараа өөрчлөлтүүд шууд хүчин төгөлдөр болохгүй. Яагаад?

Учир нь сесс эхлэх үед сессийн параметрийг тохируулдаг.

Шинэ тогтмол утга бичих үед дахин тохируулах сесс параметрийн утгыг тохируулах боломжтой боловч энэ нь зөвхөн одоогийн хэрэглэгчийн сессэд л ажиллана. Бусад хэрэглэгчид системийг дахин эхлүүлэхийг хүсэх ёстой.


Эхний хэсгийн төгсгөл.

Редакторын сонголт
Унших хугацаа 2 минут Унших хугацаа 2 минут Москвад болсон эсэргүүцлийн жагсаал, хотын шинэ сонгууль залуучуудыг...

Москва хотын Басманный дүүргийн хотын депутатад нэр дэвшигч 21 настай Люся Штайн 1153 санал авчээ. Тэр энэ тухай ярьж байна ...

Саломе Зурабишвили 66 настай. Тэрээр 1952 онд Парист Гүржийн улс төрийн цагаачдын гэр бүлд төржээ. Түүний эцгийн өвөө Иван Иванович...

ҮНДЭСНИЙ БОЛЬШЕВИЗМ бол Маркс, Лениний космополит үзэл санааг...
ОХУ-ын Гадаад хэргийн сайд Сергей Лавров, АНУ-ын Төрийн нарийн бичгийн дарга Жон Керри нар Москвад уулзсан бөгөөд өмнөх өдөр нь...
Польш Оросын эсрэг шинэ дуулиан дэгдээв. Энэ улсын ГХЯ-ны дарга (би энэ новшийг нэрээр нь дуудмааргүй байна)...
1920-1930-аад оны Европ фашизмын үүр уурхай байсан. Европын орнуудын бараг тал хувь нь фашистууд засгийн эрхэнд гарсан. Үлдсэн хэсэгт...
Бүртгүүлсний дараа олон шинэ зөвлөхүүд асуулт асуудаг: Орифлэйн каталогийг цаасан дээр хэрхэн яаж авах вэ? Мэдээжийн хэрэг, эхнийх нь ...
Хайруулын тавган дээр самартай чанасан тахианы мах нь амттай, маш амттай хоол хийж цэсийг төрөлжүүлэх бас нэг боломж юм.