Միավորել հարցման արդյունքները: Միավորել հարցումների արդյունքները Ինչպես միավորել հարցումները մեկ 1c-ում

Հարցման լեզուն մշակողների համար 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 (պարամետրի անունը կամայական է):

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

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

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

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

ՄԻԱՑԵՔ

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

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

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

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

ԸՆՏՐԵԼ
Անդորրագիր և U. անվանակարգ,
Գներ.Գին
ԻՑ
Փաստաթուղթ.Ապրանքների և ծառայությունների անդորրագիր.Ապրանքներ ԻՆՉՊԵՍ անդորրագիր T&C
ՆԵՐՔԻՆ ՄԻԱՑՆԵԼ Գրանցում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օգտագործվում է արժեքը ցանկալի տեսակի փոխարկելու համար:
  • Ամսաթիվ ԺԱՄԱՆԱԿթվային արժեքներից ստանում է «Ամսաթիվ» տիպի արժեք (տարի, ամիս, օր, ժամ, րոպե, վայրկյան):
  • ԻՄԱՍՏՈՒԹՅՈՒՆ 1C հարցումով այն օգտագործվում է նախապես սահմանված արժեքները նշելու համար՝ տեղեկատուներ, թվարկումներ, բնութագրերի տեսակների պլաններ: Օգտագործման օրինակ. Որտեղ Legal Individual = Value (Enumeration. Legal Individual. Individual)«.

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

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

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

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


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

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

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

Եթե ​​դուք աշխատում եք մեկ սեղանի հետ, ապա ձեզ հարկավոր չէ օգտագործել միացում: Բոլորովին այլ հարց է, երբ աշխատում ես մի քանի աղյուսակների հետ, և, օրինակ, պետք է տվյալներ ստանաս ապրանքների և՛ գնումների, և՛ վաճառքի վերաբերյալ:

Միավորելու համար օգտագործվում է կետ ՄԻԱՎՈՐԵԼ. Այն, ինչ իրականում տեղի է ունենում այն ​​է, որ հարցումների արդյունքները միաձուլվում են, այսինքն, յուրաքանչյուր հարցում հավաքում է տվյալներ միմյանցից անկախ, այնուհետև այդ արդյունքները միավորվում են մեկի մեջ: Եվ միայն վերջին խնդրանքով կատարվում են այլ գործողություններ, օրինակ՝ գումարների պատվիրում և հաշվարկում։

Հարցումները միաձուլելիս տեղի է ունենում արդյունքների «ուղղահայաց սոսնձում», այսինքն՝ առաջին հարցման արդյունքի տողերը գալիս են առաջինը, հետո երկրորդը։

Եկեք անցնենք պրակտիկային.
Կոդ 1C v 8.x SELECT
Անվանակարգ,
Քանակ,
Գումար
ԻՑ
Փաստաթուղթ. Ընդունելություն. Ապրանքներ

ՄԻԱՎՈՐԵԼ

ԸՆՏՐԵԼ
Անվանակարգ,
Քանակ,
Գումար
ԻՑ
Փաստաթուղթ. Ընդունելություն. Ապրանքներ

Այս հարցման արդյունքը հետևյալն է.
Անվանակարգային Քանակ Գումար
A4 թուղթ 25 14 500
Կպչուն պիտակներ 500լ 8 4 880
Թափանցիկ ֆայլ 5 4 100
Գրասենյակային հավաքածու 8 8 840

Արդյունքում մենք կստանանք երկու սեղան, որոնք միացված կլինեն միմյանց: Դժվար է տեսնել, թե որտեղ է ավարտվում Անդորրագրի փաստաթուղթը և որտեղ է սկսվում Ծախսային փաստաթուղթը: Բայց մենք մի բան կանենք դա պարզելու համար.
Կոդ 1C v 8.x
ԸՆՏՐԵԼ
Անվանակարգ,
Քանակը AS Kol. Ժամանում,
Գումարը AS SumIncoming,
0 AS Քանակ ծախս,
0 AS Mount Expense
ԻՑ
Փաստաթուղթ. Ընդունելություն. Ապրանքներ

ՄԻԱՎՈՐԵԼ

ԸՆՏՐԵԼ
Անվանակարգ,
0 ԱՍ ԿոլՊրիխոդ,
0 AS SumPrikhod,
Քանակ AS քանակի սպառում,
Գումարը AS AmountExpense
ԻՑ
Փաստաթուղթ.Սպառվող նյութեր.Ապրանքներ

