SCD ішіндегі таңдауларды пайдалану. Есептің ішінде деректер орналасу диаграммасын құру

Соңғы мақаламда мен 1С парадоксалды платформа екенін жаздым. Деректер құрамы жүйесі осы парадокстардың бірі болып табылады. SKD күрделі есептерді жобалауға арналған және «қолмен» есептерді бағдарламалауды көп функциялы құралдар жинағындағы дизайнмен ауыстыруды қамтиды. Мүмкіндік қол жеткізуді басқару жүйелерін пайдаланусегізінші нұсқада пайда болды, бірақ 1С оны стандартты өнімдерінде пайдалана алуы үшін 8.2 нұсқасының пайда болуына көп уақыт қажет болды. Бір жағынан, ACS көп функциялы құралдар жинағы болып табылады, оның көмегімен сіз кодтың бір жолынсыз өте күрделі есептерді жасай аласыз. Дегенмен, қол жеткізуді басқару жүйесінде кіру үшін жеткілікті жоғары кедергі бар, оны үйрену және оны «бірден» толығымен пайдалану өте қиын, өйткені интерфейс толығымен интуитивті емес, бірақ ең толық нұсқаулықтарпайдалану ақылы әдебиет түрінде ғана қолжетімді.

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

Сұраныс = Жаңа сұраныс(
«ТАҢДАҢЫЗ
| Кесте. Номенклатура,
| Кесте. Қойма
|FROM
| &TK AS кестесі»);
Request.SetParameter("TZ", TZ);

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

Мұнда қысқаша шолу жасап, деректер жиыны туралы сөйлескен жөн. Деректер жиындары - бұл деректерді басқару жүйесі деректерді кейінірек есептемеге құрастыратын ақпаратты алатын ақпарат көздері. Деректер жиындары негізінен «Сұраныс» типі арқылы түрлерге бөлінеді, оның денесінде бағдарламашы мәліметтер базасына сұраныс жазады. «Объект» түрі сыртқы объектілерден деректерді жүктеу үшін қолданылады. Екі жағдайда да нәтиже сұранысты орындау немесе сыртқы нысанды жүктеу нәтижесінде алынған өрістердің белгілі бір жиынтығы болып табылады. Кейінірек бұл өрістермен бірге «Параметрлер» қойындысында жұмыс істеуге болады егжей-тегжейлі параметрлересеп құрылымы. Әртүрлі жинақтарды өзара қосу үшін ACS бір атаудағы қойындыда деректер жиындары арасындағы қосылымдарды көрсету мүмкіндігін береді. Бұл қосылымдар классикалық сұраудағы сол жақ қосылымның тікелей аналогы болып табылады. Дегенмен, кез келген деректер жинағындағы сұраулар басқа деректер жиындарының бар екенін «білмейтінін» ескеру керек, сайып келгенде, деректер жиындары арасындағы қатынастар «» бөлімінде көрсетілген құрылымға сәйкес деректердің орналасуына әсер етеді; Параметрлер» қойындысы.

Мәселені мысалға дейін егжей-тегжейлі қарастырайық. Стандартты есеп бар: ZiK 8 конфигурациясын ұйымдастыру үшін жалақы ведомостары. Есептегі есептердің түрлерін белгілі бір топтарға топтастыру қажет. Есептеу көрінісі-Топтық сәйкестіктер сыртқы мәндер кестесінде сақталады. Оны негізгі деректер орналасу схемасына жүктеу үшін біз «Топтар» атауымен «деректер жиыны объектісін» жасаймыз (2-сурет). Есептеу түрі бойынша «сұрау деректерінің жиынтығымен» - «Есептеулермен» байланыс жасаймыз (3-сурет). «Сұраныс деректер жинағында» - «Есептеулерде» топтарға арналған ақпарат бар, біз барлық жазбаларды жоямыз. Содан кейін «Параметрлер» қойындысында мәні сыртқы деректер көзінен жүктелетін «Топтық» өрісін пайдалана аламыз (4-сурет). Есепті құру функциясында біз сыртқы деректерді жүктеуді толықтырамыз.

Есеп шығару функциясы(Нәтиже = Анықталмаған, Шифрды шешу деректері = Анықталмаған, OutputInReportForm = True) Экспорттау

