Ձախ և աջ միանում են 1c հարցումներին: TYPE հարցումով

Հարցման լեզուն մշակողների համար 1C 8.3-ի հիմնարար մեխանիզմներից մեկն է: Օգտագործելով հարցումները, դուք կարող եք արագ առբերել տվյալների բազայում պահված ցանկացած տվյալ: Դրա շարահյուսությունը շատ նման է SQL-ին, սակայն կան որոշ տարբերություններ։

1C 8.3 (8.2) հարցումների լեզվի հիմնական առավելությունները SQL-ի նկատմամբ.

  • հղման դաշտերի հեռացում (առարկայի մանրամասներին մեկ կամ մի քանի կետերի հղում);
  • արդյունքների հետ աշխատելը շատ հարմար է;
  • վիրտուալ աղյուսակներ ստեղծելու ունակություն;
  • հարցումը կարող է գրվել ինչպես անգլերեն, այնպես էլ ռուսերեն;
  • փակուղուց խուսափելու համար տվյալները արգելափակելու ունակություն:

Հարցման լեզվի թերությունները 1C-ում.

  • ի տարբերություն SQL-ի, 1C հարցումները թույլ չեն տալիս փոխել տվյալները.
  • պահեստավորված ընթացակարգերի բացակայություն;
  • տողը թվի փոխարկելու անհնարինություն.

Եկեք նայենք մեր մինի ձեռնարկին 1C հարցումների լեզվի հիմնական կառուցվածքների վերաբերյալ:

Հաշվի առնելով այն հանգամանքը, որ 1C-ում հարցումները թույլ են տալիս ստանալ միայն տվյալներ, ցանկացած հարցում պետք է սկսվի «SELECT» բառով: Այս հրամանից հետո նշվում են այն դաշտերը, որոնցից պետք է տվյալներ ստանալ։ Եթե ​​նշեք «*», բոլոր առկա դաշտերը կընտրվեն: «FROM» բառից հետո նշվում է այն վայրը, որտեղից կընտրվեն տվյալները (փաստաթղթեր, գրանցամատյաններ, տեղեկատուներ և այլն):

Ստորև քննարկված օրինակում ամբողջ նոմենկլատուրայի անվանումներն ընտրված են «Nomenclature» գրացուցակից: «ԻՆՉՊԵՍ» բառից հետո նշվում են աղյուսակների և դաշտերի փոխանունները (անունները):

ԸՆՏՐԵԼ
Անվանում Անվանումը AS Անվանակարգի անվանումը
ԻՑ
Directory.Nomenclature AS Nomenclature

«SELECT» հրամանի կողքին կարող եք նշել հիմնաբառեր:

  • ՏԱՐԲԵՐ. Հարցումը կընտրի միայն տողերը, որոնք տարբերվում են առնվազն մեկ դաշտում (առանց կրկնօրինակների):
  • ԱՌԱՋԻՆ n, Որտեղ n– արդյունքի սկզբից տողերի քանակը, որոնք պետք է ընտրվեն: Ամենից հաճախ այս կոնստրուկցիան օգտագործվում է տեսակավորման հետ համատեղ (ORDER BY): Օրինակ, երբ դուք պետք է ընտրեք որոշակի թվով փաստաթղթեր, որոնք վերջին ամսաթվով են:
  • ԹՈՒՅԼԱՏՐՎԱԾ Է. Այս դիզայնը թույլ է տալիս տվյալների բազայից ընտրել միայն այն գրառումները, որոնք հասանելի են ընթացիկ օգտագործողին: Այս հիմնաբառի օգտագործման հիման վրա օգտվողը կստանա սխալի հաղորդագրություն, երբ փորձում է հարցումներ կատարել այն գրառումների վրա, որոնց հասանելիություն չունի:

Այս հիմնաբառերը կարող են օգտագործվել միասին կամ առանձին:

ՓՈՓՈԽՈՒԹՅԱՆ ՀԱՄԱՐ

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

Ամենից հաճախ մնացորդներ ստանալիս օգտագործվում է «ՓՈՓՈԽՈՒԹՅԱՆ ՀԱՄԱՐ» կետը: Ի վերջո, երբ մի քանի օգտատերեր միաժամանակ աշխատում են ծրագրում, մինչդեռ մեկը ստանում է մնացորդներ, մյուսը կարող է փոխել դրանք։ Այս դեպքում ստացված մնացորդն այլևս ճիշտ չի լինի: Եթե ​​այս առաջարկով արգելափակեք տվյալները, ապա մինչև առաջին աշխատակիցը ստանա ճիշտ հաշվեկշիռը և դրա հետ կատարի բոլոր անհրաժեշտ մանիպուլյացիաները, երկրորդ աշխատակիցը ստիպված կլինի սպասել։

ԸՆՏՐԵԼ
Փոխադարձ հաշվարկներ Աշխատակից,
Փոխադարձ հաշվարկներ Փոխադարձ հաշվարկների գումարը Մնացորդ
ԻՑ
Կուտակումների ռեգիստր Փոխադարձ հաշվարկներ աշխատողների հետ Մնացորդներ ՀԾ Փոխադարձ հաշվարկներ
ՓՈՓՈԽՈՒԹՅԱՆ ՀԱՄԱՐ

ՈՐՏԵՂ

Դիզայնը անհրաժեշտ է բեռնված տվյալների վրա որոշակի ընտրություն պարտադրելու համար: Ռեգիստրներից տվյալներ ստանալու որոշ դեպքերում ավելի խելամիտ է վիրտուալ աղյուսակների պարամետրերում նշել ընտրության պայմանները։ «WHERE»-ն օգտագործելիս նախ բոլոր գրառումները վերցվում են, և միայն դրանից հետո կիրառվում է ընտրությունը, ինչը զգալիորեն դանդաղեցնում է հարցումը:

Ստորև բերված է կոնկրետ պաշտոնի համար կոնտակտային անձանց ձեռք բերելու հայտի օրինակ: Ընտրության պարամետրն ունի ձևաչափ՝ &ParameterName (պարամետրի անունը կամայական է):

ԸՆՏՐՈՒԹՅՈՒՆ (ԳՈՐԾՈՎ)

Դիզայնը թույլ է տալիս հստակեցնել պայմանները անմիջապես հարցման մարմնում:

Ստորև բերված օրինակում «Լրացուցիչ դաշտը» կպարունակի տեքստ՝ կախված նրանից՝ փաստաթուղթը տեղադրված է, թե ոչ.

ԸՆՏՐԵԼ
ԸնդունելությունT&U.Link,
ԸՆՏՐՈՒԹՅՈՒՆ
ԵՐԲ ԸնդունելությունT&U.Կատարվում է
ՀԵՏՈ «Փաստաթուղթը ընդունված է»։
ԱՅԼ «Փաստաթուղթը չի տեղադրվել...»
ԱՎԱՐՏ ՈՐՊԵՍ լրացուցիչ դաշտ
ԻՑ
Փաստաթուղթ Ապրանքների և ծառայությունների ստացում ԻՆՉՊԵՍ անդորրագիր T&C

ՄԻԱՑԵՔ

Միացումները կապում են երկու աղյուսակներ՝ հիմնված կոնկրետ հարաբերությունների պայմանի վրա:

ՁԱԽ/ԱՋ ՄԻԱՑՈՒՄ

LEFT միացման էությունը կայանում է նրանում, որ առաջին նշված աղյուսակը վերցված է ամբողջությամբ, իսկ երկրորդը կապվում է դրան՝ ըստ կապի պայմանի։ Եթե ​​երկրորդում առաջին աղյուսակին համապատասխան գրառումներ չկան, ապա որպես դրանց արժեքներ փոխարինվում է NULL-ը: Պարզ ասած, հիմնական աղյուսակը առաջին նշված աղյուսակն է, և երկրորդ աղյուսակի տվյալները (եթե այդպիսիք կան) արդեն փոխարինված են դրա տվյալներին:

Օրինակ, ապրանքների ապրանքները անհրաժեշտ է ձեռք բերել «Ապրանքների և ծառայությունների ստացում» փաստաթղթերից, իսկ գները՝ «Ապրանքների գներ» տեղեկատվական ռեգիստրից: IN այս դեպքում, եթե որևէ դիրքի գինը չի գտնվել, փոխարենը փոխարինեք NULL-ը: Փաստաթղթից բոլոր կետերը կընտրվեն՝ անկախ նրանից՝ գին ունեն, թե ոչ։

ԸՆՏՐԵԼ
Անդորրագիր և U. անվանակարգ,
Գներ.Գին
ԻՑ
Փաստաթուղթ Ապրանքների և ծառայությունների ստացում Ապրանքներ ԻՆՉՊԵՍ ստացում և բնութագրեր
ՆԵՐՔԻՆ ՄԻԱՑՆԵԼ ԳրանցումInformation.PricesNomenclature.SliceՎերջին AS գները
Software Receipt&U.Nomenclature = Prices.Nomenclature

ԻՐԱՎՈՒՄ ամեն ինչ ճիշտ հակառակն է։

ԼԻՎԱԾ ՄԻԱՑՈՒՄ

Կապի այս տեսակը տարբերվում է նախորդներից նրանով, որ արդյունքում կվերադարձվեն ինչպես առաջին աղյուսակի, այնպես էլ երկրորդի բոլոր գրառումները: Եթե ​​առաջին կամ երկրորդ աղյուսակում որևէ գրառում չգտնվի՝ հիմնվելով նշված հղման պայմանի վրա, փոխարենը կվերադարձվի NULL-ը:

Նախորդ օրինակում լիարժեք միացում օգտագործելիս կընտրվեն «Ապրանքների և ծառայությունների ստացում» փաստաթղթի բոլոր տարրերը և «Ապրանքների գներ» ռեգիստրի բոլոր վերջին գները: Թե՛ առաջին, թե՛ երկրորդ աղյուսակներում չգտնված գրառումների արժեքները հավասար կլինեն NULL-ի:

ՆԵՐՔԻՆ ՄԻԱՑՈՒՄ

INNER JOIN-ի և FULL Join-ի միջև տարբերությունն այն է, որ եթե աղյուսակներից գոնե մեկում գրառում չի գտնվել, հարցումն այն ընդհանրապես չի ցուցադրի: Արդյունքում «Ապրանքների և ծառայությունների ստացում» փաստաթղթից կընտրվեն միայն այն ապրանքները, որոնց համար տեղեկատվական ռեգիստրում կան գրառումներ «Ապրանքների գներ», եթե նախորդ օրինակում «ԼԻՎԱԾ»-ը փոխարինում ենք «INTERNAL»-ով:

ԽՈՒՄԲ ԸՍՏ

1C հարցումներում խմբավորումը թույլ է տալիս փլուզել աղյուսակի տողերը (խմբավորման դաշտերը) ըստ որոշակի ընդհանուր բնութագրի (խմբավորման դաշտեր): Խմբավորման դաշտերը կարող են ցուցադրվել միայն ագրեգատ գործառույթների միջոցով:

Հետևյալ հարցման արդյունքը կլինի ապրանքատեսակների ցանկ՝ դրանց համար առավելագույն գներով:

ԸՆՏՐԵԼ
,
MAX (Գին. Գին) AS Price
ԻՑ

ԽՈՒՄԲ ԸՍՏ
Գներ.Անոմենկլատուրա.Անվանացանկի տեսակը

ԱՐԴՅՈՒՆՔՆԵՐ

Ի տարբերություն խմբավորման, ընդհանուր գումարներն օգտագործելիս բոլոր գրառումները ցուցադրվում են և դրանց ընդհանուր տողերը ավելացվում են: Խմբավորումը ցուցադրում է միայն ընդհանրացված գրառումները:

Արդյունքները կարող են ամփոփվել ամբողջ աղյուսակի համար (օգտագործելով «GENERAL» հիմնաբառը), մի քանի դաշտերի համար, հիերարխիկ կառուցվածք ունեցող դաշտերի համար (հիմնաբառեր «HIERARCHY», «ONLY HIERARCHY»): Արդյունքներն ամփոփելիս անհրաժեշտ չէ օգտագործել ագրեգատային ֆունկցիաներ։

Եկեք դիտարկենք վերը նշված օրինակին նման օրինակ՝ օգտագործելով խմբավորումը: Այս դեպքում հարցման արդյունքը կվերադարձնի ոչ միայն խմբավորված դաշտերը, այլև մանրամասն գրառումները:

ԸՆՏՐԵԼ
Գներ.Անվանակատուրա.Անվանակոչի տեսակը AS անվանացանկի տեսակ,
Գներ.Գին AS գինը
ԻՑ
Տեղեկատվության ռեգիստր Անվանակատուրային գներ ՀԾ վերջին գների նկարը
ԱՐԴՅՈՒՆՔՆԵՐ
ՄԱՔՍԻՄՈՒՄ (գին)
ԿՈՂՄԻՑ
TypeNomenclature

ՈՒՆԵՑՈՂ

Այս օպերատորը նման է WHERE օպերատորին, բայց օգտագործվում է միայն ագրեգատ ֆունկցիաների համար։ Մնացած դաշտերը, բացառությամբ այս օպերատորի կողմից օգտագործվող դաշտերի, պետք է խմբավորվեն: WHERE օպերատորը կիրառելի չէ ագրեգատ գործառույթների համար:

Ստորև բերված օրինակում ապրանքի առավելագույն գները ընտրվում են, եթե դրանք գերազանցում են 1000-ը՝ խմբավորված ըստ ապրանքի տեսակի:

ԸՆՏՐԵԼ

MAX (Գին. Գին) AS Price
ԻՑ
Տեղեկատվության ռեգիստր Անվանակատուրային գներ ՀԾ վերջին գների նկարը
ԽՈՒՄԲ ԸՍՏ
Գներ.Անոմենկլատուրա.Անվանացանկի տեսակը
ՈՒՆԵՑՈՂ
ՄԱՔՍԻՄՈՒՄ (Գներ. Գին) > 1000

ԴԱՍԱՎՈՐԵԼ ԸՍՏ

ORDER BY օպերատորը տեսակավորում է հարցման արդյունքը: Ապահովելու համար, որ գրառումները ցուցադրվում են հետևողական հերթականությամբ, օգտագործվում է AUTO ORDER: Պարզունակ տեսակները դասակարգվում են ըստ սովորական կանոնների։ Հղումների տեսակները դասավորված են ըստ GUID-ի:

Աշխատակիցների անուններով տեսակավորված ցուցակ ստանալու օրինակ.

ԸՆՏՐԵԼ
Employees.Name AS Անուն
ԻՑ
Directory.Employees HOW Employees
ԴԱՍԱՎՈՐԵԼ ԸՍՏ
Անուն
ԱՎՏՈՊԱՏՎԵՐ

1C հարցումների լեզվի այլ կառուցվածքներ

  • ՄԻԱՎՈՐԵԼ- երկու հարցումների արդյունքները մեկում:
  • ՄԻԱՎՈՐԵԼ ԱՄԵՆ ԻՆՉ– նման է COMBINE-ին, բայց առանց նույնական տողերի խմբավորման:
  • ԴԱՏԱՐԿ ՍԵՂԱՆ– երբեմն օգտագործվում է հարցումները միացնելիս դատարկ ներդիր աղյուսակը նշելու համար:
  • ՏԵՂ– ստեղծում է ժամանակավոր աղյուսակ՝ բարդ 1C հարցումները օպտիմալացնելու համար: Նման հարցումները կոչվում են խմբաքանակի հարցումներ:

Հարցման լեզվի առանձնահատկությունները

  • ԵՆԹԱԴՐՈՒՄկտրում է տողը սահմանված դիրքից մինչև նշված թվով նիշ:
  • ՏԱՐԻ...ԵՐԿՐՈՐԴթույլ է տալիս ստանալ թվային տիպի ընտրված արժեքը: Մուտքի պարամետրը ամսաթիվն է:
  • ԺԱՄԱՆԱԿԻ ՍԿԶԲԸ և ԺԱՄԱՆԱԿԻ ԱՎԱՐՏԸօգտագործվում է ամսաթվերի հետ աշխատելիս: Որպես լրացուցիչ պարամետր նշվում է ժամանակաշրջանի տեսակը (ՕՐ, ԱՄԻՍ, ՏԱՐԻ և այլն):
  • ADDKDATEթույլ է տալիս ամսաթվից ավելացնել կամ հանել որոշակի տեսակի որոշակի ժամ (երկրորդ, րոպե, օր և այլն):
  • ՏԱՐԲԵՐՎԵԼորոշում է երկու ամսաթվերի տարբերությունը՝ նշելով ելքային արժեքի տեսակը (ՕՐ, ՏԱՐԻ, ԱՄԻՍ և այլն):
  • ISNULLփոխարինում է բաց թողնված արժեքը նշված արտահայտությամբ:
  • ՆԵՐԿԱՅԱՑՈՒՑՉՈՒԹՅՈՒՆ և ՆԵՐԿԱՅԱՑՈՒՑՄԱՆ ՀՂՈՒՄՆԵՐստանալ նշված դաշտի տողային ներկայացում: Կիրառեք համապատասխանաբար ցանկացած արժեքների և միայն հղման արժեքների վրա:
  • ՏԵՍԱԿ, ՏԵՍԱԿ ԱՐԺԵՔՆԵՐօգտագործվում են մուտքային պարամետրի տեսակը որոշելու համար:
  • ՀՂՈՒՄտրամաբանական համեմատական ​​օպերատոր է հատկանիշի արժեքի տեսակի համար:
  • EXPRESSօգտագործվում է արժեքը ցանկալի տեսակի փոխարկելու համար:
  • Ամսաթիվ ԺԱՄԱՆԱԿստանում է «Date» տեսակի արժեքը թվային արժեքներ(Տարի, ամիս, օր, ժամ, րոպե, վայրկյան):
  • ԻՄԱՍՏՈՒԹՅՈՒՆ 1C հարցումով այն օգտագործվում է նախապես սահմանված արժեքները նշելու համար՝ տեղեկատուներ, թվարկումներ, բնութագրերի տեսակների պլաններ: Օգտագործման օրինակ. Որտեղ Legal Individual = Value (Enumeration. Legal Individual. Individual)«.

Հարցման ստեղծող

1C-ով հարցումներ ստեղծելու համար կա շատ հարմար ներկառուցված մեխանիզմ՝ հարցման դիզայներ: Այն պարունակում է հետևյալ հիմնական ներդիրները.

  • «Սեղաններ և դաշտեր» - պարունակում է այն դաշտերը, որոնք պետք է ընտրվեն և դրանց աղբյուրները:
  • «Միացումներ» - նկարագրում է ՄԻԱՑՄԱՆ կառուցվածքի պայմանները:
  • «Խմբավորում» - պարունակում է խմբավորման կառուցվածքների և դրանց հիման վրա ամփոփված դաշտերի նկարագրությունը:
  • «Պայմաններ» - պատասխանատու է հարցումի տվյալների ընտրության համար:
  • «Ընդլայնված»՝ հարցման լրացուցիչ պարամետրեր, ինչպիսիք են «SELECT» հրամանի հիմնաբառերը և այլն:
  • «Միացումներ/Անանուններ» - նշվում են աղյուսակների միացման հնարավորությունները և նշվում են անունները («ԻՆՉՊԵՍ» կառուցվածքը):
  • «Պատվերը» պատասխանատու է հարցումների արդյունքների տեսակավորման համար:
  • «Ընդամենը» - նման է «Խմբավորում» ներդիրին, բայց օգտագործվում է «TOTALS» կառուցվածքի համար:

Հարցման տեքստն ինքնին կարելի է դիտել՝ կտտացնելով ներքևի ձախ անկյունում գտնվող «Պահանջել» կոճակը: Այս ձևով այն կարելի է ուղղել ձեռքով կամ պատճենել:


Պահանջել կոնսոլ

Ձեռնարկությունների ռեժիմում հարցման արդյունքը արագ դիտելու կամ բարդ հարցումները վրիպազերծելու համար օգտագործեք: Այն պարունակում է հարցման տեքստը, սահմանում է պարամետրերը և ցուցադրում արդյունքը:

Դուք կարող եք ներբեռնել հարցման վահանակը ITS սկավառակի վրա կամ միջոցով:

Ուշադրություն. Սա դասի ներածական տարբերակն է, որի նյութերը կարող են թերի լինել։

Մուտք գործեք կայք որպես ուսանող

Մուտք գործեք որպես աշակերտ՝ դպրոցական նյութերին ծանոթանալու համար

Հարցման լեզու 1C 8.3 սկսնակ ծրագրավորողների համար. կապեր

Միանում է հարցումներին

Միացումն ամենակարևոր և անհրաժեշտ գործողություններից մեկն է, որն իրականացվում է տվյալների բազայի հարաբերական կառավարման համակարգերի կողմից:

Միացումները օգտագործվում են լուցկի տողերմեկ սեղանից մյուս աղյուսակի տողերը:

Միացումների անհրաժեշտությունը հասկանալու համար լուծենք հետեւյալ խնդիրը.

Մենք ունենք գրացուցակ մեր տվյալների բազայում Հաճախորդներ:

տեղեկատու Գույներ:

Եվ տեղեկատու գիրք Ասոցիացիաներ:

Մեր խնդիրն է գույնի վրա հիմնված հաճախորդների սիրած ասոցիացիաները ստանալ:

Այսպիսով, Նատաշայի համար խոտը կլինի նրա սիրելի ասոցիացիան, քանի որ նրա սիրելի գույնը կանաչն է: Իսկ Պետրոսի համար՝ արև: Դուք կարդում եք դասի փորձնական տարբերակը, հասանելի են ամբողջական դասերը:

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

Մենք խնդիրը կլուծենք աստիճանաբար։

Սկզբում մենք կխնդրենք բոլոր հաճախորդներին և նրանց սիրելի գույները:

Հետո պահանջել բոլոր ասոցիացիաները և դրանց գույները:

Եթե ​​փորձենք կատարել այս հարցումը, մենք սխալ կստանանք.

Սխալի պատճառն այն է, որ դաշտը Անուններկա երկու աղյուսակներում միանգամից ( ՀաճախորդներԵվ Ասոցիացիաներ) և համակարգը պարզապես չգիտի, թե որ աղյուսակից է դա նշանակում։

Մեկից ավելի աղյուսակներից նմուշառման ժամանակ նման երկիմաստությունները վերացնելու համար ընդունված է նշել դաշտերի ամբողջական անվանումները.Ամբողջ դաշտի անվանումը ներառում է ամբողջական աղյուսակի անվանումը (օրինակ. Directory.Clients) և հենց դաշտի անվանումը (օրինակ, Անուն).

Այսպիսով, դաշտի ամբողջական անվանումն է Անունսեղանից Հաճախորդներկամք Directory.Clients.Name.

Եվ դաշտի լրիվ անվանումը Անունսեղանից Ասոցիացիաներկամք Directory.Associations.Name.

Խաչաձեւ կապ

Եկեք վերաշարադրենք նախորդ հարցումը՝ դաշտերի լրիվ անուններով.

Մենք հենց նոր արտադրեցինք խաչաձեւ կապերկու սեղան. Ուշադրություն դարձրեք, թե ինչպես է ստացվել արդյունքը.

Ներքին միացում

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

Այս գրառումները ստանալու համար նախորդ հարցմանը մի բաժին ավելացրեք ՈՐՏԵՂ:

Սա այն է, ինչ մեզ պետք է, մենք լուծել ենք խնդիրը:

Վերջին հարցումում մենք օգտագործեցինք խաչաձև միացում լրացուցիչ պայմանով (բաժնում ՈՐՏԵՂ) Դուք կարդում եք դասի փորձնական տարբերակը, հասանելի են ամբողջական դասերը: Նման կապը կոչվում է ներքին:

Նույն բանը գրելու մեկ այլ տարբերակ էլ կա ներքին միացում:

Համեմատեք այս և նախորդ խնդրանքը: Պլատֆորմի տեսանկյունից դրանք լրիվ նույնն են, ուղղակի տարբեր շարահյուսություն ունեն։ Ինչպես այս, այնպես էլ նախորդ հարցումները պարունակում են աղյուսակի ներքին միացում Հաճախորդներսեղանով Ասոցիացիաներըստ դաշտերի Սիրած գույնԵվ Գույնհամապատասխանաբար.

Ձախ կապ

Խնդրում ենք նկատի ունենալ, որ ներքին միացման արդյունքը չի ներառում Անդրեյը: Եվ ամեն ինչ, քանի որ նրա սիրելի գույնը կարմիրն է, և մենք ընդհանրապես կարմիր ասոցիացիաներ չունենք մեր տվյալների բազայում:

Պարզվում է, որ կարմիր գույնով Անդրեյի համար ասոցիացիայի աղյուսակից պարզապես համընկնում չկար։

Եկեք վերագրենք հարցումը, որպեսզի արդյունքը ներառի առաջին աղյուսակի այն գրառումները, որոնց համար երկրորդ աղյուսակից զույգեր չեն գտնվել (այս դեպքում՝ Անդրեյ).

Այս կապը կոչվում է ձախ միանալ.

Ռձախ միանալու արդյունքըներկայացնում է` ամեն ինչ գրառումներ ներքին միացումիցԳԼՈՒՍ ամեն ինչ գրառումներ առաջին աղյուսակից, ներառված չէ ներքին

Ճիշտ կապ

Բայց նորից վերադառնանք ներքին միացմանը.

Նկատի ունեցեք, որ ներքին միացման արդյունքը չի պարունակում ասոցիացիան Սպիտակ ձյուն, քանի որ չկար մեկ հաճախորդ, ում սիրելի գույնը սպիտակն էր։

Եկեք վերաշարադրենք հարցումը, որպեսզի արդյունքը ներառի երկրորդ աղյուսակի այն գրառումները, որոնց համար առաջին աղյուսակից զույգեր չեն գտնվել (այս դեպքում՝ սպիտակ ձյուն).

Այս կապը կոչվում է ճիշտ կապ.

Աջ միացման արդյունքըէ. ԳԼՈՒԾ ամեն ինչ գրառումներ երկրորդ աղյուսակից, ներառված չէ ներքինկապ (որի համար զույգ չի գտնվել):

Ամբողջական միացում

Բայց ի՞նչ, եթե մեզ անհրաժեշտ լինի, որ հարցման արդյունքը ներառի բացի ներքին միացումից ԱնդրեյԵվ Ձյունմիաժամանակ?

Դա անելու համար ձեզ հարկավոր է համատեղել ձախ և աջ միացումների արդյունքները: Կապի այս տեսակն արդեն հորինված է և կոչվում է ամբողջական կապ.

Ամբողջական միացման արդյունքըներկայացնում է. բոլոր գրառումները ներքին միացումիցՊԼՅՈՒՍ բոլոր գրառումները առաջին աղյուսակից, որոնք ներառված չեն ներքինկապ (որի համար ոչ մի զույգ չի գտնվել) PLUS բոլոր գրառումները երկրորդ աղյուսակից, որոնք ներառված չեն ներքինկապ (որի համար զույգ չի գտնվել):

Աղյուսակի անունները

Համաձայնեք, որ բոլոր հարցումները, որոնք մենք գրել ենք այս դասում, բավականին ծանր են թվում: Դա պայմանավորված է նրանով, որ մենք ստիպված ենք նշել լրիվ անուններըդաշտեր՝ երկիմաստությունից խուսափելու համար:

Ամբողջական աղյուսակի անունը կրճատելու համար (օրինակ՝ Directory.Clients) թույլատրելի է (ինչպես նաև բուն դաշտերի համար) այլանունների օգտագործումը։

Եկեք վերագրենք վերջին հարցումն այնպես, որ դաշտերի լրիվ անունները ստեղծելիս փոխարենը Directory.Clientsդուք կարող եք օգտագործել կեղծանուն TO, և փոխարենը Directory.Associations- կեղծանուն Ա:

Եվ հարցման արդյունքն ավելի պարզ դարձնելու համար եկեք ավելացնենք այն դաշտերի անունները, որոնք մենք արդեն դիտել ենք նախորդ դասերից մեկում.

Կառավարում NULL

Ավելի մոտիկից նայեք վերջին հարցման արդյունքներին (ինչպես նաև այս դասի նախորդներից շատերին):

Որո՞նք են դաշտի արժեքները: ԱսոցիացիաԵվ HerColorառաջին տողի համար? Ի՞նչ կասեք դաշտերի մասին։ ՀաճախորդԵվ Իր Գույնըվերջին տողի համար?

Նրանք հավասար են ԴԱՏԱՐԿ,ինչը, ինչպես արդեն գիտենք, նշանակում է որևէ իմաստի բացակայություն.

Եվ քանի որ ԴԱՏԱՐԿնշանակում է արժեքի բացակայություն, ապա դրանով որևէ գործողություն կատարելու ցանկացած փորձ (համեմատություն, ավելացում...) կառաջացնի տվյալների բազայի անորոշ վարքագիծ, անկանխատեսելի սխալ։

Ահա թե ինչու արժեքների մշակումը համարվում է պարտադիր ԴԱՏԱՐԿ երբ նրանք կարող են առաջանալ:

Այն, ինչ մենք հասկանում ենք վերամշակում ասելով, այն է, որ մենք պետք է մեր խնդրանքում ասենք, որ եթե դաշտերից մեկը հավասար է ԴԱՏԱՐԿ, ապա ինչ-որ այլ արժեք պետք է փոխարինվի այս դաշտում:

Այս դեպքում՝ դաշտերի համար ՀաճախորդԵվ Ասոցիացիահայտնաբերման դեպքում ԴԱՏԱՐԿմենք կփոխարինենք դատարկ տողը «»:

Եվ ահա դաշտերը Իր ԳույնըԵվ HerColorգրացուցակի տարրերի հղումներ են ԳույներՀետևաբար, դրանց մեջ կարող են փոխարինվել միայն այն արժեքները, որոնք նշված տեսակների հղումներ են: Հղման յուրաքանչյուր տեսակ (օրինակ՝ տեղեկատու կամ փաստաթուղթ) ունի նախապես սահմանված տարր EmptyLink. Հարցման մեջ դրա արժեքը նշելու համար մենք կօգտագործենք ֆունկցիան ԻՄԱՍՏՈՒԹՅՈՒՆ.

Որոշելու համար, թե ինչ կա դաշտում ԴԱՏԱՐԿՄենք կօգտագործենք նախորդ դասերից մեզ արդեն ծանոթ ֆունկցիա ISNULL:

SELECT ISNULL( K. Name, "" ) AS Client, ISNULL( K. FavoriteColor, VALUE (Directory. Colors. EmptyLink) ) AS ItsColor, ISNULL( A. Name, "" ) AS Association, ISNULL( A. Color, VALUE (տեղեկատու. Գույներ. EmptyLink) ) AS HerColor-ը գրացուցակից է: Հաճախորդներ ԻՆՉՊԵՍ ԼՐԱՑՆԵԼ ՄԻԱՑՄԱՆ տեղեկատու: Ասոցիացիաներ AS A BY K. FavoriteColor = A. Color

Արտաքին տեսքով (հարցման վահանակից) արդյունքը չի փոխվել: Մենք դեռ դատարկ դաշտեր ենք տեսնում։ Բայց սա միայն այն պատճառով, որ լարային ներկայացումները ունեն ԴԱՏԱՐԿև բոլոր տեսակի դատարկ դաշտերը նույնն են և հավասար են դատարկ տողին:

Փաստորեն, այս դատարկ դաշտերն այլեւս գոյություն չունեն ԴԱՏԱՐԿ(ոչ մի արժեք) , Այժմ նրանք ունեն (դատարկ) արժեքներ, որոնց հետ դուք արդեն կարող եք աշխատել (գործողություններ կատարել):

Հիշեք, դատարկ արժեքն ու արժեք չունենալը երկու շատ տարբեր բաներ են:

Երկուից ավելի սեղանների միացում

Դուք կարող եք հաջորդաբար միացնել այնքան աղյուսակներ, որքան ցանկանում եք:

Ենթադրենք, մենք պետք է լուծենք հետևյալ խնդիրը. Դուք կարդում եք դասի փորձնական տարբերակը, հասանելի են ամբողջական դասերը: Արտադրեք հաճախորդների և նրանց սիրելի ասոցիացիաների և նրանց սիրած ապրանքների բոլոր հնարավոր տարբերակները՝ հիմնվելով իրենց սիրելի գույնի վրա:

Դա անելու համար եկեք աղյուսակը հաջորդաբար միացնենք ըստ գույնի Հաճախորդներսեղանով Ասոցիացիաներիսկ հետո (արդյունքը) աղյուսակով Սնունդ:

Անցեք թեստը

Սկսեք թեստը

1. Միացումները օգտագործվում են

; Ներդրված հարցումներ (մշակման փուլում):

Առաջադրանք թիվ 1. օգտագործեք հարցում՝ բոլոր տեղադրված փաստաթղթերը ընտրելու համար Ապրանքների և ծառայությունների վաճառք,

Բացատրություն: կոնֆիգուրացիաներ Հաշվապահական հաշվառում 2.0 / 3.0Իրականացումը չի պահպանում տրված հաշիվ-ապրանքագրի հղումը: Այս փաստաթղթերի միջև կապը հակառակ է. հաշիվ-ապրանքագրում (մանրամասներում Փաստաթղթերի բազա) պահվում է հղում այն ​​իրականացմանը, որին այն վերաբերում է: Այսպիսով, հասկանալու համար, թե որ իրականացումներն չունեն հաշիվ-ապրանքագրեր, դուք պետք է հարցման մեջ օգտագործեք երկու աղյուսակ. Ապրանքների և ծառայությունների վաճառքԵվ Թողարկված հաշիվ-ապրանքագիր.

Առաջադրանք թիվ 2. ասենք գրացուցակի տվյալների բազայում Կոնտրագենտների պայմանագրերստեղծվել է լրացուցիչ տեղեկատվություն Հետաձգում(պահեստավորման վայրի գրանցամատյան լրացուցիչ տեղեկություն) Օգտագործեք հարցում՝ նշված կոնտրագենտի բոլոր պայմանագրերը 0-ից 10 օր ուշացումով ընտրելու համար:

Բացատրություն. այս առաջադրանքում հնարավոր կլիներ անել առանց երկու աղյուսակի օգտագործման, եթե ոչ մեկ պայմանի համար՝ զրոյական տարկետումով պայմանագրերի ընտրություն: Բանն այն է, որ գրանցամատյանում լրացուցիչ տեղեկությունԼրացուցիչ տեղեկությունների համար դատարկ արժեքները չեն պահվում, ուստի այնտեղ զրոյական հետաձգման գրառումներ չեն լինի: Հետևաբար, դուք պետք է կցեք այս գրանցամատյանը գրացուցակին Կոնտրագենտների պայմանագրեր, եթե որևէ պայմանագրով տարկետումով արձանագրություն չկա, ապա այն զրո է։

Նոր ներդիրներ. Միացումներ

Նոր մեխանիզմներ. 1C հարցում զրոյականության ստուգում:

Թիվ 3 դասի տեսական մասը

Եթե ​​1C հարցումն օգտագործում է միայն մեկ աղյուսակ, ապա տվյալները վերցվում են միայն դրանից: Բայց եթե Ձեզ անհրաժեշտ է տվյալներ ընտրել մի քանի աղյուսակներից, ապա դուք պետք է ստեղծեք հարաբերություններ այս աղյուսակների միջև: Հարաբերություններն անհրաժեշտ են տվյալների բազայի մեկ աղյուսակի տողերը մեկ այլ աղյուսակի տողերի հետ համեմատելու և այդպիսով հարցում կազմելիս վերջնական աղյուսակ ստանալու համար, որը կպարունակի անհրաժեշտ տվյալները բոլոր հարցման աղյուսակներից:

Յուրաքանչյուր կոնկրետ հարաբերություն կազմաձևված է երկու աղյուսակների միջև, որոնցից մեկը կոչվում է Ձախ, այլ Ճիշտ. Կան երեք տեսակի կապեր.

  • ՆԵՐՔԻՆ ՄԻԱՑՈՒՄ- ձախ աղյուսակից գրառումը կհայտնվի հարցման արդյունքում միայն միացման պայմանը բավարարելու դեպքում, աջ աղյուսակից գրառումը կհայտնվի հարցման արդյունքում միայն միացման պայմանը բավարարելու դեպքում.
  • ՁԱԽ ՄԻԱՑՈՒՄ- ձախ աղյուսակից գրառումը ցանկացած դեպքում կներառվի հարցման արդյունքի մեջ, աջ աղյուսակից գրառումը կներառվի ընտրության մեջ միայն միացման պայմանը բավարարելու դեպքում: Ձախի անալոգն է ՃԻՇՏ ՄԻԱՑԵՔաջ աղյուսակի տվյալները ամեն դեպքում ներառվում են արդյունքի մեջ, ձախ աղյուսակի տվյալները միայն պայմանը բավարարելու դեպքում: Սովորաբար հարցում գրելիս այն օգտագործվում է Ձախ կապ, եթե դուք օգտագործում եք ճիշտը, հաջորդ անգամ հարցումը բացելուց հետո հարցման դիզայները այն կվերափոխի ձախի, փոխանակելով աղյուսակները.
  • ԼԻՎԱԾ ՄԻԱՑՈՒՄ- հարցման արդյունքում ամեն դեպքում առաջինը կհայտնվի ձախ աղյուսակի գրառումը, այնուհետև միայն միացման պայմանը բավարարելու դեպքում, աջ աղյուսակի գրառումը ամեն դեպքում առաջինը կհայտնվի հարցման արդյունքում, այնուհետև միայն միացման պայմանի դեպքում. բավարարված է. Այս դեպքում ստացված կրկնօրինակ տողերը բացառվում են նմուշից:

Տեսականորեն, հարցումների աղյուսակներին միանալը բավականին դժվար է հասկանալ չվարժված 1C ծրագրավորողի համար, բայց օրինակներն ուսումնասիրելիս բոլոր անհասկանալի կետերն ավելի պարզ կդառնան:

Հարաբերություններ ներդիր Query Designer-ում

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

Նոր կապ ավելացնելուց հետո պետք է լրացնել աղյուսակի բոլոր սյունակները։ Դիտարկենք կապի աղյուսակի յուրաքանչյուր սյունակ.

  • Աղյուսակ 1. Այս սյունակում ընտրված է կապի ձախ աղյուսակը: Դուք կարող եք օգտագործել միայն ներդիրում ընտրված աղյուսակները Աղյուսակներ և դաշտեր;
  • Բոլորը. Այս սյունակում դրոշակը տեղադրվում է, եթե անհրաժեշտ է ընտրել ձախ աղյուսակի բոլոր տվյալները (համար Ձախկամ Լիկապեր);
  • Աղյուսակ 2. Այս սյունակում ընտրված է ճիշտ կապի աղյուսակը;
  • Բոլորը. Այս սյունակում դրոշակը տեղադրվում է, եթե անհրաժեշտ է ընտրել ճիշտ աղյուսակի բոլոր տվյալները (համար Ճիշտկամ Լիկապեր);
  • անվճար. Դրոշ, որով կարող եք անցնել կապի վիճակի ձեռքով խմբագրման ռեժիմին.
  • Միացման պայմանը.Պայման հարցման լեզվով, որը նման է . Դա արտահայտություն է, որը միշտ պետք է վերադարձնի երկու արժեքներից մեկը. Ճիշտկամ Սուտ.Սովորաբար, կապի պայմանը բաղկացած է երեք մասից.
    • Ձախ կողմ. Սովորաբար դաշտ է ձախ աղյուսակում, բայց դա կարող է լինել նաև դաշտ աջ աղյուսակում կամ պարամետր (միայն հատուկ պայմանի խմբագրման ռեժիմում);
    • Համեմատության օպերատոր. Լռելյայն, "=", "<>», «<«, «>», «>=», «<=». Но в произвольном режиме редактирования можно использовать и некоторые другие, например «Между»;
    • Աջ մաս. Սովորաբար դաշտ է աջ աղյուսակում, բայց դա կարող է լինել նաև ձախ աղյուսակի դաշտ կամ պարամետր (միայն հատուկ պայմանի խմբագրման ռեժիմում);

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

Թիվ 3 դասի գործնական մասը

Դիտարկենք դասի սկզբում տրված խնդիրների լուծումը։

Առաջադրանք թիվ 1

Ընտրեք բոլոր տեղադրված փաստաթղթերը հարցումով Ապրանքների և ծառայությունների վաճառք,նշված ժամանակահատվածի համար, որի համար հաշիվ-ապրանքագիր չի ստեղծվել:

  • Եկեք ստեղծենք նոր հարցում;
  • Եկեք ընտրենք աղյուսակներ Ապրանքների և ծառայությունների վաճառքԵվ Թողարկված հաշիվ-ապրանքագիրթելից Փաստաթղթեր;
  • Սեղանից Ապրանքների և ծառայությունների վաճառքընտրեք դաշտ Հղում;
  • Եկեք գնանք ներդիր Պայմաններ;
  • Գլխում Դաշտեր, բացենք շարանը Ապրանքների և ծառայությունների վաճառքօգտագործելով «+» կոճակը;
  • Եկեք գտնենք հենարանները ամսաթիվըև քաշեք այն պայմանների բաժին, ընտրեք համեմատության օպերատորը միջեւև նշեք, օրինակ, ժամանակաշրջանի սկզբի և վերջի պարամետրերը Ժամանակաշրջանի սկիզբԵվ Ժամանակաշրջանի ավարտ;
  • Բաժինից Դաշտերեկեք քաշենք հենարանները Անցկացվել է, դրոշակ դրեք պայմանի գծում անվճարև ջնջել «= &Passed» պայմանի լրացուցիչ մասը;
  • Եկեք գնանք ներդիր Հաղորդակցություններ;
  • Եկեք ստեղծենք նոր կապ՝ օգտագործելով «Ավելացնել» կոճակը;
  • Դաշտում Աղյուսակ 1ընտրեք սեղան Ապրանքների և ծառայությունների վաճառք(սա կլինի ձախ աղյուսակը) ;
  • Խնդիրը ճիշտ լուծելու համար մենք պետք է ստանանք բոլոր իրականացումները, դրանց կցենք հաշիվ-ապրանքագրեր, և եթե հաշիվ-ապրանքագիրը չգտնվի, իրականացումը ցուցադրենք որպես հարցման արդյունք։ Եկեք այս առաջադրանքը բաժանենք երկու ենթաառաջադրանքի.
    • Եկեք ընտրենք բոլոր վաճառքները և, օգտագործելով կապը, փորձենք գտնել դրանց հաշիվ-ապրանքագիրը.
    • Օգտագործելով պայմանը, մենք կընտրենք միայն այն տողերը, որտեղ հաշիվ-ապրանքագիր չկա.
  • Նախորդ պարբերությունից հետևում է, որ մենք պետք է օգտագործենք Ձախ կապ, բոլոր իրականացումները ընտրելու համար։ Ուստի սյունակում դրոշակ դնենք Բոլորը
  • Դաշտում աղյուսակ 2ընտրեք սեղան Թողարկված հաշիվ-ապրանքագիր(սա կլինի ճիշտ աղյուսակը);
  • Քանի որ իրականացման հղումը պահվում է հաշիվ-ապրանքագրի մանրամասներում Դ Փաստաթղթերի բազա,միացման վիճակում մենք ընտրում ենք.
    • Դաշտի ձախ կողմում Ապրանքների և ծառայությունների վաճառք Հղում;
    • Դաշտի աջ կողմում. InvoiceInvoiceIssued.DocumentBase.
  • Կապի կարգավորումն ավարտված է.

Ձախ միացմամբ, եթե ձախ աղյուսակի մի տողի համար չկա աջ աղյուսակի մեկ տող, որը բավարարում է կապի պայմանները, ձախ աղյուսակի տվյալ տողի համար աջ աջ աղյուսակի բոլոր դաշտերն ունեն արժեքը. ԴԱՏԱՐԿ. Եկեք սա օգտագործենք ձախ աղյուսակի միայն այն տողերն ընտրելու համար, որոնց համար հաշիվ-ապրանքագիր չկա.

1C հարցումների լեզուն ունի հատուկ տրամաբանական օպերատոր, որը թույլ է տալիս ստուգել՝ արդյոք դաշտը արժեք է պարունակում ԴԱՏԱՐԿ, նրա շարահյուսությունը <Поле>ԱՆՈՒՐ Է. Այն վերադարձնում է արժեք Ճիշտեթե դաշտը արժեք ունի ԴԱՏԱՐԿԵվ Սուտ- հակառակ դեպքում.

Նկատի ունեցեք, որ ստուգեք դաշտի արժեքը ԴԱՏԱՐԿհնարավոր է միայն օգտագործելով նշված գործառույթը, շինարարությունը <Поле>= NULLԱյս ստուգումը հնարավոր չի լինի։

  • Եկեք գնանք ներդիր Պայմաններ;
  • Քաշեք աղյուսակի դաշտերից մեկը պայմանների բաժին Թողարկված հաշիվ-ապրանքագիր, օրինակ դաշտ Հղում;
  • Սահմանեք դրոշակ տողում անվճարև դաշտից հետո ավելացրեք օպերատորը ԱՆՈՒՐ Է, նախապես ջնջելով պայմանի անհարկի մասը.

Request = Նոր հարցում; Request.SetParameter ("StartPerid" , StartPerid); Request.SetParameter («Ժամանակաշրջանի ավարտ», ժամկետի ավարտ); Request.Text = "SELECT | Ապրանքների և ծառայությունների վաճառք: Հղում | FROM | Փաստաթուղթ. Ապրանքների և ծառայությունների վաճառք ՈՐՊԵՍ ապրանքների և ծառայությունների վաճառք | ՁԱԽ ՄԻԱՑՈՒՄ Փաստաթուղթ. Թողարկված ապրանքագիր ՈՐՊԵՍ թողարկված հաշիվ-ապրանքագիր | Ապրանքների և ծառայությունների ծրագրային վաճառք: Հղում = Թողարկվել է հաշիվ-ապրանքագիր: Փաստաթղթի հիմքը | ՈՐՏԵՂ | Ապրանքների և ծառայությունների վաճառք. Ամսաթիվ ժամանակաշրջանի և սկզբի և ժամանակաշրջանի ավարտի միջև | Ապրանքների և ծառայությունների վաճառք: Կատարված | ԵՎ թողարկված հաշիվ-ապրանքագիրը: Հղումը զրոյական է»:

Առաջադրանք թիվ 2

  • Եկեք ստեղծենք նոր հարցում;
  • Եկեք գործարկենք հարցումների դիզայները;
  • Ներդիրի վրա Աղյուսակներ և դաշտերԵկեք ընտրենք երկու աղյուսակ. Կողմերի պայմանագրերթելից տեղեկատուներԵվ Լրացուցիչ տեղեկությունթելից Տեղեկատվական ռեգիստրներ;
  • Սեղանից Կողմերի պայմանագրերընտրեք դաշտ Հղում;

Ըստ պայմանի՝ հարցման արդյունքը պետք է ներառի միայն մեկ կոնտրագենտի պայմանագրեր, որոնց արժեքը կփոխանցվի հարցումին՝ օգտագործելով պարամետր: Կոնտրագենտը, որին պատկանում է պայմանագիրը, պահվում է դաշտում Սեփականատերգրացուցակ Կոնտրագենտների պայմանագրեր.

  • Եկեք գնանք ներդիր Պայմաններ. Սեղանից Կողմերի պայմանագրերդաշտը տեղափոխել պայմանների բաժին Սեփականատեր. Պայմանի աջ կողմում մենք կսահմանենք այն պարամետրի անունը, որին կփոխանցենք մեզ անհրաժեշտ կոնտրագենտը, եկեք այն անվանենք. Կոնտրակուսակցական;
  • Մենք նաև 0-ից 10 ուշացումներով պայմանագրեր ընտրելու խնդիրը կբաժանենք երկու ենթախադրանքի.
    • Եկեք ընտրենք բոլոր պայմանագրերը և, օգտագործելով կապերը, փորձենք գտնել դրանց տարկետումները.
    • օգտագործելով պայմանը, մենք կընտրենք միայն պայմանագրերը մեզ անհրաժեշտ տարկետումներով.
  • Եկեք կապ հաստատենք պայմանագրերի և լրացուցիչ տեղեկատվության միջև: Եկեք գնանք Կապեր ներդիր և ավելացնենք նոր կապ;
  • Դաշտում Աղյուսակ 1ընտրեք սեղան Կողմերի պայմանագրեր(սա կլինի ձախ աղյուսակը);
  • Քանի որ մեզ անհրաժեշտ են բոլոր պայմանագրերը, մենք կօգտագործենք Ձախ կապ.Եկեք դրոշակ դնենք բոլոր սյունակում, որը պատկանում է ձախ աղյուսակին;
  • Դաշտում աղյուսակ 2ընտրեք սեղան Լրացուցիչ տեղեկություն(սա կլինի ճիշտ աղյուսակը);
  • Քանի որ պայմանագրի հղումը պահվում է հարթության մեջ Օբյեկտտեղեկատվական ռեգիստր Լրացուցիչ տեղեկություն,միացման վիճակում մենք ընտրում ենք.
    • Դաշտի ձախ կողմում Կողմերի պայմանագրեր Հղում;
    • Եկեք թողնենք ստանդարտ համեմատության օպերատորը «=";
    • Դաշտի աջ կողմում. AdditionalInfo.Object.

Մենք ավելացրել ենք հղում, որով կընտրենք բոլոր լրացուցիչները: տեղեկատվություն յուրաքանչյուր պայմանագրի մասին: Բայց քանի որ մեզ միայն մեկ հավելյալ է պետք։ խառնում - Հետաձգում, մենք պետք է ավելացնենք ևս մեկ կապ: Այս դեպքում Հետաձգումլրացուցիչ սեփականություն է։ Լրացուցիչ հատկությունները տիպի են Հատկանիշների տեսակների պլան Լրացուցիչ մանրամասներ և տեղեկատվություն:Գրանցամատյանում Լրացուցիչ տեղեկությունլրացուցիչ արժեք հատկությունները պահվում են չափերով Սեփականություն. Այսպիսով, մենք պետք է ավելացնենք հարաբերություն, որը սահմանափակում է լրացուցիչ տեղեկատվությունը միայն Deferral հատկության համար:

  • Եկեք ավելացնենք նոր կապ;
  • Դաշտում Աղյուսակ 1ընտրեք սեղան Կողմերի պայմանագրեր;
  • Կարևոր է իմանալ, որ եթե դուք ունեք մի քանի հարաբերություններ նույն զույգ աղյուսակների վրա, ապա դուք պետք է օգտագործեք նույն միացման տեսակը նրանց համար: Մեր դեպքում սա է Ձախ կապ.Ուստի սյունակում դրոշակ դնենք Բոլորըձախ աղյուսակի հետ կապված;
  • Դաշտում աղյուսակ 2ընտրեք սեղան Լրացուցիչ տեղեկություն;
  • Հարաբերությունների պայմանում մենք կարիք չենք ունենա օգտագործել ձախ աղյուսակի դաշտը, փոխարենը մենք պայման ենք դնելու չափման վրա Սեփականություն, այն հավասարեցնելով լրացուցիչին։ սեփականություն Հետաձգում, որը կփոխանցվի հարցումին՝ օգտագործելով պարամետրը;
  • Դրոշը դնենք անվճարիմաստով Ճիշտև ձեռքով գրեք հետևյալ պայմանի տեքստը. «Հավելյալ տեղեկատվություն. Հատկություն = &PropertyDelay»;

  • Կապի կարգավորումն ավարտված է.

Այժմ մնում է պայման դնել տարկետման չափի հետ կապված։ Քանի որ մենք օգտագործում ենք 0-ից 10 միջակայքը, անհրաժեշտ կլինի օգտագործել «Between» համեմատության օպերատորը: Քանի որ զրոյական հետքայլը չի ​​պահվում լրացուցիչ տեղեկատվության մեջ, այս դեպքում, երբ միացված է, գրանցման բոլոր դաշտերը կվերադարձնեն արժեքը ԴԱՏԱՐԿ. Արժեքը պայմանով փոխարինելու համար ԴԱՏԱՐԿմինչև 0, մենք կօգտագործենք հարցման լեզվի գործառույթը ISNULL (<Выражение1>, <Выражение2>) . Ֆունկցիան վերադառնում է Արտահայտություն 1, եթե հավասար չէ ԴԱՏԱՐԿԵվ Արտահայտություն 2հակառակ դեպքում.

  • Եկեք գնանք ներդիր Պայմաններհարցնել դիզայներին և ավելացնել նոր պայման;
  • Եկեք դրա մեջ դրոշ դնենք անվճարև գնացեք ազատ արտահայտման խմբագրին;
  • Հարցման լեզվի գործառույթներ բաժնում մենք կընդլայնենք մասնաճյուղը Գործառույթներ -> Այլ գործառույթներ;
  • Եկեք մի ֆունկցիա քաշենք արտահայտությունների բաժին ISNULL;
  • Ստացված շինարարությունից հետո մենք կմտնենք համեմատական ​​օպերատորը Between և կսահմանենք միջակայքը՝ 0 և 10;
  • Սեղմեք OK, պայմանը պատրաստ է;

Վերջին բանը, որ պետք է անել, հետաձգման արժեքը ցուցադրելն է հարցումների դաշտերում: Որպեսզի փոխարենը ԴԱՏԱՐԿցուցադրվել է 0 արժեքը, մենք նաև օգտագործում ենք ազատ արտահայտության խմբագրիչը և ֆունկցիան ISNULL.

  • Եկեք գնանք ներդիր Աղյուսակներ և դաշտերև ավելացրեք նոր դաշտ;
  • Ազատ արտահայտության խմբագրիչում, որը բացվում է, ընտրեք գործառույթը ISNULL;
  • Արտահայտություն 1-ի փոխարեն տեղադրեք AdditionalInformation.Value դաշտը, իսկ Expression 2-ի փոխարեն տեղադրեք 0;
  • Սեղմեք OK, դաշտը պատրաստ է;

Արդյունքում մենք կստանանք հարցում հետևյալ տեքստով.

Request = Նոր հարցում; Query.SetParameter ("PropertyDelay", PropertyProperty); Request.SetParameter («Հաշիվ», Հաշիվ); Query.Text = "SELECT | Կողմնակիցների պայմանագրեր: Հղում, | ISNULL(Հավելյալ տեղեկատվություն. Արժեք, 0) AS Field1 | FROM | Գրացուցակ. Կողմնակիցների պայմանագրեր AS Կողմնակիցների պայմանագրեր | ՁԱԽ ՄԻԱՑՆԵԼ Տեղեկությունների գրանցում: Լրացուցիչ տեղեկություններ | AS Լրացուցիչ տեղեկություններ | Հակառակագրի համաձայնագրերի մասին Հղում = Լրացուցիչ տեղեկատվություն: Օբյեկտ | AND (AdditionalInformation. Property = &PropertyDelay) | WHERE |Counterparty contracts. Owner = &Counterparty | AND ISNULL(AdditionalInformation.Value, 0) BETWEEN 0 AND 10";

Կարդացեք նաև հոդվածներ 1C 8 հարցումների լեզվի մասին:

Երբ մենք ցանկանում ենք միաժամանակ մի քանի աղյուսակների տվյալներ տեսնել, այսինքն. մի քանի աղյուսակներ մեկում հավաքելու համար առաջանում է աղյուսակների և նրանց միջև փոխհարաբերությունների միացման հայեցակարգը: Կան չորս տեսակի միացումներ.

  • ձախ;
  • ճիշտ,
  • ներքին;
  • ամբողջական.

Մենք կանդրադառնանք յուրաքանչյուր տեսակի՝ օգտագործելով վերացական օրինակ: Կա 2 աղյուսակ, առաջինում մենք պահպանում ենք նկարագրական տեղեկատվություն ապրանքի մասին, երկրորդում՝ դրա մնացորդների մասին.

Այս աղյուսակներից մեկը ստանալու համար պետք է հստակ նշել, թե որ դաշտերը կապելու ենք, ինչ պայմանով և տեսակով: Հիմա ավելի պարզ կդառնա.

Ձախ կապ

Օգտագործելով ձախ միացում՝ մենք համակարգին ասում ենք, որ արդյունքում մենք ցանկանում ենք տեսնել ձախ աղյուսակի բոլոր գրառումները և աջից՝ միացման պայմանը բավարարող գրառումները։ Ենթադրենք, արտադրանքի դաշտով աղյուսակները միացնում ենք հավասար պայմանով, ապա կստանանք աղյուսակ, ինչպիսին է.

Request.Text =
«ԸՆՏՐԵՔ
| Անվանակարգ.Ապրանք,
| Nomenclature.Color AS ColorNomenclature,
| Remains.Color AS Color մնում է,
| Մնացորդներ.Քանակ
|ԻՑ

";

Մնացորդների աղյուսակից աթոռի համար համընկնում չկար, ուստի դաշտերը լցված էին NULL արժեքներով, որոնք պետք է մշակվեն ISNULL ֆունկցիայի կողմից, տես 1C 8 Հարցման լեզվի գործառույթները:

Ձախ միացումը աշխատում է մոտավորապես այնպես, ինչպես օղակը օղակի մեջ. այն վերցնում է առաջին գրառումը ձախ աղյուսակից և անցնում է աջ աղյուսակի բոլոր գրառումների միջով՝ ապահովելու, որ կապի պայմանը բավարարված է: Այնուհետև ձախ աղյուսակից վերցվում է երկրորդ գրառումը և այլն։ Եթե ​​հանկարծ աջ աղյուսակից մի քանի գրառումներ բավարարեն կապի պայմանը, ապա արդյունքում ստացված աղյուսակին կավելացվեն մի քանի տողեր (ըստ հաջող միացումների քանակի):Ինչպես տեսնում ենք, ստացված աղյուսակը տեղեկատվական չէ, տվյալները չեն արտացոլում: իրական էությունը, ուստի ավելի լավ է այս աղյուսակները միացնել երկու դաշտով՝ Ապրանք և Գույն, միայն այս անգամ մենք կմշակենք NULL-ները.

Request.Text =
«ԸՆՏՐԵՔ
| Անվանակարգ.Ապրանք,
| Անվանակարգ. Գույն,
| ISNULL(Remaining.Quantity, 0) AS Քանակ
|ԻՑ
| Անվանակարգ AS Nomenclature
| Ձախ միացեք մնացորդները ՈՐՊԵՍ մնացորդներ
| Software Nomenclature.Product = Remaining.Product

Ճիշտ կապ

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

Ներքին միացում

Օգտագործելով ներքին միացում՝ մենք համակարգին ասում ենք, որ արդյունքում մենք ցանկանում ենք տեսնել միայն այն գրառումները, որոնք բավարարում են կապի պայմանը և՛ աջ, և՛ ձախ աղյուսակից: Այսպիսով, ստացված գրառումների թիվը փոքր կամ հավասար կլինի միացմանը մասնակցող ամենակարճ աղյուսակի գրառումների թվին: Եկեք կիրառենք ներքին միացում մեր աղյուսակների Ապրանքի և Գույնի դաշտերին.

Request.Text =
«ԸՆՏՐԵՔ
| Անվանակարգ.Ապրանք,
| Անվանակարգ. Գույն,
| Մնացորդներ.Քանակ AS Քանակ
|ԻՑ
| Անվանակարգ AS Nomenclature
| INNER JOIN մնացորդներ AS մնացորդներ
| Software Nomenclature.Product = Remaining.Product
| Եվ Nomenclature.Color = Remaining.Color";

Ամբողջական միացում

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

Այս թեմայով խնդիրներ կարող են լինել շատ, եկեք փորձենք լուծել դրանցից մեկը։ Մեր կազմակերպությունը կահույքի երկու գործարանների դիլեր է՝ «Զարյա» և «Ռասվետ»: Գործարաններից յուրաքանչյուրի ինքնարժեքով տեսականին պահվում է տարբեր աղյուսակներում։ Անհրաժեշտ է ստեղծել միասնական գնացուցակ և ներառել ապրանքներ նվազագույն գնով.

Եկեք կիրառենք ամբողջական միացում բոլոր դաշտերի ընտրությամբ, մենք կապակցենք ըստ արտադրանքի.

Request.Text =
«ԸՆՏՐԵՔ
| NomenclatureZarya.Product AS ProductZarya,
| ԱնվանակարգZarya.Գին AS PriceZarya,
| Անվանակարգ Rassvet Ապրանք AS Product Rassvet,
| NomenclatureRassvet.Price AS PriceRassvet
|ԻՑ

Սա հենց այն չէ, ինչ մեզ պետք է, եկեք միավորենք արտադրանքի դաշտը մեկի մեջ և մշակենք NULL-ները.

Request.Text =
«ԸՆՏՐԵՔ
//ISNULL-ի կառուցումը քննարկվել է հարցումների լեզվի գործառույթների բաժնում
//եթե գինը սահմանված չէ, ապա սկզբնավորեք այն
//ինչու 1000000 տե՛ս ստորև բերված բացատրությունը
| ISNULL(NomenclatureZarya.Price, 1000000) AS PriceZarya,
| ISNULL(NomenclatureRassvet.Price, 1000000) AS PriceRassvet
|ԻՑ
| NomenclatureZarya AS NomenclatureZarya
| ԼԻՐԱԿԱՆ ՄԻԱՑՈՒՄ NomenclatureDawn AS NomenclatureDawn
| Software NomenclatureZarya.Product = NomenclatureDawn.Product»;

Մնում է ընտրել նվազագույն գինը։ Հարցման վերջնական տեքստը կունենա հետևյալ տեսքը.

Request.Text =
«ԸՆՏՐԵՔ
| ISNULL(NomenclatureZarya.Product, NomenclatureDawn.Product) AS Ապրանք,
| ԸՆՏՐՈՒԹՅՈՒՆ
| ԵՐԲ ԿԱ ISNULL (ԱնվանակարգԶարյա. Գին, 1000000) > ISNULL(ԱնվանակարգRassvet. Գին, 1000000)
| ԱՊԱ ISNULL (NomenclatureRassvet. Գին, 1000000)
| ELSE ISNULL (NomenclatureZarya. Գին, 1000000)
| ԱՎԱՐՏՈՒՄ ՈՐՊԵՍ ԳԻՆ
|ԻՑ
| NomenclatureZarya AS NomenclatureZarya
| ԼԻՐԱԿԱՆ ՄԻԱՑՈՒՄ NomenclatureDawn AS NomenclatureDawn
| Software NomenclatureZarya.Product = NomenclatureDawn.Product»;

Եթե ​​գինը սահմանված չէ (NULL), ապա այն պետք է սկզբնավորվի որոշակի արժեքով, հակառակ դեպքում ավելի/պակաս համեմատության գործողությունը կձախողվի սխալմամբ։ Գինը մենք նախաստորագրում ենք անիրատեսական մեծ քանակությամբ, որպեսզի այն «կորցնի» համեմատության գործողության մեջ, քանի որ ըստ խնդրի պայմանների՝ մենք ընտրում ենք ամենացածր գինը։

← 1C հարցումների լեզվի գործառույթները 8 | Միանում է 1C 8 հարցումներին →

Կիսվեք ընկերների հետ կամ խնայեք ինքներդ.

Բեռնվում է...