Ինչպես երևում է հարցման տեքստից, մենք յուրաքանչյուր փաստաթղթի համար սահմանում ենք տարբեր անուն-ազգանուններ քանակի և քանակի համար: Նաև այն դաշտերի փոխարեն, որտեղ մենք կստանանք գումարի և քանակի արժեքները, մենք կդնենք զրոներ: Դա անհրաժեշտ է, որպեսզի դատարկ քանակություններն ու գումարները փոխարինվեն զրոներով։

A4 թուղթ 25 14 500
Կպչուն պիտակներ 500լ 8 4 880
Թափանցիկ ֆայլ 5 4 100
Գրասենյակային հավաքածու 8 8 840
Գրասենյակային հավաքածու 1 1 105
Թափանցիկ ֆայլ 1820
Կպչուն պիտակներ 500լ 1 610

Այժմ մենք պետք է հեռացնենք կրկնօրինակ տարրերը հարցման արդյունքից: Մենք ունենք երկու հարցում, և եթե յուրաքանչյուրը առանձին քանդենք՝ կրկնօրինակ տարրերը վերացնելու համար, ապա ոչինչ չի աշխատի: Հետևաբար, մենք կնվազեցնենք հարցումը հետևյալ ձևով.
Կոդ 1C v 8.x
ԸՆՏՐԵԼ
Անվանակարգ,
AMOUNT (Եկամտի թիվը) AS Եկամտի համար,
SUM(SumPrikhod) AS SumPrikhod,
AMOUNT (Ծախսերի Քանակ) ՈՐՊԵՍ Ծախսերի Քանակ,
SUM(SumExpense) AS SumExpense
ԻՑ

(ԸՆՏՐԵԼ
Անվանակարգ,
Քանակը AS Kol. Ժամանում,
Գումարը AS SumIncoming,
0 AS Քանակ ծախս,
0 AS Mount Expense
ԻՑ
Փաստաթուղթ. Ընդունելություն. Ապրանքներ

ՄԻԱՎՈՐԵԼ

ԸՆՏՐԵԼ
Անվանակարգ,
0 ԱՍ ԿոլՊրիխոդ,
0 AS SumPrikhod,
Քանակ AS քանակի սպառում,
Գումարը AS AmountExpense
ԻՑ
Փաստաթուղթ.Սպառվող նյութեր.Ապրանք) AS AttachedRequest

ԽՈՒՄԲ ԸՍՏ անվանակարգի

Այսպիսով, մենք տեսնում ենք, որ մեր ամբողջ հարցումը փակված է փակագծերում և կոչվում է NestedQuery: Սա արվում է այնպես, որ մենք կարողանանք խմբավորել գրառումները երկու ենթհարցերից և վերացնել կրկնօրինակ տարրերը: Այս դիզայնը կոչվում է nested query: Այս հարցման արդյունքը հետևյալն է.
Անվանակարգ KolIncoming SumIncoming KolExpenditure SumExpenditure
A4 թուղթ 25 14 500
Կպչուն պիտակներ 500լ 8 4 880 1 610
Գրասենյակային հավաքածու 5 4 100 1 1 105
Թափանցիկ ֆայլ 8 8 840 1 820

Արդյունքում մենք ստանում ենք խմբավորված աղյուսակ, որում տեղադրված ենթհարցերի տվյալները հասցվում են հասկանալի ձևի: Ենթահարկերի թիվը չպետք է գերազանցի 255-ը: Այստեղ մենք օգտագործել ենք չորս ենթհարցումներ:

Եթե ​​մենք ցանկանում ենք հարցման մեջ թողնել միայն եզակի գրառումների արժեքներ՝ առանց խմբավորման օգտագործման։ Դուք պետք է գրեք COMBINE նախադասություն առանց ALL հիմնաբառի:

Տեղեկատվությունը վերցված է կայքից

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

Ապրանքների և ծառայությունների ստացումԵվ Ապրանքների վերադարձ մատակարարիննշված ժամանակահատվածի համար։

Նոր ներդիրներ. Միություններ/Անանուններ.

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

1C Query Builder-ը թույլ է տալիս ստեղծել հարցումների համակցություններ: Նրանց օգնությամբ դուք կարող եք հաջորդաբար դուրս բերել մի քանի հարցումներից ստացված տվյալներ՝ առանց կապեր օգտագործելու: Միաձուլման միակ պայմանը դաշտերի նույն փաթեթն է յուրաքանչյուր անհատական ​​հարցումում:

Դիզայների մեջ անցեք ներդիր Միություններ/Անանուններ. Այն նախագծված է հարցումների միացումներ ստեղծելու և հարցումների դաշտերի համար փոխանուններ սահմանելու համար: Դաշտային կեղծանունները անհրաժեշտ են, եթե դուք բավարարված չեք ստանդարտ տվյալների բազայի դաշտերի անուններով: Եթե ​​հարցման դաշտը բաղկացած է միայն տվյալների բազայի աղյուսակի դաշտից, ապա դրա համար կեղծանուն չի պահանջվում: Եթե ​​դաշտ ստեղծելիս օգտագործել եք հարցումների լեզվի ֆունկցիաները, ապա այդպիսի դաշտի համար անհրաժեշտ է անուն-ազգանուն: Հարցման նախագծողը ստեղծում է ստանդարտ փոխանուններ նման դաշտերի համար Դաշտ1… Դաշտ N, այս կեղծանունները կարող են փոխարինվել ձեզ համար հարմարներով։

Եկեք նայենք ներդիրի բաժիններին Միություններ/Անանուններ:

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

  • Աղյուսակում հարցումներերկու սյունակ.
    • Անուն. Սահմանել ինքնաբերաբար ձևաչափով Հայց 1…Հայց Ն;
    • Կրկնօրինակներ չկան. Սահմանել, երբ անհրաժեշտ է բացառել կրկնօրինակ տողերը նախորդ հարցման հետ միաձուլվելիս: Հարկ է նշել, որ այս դրոշը գործելու է միայն այն հարցումը, որում այն ​​դրված է նախկին խնդրանքին միաձուլելու վրա:

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

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

Դիտարկենք դասի սկզբում տրված խնդրի լուծումը։ Հիշեցնեմ պայմանները.

Առաջադրանք. օգտագործեք հարցում՝ բոլոր տեղադրված փաստաթղթերն ընտրելու համար Ապրանքների և ծառայությունների ստացումԵվ Ապրանքների վերադարձ մատակարարիննշված ժամանակահատվածի համար։

  1. Եկեք ստեղծենք նոր հարցում;
  2. Եկեք գործարկենք հարցումների դիզայները;
  3. Եկեք ընտրենք սեղան Ապրանքների և ծառայությունների ստացումթելից Փաստաթղթեր;
  4. Սեղանից Ապրանքների և ծառայությունների ստացումընտրեք դաշտ Հղում;
  5. Եկեք գնանք ներդիր Պայմաններ;
  6. Գլխում Դաշտեր, բացենք շարանը Ապրանքների և ծառայությունների ստացումօգտագործելով «+» կոճակը;
  7. Եկեք գտնենք հենարանները ամսաթիվըև քաշեք այն պայմանների բաժին, ընտրեք համեմատության օպերատորը միջեւև նշեք, օրինակ, ժամանակաշրջանի սկզբի և վերջի պարամետրերը Ժամանակաշրջանի սկիզբԵվ Ժամանակաշրջանի ավարտ;
  8. Եկեք գնանք ներդիր Միություններ/Անանուններ.
  9. Ավելացնել նոր հարցում, դրոշակ Կրկնօրինակներ չկանկարիք չկա դա բարձրացնել, քանի որ մենք օգտագործում ենք տարբեր տեսակի փաստաթղթեր.

  10. 1C Query Builder-ը ավտոմատ կերպով կգնա ներդիր Աղյուսակներ և դաշտեր. Պատուհանի աջ կողմում կտեսնեք, որ երկրորդ միանալու հարցումն ակտիվ է.


  11. Աղյուսակի համար կրկնենք 1-7 կետերը Ապրանքների վերադարձ մատակարարին;
  12. Եկեք նորից գնանք ներդիր Միություններ/Անանուններ. Այլանունների աղյուսակում դուք կարող եք տեսնել, որ դաշտերը Հղումերկու աղյուսակները գտնվում են նույն շարքում, ինչը նշանակում է, որ հարցումի արդյունքում երկու փաստաթղթերի հղումները կգտնվեն նույն սյունակում.
  13. Եկեք փոխենք սյունակի անվանումը Հղումվրա Փաստաթուղթ(սահմանել դաշտի այլանունը): Դա անելու համար կրկնակի սեղմեք դաշտի անվան վրա մկնիկի ձախ կոճակի վրա: Որից հետո կարող եք ձեր անունը դնել, այնտեղ գրել Փաստաթուղթ;

  14. Հարցումը պատրաստ է, կտտացրեք «OK» կոճակը դիզայների պատուհանի ներքևում:

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

