4.3.3. МҚ бейнелеу үшін, одан әрі күрделі форманың құрылуы.
Экрандық формада TDBGrid модификация нұсқалары.
N_Prih мәні Prihod кестесіндегі сирек кездесетін мәндерін қамту үшін арналған, және басқа жүктеуді жүргізбейді. Сондықтан бұл өрісті DBGrid2 бағаналар құрамында көрсетпеу жөн болады. Бұл мақсаттар үшін, Prihod кестесінің жолдар тізімін құрамыз. Delphi-де МҚ-ның қандай жолдары мәліметтер жиынының қосымшасын қолдануға болатынын белгілеудің екі тәсілі бар.
Бірінші тәсіл бұл мәліметтер жиыны негізделген МҚ кестесінен барлық жолдарды қолдануда негізделеді. Бұл тәсіл әдетте, өздігімен қолданылады, яғни оны біз де Table1 және Table2 мәліметтер жиынын құрғанда қолдандық.
Екінші тәсіл мәліметтер жиыны негізделген МҚ кестесінің ішкі жиын өрістерін қолдану негізінде қолданады. Бұл мақсат үшін, мәліметтер жиынынын өрістер редакторы қолданылады. Ол мәліметтер жиыны үшін өңделетін өрістер қатарына барлық өрістерді немесе МҚ-ның ішкі жиын өрістерін қосуға мүмкіндік береді.
DataModule5 контейнерінен тышқан көмегімен Таblе2 компонентін таңдаймыз да, тышқанның оң жақ батырмасын шертеміз. Экранда пайда болған қалқып шығатын мәзірден Fields Editor элементін таңдаймыз. Пайда болған өрістерді өңдеу редакторында (ол бос болған кезінде, 26а суреті) тышқанның оң жақ батырмасын шертеміз де, пайда болған қалқып шығатын мәзірден Add Fields мәзір элементін таңдаймыз. БД Prihod.DB кестесінің барлық өрістерінің тізімі көрсетіледі. N_Prih өрісінен басқа, барлық өрістерді ерекшелейміз (тышқан және Shift пернелері көмегімен) және Add батырмасын шертеміз (26б суреті). Енді өрістерді өңдеу тізімі барлық белгіленген өрістерді қосады (26в-сурет).
а) б) в)
26-сурет – Өрістердің редакторымен жұмыс: а)өрістер редакторының бос тізімі;
б) өрістерді қосу; в) Өрістер редакторының толтырылған тізімі
№3 формадағы DBGrid2 компонентінің Table2 мәліметтер жиыны үшін, бағаналар құрамында енді тек қана өрістер редакторында ғана қосылған өрістер бар (27-сурет).
27-сурет – DBGrid2 өрістерінің құрамы өрістер редакторымен анықталады
Өрістер редакторында мәліметтер жиынының өрістер тізімнін анықтау үшін (Таblе2 компонентінен тышқанның оң жақ батырмасын шерту) осындай тәсілмен әрбір қосылған өріс үшін, Delphi қосымшасындағы TField компонентінің (мәліметтер жиынынын өрісі) құрылуына әкеп соқтырады. Әрбір осындай компонент өздігімен уникалды атпен – бірінші құраушы аты негізінде мәліметтер жиынының аты (Таblе2) алынады, ал екінші құраушы аты негізінде – МҚ кестесіндегі өріс аты аталынады. Осымен, TField компоненті Material өрісіне сай келеді, Table2Material атауына ие болады. Егер өрістер редакторында тиісті өріске шертетін болсақ, объектілер инспекторында өріс қасиеттерін орнату немесе өзгертуге болады, сонымен қатар нақты бір өріс үшін, оқиға өңдеуішін анықтауға болады.
DBGrid2 компонентінің параметрлерін, бағаналар атауы орысша аталатындай етіп өзгертеміз. Ол үшін, DBGrid2 компонентінен оң жақ батырмасын шертеміз де, қалқып шығатын мәзірден Columns Editor элементін таңдаймыз. Экранда редактор терезесі компоненттер үстелі пайда болады (32а - сурет). TDBGrid үстелінің мінездемесін өзгерту үшін, толығымен анықталмаған бағандардан, толық анықталған бағандарға өту керек. Ол үшін кнопке Add All Fields батырмасын шету керек, нәтижесінде бағаналар қосылады,олардың әрқайсысы Table2 компонентінің өрістер редакторынын өрісіне сай келеді (28б-сурет).
28-сурет – а) DBGrid2 бағаналарының бос тізімі; б) DBGrid2 бағаналарының толтырылған тізімі
Әрбір бағананың бас жолын өзгерту үшін, тышқан көмегімен бағаналар редакторында бағана атын таңдау керек және объектілер инспекторында Title қасиеттер тізімін ашу (ол үшін қасиеттің атауы жанындағы крестті тышқанмен шерту керек). Осы тізімнің Caption элементінде баған атауы белгіленген; бас жолдарын тиісті түрмен өзгертеміз де, DBGrid2 баған редакторынан шығамыз. Дәл солай Table1 мәліметтер жиынымен де жасаймыз (29-сурет).
29-сурет – DBGrid1 және 2 бағаналарының атауларын орнату
Дәл сондай өзгертулерді №2 формада да жасаймыз.
Сонымен қатар, №2 формадағы Таblе3 мәліметтер жиынында жазбалардың сұрыптау тәртібін өзгертеміз. Ол үшін, Таblе3 компонентінің (DataModule5 ішіндегі) объектілер инспекторында IndexFieldNames қасиетін индекстік өрістерін құрайтын әрбір Prihod.DB кестесінің тиісті индекстері үшін анықталған, "DatPrih;Material" мәніне қалқып шығатын тізімнен таңдаймыз. Осыдан кейін, DBGrid бағаналар редакторына қайта кіреміз және тышқан көмегімен DatPrih бағанын Material бағанының алдында тұратындай етіп орналастырамыз. Қосымшаға компиляция жасап, оны іске қосамыз. 30-суретте көрсетілгендей, Table2 мәліметтер жиыны Prihod.DB кестесімен тең келеді. Қосымшада ол келу мерзімі бойына сұрыпталған, ал әрбір келу мерзімі ішінде - материал атауымен сұрыпталған.
30-сурет – Материалдар келу мерзімі бойынша сұрыпталған
Экрандық формады есептелетін өрістерді құру
Егер №3 формада мәні басқа өрістерден алынатын есептелетін өріс құру керек болса, келесідей әрекеттерді орындау керек:
Өрістер редакторында жаңа жолды құру керек, оны Calculated деп белгілейміз. Ол үшін, DataModule5 көшіп, қажетті мәліметтер жиынынын (тышқан көмегімен) ағымды ету (Table2), тышқанның оң жақ батырмасын шертіп, мәзірден Field Editor таңдау, қайтадан тышқанның оң жақ батырмасын шертіп, мәзірден New Field таңдау. Осыдан соң сұхбаттық терезеден өріс атын белгілеу, оның типін және жолдық өрістер үшін - өлшемін орнату керек (31-сурет).
31-сурет – New Field терезесі
-
Жаңа өріс үшін TField компоненті құрылады, енді оған қатынауды өрістер редакторында жасауға болады.
-
Есептелетін өріс жататын, мәліметтер жиыны (Table2) компоненті үшін, OnCalcFields оқиға өңделуінің анықтау керек.
Мысалы, Table2 мәліметтер жиыны үшін, «Приход» кестелік мәліметтер қорын білдіретін, есептелетін өрістерге Table2Vychisl «Да» мәнін енгіземіз, егер Table2Kolvo өрісінде мәні 100-ден асса. Кері жағдайда, Table2Vychisl өрісіне бос мәнді енгіземіз:
procedure TDataModule5.Table2CalcFields(DataSet: TDataSet);
begin
IF Table2Kolvo.Value > 100 Then
Table2Vychisl.AsString := 'Да'
ELSE
Table2Vychisl.AsString := ' ';
end;
Егер мәліметтер жиынының AutoCalcFields қасиетінің мәні True болып орнатылса, мәліметтер жиынының dsInsert және dsEdit режимінде, онымен реляциялық байланысқан (кестелік мәліметтер қорының бүтінділік шектеулері орнатылған кезде) OnCalcFields оқиғасы есептелмейтін өрістер модификациясы кезінде басталады.
OnCalcFields оқиғаны өңдеу-процедурасы есептелелтің өріс мәнінің есептеу алгоритмінің құрылымын құрайды. Осы өңделгіште мән тек есептелетің өріске ғана меншіктелуі мүмкін, ал МҚ құрылымында анықталған өріске меншіктей алмайды (32-суретте қосымша көрсетілген).
32-сурет – Іске қосылған қосымшаның түрі
Ескерту. Кейбір кездерде есептелетін өрістерге басқа кестелер өрістерінде болмайтын мәндерді меншіктеу қажеттілігі болады. Басқаша айтқанда, кейде есептелетін өріске форманың кейбір айнымалыларының мәндерін жазуға тиімді болады. Мысалы, біз Tbl мәліметтер жиынына жазбаларды қосайық, кейбір есептеу алгоритмі бойынша Summa өрісінің мәнін есептейміз. Summa өрісіне есептеулер жүргізу үшін, TekOstatok айнымалысы қолдансын. TekOstatok мәнін біз TblTO есептелетін өріске енгізетін болайық.
Мұнда бір қиындық туындайды: мәнді есептелетің өріске енгізілуі OnCalcFields өңдеу процедурасы арқылы жүзеге асады және бұл TekOstatok локалды айнымалы мәні жоғалтылған кезінде болады.
Осы жағдайда Tbl-ге қосылатын жазулар, алгоритм жұмысы үрдісінде, локалды айнымалыларды еске сақтау кейбір динамикалық тізімінде тура келеді, ал соннан соң осы элементтердің мәндерін TblTO өрісіне меншіктеп, оның қажетті элементтерін OnCalcFields оқиғалар өңдеуінде шығару.
Экрандық формада әртүрлі кестелер мәліметтерін бейнелеу үшін SQL-сұраныстарды қолдану.
Бірнеше кестелерді бейнелеуіне арналған бір форманы құрайық. Ол үшін, TDataModule5 контейнерінде TQuery компонентін (компоненттер палитрасының Data Access парағы) орналастырамыз. Өз бетінше оның аты Query1. Оның DatabaseName қасиетін PRIMER мәніне орнатамыз. TDataSource (атауы TDataSource4) компонентін орналастырамыз. Оның DataSet қасиетін Query1 мәніне орнатамыз.
№4 формада TDBGrid компонентін орналастырамыз. Оның DataSource қасиетін DataSource4 деп белгілейміз.
Query1 компоненті үшін, объектілер инспекторында SQL қасиетін табамыз да, батырмасын шертеміз. Пайда болған редактор терезесінде SQL-сұранысының мәтінін енгіземіз:
SELECT P.DatPrih, P.Material, P.Kolvo,Т.Zena,
(P.Kolvo * T.Zena) As Stoim
FROM Materialy T, Prihod P
WHERE T.Material = P.Material
ORDER BY P.DatPrih, P.Material
ОК батырмасын шертеміз.
Осыдан кейін, Query1.Active қасиетін True мәніне орнатамыз. Query1 мәліметтер жиыны қоймаға келіп түсетін материалдар жөнінде мәліметтер құралған. Осы жиынның жазбасының құрамында DatPrih (келу мерзімі), Material (Материал аты), Kolvo (келіп түскен мөлшер), Zena (бір материал үшін орнатылған бағасы), Stoim (келіп түскен материалдың бағасы) өрістері бар. SQL қасиетіндегі сұраныс мәтінінен көрінгендей, PRIMER МҚ мәліметтер жиыны екі кестеден «жиналады», олар Materialy.DB және Prihod.DB. Осыдан осы МҚ кестелерінің жазулары, бірдей мәнді Material өрісінен жиналады (33-сурет).
33-сурет – Әртүрлі кестелерден мәліметтерді бір кестеге біріктіру
№1 формадағы Отчет пунктінде келесі кодты енгіземіз:
Form1.Visible := False;
Form4.Visible := True;
Query1 мәліметтер жиынында жаңа жазуларды қосуға, жазуларды өзгертуге және жоюға болмайды. Ол бірнеше кестелерден жиналған жазбалар тек оқуға ғана арналғанг болып табылатындақтын, өзгертуге рұқсаты жоқ.
4.3.4. Есептік формаларды құру және олардың МҚ қатынау жасалуы.
Есептің жасалуы басқа формалармен қатар қарастыруға болады. Бірақ оның өзіндік ерекшеліктері мен қасиеттері болғандықтан, оны жеке бөлім ретінде қарастырамыз. Сонымен қатар, есептің құрылымын тіпті МҚБЖ –дан жеке де қарастыруға болады. Есептік форма құрамында үш түрлі компоненттер бар. Олар есептің кесте түріндегі экрандық формасы және мәтіні, қағаз тасымалдағыштарына шығарылатын есепті шығару, электронды түрде құрылымдалатын есептер.
4.3.5. Жүйе жұмысын тексеру және іске қосу
Жүйені іске қосу келесі команда арқылы жүзеге асады: Rиn|Rиn. Сонымен қатар, жүйені іске қосу F9 батырмасы арқылы жүзеге асады.
Егер жүйе істемей қалсы, немесе жұмысы тоқтап қалған жағдайда Rиn|Program Reset командасы арқылы ақаулықтарды жоюға болады.
Егер формалардың бейнелену реті сәйкес келмесе, оны Main Form жолындағы Proect|Options мәзір элементі Forms қосымшасы жарлығы көмегімен өзгертуге болады.
Бөлім бойынша қорытынды.
Қойылған талаптарға сай МҚБЖ құру келесіге сүйенеді:
-
Мәзірге арналған экрандық форманы құрылымдау.
-
МҚ бейнелеу үшін экрандық форманы құрылымдау. Сонымен:
-
Бір кестенің мәліметтерін бейнелеуіне арналға экрандық форманы құрылымдау;
-
Екі кестенің мәліметтерін бейнелеуіне арналға экрандық форманы құрылымдау (2 кестені бейнелеу, олардың байланысын ескермеу);
-
Экрандық форма құрамына есептелетін өрісті қосу;
-
SQL – сұраныстарды қолданып, экрандық форманы құру.
-
МҚ мәліметтерді енгізуге арналған экрандық форма құру, сонымен қатар МҚ бойынша навигациялауға және басқаруға арналған батырмалардың құрылуы.
5.1. Есептерді құруға арналған компоненттер.
Delphi –дің QReport компоненттер палитрасында есеп құруға арналған жиырмадан аса компоненттер орналасқан. Олардың негізгілері келесі болып табылады:
TQuickRep, TQRBand, TQRSubDetail, TQRGroup, TQRLabel,
TQRDBText, TQRExpr, TQRSysDat, TQRMemo, TQRRichText,
TQRDBRich Text, TQRShape, TQRImage, TQRChart.
Осы компоненттердің бағыты келесі:
-
TQuickRep – барлық басқаларға базалық болып табылады, ол толығымен есептің тұрысын анықтайды. Басқа компоненттер есептің құрылымдық бөлігін анықтайды:
-
TQRBand – мәліметтердің орналасуына арналған бастама, есеп титулы және т.с.с.;
Есеп негізінде TQRBand компоненттерінен құралады, олар келесіні жүзнгн асырады:
-
есеп тақырыпшасының аймағы;
-
парақ тақырыпшасының аймағы;
-
топ тақырыпшасының аймағы;
-
Бөлшектік мәліметтерді бейнелеуге арналған аймақ;
-
Парақтың төменгі жағының аймағы;
-
Есептің төменгі жағының аймағы.
-
TQRSubDetail- Бағыңынқы кестенің, есепте бар байланыстың негізінде, Master-Detail байланысын орнатқан кезіндегі мәліметтері орналасқан аймағын анықтайды.
-
TQRGroup – есепте мәліметтерді топтауға арналған;
-
TQRLabel – есепте статистикалық мәтінді орналастыруға мүмкіндік береді;
TQRDBText – есепте мәліметтер жиынынын құрамын орналастыруға мүмкіндік береді;
6) TQRExpr - өрнектердің нәтижесі болап табылатын, мәндерді шығаруға арналған;
7) TQRSysDate – есептегі мерзімді, күнді, уақытты, парақ нөмірін, кез-келген мәннің қайталану счетчигін шығаруға мүмкіндік береді;
-
TQRMemo – есепте түсініктеме өрістерін шығаруға мүмкіндік береді;
-
TQRRichText – Түзетілген түсініктемелерді есепте шығару үшін арналған.
-
TQRDBRich Text - Түзетілген түсініктемелерді есепте шығару үшін арналған, олардың ақпарат көзі мәліметтер жиынының өрісі болып табылады;
-
TQRShape – есепте графикалық фигураларды орналастыруға арналған, мысалы тіктөртбұрыш;
-
TQRImage – есепте графикалық ақпаратты шығаруға арналған, оның ақпарат көзі мәліметтер жиынынын өрісі болып табылады;
-
TQRChart – есеп графиктерін орналастыруға мүмкіндік береді;
TQuickRep компоненті
TQuickRep есептің мінездемесін және тұрысын анықтайды. Осы компонентті формаға орналыстырған кезде формада есеп торы пайда болады (34-сурет).
34-сурет – Есептің бос торы. TquickRep компонентін формада орналыстырғаннан кейін пайда болады
Кейін осы торда есептің құрылымдық бөліктері орналастырылады, мысалы, TQRBand тобы
35-сурет – Есеп компоненттері орналасқан есеп торы
TQuickRep компонентінің маңызды оқиғалары мен тәсілдерін атап шығамыз.
Берілген компоненттің қасиеті келесідей:
1.Property Bands: TquickRepBands.
Берілген қасиет логикалық мәндердің жиынтығынан (False/True) тұрады, олар жеке құраушылардың типін анықтайды:
-
HasColumnHeader - есеп берудің бағандар тақырыпшалары;
-
HasDetail – бөліктенген ақпарат;
-
HasPageFooter – беттің төменгі бөлігі (подвал);
-
HasPageHeader – беттің тақырыпшасы;
-
HasSummary – есеп берудің төменгі бөлігі (подвалы);
-
HasTille – есеп берудің тақырыпшасы.
2.Property DataSet: TdataSet.
Ол есептің құрылуы негізіндегі мәліметтер жиынына көрсетіледі. Әдетте есеп беру үшін, бір мәліметтер жиыны қолданылады.
Егер МҚ бірнеше кестесінен байланысқан ақпаратты шығару керек болса, оны SELECT операторы көмегімен бір МЖ-на қосады. Бұл жағдайда МЖ ретінде есеп беру үшін TQuery компонентін қолдануға болады. Бірнеше байланысқан МЖ-ның ақпаратын есеп беруге қосуға болады. Бұл жағдайда МЖ есебі ретінде Master-жиын көрсетіледі, ал бағыттау Detail-жиынына сәйкесінше TQRSubDetail компонентінде жүзеге асырылады.
Егер есеп беруге байланыспаған мәліметтер тобының ақпаратын қосу керек болса, онда композициялық есеп берушілер қолданылады, яғни басқа есеп берушілердің тобынан құралған.
3.Property Frame: TQRFrame.
Берілген қасиет есеп берудің қоршау параметрлерін анықтайды:
-
Color - қоршау сызығының түсі;
-
DrawBottom - сызықты астынан шығаруды, не шығармауды анықтайды;
-
DrawLeft- сызықты сол жағынан шығаруды, не шығармауды анықтайды;
-
DrawRight- сызықты оң жағынан шығаруды, не шығармауды анықтайды;
-
DrawTop- сызықты үстінен шығаруды, не шығармауды анықтайды;
-
Style – сызықтың стилін анықтайды;
-
Width - сызықтың жуандығын пиксельмен анықтайды;
4.Property Page: TQRPage – парақтың параметрлерін анықтайды.
5.Property PrinterSettings: TquickRepPrinterSettings – принтердің параметрлерін анықтайды.
6.Property PrintIfEmpty: Boolean - Есеп беруді оның ішінде мәлімет жоқ болса да баспаға беру керектігін көрсетеді (True);
Берілген компоненттің әдістері келесідей:
7.Procedure NewPage;
Берілген әдіс жаңа бетке көшуді орындайды. BeforePrint немесе AfterPrint есептер компоненттері оқиғаларды өңдеуде қолданылуы мүмкін және OnPrint, OnStartPage және OnEndPage оқиғаларды өңдеуде қолданылмайды.
8.Procedure Preview - есеп беруді алдын-ала қарау терезесіне шығарады.
Алдын-ала қарау терезесінде есеп берудің құрамын баспаға қалай шығатынын қарау үшін:
-
есепті тышқанның көмегімен таңдау;
-
тышқаннның оң жақ батырмасын басу;
-
шыққан мәзірден Preview элементін таңдау керек;
9. Procedure Print – есепті принтерде басып шығарады;
10. Procedure PrinterSetup - принтердің параметрлерін орнатуын қамтамасыз етеді.
Берілген компоненттің оқиғасы келесідей:
11.Property AfterPreview : TQRAfterPreviewEvent - есеп беруді алдын-ала қарау терезесі жабылғаннан кейін келеді.
12.Property AfterPrint: TQRAfterPrintEvent - есеп беруді баспаға шығарудан кейін келеді.
13.Property BeforePrint: TQRBeforePrintEvent - есепті алдын-ала қарау терезесі шығар алдында және есепті баспаға шығару алдында, есеп беруді генерациялау кезінде келеді.
14.Property OnEndPage : procedure(Sender : TObject) - есептің соңғы бетін генерациялауға дайындық кезінде келеді.
15.Property OnStartPage : procedure(Sender : TObject) - есептің бірінші бетін генерациялауға дайындық кезінде келеді.
TQRBand компоненті
TQRBand компоненттері есептің негізгі құрамды бөліктері болып табылады және оған статистикалық мәтіннің және мәліметтердің қойылуы үшін қолданылады.
Берілген компонент келесі қасиеттерге ие болады.
1.Рroperty BandType: TQRBandType - есеп компоненттерінің орналасу орнын және тәртібін анықтайды.
Бұл компоненттің мүмкін мәндері мынадай:
-
rbTitle - есеп компонентінің тақырыпшасын анықтайды. TQRBand компонентінде орналасқан ақпарат, есептің басқа барлық бөліктерінің алдында орналасады. Бұл TQRBand компонентінің түрі есеп берутің bi тақырыпшалық ақпараты үшін қолданылады.
-
rbPageHeader - бет тақырыпшасының компонентін анықтайды.
-
rbDetail - бөліктік ақпараттың компоненті.
-
rbPageFooter – бет подвалының компоненті. Есеп берудің әрбір беті үшін беттегі барлық мәліметтерден кейін шығарылады.
-
rbSummary – есеп подвалының компоненті. Барлық басқа ақпараттан кейін есептің пост бетіне шығарады және есеп берудің ақырғы беттің алдына шығарылуы керек.
-
rbGroupHeader - топтың тақырыпшалық компоненті. Есепте ақпараттың топталуы кезінде қолданылады. Жаңа топтың шығуы кезінде шығарылады.
-
rbGroupFooter – топтың подподвалының компоненты. Есепте ақпараттың топталуы кезінде қолданылады.
-
rbSubDetail - Master-Detail механизмінің көмегімен байланысқан есеп беруде екі немесе одан да көп ақпараттарды шығару кезінде бағыныңқы мәліметтер тобынан бөліктенген ақпаратты шығару үшін қажетті компонент. TQRSubDetail компонентін формада орналастыру кезенде TQRBand компоненті генерацияланғанда бұл мән компонентке автоматты түрде беріледі. Программа бұл мәнді BandType қасиетіне орналастырмауы керек.
-
rbColumnHeader - бағандардың тақырыпшаларын орналастыру үшін керекті компонент. Есеп беруде беттің тақырыпшаларынан кейін әр бір бетте орналасады.
-
rbOverlay - алдыңғы нұсқалы есептермен бірігуі үшін қолданылады.
2. Рroperty Enabled: Boolean - TQRBand компонентінде бар ақпарат басылап жатыр ма (True) жоқ па (False) екенін көрсетеді.
3. Рroperty ForceNewPage: Boolean - TQRBand құрамындағы ақпарат үнемі жаңа беттен басылып шығу керек пе (True) жоқ па (False) соны көрсетеді.
TQRBand компанентасының келесідей оқиғасы бар.
Рroperty BeforePrint: TQRBeforePrintEvent - TQRBand компонентының аймағында орналасқан ақпараттың басылымы алдында шығады.
5.2. TQuickRep және TQRBand компоненттері көмегімен
қарапайым есепті құру әдісі.
TQuickRep және TQRBand компоненттері ешқандай топтық ақпараты сақталмаған қарапайым есепті құру үшін минималды қажеттенген болып табылады.
Prihod.DB кестесінде қоймаға әкелінген материалдар туралы мәліметтер сақталады. МҚК құрамына кіретін МҚ келесі өрістер кіреді:
-
N_Prih - материалдың келу оқиғасының уникалды номері;
-
DataPrih – әкелінген күні;
-
MATERIAL – материалдың аты;
-
KOLVO – әкелінген материалдың жалпы саны.
№6 формаға TTable (аты Table1) компонентасын орналастырайық, Prihod.DB МҚ кестесімен байланыстырайық және оны ашайық (Active = True). Формаға компоненттер политрасының QReport бетінен TQuickRep (аты QuickRep1) компонентасын орналастрайық. Есептің DataSet қасиетіне Table1 мәнін қоямыз. Есепке TQRBand (аты QRBand1) компонентасын қосайық. QRBand1 компонентінің BandType қасиетіне rbTitle мәнін қоямыз. Есептің QRBand1 компонентасы орналасқан кеңістікте QRLabel1 атымен TQRLabel (статикалық мәтін) компонентасын орналастырайық.. Осы компоненттің Caption қасиетіне ' Қоймаға әкелінген материалдар ' мәнін қояйық, Font қасиетіне қалың қисайған биіктігі 16 пунктті қаріпті қояйық. (36-сурет).
36-сурет – Есеп беруде тек оның тақырыпшасы ғана анықталған
Енді Prihod кестесінің жазбасына сәйкес есепке мәліметтерді орналастырайық. Ол үшін есепке TQRBand (аты QRBand2) жаңа компонентін орналастырайық және оның BandType қасиетіне rbDetail мәнін қояйық. Одан кейін топта QRDBText1 ... QRDBText4 атымен TQRDBText төрт компонентасын орналастырайық. Берілген компоненттерді сәйкесінше МЖ өрісімен байланыстырайық - N_Prih, MATERIAL, DataPrih, KOLVO. Ол үшін әр бір QRDBText компонеттің DataSet қасиетіне Table1 мәнін қоямыз, ал DataField қасиетіне сәйкес өрістің атының мәнін қоямыз. (37-сурет).
37-сурет –. Есеп берудің бөлшектенген ақпараттың тақырыпшасы және тобы
Шыққан есепті көру үшін оның үстінен тышқанның оң жақ батырмасын басып және шыққан мәзірден Preview элементін таңдаймыз. Есепті алдын-ала қарау терезесі ашылады (38-сурет).
38-сурет – Алдын-ала қарау тереземіндегі есеп берудің құрамы.
Алдын-ала қарау терезесін ашу №4 формадан «Просмотр» батырмасын басу арқылы жүзеге асырылады.
Ол үшін №4 формаға TButton компонентін қосамыз. Бұл батырманың тақырыпшасын объектілер инспекторын қолданумен «Просмотр» деп өзгертеміз,. OnClick батырмасына оқиғаларды өңдеу анықтайық:
Form6. QuickRep1.Preview;
TQRBand компоненті көмегімен бағандардың тақырыпшаларын көрсету.
TQRBand компоненті BandType қасиетінде rbColumnHeader мәні қойылған бағандар тақырыпшаларын көрсету үшін қолданылады. Бағандардың тақырыпшалары TQRLabel компоненті көмегімен анықталады.
Есепке TQRBand (аты QRBand3) компонетасын қосайық және BandType қасиетіне rbColumnHeader мәнін қоямыз. QRBand3 деп анықталатын есеп беру кеңістігінде TQRLabel (аттары QRLabel2 ... QRLabel5) төрт компонентін орналастырайық және бұл компонентттердің Caption қасиетіне сәйкесінше «Әкелу №», «Материалдың аты», «Күні», «Саны» мәндерін қоямыз. Берілген компоненттердің Font қасиетіне асты сызылған шрифт режимін орнатамыз және шрифттің өзін көлденең деп анықтаймыз.
Есептің алдын-ала қарау терезесіне кірейік. Есептің әр бір бетіне беттің жоғарғы бөлігінде бағандардың аттары шығады(39-сурет).
39-сурет – Есеп беруде бағандардың тақырыпшалары шығады
TQRBand компоненті көмегімен есептің тақырыпшаларын және подвалдарын безендіру.
BandType қасиетінде rbPageHeader мәні қойылған TQRBand компоненті беттің тақырыпшасын көрсету үшін қолданылады. Ол әр бір жаңа бет үшін басқа ақпарат шығар алдында шығады. BandType қасиетінде rbPageFooter мәні қойылған TQRBand компоненті беттің подвалын көрсету үшін қолданылады. Ол әрбір жаңа бет үшін кез келген басқа ақпарат шыққаннан кейін шығады.
Есепке TQRBand (аты QRBand4) компонентін орналастырамыз және оның BandType қасиетіне rbPageHeader мәнін қоямыз. Беттің тақырыпшасына ешқандай мәтін орналастырмаймыз, тек беттің жоғарғы бөлігіне сызық сыза саламыз. Ол үшін Frame. DrawTop компонентінің беттің тақырыпшасы қасиетіне True мәнін қоямыз. Ол жоғары бойынша орналасқан сызықты сызады.
Дәл сондай тәсілмен есептегі парақ подвалын (аты QRBand5) анықтаймыз және BandType қасиетін rbPageFooter мәніне, ал Frame. DrawBottom қасиетін Тrue деп орналастырамыз. Ол сызықты төменгі жағында орналасуын қамтамасыз етеді.
Алдын-ала қарау режиміне кірген кезде біз әрбір беттің басында және аяғында сызық бар екенін көреміз.
TQRSysData компоненті көмегімен есепте
қосымша және жүйелі ақпараттың көрсетілуі.
TQRSysData компоненті қосымша және жүйелік ақпараттың көрсетілуі үшін қолданылады. Көрсетілген ақпараттың түрі келесі қасиеттермен анықталады:
property Data : TQRSysDataType;
Бұл қасиеттің мүмкін болатын мәндері келесідей:
-
qrsColumnNo - есеп берудің ағымдағы бағанның номері (бірбағандық есеп беру үшін үнемі 1).
-
qrsDate – ағымдағы мерзім.
-
qrsDate Time – ағымдағы мерзім мен уақыт.
-
qrsDetailCount - МЖ-да жазылатын жазулардың саны;
-
qrsDetaUNo - МЖ-да ағымдағы жазылатын жазулардың номері
-
qrsPageNumber - есептің ағымдағы беттің номері;
-
qrsPageCount - есеп беттерінің жалпы саны;
-
qrsReport Title – есептің тақырыпшасы.
-
qrsTime – ағымдағы уақыт.
Есептің QRBand5 подвалының компонентасына екі TQRSysData (аттары QRSysDatal... QRSysData2) компонентін орналастырамыз. Оның Data қасиетінің біріншісіне qrsDate (ағымдағы күн) мәнін орналастырамыз, ал екіншісіне qrsPageNumber(есептің ағымдағы беттің номері) мәнін орналастырамыз. Есептің нәтижелерін алдын-ала қарау режиміне көрейік. Енді есептің әр беттің соңғы жағында беттің номері және ағымдағы мерзім шығады.
5.3. Есептегі мәліметтерді топтау әдісі
Мәліметтерді топтау үшін TQRGroup компоненті қолданылады. Оның Expression қасиеті өрнекті көрсетеді. Топқа өрнектің шартын қанағаттандыратын МЖ-нің жазбалары кіреді. Өрнектің мәнін өзгерткенде топтар өзгереді. Топтың тақырыпшасы ретінде компонентасының ВапdТуре қасиетінде rbColumnHeader мәні қойылған TQRBand қызмет етеді. Топтың подвалы ретінде ВапdТуре қасиетінде rbGroup Footer мәні қойылған TQRBand компонентасы қызмет етеді.
TQRGroup компонентінің FooterBand қасиеті топтың подвалының компонентіне сілтемесі бар.
Мысалы. Ақпарат материалдың атымен топталатын қоймағақа материалдар келуі туралы жаңа есеп құрастырайық. Ол үшін №7 формада есептің мәліметтер тобын анықтайық (ТТаblе компоненті, аты Table1, TablelName қасиетіне - Prihod.DB, Active - True). МЖ-да Material өрісіне ағымды индексті орнатайық (FieldIndexNames немесе IndexName қасиетінде). Есепте орнастырайық:
-
есептің тақырыпшасы - TQRBand компоненті QRBand1 атымен, ВапаТуре қасиеті = rbTitle;
-
бағандар тақырыпшасы - TQRBand компоненті QRBand2 атымен, ВапаТуре қасиеті = rbColumnHeader;
-
TQRGroup компонеттер-тобы QRGroup1 атымен.
-
Бөлшектік ақпараттың аймағы - TQRBand компоненті QRBand3 атымен, ВапаТуре қасиеті = rbDetail;
-
Топ подвалы - TQRBand компонент QRBand4 атымен, ВапаТуре қасиеті= rbGroupFooter.
QRGroup1 компонентасына келесіні орналастырайық:
-
FooterBand қасиетіне QRBand4 мәнін;
-
Expression қасиетіне Table1.MATERIAL мәнін, ол формула болып табылады және формулалар редакторында жазылады.
Expression қасиеті өрнектің мәнін визуалдамағандықтан, топта TQRExpr (аты QRExpr1) компонентін орналастырамыз және Expression қасиетін Table1.MATERIAL мәні анықталғандай етіп қоямыз (40-сурет).
40-сурет – Формулаланың құрылуы
QRBand4 топтар подвалының компонентасында Kolvo өрісінде қосындыны (келіп түскен нақты материалдың жалпы санын) есептейміз. Ол үшін топтар подвалында TQRExpr (аты QRExpr2) компонентасын орналастырамыз және оның Expression қасиетін SUM(Table1.KOLVO) формуласын құрайтындай етіп қоямыз.
Бөліктенген ақпараттар тобында мәліметтер тобының N_Prih, Material, DataPrih и Kolvo өрістерімен байланыстырылған (DataSet және DataField қасиеттері) TQRDBText компонентасын орнастырамыз.
41-суретте көрсетілгендей есеп берудің басқа аймағын статикалық мәтінмен толтырамыз.э
41-сурет – Есептің тауар бойынша топтау макет
42-суретте алдын ала қарап шығу режиміндегі есептің бейнесі көрсетілген.
42-сурет – Алдын-ала қарау терезесінде есепті тауар бойынша топтау
Алдын-ала қарау терезесін ашу үшін №4 формасындағы "Топ" батырмасын басу керек. №4 формаға TButton батырмасын қосайық. Оның OnClick оқиғаларды өңдеуді анықтайық:
Form7. QuickRep1.Preview;
42-суретте топтардың бірінің подвалы көрсетілген- ондағы материалдың келуінің соммалық түрі шығарылады.
5.4. Сүзбеуді қолданып есептерді құрылымдау
Filtered қасиетіне True мәнін қоямыз, OnFilterRecord оқиғасының өңдеушісінде шарттары жазылған фильтрацияны орындаймыз. Мысалы, егер МЖ-да фильтр орналастырылса:
begin
Accept := DataSet['KOLVO'] >= 500;
End;
онда Table1Filtered қасиетінде False мәнін қойғанда фильтрацияны орындайды; мәліметтер тобының нәтижесінде тек қана 'KOLVO' өрісіндегі 500 және одан да көп мәндері бар жазбалар көрсетіледі.
Filtered қасиетінің мәнін False мәніне орнатқан кезде, сүзбеу тоқтатылады, оның шарттары OnFilterRecord оқиғасында көрсетілген.
Қосымшаны тестілеу және жөндеу.
Тестілеуден кейін Ввод/Название материала меню пункті жұмыс істемейтінін байқадық. Жаңа материалдарды және оның мінездемесін қосу үшін форма құрайық. Осы формаға TDBGrid компонентасын орналастырайық, DataSource қасиетіне DataSource1 мәнін қоямыз. TButton компонентін орналастырамыз, бұл компонентке CancelBtn (Name қасиеті) атын берейік, батырманың тақырыпшасын "Закрыть" атына (Caption қасиеті) өзгертейік. Батырманы Кодпен байланыстырайық. OnClick бұл оқиғаларды өңдеу процедураларын құру үшін "Закрыть" батырмасына тышқанмен екі рет басу керек. Кодтар редакторінде келесі кодты жазамыз:
Сlose;
Form1.Visible := True;
№ 1 формаға ауысайық және Ввод/Название материала менюінің пункті үшін № 8 форманы шақыратын кодты жазайық:
Form1.Visible := False;
Form8.Visible := True;
Осымен қосымшаның дайындалуы аяқталды деп есептейміз.
Жөндеу №1.
Есеп берутің жаңа формасын құрайық (№9 форма). Формаға TQuickRep (аты QuickRep1) компонентасын орналастырайық, бірақ оған қатынау Query1 арқылы жүзеге асырылсын. Ол үшін DataSet қасиетін DataModule5.Query1 мәнін қоямыз. 43-суретте көрсетілгендей басқа компоненттерді қосайық және есеп беру аймағын статикалық мәтінмен толтырайық.
43-сурет – Есеп берудің нәтижелік макеті
Есептің аяғында барлық әкелінген материалдардың нәтижелік сомасын сөз түрінде қосамыз. Ол үшін QRBand4 аты бар TQRBand компонентін қосамыз, ВапdТуре қасиеті = rbSummary.
QRBand4-ке TQRLabel (аты QRLabel7) компонентін орналастырамыз.
Unit4-ке көшіп және "Итог" батырмасының OnClick оқиға өңдеуіне мына кодты қосамыз:
procedure TForm4.Button5Click(Sender: TObject);
var ss: String;
begin
Str(TempTotal,ss);
Form9.QRLabel7.Caption := SumNumToFull(TempTotal);
Form9.QuickRep1.Preview;
end;
Unit5-те TempTotal айнымалысын анықтаймыз және қоймаға әкелінген TempTotal материалдардың нәтижелік сомасын есептейін кодын қосамыз:
var
DataModule5: TDataModule5;
TempTotal: Integer;
implementation
Объектілер инспекторінде AfterOpen қасиетін тышқанмен 2 рет шертіп, Unit5 ашамыз және келесі кодты қосамыз:
procedure TDataModule5.Query1AfterOpen(DataSet: TDataSet);
begin
Query1.First;
TempTotal := 0; { use temp for efficiency }
while not Query1.EOF do
begin
TempTotal := TempTotal + Query1Stoim.Value;
Query1.Next;
end;
SumNumToFull(TempTotal);
end;
Проектке Writesum.pas жазбасына Project|Add to Project менюін қолданып сандарды ауыстру модулін қосайық.
П2. Writesum.pas модулінің листингі
Unit Writesum;
interface
uses SysUtils;
{ Санмен жазылған сомманы жазбаша жазу функциясы: мысалы, 23.12 -> жиырма үш теңге 12 тиын. 999999999 тенге 99 тиын дейінгі мәндерді аударады. Number параметрінде дұрыс әлде бұрыс мән екенін функция байқамайды. (яғни жүздіктерге дейінгі дәлдікпен дөңгелектелген оң сан) – бұл жөндеуді функцияны шақырғанға дейін жүргізу керек.}
function SumNumToFull(Number:real):string;
implementation
function SumNumToFull(Number:real):string;
var
PartNum, TruncNum, NumTMP, D: integer;
NumStr : string;
i, R : byte;
Flag11 : boolean;
Begin
D:=1000000;
R:=4;
TruncNum:=Trunc(Number); // теңгені белгілейміз
if TruncNum<>0
then
repeat
PartNum:=TruncNum div D;
Dec(R);
D:=D div 1000;
Until PartNum<>0
else
R:=0;
// теңге аударымы
FOR i:=R DOWNTO 1 DO
BEGIN
Flag11:=False;
NumTMP:=PartNum div 100; {сандардың жүздік белгілеуі}
Case NumTMP of
1: NumStr:=NumStr+'СТО ';
2: NumStr:=NumStr+'ДВЕСТИ ';
3: NumStr:=NumStr+'ТРИСТА ';
4: NumStr:=NumStr+'ЧЕТЫРЕСТА ';
5: NumStr:=NumStr+'ПЯТЬСОТ ';
6: NumStr:=NumStr+'ШЕСТЬСОТ ';
7: NumStr:=NumStr+'СЕМЬСОТ ';
8: NumStr:=NumStr+'ВОСЕМЬСОТ ';
9: NumStr:=NumStr+'ДЕВЯТЬСОТ ';
end;
NumTMP:=(PartNum mod 100) div 10; {ондық сандарды белгілеу }
Case NumTMP of
1: begin
NumTMP:=PartNum mod 100;
case NumTMP of
10: NumStr:=NumStr+'ДЕСЯТЬ ';
11: NumStr:=NumStr+'ОДИННАДЦАТЬ ';
12: NumStr:=NumStr+'ДВЕНАДЦАТЬ ';
13: NumStr:=NumStr+'ТРИНАДЦАТЬ ';
14: NumStr:=NumStr+'ЧЕТЫРНАДЦАТЬ ';
15: NumStr:=NumStr+'ПЯТНАДЦАТЬ ';
16: NumStr:=NumStr+'ШЕСТНАДЦАТЬ ';
17: NumStr:=NumStr+'СЕМНАДЦАТЬ ';
18: NumStr:=NumStr+'ВОСЕМНАДЦАТЬ ';
19: NumStr:=NumStr+'ДЕВЯТНАДЦАТЬ ';
end;
case i of
3: NumStr:=NumStr+'МИЛЛИОНОВ ';
2: NumStr:=NumStr+'ТЫСЯЧ ';
1: NumStr:=NumStr+'ТЕНГЕ ';
end;
Flag11:=True;
end;
2: NumStr:=NumStr+'ДВАДЦАТЬ ';
3: NumStr:=NumStr+'ТРИДЦАТЬ ';
4: NumStr:=NumStr+'СОРОК ';
5: NumStr:=NumStr+'ПЯТЬДЕСЯТ ';
6: NumStr:=NumStr+'ШЕСТЬДЕСЯТ ';
7: NumStr:=NumStr+'СЕМЬДЕСЯТ ';
8: NumStr:=NumStr+'ВОСЕМЬДЕСЯТ ';
9: NumStr:=NumStr+'ДЕВЯНОСТО ';
end;
NumTMP:=PartNum mod 10; {бірлік сандарды белгілеу}
if not Flag11 then
begin
case NumTMP of
1: if i=2 then NumStr:=NumStr+'одна ' else NumStr:=NumStr+'ОДИН ';
2: if i=2 then NumStr:=NumStr+'две ' else NumStr:=NumStr+'ДВА ';
3: NumStr:=NumStr+'ТРИ ';
4: NumStr:=NumStr+'ЧЕТЫРЕ ';
5: NumStr:=NumStr+'ПЯТЬ ';
6: NumStr:=NumStr+'ШЕСТЬ ';
7: NumStr:=NumStr+'СЕМЬ ';
8: NumStr:=NumStr+'ВОСЕМЬ ';
9: NumStr:=NumStr+'ДЕВЯТЬ ';
end;
case i of
3: case NumTMP of
1 : NumStr:=NumStr+'МИЛЛИОН ';
2,3,4: NumStr:=NumStr+'МИЛЛИОНА ';
else NumStr:=NumStr+'МИЛЛИОНОВ ';
end;
2: case NumTMP of
1 : NumStr:=NumStr+'ТЫСЯЧА ';
2,3,4: NumStr:=NumStr+'ТЫСЯЧИ ';
else if PartNum<>0 then NumStr:=NumStr+'ТЫСЯЧ ';
end;
1: case NumTMP of
1 : NumStr:=NumStr+'ТЕНГЕ ';
2,3,4: NumStr:=NumStr+'ТЕНГЕ ';
else NumStr:=NumStr+'ТЕНГЕ ';
end;
end;
end;
if i>1 then begin
PartNum:=(TruncNum mod (D*1000)) div D;
D:=D div 1000;
end;
END;
//тиындардың аударымы
PartNum:=Round(Frac(Number)*100);
if PartNum=0 then
begin
SumNumToFull:=NumStr+'00 ТИЫН';
Exit;
End;
NumTMP:=PartNum div 10; {ондық сандарды белгілеу }
if NumTMP=0 then NumStr:=NumStr+'0'+IntToStr(PartNum)+' '
else NumStr:=NumStr+IntToStr(PartNum)+' ';
NumTMP:=PartNum mod 10; {бірлік сандарды белгілеу}
Case NumTMP of
1: if PartNum<>11 then NumStr:=NumStr+'ТИЫН'
else NumStr:=NumStr+'ТИЫН';
2,3,4: if (PartNum<5) or (PartNum>14)
then NumStr:=NumStr+'ТИЫН'
else NumStr:=NumStr+'ТИЫН';
else NumStr:=NumStr+'ТИЫН';
end;
SumNumToFull:=NumStr;
end; //---SumNumToFull
end.
QRBand4 өрісіне TQRLabel (аты QRLabel8) компонентасын қосайық, Caption қасиетіне "Итого:" деп өзгертеміз. Тағы да TQRExpr (аты QRExpr1) компонентін қосайық және ол SUM(Table1.Stoim) формуласы болуы керек оның Expression қасиетінің мәнін анықтаймыз 44-суретте алдын-ала қарау терезесінде есебінің нәтижесі көрсетілген.
44-сурет – Тауардың нәтижелік мәндерінің есеп беруі
№2 жөндетуі
Есепті дайындау үшін, Excel-дің көптеген мүмкіндіктері (графикалық бейнелеулер және т.с.с.) бар.
Сонымен қатар, бизнес-үрдіске Excel ортасында жасау ыңғайлы болып келеді. Сондықтан, осы ресурсты қолдану үшін, OLE процедурасы көмегімен мәліметтерді Excel-ге жіберу керек.
Бақылау сұрақтары
-
Деректер қорын құрған кезде қандай қосымшалар қолданылады?
-
Деректердің қандай типтері бар? Әрқайсысының қолданылу ерекшеліктерін атаңыз.
-
Есепті құрудың қандай әдіс-тәсілдері бар?
Зертханалық жұмыс №2 «Менің әлемім» деректер қорын басқару жүйесін құру
Зертханалық жұмыстың мақсаты: «Менің әлемім» ДҚБЖ алдын ала MS Access-те жобалап, меңгерілген теориялық мәліметтерге сүйеніп Delphi ортасында жүйені құру.
Зертханалық жұмысты орындаудың тәртібі
1 қадам – Ms-Excel -ден Ms-Access-ке мәліметтерді экспорттау
Өзіңіздің жұмыс папкаңызда қосалқы «MyWorld» атауы бар папканы құрыңыз.
Ms-Access бағдарламасын іске қосыңыз. Ms-Access-ті іске қосу менюінен «Жаңа мәліметтер қоры» пунктін таңдаңыз. Экранда «Жаңа мәліметтер қорының файлы» атты терезе пайда болады. Бұл терезеде Сіз құрған «MyWorld» папканы табыңыз және оған кіріңіз. «Файл атауы» өрісінде «MyWorld» мәнін басыңыз, содан кейін «Құру» батырмасын басыңыз.
-
Ms-Access-тің ішінде «MyWorld: мәліметтер қоры» атты терезе пайда болады.
-
Келесі команданы орындаңыз: Файл – Сыртқы мәліметтер – Импорт. Пайда болған терезеде Елдер.xls (папка Дайындаулар) папкасын табыңыз. Әрі қарай шебердің белгілерін қадағалаңыз. Нәтижесінде «MyWorld: мәліметтер қоры» терезесінде «Елдер» атты кесте пайда болады.
-
Егер Access-те маңызды элементтердің атаулары (мысалы, кестелердің атаулары және өріс деп те аталатын кесте бағаналарының атаулары) бос орынға ие болса, онда ол әрі қарай бірқатар мәселе туғызуы мүмкін. Сондықтан оларды қайта атаумен айналысамыз.
-
«Елдер» кестенің жарлығын белгілеңіз, МҚ терезесінде «Конструктор» батырмасын басыңыз. Сіз кесте конструкторы терезесіне түсесіз.
-
Бұл терезеде «Атауы» өрісіне «Өрістің өлшемі» қасиетінің мәнін 50 етіп белгілеңіз.
-
Барлық басқа өрістерге «Өрістің өлшемі» қасиетінің мәнін «Ұзын бүтін» етіп белгілеңіз.
-
«Өріс9» өрісінің атауын «ЖұмысшыЕр» деп өзгертіңіз.
-
«Өріс12» өрісінің атауын «ЖұмысшыӘйел» деп өзгертіңіз
-
«Қалалық ерлер» өрісінің атауын «ҚалаЕр» атауына өзгертіңіз.
-
«Қалалық әйелдер» өрісінің атауын «ҚалаӘйел» атауына өзгертіңіз.
-
«Ауылдық ерлер» өрісінің атауын «АуылЕр» деп өзгертіңіз.
-
«Ауылдық әйелдер» өрісінің атауын «АуылӘйел» деп өзгертіңіз.
-
«Сақтау» батырмасын басыңыз және кейбір мәліметтердің жоғалуы мүмкін деген пайда болған ескертуге «Иә» (орындауды жалғастыру) деп жауап беріңіз.
-
Одан кейін конструктордың терезесінде «Түр» (саймандар тақтасында шетінен сол жағында) батырмасын шертіңіз және кестенің барлық мәліметтері өздерінің орнында екендігіне көз жеткізіңіз.
-
Ms-Access-пен осымен жұмысты аяқтаңыз.
Достарыңызбен бөлісу: |