// «Топтар» мәндерінің қажетті кестесін алу немесе қалыптастыру және оны аттас айнымалыға жазу

ExternalData = Жаңа құрылым();//сыртқы деректер құрылымын жасаңыз және толтырыңыз
ExternalData.Insert(Groups);

UserPanelValue = TypicalReports.GetUserPanelSettingValuesofObject(ThisObject);
DefaultSettings = SettingsComposer.GetSettings();
TypicalReports.GetAppliedSetting(ThisObject);
TypicalReports.GenerateTypicalReport(ThisObject, Нәтиже, Шифрды шешу деректері, OutputToReportForm, ExternalData);
SettingsLinker.LoadSettings(DefaultSetting);
Нәтижені қайтару;

EndFunction

Егер біз нөлден есеп жасасақ, есепті құрудың іске қосу коды келесідей болады:

ExternalDataSets = жаңа құрылым;
ExternalDataSets.Insert("Groups", Groups); //Топтар – қажетті мәндер кестесі
DataCompositionSchema = GetLayout («MainDataCompositionSchema»); // деректер ағынының диаграммасы бар біздің макет
Параметрлер = DataCompositionScheme.DefaultSettings;
LayoutLinker = newDataLayoutLayoutLinker;
LayoutLayout = LayoutComposer.Execute(DataLayoutSchema, Параметрлер);
DataCompositionProcessor = newDataCompositionProcessor;
DataCompositionProcessor.Initialize(LayoutLayout, ExternalDataSets);
TabDoc = Жаңа кестелік құжат;
OutputProcessor = Жаңа OutputProcessorDataCompositionResultInTabularDocument;
OutputProcessor.SetDocument(TabDoc);
OutputProcessor.Output(DataCompositionProcessor);

Оқы 9660 бір рет

Деректер құрамы жүйесі үшін сұрау тілі кеңейтімі

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

Деректер құрамы жүйесінің синтаксистік элементтері сұрау тілі кеңейтімі

ТАҢДАУ

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

Мысалы:

(Таңдау элементі, қойма)

Өріс бүркеншік атынан кейін осы өрістегі еншілес өрістерді пайдалану мүмкіндігін көрсететін «.*» таңбаларының тіркесімі болуы мүмкін.

Мысалы, Номенклатура.* жазбасы «Номенклатура» өрісінің еншілес өрістерін пайдалану мүмкіндігін көрсетеді (мысалы, «Номенклатура.Код» өрісі). SELECT элементі тек бірінші қосылу сұрауында пайда болуы мүмкін.

ҚАЙДА

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

(ҚАЙДА Номенклатура.*, Қойма)

Қарапайым мысал

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

Мәселені шешу үшін элементті және сату айналымы кестесін сол жақ біріктірумен байланыстыратын сұрауды жасауға болады, нәтижесінде таңдалған кезеңде сатылмаған элемент үшін өріс мәндерін аламыз; Қарсы тарап, Келісім, Саны, сомасы= Нөл. Бұл сұрау:

ТАҢДАУ Сілтеме Номенклатура.Сілтеме AS Номенклатура, Сату айналымы.Контрагенттік келісім, Сату айналымы.Саны АС Айналым Саны, Сату айналымы. AS SalesTurnover Software SprNomenclature.Link = Сату айналымы. Номенклатура

Міне нәтиже:

Қарсы тарап Келісім Номенклатура Саны сомасы
null null _Тест1 null null
«Мүйіз бен тұяқ» ЖШС Келісім 1 тәпішке 10 1200
«Газпром» ААҚ Керемет келісімшарт Етік 5 13000
null null Галоштар null null
null null Сланецтер null null

Бұл мысалда «Гошки» және «Тәпішке» тауарларының сатылымы болған жоқ.