Կան իրավիճակներ, երբ անհրաժեշտ է միավորել մի քանի հարցումներ մեկ հարցման մեջ, և սեղանի միացումները չեն կարող օգնել դրան: Դա ցույց տալու ամենահեշտ ձևը օրինակով է:

Ենթադրենք մեր համակարգում ապրանքների առքուվաճառքի փաստերը գրանցվում են համապատասխանաբար Եկամուտ և Ծախս փաստաթղթերով։ Կոնտրագենտը կարող է լինել ինչպես գնորդ, այնպես էլ մատակարար: Պարտքը կարող է հաշվանցվել ապրանքների առաքմամբ.

Կոնտրագենտի ընդհանուր պարտքը հաշվարկելու համար դուք պետք է գումարեք այս կոնտրագենտի բոլոր ծախսերի գումարը և հանեք նույն կոնտրագենտից ստացված բոլոր մուտքերի գումարը: Դա անելու ամենահեշտ ձևը COMBINE ALL օպերատորի օգտագործումն է.

Request.Text =
"
//հաշվարկել այն գումարը, որը մենք առաքել ենք կապալառուներին
|ԸՆՏՐԵԼ
| Ծախս. Կողմնակից,
|ԻՑ
| Փաստաթուղթ.Ծախս AS Ծախս
|ԽՈՒՄԲ ԸՍՏ
| Ծախս.Կոնտրակուսակցական
| ՄԻԱՎՈՐԵԼ ԲՈԼՈՐԸ
//հաշվարկել կոնտրագենտների գումարը
//մեզ ապրանք է առաքել
|ԸՆՏՐԵԼ
| Ծխական, Կոնգրեսիա,
//վերցնել գումարը բացասական նշանով,
//որ համակցվելիս հանվել է ծախսի գումարից
| AMOUNT (-անդորրագիր. Գումար)
|ԻՑ
| Փաստաթուղթ Ժամանում AS Ժամանում
|ԽՈՒՄԲ ԸՍՏ
| Ժամանում. Կոնտերկուսակցական»;

Առաջին հարցումով մենք հաշվարկում ենք յուրաքանչյուր կոնտրագենտի ծախսերի չափը, երկրորդում՝ այն գումարը, որի դիմաց յուրաքանչյուր կոնտրագենտ մեզ ապրանք է մատակարարել: Երկրորդ հարցումի գումարը վերցվում է մինուս նշանով, որպեսզի ստացված աղյուսակը քանդելիս այն հանվի այս կոնտրագենտին առաքման գումարից: Արդյունքում մենք ստանում ենք աղյուսակ, ինչպիսին է.

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

Request = Նոր հարցում;
Request.Text =
«ԸՆՏՐԵՔ
| Ծախս. Կողմնակից,
| AMOUNT (Ծախս. Գումար) AS Debt
|Տեղ VT_Մուտքային ծախս
|ԻՑ
| Փաստաթուղթ.Ծախս AS Ծախս
|ԽՈՒՄԲ ԸՍՏ
| Ծախս.Կոնտրակուսակցական
| ՄԻԱՎՈՐԵԼ ԲՈԼՈՐԸ
|ԸՆՏՐԵԼ
| Ծխական, Կոնգրեսիա,
| AMOUNT (-անդորրագիր. Գումար)
|ԻՑ
| Փաստաթուղթ Ժամանում AS Ժամանում
|ԽՈՒՄԲ ԸՍՏ
| Ծխական.Կոնտերկուսակցական
|;
|////////////////////////////////////////////////////////////////////////////////
|ԸՆՏՐԵԼ
| VT_Մուտքային ծախսեր. Կողմնակից,
| SUM(VT_IncomeExpenditure.Debt) AS պարտք
|ԻՑ
| VT_IncomingConsumption AS VT_IncomingConsumption
|ԽՈՒՄԲ ԸՍՏ
| VT_Մուտքային ծախսեր. Կոնտրագենտ»;

Հարցումների միաձուլման պահանջներ

Երկու հարցումների միաձուլման ժամանակ դաշտերի թիվը պետք է լինի նույնը, եթե հարցումներից որևէ մեկում բացակայում են դաշտերը, ապա դրանք պետք է ավելացվեն որպես հաստատուններ: Նայենք վերը բերված օրինակին, թող ծախսերի փաստաթուղթը ունենա նաև զեղչի դաշտ, որը նվազեցնում է կոնտրագենտի պարտքի չափը, բայց անդորրագրի փաստաթղթում զեղչեր չկան։ Ինչպե՞ս լինել այս դեպքում: Այսպիսով.

Request = Նոր հարցում;
Request.Text =
«ԸՆՏՐԵՔ
| Ծախս. Կողմնակից,

|ԻՑ
| Փաստաթուղթ.Ծախս AS Ծախս
|ԽՈՒՄԲ ԸՍՏ
| Ծախս.Կոնտրակուսակցական
| ՄԻԱՎՈՐԵԼ ԲՈԼՈՐԸ
|ԸՆՏՐԵԼ
| Ծխական, Կոնգրեսիա,
| ԳՈՒՄԱՐ (-Անդորում. Գումար),
//ավելացնել զեղչ դաշտի զեղչ
| 0
|ԻՑ
| Փաստաթուղթ Ժամանում AS Ժամանում
|ԽՈՒՄԲ ԸՍՏ
| Ժամանում. Կոնտերկուսակցական»;

Մնում է զեղչն ու խումբը հանել։

Կարևոր է նաև կարգը. Դաշտերը կմիավորվեն ճիշտ այնպես, ինչպես նշված են երկու հարցումների SELECT բաժիններում: Նախորդ օրինակի հետ կապված՝ եկեք փոխենք զեղչի և գումարի դաշտերը անդորրագրերի նմուշում.

Request = Նոր հարցում;
Request.Text =
«ԸՆՏՐԵՔ
| Ծախս. Կողմնակից,
| AMOUNT (Ծախս. Գումար) ՈՐՊԵՍ պարտք,
| AMOUNT(Ծախս.Զեղչ) AS Զեղչ
|ԻՑ
| Փաստաթուղթ.Ծախս AS Ծախս
|ԽՈՒՄԲ ԸՍՏ
| Ծախս.Կոնտրակուսակցական
| ՄԻԱՎՈՐԵԼ ԲՈԼՈՐԸ
|ԸՆՏՐԵԼ
| Ծխական, Կոնգրեսիա,
//փոխել տեղերը
| 0,
| AMOUNT (-անդորրագիր. Գումար)
|ԻՑ
| Փաստաթուղթ Ժամանում AS Ժամանում
|ԽՈՒՄԲ ԸՍՏ
| Ժամանում. Կոնտերկուսակցական»;

Բարի օր, բլոգի կայքի սիրելի ընթերցողներ: Այսօր մենք մանրամասն կքննարկենք հարցումների համատեղում 1C-ում. Կարող եք նաև ներբեռնել Ղազախստանի Առևտրային ձեռնարկությունների կառավարում ստանդարտ կազմաձևման համար, հրատարակություն 1.0:

Եթե ​​դուք աշխատում եք մեկ սեղանի հետ, ապա ձեզ հարկավոր չէ օգտագործել միացում: Բոլորովին այլ հարց է, երբ աշխատում ես մի քանի աղյուսակների հետ, և, օրինակ, պետք է տվյալներ ստանաս ապրանքների գնումների և վաճառքի վերաբերյալ։

Միավորելու համար օգտագործվում է կետ ՄԻԱՎՈՐՈՒՄ/ՄԻՈՒԹՅՈՒՆ. Իրականում տեղի է ունենում հարցման արդյունքների միաձուլում, այսինքն՝ յուրաքանչյուր հարցում իրարից անկախ տվյալներ է հավաքում, այնուհետև այդ արդյունքները միավորվում են մեկի մեջ։ Եվ միայն վերջին խնդրանքով կատարվում են այլ գործողություններ, օրինակ՝ գումարների պատվիրում և հաշվարկում։

Ի հակադրություն, հարցումների միաձուլման ժամանակ տեղի է ունենում արդյունքների «ուղղահայաց սոսնձում», այսինքն՝ առաջին հարցման արդյունքների տողերը գալիս են առաջինը, հետո երկրորդը։

Եկեք անցնենք պրակտիկային.

SELECT տարր, Քանակ, Գումար ՄԻԱՎՈՐԵԼ SELECT տարր, Քանակ, Գումար Փաստաթղթից. Consumables.Goods

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