Және бәрі жақсы болар еді, егер үлгіні контрагент бойынша топтастырсақ, онда барлық сатылмаған заттар бөлек топқа түседі, мұнда контрагент = нөл, бірақ клиент есепте контрагент өрісі бойынша кездейсоқ таңдауды қалайды (әрине, бұл Сату тізіліміндегі контрагентті білдіреді). Не істеуім керек? Өйткені, шын мәнінде, бізге тек кестені сүзгілеу керек Сатылымдар. Егер біз ACS конструкторында автотолтыруды қолдансақ, онда қол жетімді таңдау өрістері өрісті қамтиды Қарсы тарап, бәрі жақсы сияқты, бірақ контрагент бойынша таңдау арқылы есепті орындаған кезде біз элементпен байланыстағы барлық жазбаларды жоғалтамыз. Мысалы, таңдауды орнатайық: Қарсы тарап = «Мүйіз бен тұяқ» ЖШС. Нәтиже келесідей болады:

Бізге керегі мүлде емес, солай ма?

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

Шешім бар: бұл үшін сұрау құрастырушықойындысында Деректер құрамы => Кестелервиртуалды кесте шарттарына шарт өрісін қосыңыз Сату айналымыжәне оның лақап атын өзгертіңіз CounterpartySelection

Пайдаланушыны таңдау өрістерімен шатастырмау үшін біз шарт өрісін өшіреміз Қарсы тарапжәне өрістің тақырыбын өзгертіңіз CounterpartySelection


Осы схеманы контрагент өрісінде қосылған таңдау арқылы орындау нәтижесінде алынған сұрау келесі пішінді алады:

Анықтамалық номенклатураны ТАҢДАҢЫЗ. Сілтеме AS Номенклатура, СатуTurnover.Counterparty AS Контрагент, СатуTurnover.Counterparty Agreement AS Контрагенттік келісім, СатуTurnover.QuantityTurnover AS >Саны, СатуTurnover.ASATIONTurnovery,CostRESTurnover. ContractController agent AS Кіріспе, ӨКІЛДІК LINK(Сату айналымы. Контрагент) AS CounterpartyКіріспе, SprNomenclature.Presentation AS Nomenclature Presentation FROM.Nomenclature AS SprNomenclature LEFT CONCECTION Жинақтаулар тізілімі.Сату айналымы(&P , , , Counterparty =AS &P3LTnur номенклатура

Және сәйкесінше нәтиже:

Қарсы тарап Келісім Номенклатура Саны сомасы
null null _Тест1 null null
«Мүйіз бен тұяқ» ЖШС Келісім 1 тәпішке 10 1200
null null Етік null null
null null Галоштар null null
null null Сланецтер null null

Test1 - барлығы орналасқан Номенклатура каталогындағы топ

Жарияланымға жарияланымда пайдаланылған есептің XML схемасы қоса беріледі. Мен Integrated Automation жүйесінде схеманы жасадым, бірақ менің ойымша, UPP және UT 10-да бәрі жақсы жұмыс істейді.

Қорытындылау

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

Егер сізде схемаларды қолданбай жасау үшін жеткілікті тәжірибеңіз болса Автотолтыру– онда бұл кеңестің мағынасы жоқ.

Қолданылатын бағдарламалық құрал

  • Скриншот бағдарламасыSnimOK!
  • XML файл өңдегіші

Назар аударыңыз! Бұл сабақтың кіріспе нұсқасы, оның материалдары толық емес болуы мүмкін.

Сайтқа студент ретінде кіріңіз

Мектеп материалдарына қол жеткізу үшін студент ретінде жүйеге кіріңіз

Жаңадан бастаушыларға арналған деректер құрамы жүйесі 1С 8.3: деректер жиынын қосу

  • Тұтынушылар мен олардың сүйікті өнімдерін көрсететін есеп жазыңыз. Әрбір клиенттің сүйікті түсі бар және әр өнімнің өзіндік түсі бар - осы түстерге сүйене отырып, сіз өнімнің «сүйіктісін» анықтауыңыз керек. Мысалы, егер Андрейдің сүйікті түсі қызыл болса, оның сүйікті тағамдарының бірі қызанақ болады (олар қызыл).
  • Есепте деректердің екі жинағын қолданыңыз. Бірінші жиын «Клиенттер» каталог кестесіндегі деректер. Екіншісі – «Азық-түлік» анықтамалық кестесінің деректері.
  • Іске асыру осы екі жиынның арасындағы байланыс, есепте әрбір клиент үшін таңдаулы өнімдер ғана болуы үшін.

Жаңа есеп жасаңыз

Конфигураторда «Gastronom» дерекқорын ашыңыз және негізгі мәзір арқылы жаңа есеп жасаңыз:

Құжат түрі – «Сыртқы есеп»:

Жаңа есеп түрінде «6-сабақ» атауын көрсетіңіз және «Деректердің құрамы диаграммасын ашу» түймесін басыңыз:

Әдепкі схема атауын қалдырыңыз:

Бірінші деректер жиынын қосу

Ашылған диаграммада «Деректер жиыны» қойындысына өтіп, жасыл плюс белгісін пайдаланып «Деректер жиынын қосу - сұрау» тармағын таңдаңыз:

Сұраныс конструкторына қоңырау шалыңыз:

Біз «Тұтынушылар» кестесін және сұраудан алу қажет өрістерді көрсетеміз:

Екінші деректер жинағын қосу

Деректердің екінші жинағын қосыңыз:

Оны таңдаңыз (DataSet2) және сұрау конструкторын қайта шақырыңыз:

Біз «Азық-түлік» анықтамалығының кестесін және сұраныстан алу қажет өрістерді көрсетеміз:

Нәтижесінде сұрау мәтіні болды:

Қазіргі уақытта есепте екі деректер жиыны бар екенін ескеріңіз: Деректер жинағы1 және Деректер жинағы2. Әрқайсысының өз сұрау мәтіні мен деректері бар.

Атауларды көбірек сипаттау

Түсінікті болу үшін DataSet1 атауын тұтынушыларға және DataSet2 атауын тағамға өзгертейік.

Мұны жиындардың әрқайсысын екі рет басу арқылы орындаңыз:

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

IN қазір«Клиенттер» жинағында келесі өрістер бар: «Аты» және «Таңдаулы түс», ал «Тағам» жиынында: «Аты» және «Түс».

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

«Клиенттер» жинағын таңдап, өріс атауларын келесідей өзгертіңіз:

Содан кейін «Тағам» жинағын таңдап, өріс атауларын келесідей өзгертіңіз:

Параметрлер конструкторын шақыру

Соңында, «Параметрлер» қойындысына өтіп, параметрлер дизайнерін ашу үшін сиқырлы таяқшаны басыңыз:

Есеп түрі – «Тізім...»:

Екі жиыннан есеп үшін өрістерді таңдаңыз:

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

Есепті тексеру

Біз есепті сақтаймыз және оны пайдаланушы режимінде жасаймыз:

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

Бірақ барлық осы жазбалардың ішінен «Клиенттің сүйікті түсі» өрісі «Тағам түсі» өрісіне тең болатындарды ғана қалдыруымыз керек:

Біз екі деректер жинағын қосамыз

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

Жаңа сілтеме қосу үшін «Деректер жинағы сілтемелері» қойындысына өтіп, плюс түймесін басыңыз:

Төмендегі суреттегідей параметрлерді конфигурациялаймыз:

Мен түсініктеме беремін.

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

Өрнек көзі.Біз мұнда бастапқы деректер жинағынан өрнекті немесе жай өрісті көрсетеміз (біз осында орнатылған Клиенттерден ClientFavoriteColor өрісін көрсеттік).

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

Осылайша бұл байланысалдыңғы тізімнен Тұтынушының FavoriteColor өрісі FoodColor өрісіне тең болатын жолдарды ғана қалдырады.

Есепті сақтап, оны пайдаланушы режимінде іске қосамыз:

Тамаша!

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

Қосылу шарты көмекші өріс болып табылады. Онда өрнектерді жазуға болады тек сілтеме көзінде көрсетілген деректер жиынтығынан өрістерді қамтитын.

Бұл жағдайда сілтеме көзіндегі барлық жолдар үшін бұл өрнек (сілтеме шарты) сілтеме жасамас бұрын тексеріледі. Ал егер бұл өрнек АҚИҚ болса, онда сілтеме қабылдағышынан осы жол мен жолдар арасында байланыс орнату әрекеті жасалады. Егер өрнек ЖАЛҒАН болса, мұндай әрекеттер жасалмайды.

Қалай жұмыс істеу керек