Արդյունքում մենք կստանանք երկու սեղան, որոնք միացված կլինեն միմյանց: Դժվար է տեսնել, թե որտեղ է ավարտվում Անդորրագրի փաստաթուղթը և որտեղ է սկսվում Ծախսային փաստաթուղթը: Բայց մենք մի բան կանենք դա պարզելու համար.

SELECT անվանակարգ, Քանակ ԻՆՉՊԵՍ Ծխի համարը, Գումարը AS ՍումՊրիխոդ, 0 ԻՆՉՊԵՍ Քանակ Սպառում, 0 ԻՆՉՊԵՍ Գումար ԾախսՓաստաթղթից. Ընդունելություն. Ապրանքներ ՄԻԱՎՈՐԵԼ Ծխի համարը, 0 ԻՆՉՊԵՍ ՍումՊրիխոդ, Քանակ AS Քանակ Սպառում, Գումարը AS Գումար Ծախս FROM Document.Consumables.Goods

Ինչպես երևում է հարցման տեքստից, մենք յուրաքանչյուր փաստաթղթի համար սահմանում ենք տարբեր անուն-ազգանուններ քանակի և քանակի համար: Նաև այն դաշտերի փոխարեն, որտեղ մենք կստանանք գումարի և քանակի արժեքները, մենք կդնենք զրոներ: Դա անհրաժեշտ է, որպեսզի դատարկ քանակություններն ու գումարները փոխարինվեն զրոներով։

Անվանակարգ Ծխի համարը ՍումՊրիխոդ Քանակ Սպառում Գումար Ծախս
A4 թուղթ 25 14 500
Կպչուն պիտակներ 500լ 8 4 880
Ֆայլը թափանցիկ է 5 4 100
Գրասենյակային հավաքածու 8 8 840
Գրասենյակային հավաքածու 1 1 105
Ֆայլը թափանցիկ է 1 820
Կպչուն պիտակներ 500լ 1 610

Այժմ մենք պետք է հեռացնենք կրկնօրինակ տարրերը հարցման արդյունքից: Մենք ունենք երկու հարցում, և եթե յուրաքանչյուրը առանձին քանդենք՝ կրկնօրինակ տարրերը վերացնելու համար, ապա ոչինչ չի աշխատի: Հետևաբար, մենք կնվազեցնենք հարցումը հետևյալ ձևով.

ԸՆՏՐԵԼ
Անվանակարգ,
AMOUNT (Եկամտի թիվը) AS Եկամտի համար,
SUM(SumPrikhod) AS SumPrikhod,
AMOUNT (Ծախսերի Քանակ) ՈՐՊԵՍ Ծախսերի Քանակ,
SUM(SumExpense) AS SumExpense
ԻՑ
(
SELECT անվանակարգ, Քանակ ԻՆՉՊԵՍ Ծխի համարը, Գումարը AS ՍումՊրիխոդ, 0 ԻՆՉՊԵՍ Քանակ Սպառում, 0 ԻՆՉՊԵՍ Գումար ԾախսՓաստաթղթից. Ընդունելություն. Ապրանքներ ՄԻԱՎՈՐԵԼ SELECT տարր, 0 ԻՆՉՊԵՍ Ծխի համարը, 0 ԻՆՉՊԵՍ ՍումՊրիխոդ, Քանակ AS Քանակ Սպառում, Գումարը AS Գումար Ծախս FROM Document.Consumables.Goods ) AS NestedQuery
ԽՈՒՄԲ ԸՍՏ անվանակարգի

Այսպիսով, մենք տեսնում ենք, որ մեր ամբողջ հարցումը փակված է փակագծերում և կոչվում է NestedQuery: Սա արվում է այնպես, որ մենք կարողանանք խմբավորել գրառումները երկու ենթհարցերից և վերացնել կրկնօրինակ տարրերը: Այս դիզայնը կոչվում է nested query: Այս հարցման արդյունքը հետևյալն է.

Անվանակարգ Ծխի համարը ՍումՊրիխոդ Քանակ Սպառում Գումար Ծախս
A4 թուղթ 25 14 500
Կպչուն պիտակներ 500լ 8 4 880 1 610
Գրասենյակային հավաքածու 5 4 100 1 1 105
Ֆայլը թափանցիկ է 8 8 840 1 820

Արդյունքում մենք ստանում ենք խմբավորված աղյուսակ, որում տեղադրված ենթհարցերի տվյալները հասցվում են հասկանալի ձևի:
Ենթհարցերի թիվը չպետք է գերազանցի 255-ը: Այստեղ մենք օգտագործել ենք չորս ենթհարցումներ: