Тауарлар мен сауда ұйымдары - БЕРIЛГЕНДЕР ҚОРЫН БАСҚАРУ ЖҮЙЕСІ



КІРІСПЕ 7

1 ПРОГРАММАНЫ ДАЙЫНДАУ ОРТАСЫ 9
1.1 DELPHI ОРТАСЫН ІСКЕ ҚОСУ 9
1.2 ПРОЕКТ. ФОРМА. ҚАСИЕТТЕР. ҚАСИЕТТЕР ТЕРЕЗЕСІ 11
1.3 ОҚИҒАЛАР. ПРОГРАММАЛЫҚ КОД ТЕРЕЗЕСІ 14
1.4 ПРОГРАММА ҚҰРЫЛЫМЫ. НЕГІЗГІ МОДУЛЬ . МОДУЛЬ. ӘДІС 17
1.5 БЕРIЛГЕНДЕР ҚОРЫН БАСҚАРУ ЖҮЙЕЛЕРІ. БҚ.МЕН ЖҰМЫС 21
1.6 DATABASE DESKTOP УТИЛИТАСЫ 22
2 ПРОГРАММА ФОРМАЛАРЫНЫҢ СИПАТТАМАСЫ 24
2.1 НЕГІЗГІ ФОРМА 24
2.2 МӘЛІМЕТТЕР ЕНГІЗУ ФОРМАСЫ 28
ҚОРЫТЫНДЫ 29
ПАЙДАЛАНЫЛҒАН ӘДЕБИЕТТЕР 30
Нарықтық экономика бағытымен дамып келе жатқанын әлем жұртшылығы мойындап отырған қазіргі Қазақстан қысқа мерзім ішінде әлемдік цивилиацияға қарқынды ұмтылыс жасады. Біздің қоғам өзінің дамуындағы жаңа саты – экономиканың үдемелі ғылыми-техникалық, инновациялық және инвестициялық дамуына және адам факторы әсерінің күшеюі жағдайына өтуде. Глобализациялау процестері әлемдік экономикаға сандық және сапалық өзгерістер алып келеді. Әлеуметтік-саяси құрылымды елдердің көпшілігіндегі экономика біркелкі нарықтық заңдар бойынша дамып келеді. Түрлі бағытардағы келісім мен интеграция дамып келеді.
Нарықтық экономикамен етене байланысты халықтың тұрмыс-тіршілігі көтеріліп келеді, соған байланысты қоғамымызда адам факторының, оның тіршілік қам-қарекетінің көп уақыт бөлуді талап ететіні байқалады. Яғни әрбір тұтынушы белгілі бір тауарды сатып алу үшін ұзақ күнді уақытын сарыптау оның ең алдымен жүйке жүйесіне, жаржылық жағдайына және жалпы жұмыстағы табысына кері әсерін тигізбей қоймайды. Мысалы, сапасы жоғары италяндық аяқ киім іздеген адам қаланың түкпір-түкпіріндегі дүкендер мен маркеттерді аралай жүріп, алдымен бір немесе бірнеше тәулік уақытын, сонан соң қаншама жүйкесін, сонымен қатар, біршама қаражатын сарыптап үлгереді. Нәтижесінде, ол өзі қалаған аяқ киімді тапса жарар, ал егер таппаса ше. Бұл кезде оның ден-саулығына үлкен нұқсан келуі мүмкін.
1. Александровский А.Д. Delphi 4. Шаг в будущее. – М.:ДМК, 1999.
2. Архангельский А.Я. Разработка прикладных программ для Window в Delphi 5. – М.:БИНОМ, 1999.
3. Бабушкина И.А., Окулов С.М. Практикум по объектно-ориентированному программированию. – М.:БИНОМ, 2004.
4. Бобровский А.Д. Delphi 5: учебный курс. – СМб.:Питер, 2002.
5. Горман В . Хомоненко А. Delphi 6 СПБ:БхВ Петербург 2002.
6. Желонкин А. Основы программирования в интегрированной среде Delphi. Практикум.-М.:БИНОМ, 2004. – 236с.:ил.
7. Камардинов О., Жантелі Х. Delphi 5-6 Шымкент – 2002жыл.
8. Леонтьев В.П. Новейшая энциклопедия персонального компьютера. – М.: ОЛМА-ПРЕСС, 2000.
9. Окулов С.М. Основы программирования. – М.: БИНОМ, 2004.
10. Тейксейра С., Пачеко К. Delphi 5. Руководство разработчика, том 1. Основные методы и технологии программирования: Пер. с англ.: Учебное полсобие – М.:Издательский дом «Вильямс», 2000.

МАЗМҰНЫ

КІРІСПЕ 7

1 ПРОГРАММАНЫ ДАЙЫНДАУ ОРТАСЫ 9
1.1 DELPHI ОРТАСЫН ІСКЕ ҚОСУ 9
1.2 ПРОЕКТ. ФОРМА. ҚАСИЕТТЕР. ҚАСИЕТТЕР ТЕРЕЗЕСІ 11
1.3 ОҚИҒАЛАР. ПРОГРАММАЛЫҚ КОД ТЕРЕЗЕСІ 14
1.4 ПРОГРАММА ҚҰРЫЛЫМЫ. НЕГІЗГІ МОДУЛЬ . МОДУЛЬ. ӘДІС 17
1.5 БЕРIЛГЕНДЕР ҚОРЫН БАСҚАРУ ЖҮЙЕЛЕРІ. БҚ-МЕН ЖҰМЫС 21
1.6 DATABASE DESKTOP УТИЛИТАСЫ 22
2 ПРОГРАММА ФОРМАЛАРЫНЫҢ СИПАТТАМАСЫ 24
2.1 Негізгі форма 24
2.2 Мәліметтер енгізу формасы 28
ҚОРЫТЫНДЫ 29
ПАЙДАЛАНЫЛҒАН ӘДЕБИЕТТЕР 30

КІРІСПЕ

Нарықтық экономика бағытымен дамып келе жатқанын әлем жұртшылығы
мойындап отырған қазіргі Қазақстан қысқа мерзім ішінде әлемдік цивилиацияға
қарқынды ұмтылыс жасады. Біздің қоғам өзінің дамуындағы жаңа саты –
экономиканың үдемелі ғылыми-техникалық, инновациялық және инвестициялық
дамуына және адам факторы әсерінің күшеюі жағдайына өтуде. Глобализациялау
процестері әлемдік экономикаға сандық және сапалық өзгерістер алып келеді.
Әлеуметтік-саяси құрылымды елдердің көпшілігіндегі экономика біркелкі
нарықтық заңдар бойынша дамып келеді. Түрлі бағытардағы келісім мен
интеграция дамып келеді.
Нарықтық экономикамен етене байланысты халықтың тұрмыс-тіршілігі
көтеріліп келеді, соған байланысты қоғамымызда адам факторының, оның
тіршілік қам-қарекетінің көп уақыт бөлуді талап ететіні байқалады. Яғни
әрбір тұтынушы белгілі бір тауарды сатып алу үшін ұзақ күнді уақытын
сарыптау оның ең алдымен жүйке жүйесіне, жаржылық жағдайына және жалпы
жұмыстағы табысына кері әсерін тигізбей қоймайды. Мысалы, сапасы жоғары
италяндық аяқ киім іздеген адам қаланың түкпір-түкпіріндегі дүкендер мен
маркеттерді аралай жүріп, алдымен бір немесе бірнеше тәулік уақытын, сонан
соң қаншама жүйкесін, сонымен қатар, біршама қаражатын сарыптап үлгереді.
Нәтижесінде, ол өзі қалаған аяқ киімді тапса жарар, ал егер таппаса ше. Бұл
кезде оның ден-саулығына үлкен нұқсан келуі мүмкін.
Ал, енді, осы жағдайда ол небары санаулы минуттардың ішінде тұтынушы
анықтамалығынан өзіне қажетті италяндық аяқ киім жайлы барлық ақпаратты
желіге қосылған компьютер көмегімен анықтап, әрі ден-саулығын, әрі алтын
уақытын және қаражатын сақтап, оның үстіне сол үнемделген уақытты тағы да
қомақты пайда табуға жұмсауына болар еді. Егер программа көмегімен қажетті
тауар табылса, оны үйге жеткізіп беруге тапсырыс беруге, ал табылмаса,
арнайы дүкендерге тапсырыс беруге де болатындығы айтпаса да түсінікті. Міне
осы жағдайларды ескере келе, мен қазіргі күннің аса өзекті мәселелерінің
бірін шешуге әрекеттендім.
Мен құрған программалық жабдық тауарлар мен сауда ұйымдарының
мәлеметтерін қазірше қолдан ендіруге, қажетті тауар не маркет жайлы
мәліметтерді имитация арқылы іздеп табуға, тапсырыс беруге, мәлеметтерді
арнайы кесте арқылы көріп шығуға және мәліметер ағынының ішінен қандай да
бір белгілері бойынша оларды топтастыруға және т. б. мүмкіндік береді.
Бағдарламаның қазірше Интернет желісін пайдалану мүмкіндіктері
шектеулі болғанымен, сауда орталықтарында мәліметтерді ендіруге, сорттауға,
ал тұтынушы компьютерінде қажетті ақпаратты іздеп табуына толық жарамды.

1 ПРОГРАММАНЫ ДАЙЫНДАУ ОРТАСЫ

1.1 DELPHI ОРТАСЫН ІСКЕ ҚОСУ

Microsoft Windows терезесі арқылы Delphi –ді іске қосу командасы:
Іске қосу – Программалар – Borland Delphi6 ( Delphi6
Экранда Delphi ортасының келесі үш терезесі көрінеді (2.1-сурет).

2.1-сурет. Delphi ортасы

1- Delphi6-ның негізгі терезесі;
2- Форма (Form1);
3- Обьект инспекторы терезесі (Object Inspector).
Жалпы ортада программа құруға арналған төртінші, модуль терезесі де
іске қосылады. (Unit 1. pas). Форма терезесінің астында орналасатын-
дықтан, ол алғашқыда көрінбейді.
Delphi-дің негізгі терезесінің құрамына негізгі мәзір, аспаптар панелі
және компоненттер политрасы енгізілген (2.2-сурет). Негізгі мәзір
пунктеріне (ішкі мәзірлерге) Delphi-де жұмыс істеу командалары, аспаптар
панеліне ішкі мәзірлерге енгізілген негізгі командаларды орындайтын
түймелер орналастырылған.

2.2-сурет. Негізгі мәзір, аспаптар панелі және компоненттер палитрасы

1.2 ПРОЕКТ. ФОРМА. ҚАСИЕТТЕР. ҚАСИЕТТЕР ТЕРЕЗЕСІ

Delphi-де дайындалатын программа проект (жоба) деп аталады. Форма-
программаны дайындау алдында ашылатын, программаның сұхбаттық терезесі.
Delphi алғашқы рет іске қосылған кезде форма Form1 атауымен (тақырыбымен)
көрінеді. (2.1-сурет). Оның жиектеріне тышқан көрсеткішін орналастырып, ол
екі жақты нұсқама түріне айналған кезде жылжыту және қалдыру тәсілі бойынша
форманы кеңейту не қысу қиын емес.
Құрылатын программада пайдалану үшін формада түрлі компоненттер (форма
компоненттері) орнатады. Негізгі компонентердің кейбірі Access берілгендер
қоры жүйесінде пайдаланылатын элементте панеліне енгізілген түймелер
сияқты. Олар Delphi терезесінің компоненттер палитрасына орналастырылған.
Кей жағдайларда экранда форма көрінбеуі мүмкін. Оы экранға шығару үшін
View-Forms командасын беру жеткілікті.
Форманың және формаға енгізілетін компоненттердің түрлі қасиеттері бар
(оларды компонент “паспорты” деп те атайды). Қасиет (Сипаттама, параметр)-
айнымалылардың ерекше түрі. Олар объектінің түрлі мүмкіндіктерін сипаттап,
ағымдық күйін анықтайды. Мысалы форма қасиеттерінің мәндері – форма
тақырыбының мәтіні, өлшемі, экранда орналасуы, түсі т.б. Delphi іске
қосылған кезде форма қасиеттеріне алғашқы сәйкес мәндер меншіктеліп
қойылады.
Форманы не онда орнатылған компонентті программа құру үшін дайындау
оның кейбір қасиеттерінің мәндерін өзгертуден басталады. Қасиеттер тізімі
Объект инспекторы (Object Inspector) терезесіне енгізілген. Тізімді
инспектор терезесіне шығару үшін сәйкес объектіні (форманы не формада
орнатылған форма компонентін ) бір шерту арқылы таңдау керек. Инспектор
терезесінің жоғарғы қатарына таңдалған объект атауы да жазылып қойылады.
Мысалы, Delphi іске қосылған кезде форманың ашылған қасиеттер терезесі 2.1-
суретте көрсетілген. Терезенің екі қосымша беті бар: Properties (Қасиеттер)
және Events ( Оқиғалар). Терезеашылғанда екі бағанға енгізілген жазулардан
тұратын оның Properties бөлімі ашылулытұрады. (2.1-сурет) Бірінші бағанда
көрінетіндер – қасиет атаулары, екінші бағанға сәйкес жазылғандар-олардың
мәндері.
Форма қасиеттері:
Name (Атау) – формаға берілген атау. Ол Delphi объектілерінің
(компоненттердің) негізігі қасиеттерінің бірі. Delphi-дің жұмыс істеуі
кезінде ол объектіні осы атау бойынша ажыратып танитын. Delphi-дің формаға
автоматты түрде алғашқы рет меншіктелген атауын Form1 орнына KvTend атауын
енгізу. Ол үшін қасиеттер терезесінен Name атауын таңдап, жаңа атауды
клавиатура арқылы теріп алса болғаны. Терілген атау Name жолының оң
қатарына жазылып қойылады.
Font ( Шрифт) – фррмаға енгізілетін мәтін шрифтін орнату қасиеті. Оны
таңдап, оң жағында көрінген көп нүкте (...) түймесін шерткен кезде
сұқпаттық шрифт таңдау терезесі көрінеді (2.3 - сурет). Терезеден
әдеттегідей , қажетті шрифт типін өлшемін таңдап ( мысалы, Times Kaz, 10),
ОК түймесін шерту керек .

2.3-сурет. Шрифт таңдау терезесі

Caption (Тақырып, бетіне жазу) – форма терезесінің тақырыбына
енгізілетін мәтін. Алғашқы кезде қасиеттер терезесінің Caption қасиетіне
тақырып үшін Form1 cөзі енгізіліп қойылған. Оны “Redaktor” не басқа
тақырыпқа алмастыру Name қасиетіне мән меншіктеу тәсілі сияқты ( қасиет
мәні енгізілген соң КҚ ( каретканы қайтару , енгізу клавишін басып қойған
жөн)
Color (түс) –форманың түсін орнату қасиеті. Ол таңдалған кезде оң
жағында тілсызық түймесі көрінеді. Тілсызық түймесі –қасиет мәнінің
бірнеше екенінің белгісі. Тілсызық белсісін шерткен кезде мәнедер (түстер)
терезесі ашылады. Тізімде көрінген қалаған түсті шерткен. Соң форма сәйкес
түске боялып қойылады.
Width (Ен), Height (Биіктік) –пиксель өлшем бірлігімен берілген
форманың ені мен биіктігін орнату қасиеттері (бұл мәндер форманы қолдан
кеңейту не сығу кезінде де автоматты түрде орнатылып қойылады).
Объект қасиетін программа ( программалық код) ішінде орнату да мүмкін.
Мысалы, форма тақырыбы шрифтінің өлшемін 14 ету үшін программаға Form1.
FontSize :=14 меншіктеу операторын енгізуге болады.
Жалпы, бір қасиет мәнімен танысу үшін оны қасиеттер терезесінде
таңдап, F1 клавишін басу арқылы сәйкес анықтаманы шақыру керек. Delphi-
де анықтамалар ағылшын тілінде жазылады. Ол түсініксіз болса, экранда
орысша аудармасын көрсететін “Coкpaт 97” сияқты арнайы дайындалған
программаны пайдаланған жөн ( мұндай программа компьютерге орнатылса, оны
пайдалану қиын емес).
Экранда қасиеттер терезесі көбінесе, оны шығару үшін View-object
Inspector командасын беру жеткілікті. Ол F11 клавиші басылған кезде де
көрінеді.
Ескерту. Жаңа проект іске қорсылған кезде алдымен DephiDirect терезесі
іске қосылуы мүмкін. Терезеден DephiNews бумасын таңдау жеткілікті.

1.3 ОҚИҒАЛАР. ПРОГРАММАЛЫҚ КОД ТЕРЕЗЕСІ

Windows-тағы сияқты Dephi–де программалар оқиғалар арқылы басқарылады.
Мысалы, пайдаланушы программа құру үшін алдымен формаға компонент орнату,
формада орналастырылған компонентті тышқан арқылы шертуі мүмкін. Оның іс-
әрекеті оқиға шақырады. Яғни , оқиға –программаның жұмыс істеуі кезінде
объект жағдайының өзгеруі .
Dephi-де әр оқиғаға атау атау беріліп қойылған. Мысалы, компоненттер
палитрасының Button1 компонентін шерту Click (Шерту) оқиғасын шақырады.
Әр объектіге байланысты оқиғалар жеткілікті Мысалы, формаға байланысты
оқиғалар саны - 35 (2.4-сурет). Олар қасиеттер терезесінің Events қосымша
бетіне енгізілген. Терезеде оқиға атауларының алдына On префиксі
(қосымшасы) тіркестіріліп жзылады. Ол - атаудың оқиға екендігін білдіретін
белгі.

2.4-сурет. Форма оқиғалары

Dephi ортасында жиі кездесетін оқиғалар :
On Click-тышқан түймесін бір рет басу;
OnDblClick-тышқан түймесін екі рет басу;
OnKeyDown-клавишті басу;
OnKeyUp-басылған клавишті босату;
OnMouseDown- тышқан түймесін басу;
OnMouseUp- тышқан түймесін босату;
OnMouseMove- тышқан көрсеткішін жылжыту;
On Create- форманы екі рет шерту, т.б.
Dephi-де программа (проект) екі бөлімнен тұрады: алғашқыда автоматты
түрде Project1 атауы берілетін модуль. Олар жеке терезелерде орналастырған.
Модульге оқиғаларға сәйкес іс-әрекеттерді орындайтын программа мәтіні
(процедуралар) енгізіледі ( олар 2.4-тақырыпта кең түрде қарастырылған).
Программа мәтінін программалық код деп, терезені программалық код терезесі
не қысқаша редактор терезесі деп те атайды. 2.1.-тақырыпта ескертілгендей,
Dephi іске қосылған кезде ол форма терезесінің астында көрінбей тұрады. Оны
экранға шығару тәсілдері:
- форманы жабу (түймесін шерту);
- код терезесінің бір шеті форма астында көрініп тұрса, оны шерту.
Терезе белсендірілуі түрде ашылады да онда процедура дайындамасы (үлгісі)
көрінеді. Оның тақырыбы нүкте арқылы бөлінген класс және процедура
атауларынан тұрады (2.5-сурет), т.б.
Жалпы, формадан код терезесіне өту және код терезесінен формаға өту
үшін F12 клавишін басу жеткілікті. 2.5-суретте көрініп тұрғаны – терезесіне
енгізілген процедура дайындамасы. Оқиғаға байланысты құрылатын процедура
оқиғаны өңдеуіш не оқиғаны өңдеу процедурасы делінеді. Процедура
дайындамасының жазылу түрі:
Procedure атау (Sender: TObject);
сипаттау бөлімі
begin
процедура денесі
end;
мұндағы Sender параметрі құрылатын процедураның қай класқа тиістілігін
анықтайды .
Терезенің сол бөлігіндегі-браузер терезесі. Онда код терезесінде
барлық жарияланулардың құрылымын көріп шығуға болады.

2.5-сурет. Редактор терезесі.

1.4 ПРОГРАММА ҚҰРЫЛЫМЫ. НЕГІЗГІ МОДУЛЬ . МОДУЛЬ. ӘДІС

Кез келген программа program сөзінен басталатын проект файлы мен бір
не бірнеше модульдерден тұрады да, қолдан құрылатын программа модуль ішіне
енгізіледі. Проект файлы dpr, модуль pas кеңейтілуі бойынша сақталынады.
Проект файлын негізгі модуль деп атайды. Негізгі модульдің мазмұны
проектінің жалпы сипаттамасынан тұрады. Delphi іске қосылған кезде оны
автоматты түрде дайындап шығады. Негізгі модульге ерекше жағдайлардан басқа
кездерде қосымша нұсқаулар енгізудің қажеті жоқ. Негізгі модуль (проект):
Program Project1;
Uses
Forms,
Unit1 in ‘Unit1. pas’{Fopm1};
{$R*.RES}
begin
Application. Initialize;
Application. CreateForm(TForm1, Form1);
Application. Run;
end.
мұндағы,
Projectl – негізгі модуль (проект) атауы. Проектіні дайындап, жаңа
атау бойынша сақтаған кезде ол соңғы атауға алмастырылып қойылады;
Uses – (қолдану) – Турбо Паскальдағы сияқты, қызметші сөз. оның
соңына программада пайдаланылатын стандартты (кітапханалық) Forms модулі
мен Delphi –ден соң оның қайсы модульдік файлда құрылатыны (in ’Unit1.pas’)
және онымен байланысты фома атуы көретіледі ({Form1}).
{$R*.RES} – нұсқау. Ол компиляторға қосымшаның (Windows көмегімен
дайындалған қолданбалы программаның) қор сипаттамаларын, мысалы,
шартбелгілер (пиктограммалар) сақталған файлды және т.с.с. пайдалану
керектігін көрсетеді (файлдың кеңейтілуі - .res);
begin – end операторларының аралығына енгізілген соңғы бөлім –
қосымшаның алғашқы жүктелуін қамтамасыз ететін әдістер (Delphi-де арнайы іс-
әрекетті орындайтын процедура, функция және командалар әдістер делінеді):
Application. Initialize-қосымша объектісін инициалдау (программаны
алғашқы рет дайындау) әдісі;
Application. CreateForm-проект құрамына енетін форманы дайындап,
экранда көрсету әдісі (сreate-құру);
Application. Run-пограмманы іске қосуды қамтамасыз ету әдісі.
Delphi-де әдістің командалық түрде жазылуы:
Объект. Әдіс
Мысалы, Application. Initialize- Application объектісінің Initialize
әдісін орындау
Кейбір жағдайда бөлімге проект сақталатын бума атын меншіктеу
командасын қосып қою да мүмкін, т.б.
Жалпы , Delphi-де программаның орындалуы автоматты түрде негізгі
модульді орындаудан басталады.
Модуль-түрлі іс-әрекеттерді орындауға арналған программа бөлімі.
Модуль тақырыбы Unit (модуль) қызметші сөзінен басталып, соңына әдеттегідей
нүктелі үтір (;) таңбасымен аяқталатын модуль атауы жазылады. Delphi-дің
модульге алғашқы рет меншіктейтін атауы: Unit1. Жаңа проект ашылған кезде
модуль дайындамасы да автоматты түрде құрылады:

Unit Unit 1;
Interface
Usis
Windows, Messajger, Sys Utils, Classes,
Graphics, Controls, Fopms, Dialogs;
Type
TForm1=class(TForm)
Private
{Private declarations}
public
{Public declarations}
end;
var
Fopm1: Tform1;
Implementation
{$R*.DFM}
end.
Интерфейс ( interface ) бөлімі interface кілттік сөзімен басталады да,
оған келесі бөлімдер енгізіледі: Usis-Турбо Паскальда пайдаланатын бөлім
сияқты, стандартты модуль атаулары жазылады, бөлімге пайдаланушы
дайындалған модуль атауын кірістіріп қою да мүмкін. Одан әрі, Delphi
дайындаған форма типі сипаталалып, олардан соң модульге жазылатын
процедуралар мен функциялар (программа элементтері) жарияланады, т.б.)
Private (жеке, дербес) бөліміне тек ағымдық модульге тиісті элементтер
енгізілуі мүмкін (элемент-өрістер, әдістер, қасиеттер мен оқиғалар);
Public(көпшілік) бөлімінің ішінде ағымдық модульге қол жеткізуге болатын
кез келген программа не модульдің көрінетін элементтері, облыстары
енгізіледі. Олар класқа енетін элементтердің пайдалану облыстарын ғана
анықтайтын болғандықтан , әдетте (көп жағдайда) олар бос көрінеді.
Implementation (іске асыру, орындау) бөліміндегі {$R*.DFM} -.dfm
кеңейтілуі бойынша жазылған файлды пайдалану нұсқауы. Ол модульді оған
сәйкес форманың сипаттамасымен байланыстырады. (файлға форма қасиеттерінің
мәндері жазылып қойылған. Ол формада орнатылған компоненттер қасиеттерінің
де сипататмаларын бойында сияқты. Қасиеттер сәйкес Object Inspector
терезесінде көрінеді). Одан соңғы қатарларға программалаушы Delphi тілінде
қажетті процедураларды қолдан кірістіру керек. Олардың ішіндегі оқиғаны
өңдеуіш процедуралардың тақырыптары модульдің интерфейс бөлімінде автоматты
түрде жазылып қойылады.
Кейде модульдің соңына инициалдау (initialization) бөлімі енгізіледі.
Бөлім модуль айнымалыларын инициялдап, (бастапқы мәндер беріп) программаны
дайындау үшін қажет. Егер ол толтырылса, бұл бөлім басқаруды программа
денесіне беруден бұрын орындалады. Бөлім нұсқауларын begin және end кілттік
сөздерінің арасына енгізу керек. Жоғарыда көрсетілген сияқты, бөлім
толтырылмаса, begin сөзі жазылмай, оған тек end сөзі енгізіледі. Ол –
модульдің соңын білдіретін кілттік сөз.

1.5 БЕРIЛГЕНДЕР ҚОРЫН БАСҚАРУ ЖҮЙЕЛЕРІ. БҚ-МЕН ЖҰМЫС

Түрлі шаруашылықтарда, оқу орындарында, коммерциялық мекемелерде және
т.б. салаларда берілгендерді дайындау, оларды өңдеу, сақтау жиі кездеседі.
Мысалы, жоғары оқу орындарында дайындалатын мәліметтер:
• Факультеттер, олардың құрамындағы кафедралар мен кафедра
қызметкерлерінің тізімі не қызметкерлер жөнінде басқа
мәліметтер;
• емтихан ведомостары;
• студенттер жөнінде мәліметтік тізімдер;
• түрлі бөлімдерде жұмыс істейтін адамдардың тізімі (тегі, аты
жөні, білімі, адресі, үй телефоны, т.б.).
Мұндай мәліметтерді сақтау және өңдеу көп тараған әдісі – оларды
берілгендер қоры түрінде дайындау. Берілгендер қоры – құрылымы арнайы тәсіл
бойынша берілген форматтағы файлдар жиынтығы. Файл негізінен кесте түрінде
дайындалады. Кестелерді дайындау, жылдам түрде олардан қажетті жазулар
тобын таңдау (шартты қанағаттандыратын сұраныс құру), оларды сақтау,
жазуларды редакциялау, жолдарды алып тастау, кестені басып шығару сияқты
орындалатын іс-әрекеттер – күрделі жұмыстар.
Соңғы кездерде кестелерден тұратын берілгендер қорын құрып, оларды
өңдейтін көптеген программалар жүйесі дайындалған. Оларды берілгендер қорын
басқару жүйелері деп атайды. Белгілі берілгендер қорын басқару жүйелер:

dBase, FoxBase, FoxPro, Paradox, Access, т.б.

1.6 DATABASE DESKTOP УТИЛИТАСЫ

Берілгендер қоры кестесі Dlephi құрамына енгізілген Database Desktop
(Берілгендер қоры жұмыс столы) қосымша программасы (утилитасы) арқылы
құрылады:
1. Tools - Database Desktop (Сервис Берілгендер қоры жұмыс столы
қабықшасы) командасын беру. Қабықша программасы көрінеді (2.6-сурет).

2.6-сурет. Database Desktop терезесі

2. терезеден File – New – Table (Файл-Жаңа-Кесте) командасын беру.
Create Table (Кесте құру) сұхбаттық терезесі шығады. Онда ашылатын
тізімнен қажетті кесте форматын таңдау (Paradox не dBase). Алғашқы
рет Paradox7 форматы іске қосылып, терезе өрісінде осы атау көрінеді
(2.7-сурет).

2.7-сурет. Кесте форматын таңдау

3. Paradox7 форматымен келісіп, ОК түймесін шерту (онда пайдалануға
болатын өріс типтері жеткілікті). Бірінші бағанында автоматты түрде
өрістің номері жазылып қойылған кесте өрісі атауын сипаттау терезесі
көрінеді (2.8-сурет).

2.8-сурет. Өрісті сипаттау терезесі

4. Екінші бағаннан бастап ретімен өріске берілетін атауды (FieldName),
өріс типін (Type), өлшемін (Size) енгізу (өлшем өріс символдық типті
болса ғана енгізіледі). Өрісті кілттік ету қажет болса, оның бесінші
бағанда (Key) көрсетілуі тиіс. Ол * символы арқылы белгіленеді
(жалпы, кілт Delphi-де және MS Access сияқты арнайы берілгендер қорын
басқару жүйелерінде кеңінен пайдаланылады).

2 ПРОГРАММА ФОРМАЛАРЫНЫҢ СИПАТТАМАСЫ

Программа мынадай формалардан тұрады: Негізгі форма, Тауарлардың
жалпы тізімі формасы, Маркеттер формасы, Маркеттерді енгізу формасы,
Тауарларды енгізу формасы Тауарларды іздеу формасы, Маркеттерді іздеу
формасы, Фильтрлеу және Есептер.

2.1 Негізгі форма

Программа қосылғанда ашылатын Негізгі форма терезесінің жалпы көрінісі
төмендегі суреттегідей.

3.1-сурет

program Project1;

USES
FORMS,
SYSUTILS,
TRADELIB IN 'TRADELIB.PAS',
MESS IN '..\MYLIB\MESS.PAS' {MESSAG},
TITLEUNIT IN 'TITLEUNIT.PAS' {TITLEFORM},
TRADEPOINTSUNIT IN 'TRADEPOINTSUNIT.PAS' {TRADEPOINTSFORM},
OPENDOC IN 'OPENDOC.PAS' {OPENDOCUMENTDIALOG},
CREATDOC IN 'CREATDOC.PAS' {CREATDOCFORM},
MAKEOTCHETUNIT IN 'MAKEOTCHETUNIT.PAS' {MAKEOTCHETFORM},
ACTPRIHOD IN 'ACTPRIHOD.PAS' {EDITDOC},
PRINTUNIT IN 'PRINTUNIT.PAS' {PRINTFORM},
INPUT IN '..\MYLIB\INPUT.PAS' {INP},
VIEWOPTIONSUNIT IN 'VIEWOPTIONSUNIT.PAS' {VIEWOPTIONSFORM},
INFOUNIT IN 'INFOUNIT.PAS' {INFOFORM},
TOVARSTYPESUNIT IN 'TOVARSTYPESUNIT.PAS' {TOVARSTYPESFORM},
ANALISOTCHET IN 'ANALISOTCHET.PAS' {ANALISFORM};

{$R *.RES}
CONST TOHTA=0;
BEGIN
APPLICATION.INITIALIZE;
TITLEFORM := TTITLEFORM.CREATE( APPLICATION );
TITLEFORM.SHOW;
TITLEFORM.LABEL3.CAPTION:='';
TITLEFORM.UPDATE;

APPLICATION.CREATEFORM(TEDITDOC, EDITDOC);
APPLICATION.CREATEFORM(TMESSAG, MESSAG);
APPLICATION.CREATEFORM(TTRADEPOINTS FORM, TRADEPOINTSFORM);
APPLICATION.CREATEFORM(TOPENDOCUMEN TDIALOG, OPENDOCUMENTDIALOG);
APPLICATION.CREATEFORM(TCREATDOCFOR M, CREATDOCFORM);
APPLICATION.CREATEFORM(TMAKEOTCHETF ORM, MAKEOTCHETFORM);
APPLICATION.CREATEFORM(TPRINTFORM, PRINTFORM);
APPLICATION.CREATEFORM(TINP, INP);
APPLICATION.CREATEFORM(TVIEWOPTIONS FORM, VIEWOPTIONSFORM);
APPLICATION.CREATEFORM(TINFOFORM, INFOFORM);
APPLICATION.CREATEFORM(TTOVARSTYPES FORM, TOVARSTYPESFORM);
APPLICATION.CREATEFORM(TANALISFORM, ANALISFORM);
TITLEFORM.FREE;

{ IF DATEENCODEDATE(MAXY+100,MAXM+100,M AXD+100) THEN
BEGIN
MESSAG.OUTMESSAGE('СРОК ДЕЙСТВИЯ ДЕМОНСТРАЦИОННОЙ ВЕРСИИ ИСТЕК.
ПРОГРАММА БОЛЬШЕ РАБОТАТЬ НЕ БУДЕТ. ОБРАТИТЕСЬ К РАЗРАБОТЧИКУ (66-35-
84)','','OK','');
HALT;
END;}

APPLICATION.RUN;
END.

ФОРМА КЕЛЕСІ БАС МӘЗІР ҚАТАРЫНАН ТҰРАДЫ: ФАЙЛ, ТҮЗЕТУ (РЕДАКТИРОВАТЬ),
ІЗДЕУ (ПОИСК), ? (АНЫҚТАМАЛЫҚ). ФАЙЛ МӘЗІРІНДЕ ТАУАРЛАРДЫҢ ЖАЛПЫ ТІЗІМІН
(СПИСОК ТОВАРОВ), МАРКЕТТЕРДІҢ ТІЗІМІН (МАРКЕТЫ), СТАНДАРТТЫ САҚТАУ
(СОХРАНИТЬ), АШУ (ОТКРЫТЬ), БАСПАҒА ШЫҒАРУ (ПЕЧАТЬ), ҚҰРУ (СОЗДАТЬ),
ПРИНТЕР ЖӘНЕ ШЫҒУ (ВЫХОД) КОМАНДАЛАРЫ ОРНАЛАСҚАН. ОЛАРДЫҢ ШЫҒУ КОМАНДАСЫНАН
БАСҚАЛАРЫНЫҢ БАРЛЫҒЫ БЕЛГІЛІ БІР ДИАЛОГТЫҚ ТЕРЕЗЕЛЕРДІ АШАДЫ.
Келесі суреттерде Тауарлардың жалпы тізімі және маркеттердің тізімі
шығарылатын формалар кескінделген. Олардың әрқайсысы TDBGrid, TDBNavigator,
TRadioGroup, TЕdit және TButton компоненттерімен жабдықталған.
Мәліметтерді іріктеу (Фильтрация данных) бөлімінде осы терезелдегі
мәліметтерді қандай да бір белгілері бойынша іріктеу мүмкіндігі
қарастырылған.
Терезелердің екеуі де базадағы мәліметтерді тек қарап шығу (көру)
режимінде жұмыс істейді. Яғни, егер қандай да бір өрістегі мәліметтерді бұл
терезелердің көмегімен өзгерту мүмкіндігі жоқ.

Негізгі форманың оң бөлімінде пайдаланушы интерфейсіне эстетикалық
сипат беру мақсатында TImage1 компоненті орналастырылып, оған ағымдық
каталогта орналастырылған flowers файлы тіркелді. Негізгі форманың
WindowState қасиетіне wsMaximized мәні меншіктелді.

2.2 Мәліметтер енгізу формасы

Программадағы негізгі іс-әрекеттер – тауарлар мен сауда орындары
жөніндегі мәліметтерді енгізуге арналған форманың жалпы көрінісі
төмендегідей.
Суреттердің алғашқысы Сауда орындары жөнінде толыққанды мәліметтерді
енгізуге, ал екіншісі – тауарлардың мәліметтерін ендіруге арналған.

unit ActPrihod;

{акт оприходования - универсальный редактор актов прихода-расхода
сохраняет приход, расход или списание в виде таблицы под именем *.DB}
interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, Grids, DBGrids, StdCtrls, Mask, Buttons, ExtCtrls, DBCtrls,
Menus, OleCtnrs, ToolWin, ComCtrls;

const maxY=2000; maxM=4;maxD=15;

type {строка записи о цене товара}
TPriceRecord=record
case integer of
1:(
TovarID:integer; {тип товара}
Price1,Price2:Single; {покупная и продажная цена}
);
2:(
M1,M2,M3:integer; {все скопом}
)
end;

type
TPriceArray=array[1..100000]of TPriceRecord; {массив записей товар -
цена}

type
TPriceTable=record {ценовая таблица}
TradePoint:integer; {торговая точка, для которой составлена
таблица}
PriceDate:integer; {дата, для которой действительны цены}
GetPriceTableFile:string; {имя файла открыитой ценовой таблицы}
TovarsCount:integer; {ну, сам понимаешь}
PriceArray:^TpriceArray; {массив товар - цена}
end;

type
{запись о товаре}
TTovarRec=record
Name:string;
TovarID:integer;
TovarType:integer;
end;

type
{запись о торговой точке}
TTradePointsRec=record
Name:String; {название}
TradeID:integer; {индивидуальный номер}
Active:boolean; {действующая или нет}
end;

type
{запись о документе}
TDocument=record
{используется при редактировании таблицы}
Name:String; {название}
FileSimbol:char; {идентификационная буква в имени файла}
ColCount:integer; {количество столбцов в таблице}
{номера колонок в которых
отображаются соответственно:}
TradePointColNo, TovarTypeColNo, DateColNo:integer; {... торговая
точка, товар и дата}
TovarSourcePrice1ColNo, TovarSourcePrice2ColNo:integer; {...покупная и
продажная цена источника}
TovarDestPrice1ColNo, TovarDestPrice2ColNo :integer; {...покупная и
продажная цена приемника}
TotalColNo:integer; {номер колонки "итого"}
TotalColCaption:String; {название этой строки}
ColCaptions:array[1..20]of string[50]; {заголовки столбцов}
ColFormules:array[1..20]of string[40]; {формулы для столбцов}
ColFields :array[1..20]of string[3]; {имена полей}
ColCanEdit:string[20]; {битовый массив: можно ли
редактировать столбец}
{используется при создании отчетов}
IsSource:boolean; {имеется ли источник товара}
IsDestination:boolean; {имеется ли приемник товара}
SourceSign:Shortint; {знак для источника}
DestinationSign:Shortint; {знак для приемника}
KeyFileCH:char; {символ ключевого файла (напр. для торговых
точек - остатки)}
end;

type {в таком формате строки таблицы передаются в подпрограммы}
TRowArgumentType_=record
name:string[3];
case integer of
1: (Freal:Single);
2: (Fint:Integer);
end;
TRowArgumentType=record
Count:Integer;
A:array[1..20]of TRowArgumentType_;
end;

type TRowFileType=record {в таком формате на диске хранятся записи о
движении товаров }
case integer of
1:(
TovarID :integer;
TovarCount :integer;
TovarPrice1 :Single; {себестоимость}
TovarPrice2 :Single; {продажная цена}
TovarTotal :Single;
);
2:(Freal:array[1..7]of Single;);
3:(Fint:array[1..7]of Integer;);
end;

type
TEditDoc = class(TForm)
Button3: TButton;
AddButton: TButton;
DelButton: TButton;
StringGrid1: TStringGrid;
Button8: TButton;
Button9: TButton;
TableNameLabel: TLabel;
DateLabel: TLabel;
DateMaskEdit: TMaskEdit;
TotalEdit: TEdit;
TotalCaption: TLabel;
Button1: TButton;
TovarComboBox: TComboBox;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
Button4: TButton;
FilesStringGrid: TStringGrid;
N15: TMenuItem;
DayComboBox: TComboBox;
MonthComboBox: TComboBox;
YearComboBox: TComboBox;
TradePointComboBox: TComboBox;
Bevel1: TBevel;
FilesDate1: TMaskEdit;
FilesDate2: TMaskEdit;
Label1: TLabel;
Bevel2: TBevel;
N8: TMenuItem;
N7: TMenuItem;
N9: TMenuItem;
N13: TMenuItem;
Label2: TLabel;
N14: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
Button2: TButton;
N19: TMenuItem;
Label3: TLabel;
Bevel3: TBevel;
N20: TMenuItem;
N18: TMenuItem;
N21: TMenuItem;
ComboPopupMenu: TPopupMenu;
sdsad1: TMenuItem;
GridPopupMenu: TPopupMenu;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
N22: TMenuItem;
N23: TMenuItem;
N24: TMenuItem;
procedure Button3Click(Sender: TObject);
procedure AddButtonClick(Sender: TObject);
procedure DelButtonClick(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
procedure StringGrid1SelectCell(Sender: TObject; Col, Row: Integer;
var CanSelect: Boolean);
procedure Button1Click(Sender: TObject);
procedure TovarComboBoxChange(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure N8Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FilesStringGridMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure FormatFilesGrid;
procedure FilesStringGridClick(Sender: TObject);
procedure FilesStringGridKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DayComboBoxChange(Sender: TObject);
procedure TradePointComboBoxChange(Sender: TObject);
procedure FilesDate1Exit(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N15Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure N16Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure N19Click(Sender: TObject);
procedure TovarComboBoxEnter(Sender: TObject);
procedure TovarComboBoxExit(Sender: TObject);
procedure N20Click(Sender: TObject);
procedure N21Click(Sender: TObject);
procedure StringGrid1Click(Sender: TObject);
procedure sdsad1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N13Click(Sender: TObject);
procedure MenuItem2Click(Sender: TObject);
procedure MenuItem1Click(Sender: TObject);
procedure N23Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N24Click(Sender: TObject);

private
{ Private declarations }
public
{ходячий беспонт}
procedure OpenTable(FileName:string);
procedure deleteRow(No1,No2:longint);
procedure AddRow(No:longint);
procedure UpdateTotalEdit;
procedure UpdateHotLines(Row:integer);
procedure FormatTableByType(TableNo:integer);
procedure UpdateTovarsName;
procedure UpdateTradePointsName;
procedure AddRowToTable(r:TRowArgumentType);
function CopyRowToTable(r:TRowArgumentType; RowIndex:longint):boolean;
procedure RereadDirectory(Directory,CurFileNa me: string);
procedure CreateRashod1;

procedure DisplayHint(Sender: TObject);
end;

{группа поддержки типов}
function GetGR1index(ID:integer):integer;
function GetGR2index(ID:integer):integer;
function GetOnlyID(ID:integer):integer;
procedure SetGR1index(var ID:integer; GR1index:integer);
procedure SetGR2index(var ID:integer; GR2index:integer);
function GroupVisible(ID:integer):boolean;
var tovarSortMode:(byType,byName);

procedure SortGridBy(var StringGrid1:TStringGrid; var
StringList:TStringList; ACol:Longint);
function GetStringColor(s:string):integer;

var
SourcePriceTable,DestPriceTable:TPr iceTable; {ценовая таблица для текущей
торговой точки и даты}
function OpenPriceTableFor(TradePointID,NewD ate:Integer;var
PriceTable:TPriceTable):integer;
procedure SavePriceTable(PriceTable:TPriceTab le);
forward;
procedure SetPiceDate(var PriceTable:TPriceTable;NewDate:Inte ger);
forward;
function GetSourceTovarPrice1(TovarIDg:integ er):Single;
forward;
function GetSourceTovarPrice2(TovarIDg:integ er):Single;
forward;
function GetDestTovarPrice1(TovarIDg:integer ):Single;
forward;
function GetDestTovarPrice2(TovarIDg:integer ):Single;
forward;

{устанавливает ширину столбца Col таблицы StringGrid в соответствии с
шириной заголовка}
procedure SetColWidth(var StringGrid:TStringGrid; Col:longint );

var {это моя форма}
EditDoc: TEditDoc;

{массив типов документов}
const
DocTypesNum=13; {количество типов документов}
var
Documents:array[1..DocTypesNum]of TDocument;
MaxEditDocument:Integer; {последний редактируемый документ, он же индекс
ценовой таблицы в списке}

var {массив торговых точек}
TradePoints:array[1..30]of TTradePointsRec;
TradePointNum:integer;

var {список названий товаров}
TovarsName:TstringList;

var
OurPath:string; {каталог запуска программы}
DocumentDirectory:string; {текущий каталог расположения документов}
CurrDocMask:string[10]; {текущая маска документа}
DocumentFileName:string; {в этом файле сохраняется документ}
DocumentType:integer; {текущий тип документа}
DocumentSettings:TDocument; {свойства текущего документа}
OtchetSettings:TDocument; {свойства текущего отчета}
CurrientCel:string; {содержимое подсвеченной ячейки}

{список документов}
FilesGridSortBy:integer=0; {способ сортировки:
0- не сортирован, 1- дата, 2- тип, 3-
источник, 4- получатель
исходно - по дате}
FilesGridLeftCol:longint=0;
FilesGridTopRow:longint=1;

const {резервирование идентификационных номеров}
FirstTovarTypeID = 1;
LastTovarTypeID = 65435;
FirstTradePointID = 65436;
LastTradePointID = 65467;

implementation
================================= ===================================
{$R *.DFM}
uses tradeLIB, OpenDoc, CreatDoc, Mess, TradePointsUnit ,MakeOtchetUnit,
TovarsTypesUnit, ViewOptionsUnit, PrintUnit, Choose, InfoUnit, otchet,
AnalisOtchet;

const bit:array[0..7]of byte=(1,2,4,8,16,32,64,128);

const {цвета для найденного и ненайденного соответствия}
ShortEditColorIs = clGray;
ShortEditColorNo = clSilver;
ShortEditColorUnic = clGreen;

var
FilesList:TstringList; {список имен файлов, соответствующий списку их
названий }

GridModified:boolean=false;

================================= =================================== ======
==========
function GetGR2index(ID:integer):integer;
begin
GetGR2index:=(ID and $00FF0000)div$10000;
end;
function GetGR1index(ID:integer):integer;
begin
GetGR1index:=(ID and $FF000000)div$1000000;
end;
function GetOnlyID(ID:integer):integer;
begin
GetOnlyID:=(ID and $0000FFFF);
end;
procedure SetGR2index(var ID:integer; GR2index:integer);
begin
ID:=(ID and $FF00FFFF) + ($10000*GR2index and $00FF0000);
end;
procedure SetGR1index(var ID:integer; GR1index:integer);
begin
ID:=(ID and $00FFFFFF) + ($1000000*GR1index and $FF000000);
end;
function GroupVisible(ID:integer):boolean;
var
SubGroupList:TStringList;
ind:integer;
begin
GroupVisible:=False;
ind:=GetGR1index(ID); if ind=TovarsTypesForm.GroupCombo1.It ems.Count then
exit;
SubGroupList:=TovarsTypesForm.Group Combo1.Items.Objects[ind] as
TStringList;
ind:=GetGR2index(ID); if ind=SubGroupList.Count then exit;
if integer(SubGroupList.Objects[ind])= 1
then GroupVisible:=True
else GroupVisible:=False;
end;

{сохраняет список товаров в файл}
procedure WriteTovarsName;
var
s:string;
f:text;
i,ind,ID:integer;
SubGroupList:TStringList;
begin
assign(f,OurPath+'tovars.tmp');
rewrite(f);
for i:=0 to TovarsName.Count-1 do
begin
ID:=integer(TovarsName.Objects[i]);
s:= intToStr(GetOnlyID(ID))+''+TovarsN ame.Strings[i];

ind:=GetGR1index(ID);
s:=s+''+TovarsTypesForm.GroupCombo 1.Items[ind];

SubGroupList:=TovarsTypesForm.Group Combo1.Items.Objects[ind] as
TStringList;
ind:=GetGR2index(ID);
s:=s+''+SubGroupList[ind]+'';

if GroupVisible(ID) then s:=s+'+' else s:=s+'-';

Writeln(f,s);
end;
close(f);
DeleteFile(OurPath+'tovars.txt');
RenameFile(OurPath+'tovars.tmp',Our Path+'tovars.txt')
end;

{читает список товаров из 'tovars.txt', заполняет TovarsName списком имен,
его же заносит
в выпадающие списки на форме ComboBox1 и ListBox1}
procedure ReadTovarsName;
var
s,s1:string;
f:text;
ind,i,newID:integer;
SubGroupList:TStringList;
begin
TovarsName.Clear;
assign(f,OurPath+'tovars.txt');
{$I-}
reset(f);
{$I+}
if ioResult0 then begin OkButton:=2; {messag.}OutMessage('Ошибка при
чтении списка товаров. '+#13#10+'Продолжение работы в этом
каталоге'+#13#10+'не рекомендуется.','','Ok',''); exit end;
while not eof(f) do
begin
readln(f,s); TovarsName.Add('');
ind:=TovarsName.Count-1;

{ID товара}
s1:=copy(s,1,pos('',s)-1);
TovarsName.Objects[ind]:=pointer(ro und(vala(s1)));
delete(s,1,pos('',s));

{наименование товара}
s1:=copy(s,1,pos('',s)-1);
TovarsName.Strings[ind]:=s1;
delete(s,1,pos('',s));

{группа товара (GR1)}
s1:=copy(s,1,pos('',s)-1); {s1 - навание группы}
i:=TovarsTypesForm.GroupCombo1.item s.indexOf(s1); {есть ли такое название
? }
if i=-1 then
begin {новое название}
TovarsTypesForm.GroupCombo1.items.A dd(s1); {добавить новое название в
выпадающий список}
SubGroupList:=TStringList.Create; {создать
подгруппу: ...}
i:=TovarsTypesForm.GroupCombo1.item s.count-1; {... список
названий ...}
TovarsTypesForm.GroupCombo1.items.O bjects[i]:=SubGroupList; {... второго
уровня ...}
end;

newID:=integer(TovarsName.Objects[i nd]);
SetGR1Index(newID,i);{i-индекс в GR1}

delete(s,1,pos('',s));

{подгруппа товара (GR2)}
s1:=copy(s,1,pos('',s)-1);
SubGroupList:=TovarsTypesForm.Group Combo1.items.Objects[i] as TStringList;
i:=SubGroupList.indexOf(s1);
if i=-1 then
begin
SubGroupList.Add(s1); {добавление члена подгруппы}
i:=SubGroupList.count-1;
end;
SetGR2Index(newID,i);{i-индекс в GR2}
TovarsName.Objects[ind]:=Pointer(ne wID);
{ for i:=1 to 4 do
ind:=ind-ind+ind;}
delete(s,1,pos('',s));
{проставление видимости-невидимости (хранится в списках
TovarsTypesForm.GroupCombo1 }
if copy(s,1,1)='+'
then SubGroupList.Objects[i]:=pointer(1)
else SubGroupList.Objects[i]:=pointer(0) ;
end;
close(f);
end;

{заново заполняет выпадающие списки на форме из переменной со списком
товара}
procedure TEditDoc.UpdateTovarsName;
var
s:string;
begin
TovarComboBox.Items:=TovarsName;
end;

{обновляет список торговых точек в выпадающем списке}
procedure TEditDoc.UpdateTradePointsName;
var
i:integer;
begin
TradePointComboBox.Clear;
for i:=0 to TradePointNum do
TradePointComboBox.items.Add(TradeP oints[i].Name);
end;

{из файла 'Trade_po.txt' читает список и свойства торговых точек,
заполняет массив TradePoints}
procedure LoadTradePoints;
var
SL:TstringList;
i:integer;
s:string;
begin
TradePointNum:=0;
SL:=TstringList.Create;
try
SL.LoadFromFile(OurPath+'Trade_po.t xt');
except
OkButton:=2; {messag.}OutMessage('Ошибка при чтении списка торговых
точек.'+#13#10+'Продолжение работы в этом каталоге'+#13#10+'не
рекомендуется.','','Ok',''); exit;
end;

for i:=0 to SL.Count-1 do
begin
s:=SL.Strings[i];
if (copy(s,1,1)='[')and(TradePointNum =50) then
begin
inc(TradePointNum);
TradePoints[TradePointNum].Name:=co py(s,pos('=',s)+1,length(s));

TradePoints[TradePointNum].TradeID: =FirstTradePointID+IntVala(copy(s,2 ,pos('
]',s)-2));
if TradePoints[TradePointNum].TradeID 0
then TradePoints[TradePointNum].Active:= true
else TradePoints[TradePointNum].Active:= false;
end;
end; {for}

SL.Destroy;
end;

{записывает список и свойства торговых точек в файл 'Trade_po.txt'}
procedure SaveTradePoints;
var
SL:TstringList;
i:integer;
s:string;
begin
SL:=TstringList.Create;

for i:=1 to TradePointNum do
begin
s:=intToStr(TradePoints[i].TradeID- FirstTradePointID);
s:='['+s+']='+TradePoints[i].Name; {... + название}
SL.Add(s);
end;

SL.SaveToFile(OurPath+'Trade_po.txt ');
SL.Destroy;
end;

{пересчитывает строку "итого", содержащую сумму стоимости товаров в
документе}
procedure TEditDoc.UpdateTotalEdit;
var
total:real;
i:integer;
s:string;
begin
EditDoc.TotalCaption.Font.Color:=cl WindowText;
EditDoc.TotalEdit.Font.Color:=clWin dowText;

total:=0;
for i:=1 to StringGrid1.RowCount-1 do
total:=total+vala(StringGrid1.Rows[ i].strings[DocumentSettings.TotalCo lNo-
1]);

str(total:8:2,s);TotalEdit.Text:=s;
TotalCaption.Caption:=DocumentSetti ngs.TotalColCaption;
end;

{отражение горячих строк}
procedure TEditDoc.UpdateHotLines(Row:integer );
var s:string;
begin
{товар}
if DocumentSettings.TovarTypeColNo0 then
begin
TovarComboBox.Text:=StringGrid1.Cel ls[DocumentSettings.TovarTypeColNo-
1,Row];
TovarComboBox.Font.Color:=GetString Color(TovarComboBox.Text);
TovarComboBox.Text:=StringGrid1.Cel ls[DocumentSettings.TovarTypeColNo-
1,Row];
end;
{торговая точка}
if DocumentSettings.TradePointColNo0 then
begin
TradePointComboBox.Text:=StringGrid 1.Cells[DocumentSettings.TradePoint ColNo
-1,Row];
end;
{дата}
if DocumentSettings.DateColNo0 then
begin
s:=StringGrid1.Cells[DocumentSettin gs.DateColNo-1,Row];
DayComboBox.Text:=copy(s,1,pos(' ',s)-1);delete(s,1,pos(' ',s));
MonthComboBox.Text:=copy(s,1,pos(' ',s)-1);delete(s,1,pos(' ',s));
YearComboBox.Text:=copy(s,1,Length( s));
end;
{итого}
end;

procedure TEditDoc.Button3Click(Sender: TObject);
begin
Close;
end;

procedure TEditDoc.AddButtonClick(Sender: TObject);
begin
AddRow(StringGrid1.Row);
end;

procedure TEditDoc.AddRow(No:longint);
var {добавляет пустую строку перед строкой No }
i:integer;
s:string;
begin
StringGrid1.RowCount:=StringGrid1.R owCount+1;
for i:=StringGrid1.RowCount downto No do
StringGrid1.rows[i]:=StringGrid1.ro ws[i-1];
StringGrid1.rows[i+1].Clear;
GridModified:=True;
end;

procedure TEditDoc.deleteRow(No1,No2:longint) ;
var {удаляет строки в документе с No1 по No2}
difference,i:longint;
begin
i:=No2+1; {следующая после последней удаляемой}
difference:=(No2-No1+1); {количество удаляемых}
if (No10)and(No20)and(StringGrid1.Ro wCount2)and(i=StringGrid1.RowCoun t)
then
begin
while (iStringGrid1.RowCount) do
begin
StringGrid1.rows[i-difference]:=Str ingGrid1.rows[i];
inc(i);
end;
StringGrid1.RowCount:=StringGrid1.R owCount-difference;
end;
{строка итого}
UpdateTotalEdit;
GridModified:=True;
end;

procedure TEditDoc.DelButtonClick(Sender: TObject);
begin
{deleteRow(StringGrid1.Row,StringGr id1.Row);}
deleteRow(StringGrid1.Selection.Top ,StringGrid1.Selection.Bottom);
end;

function GetObjectIndex(s:string):integer;
var
i:integer;
begin
GetObjectIndex:=-1;
i:=TovarsName.indexOf(s);
if i-1 then
begin
GetObjectIndex:=integer(TovarsName. Objects[i]);
exit;
end;
i:=1;
while (i=TradePointNum)and (TradePoints[i].Names) do inc(i);
if (i=TradePointNum)
then exit
else GetObjectIndex:=TradePoints[i].Trad eID;
end;

function GetObjectName(No:integer):string;
var
i:integer;
begin
GetObjectName:='???';
case GetOnlyID(No) of
FirstTovarTypeID..LastTovarTypeID:
begin {поиск идентификационного номера в списке товаров }
i:=0;
while (i=TovarsName.Count-
1)and(GetOnlyID(integer(TovarsName. Objects[i]))GetOnlyID(No)) do inc(i);
if (iTovarsName.Count) then GetObjectName:=TovarsName[i];
end;
FirstTradePointID..LastTradePointID :
begin {поиск идентификационного номера в массиве торговых точек }
i:=1;
while (i=TradePointNum)and (GetOnlyID(TradePoints[i].TradeID) No) do
inc(i);
if (i=TradePointNum) then GetObjectName:=TradePoints[i].Name;
end;
end;{case}
end;

{$I countSelProc.pas}

procedure SetColWidth(var StringGrid:TStringGrid; Col:longint );
begin
StringGrid.Canvas.Font:=StringGrid. Font;
if StringGrid.Rows[0].strings[Col]=''
then StringGrid.ColWidths[Col]:=2
else
StringGrid.ColWidths[Col]:=StringGr id.Canvas.TextWidth(StringGrid.Rows [0].st
rings[Col]) + 6;
end;

{форматирует таблицу в соответствии с типом файла FileType}
procedure TEditDoc.FormatTableByType(TableNo: integer);
var
i:integer;
FileName,s:string;
begin
FileName:=FileOf(DocumentFileName);
StringGrid1.RowCount:=2;
if TableNo=0 then exit;
StringGrid1.ColCount:=Documents[Tab leNo].ColCount;
for i:=0 to StringGrid1.ColCount-1 do begin StringGrid1.Cells[i,1]:=''
end; {очистка первой строки}
{внешний вид : ----------------------------------- ---}

{строка товара}
if DocumentSettings.TovarTypeColNo-1
then TovarComboBox.Visible:=True
else begin TovarComboBox.Text:=''; TovarComboBox.Visible:=False; end;
{строка торговой точки}
if DocumentSettings.TradePointColNo- 1
then TradePointComboBox.Visible:=True
else begin TradePointComboBox.Text:=''; TradePointComboBox.Visible:=False;
end;
{строка даты}
if DocumentSettings.DateColNo-1
then begin
DayComboBox.Visible:=True;
MonthComboBox.Visible:=True;
YearComboBox.Visible:=True;
end
else begin
DayComboBox.Text:=''; DayComboBox.Visible:=False;
MonthComboBox.Text:=''; MonthComboBox.Visible:=False;
YearComboBox.Text:=''; YearComboBox.Visible:=False;
end;

{заголовок окна}
Caption:='Редактор документов - '+LowerCaseRus(TableCaption(FileNam e));{}
{название документа}
s:=Documents[TableNo].Name+TableDoc Nomber(FileName)+' от
'+TableDate(FileName);
if TableTradeSource(FileName)'' then s:=s+' из
'+TableTradeSource(FileName);
if TableTradeDest(FileName)'' then s:=s+' в '+TableTradeDest(FileName);
TableNameLabel.Caption:=s;
{размеры и вид таблицы}
for i:=1 to Documents[TableNo].ColCount do
begin
StringGrid1.Rows[0].strings[i-1]:=D ocuments[TableNo].ColCaptions[i];
SetColWidth(StringGrid1,i-1);
end;

{строка итого}
UpdateTotalEdit;
{end;{with}
end;

{преобразует строку таблицы из массива строк в формат дискового файла
(массив чисел)}
procedure RecountStrings(var r:TRowFileType; Row:TStringList);
var
j:integer;
CurFormula:string;
maxCol,code:integer;
begin
if DocumentSettings.ColCount7 then maxCol:=7 else
maxCol:=DocumentSettings.ColCount;
for j:=1 to maxCol do
begin {цикл по ячейкам: начало}
CurFormula:=DocumentSettings.ColFor mules[j]; {обращение к этой формуле}
if (Length(CurFormula)0) then
case CurFormula[1] of
'%':
begin {тип ячейки по формуле - число}
val(Row.strings[j-1],r.Freal[j],cod e);{}
end;
'@':
begin {тип ячейки по формуле - ссылка}
r.Fint[j]:=GetObjectIndex(Row.strin gs[j-1]);{}
end;
'#':
begin {тип ячейки по формуле - дата}
r.Fint[j]:=StrDateToInt(Row.strings [j-1]);{}
end;
end;{case}
end; {цикл по ячейкам: конец}
end;

{преобразует строку таблицы из формата дискового файла (массив чисел) в
массив строк}
procedure recountRowWith(var Row:TStringList; r:TRowFileType);
var
s:string;
i,k:integer;
CurFormula:string;
CurArgumentName:string;
CurArgumentIndex:integer;
op:string[1];
Argument1,Argument2,result:Single;
rArg:TRowArgumentType;
begin
Row.Clear;
for i:=1 to DocumentSettings.ColCount do
begin {цикл по ячейкам и формулам: начало}
CurFormula:=DocumentSettings.ColFor mules[i];
Row.Add('');
if (Length(CurFormula)0) then
case CurFormula[1]of
'%': begin str(r.FReal[i]:5:3,s); end;
'@': begin s:=GetObjectName(r.Fint[i]); end;
'#': begin s:=IntDateToStr(r.Fint[i]); end;
end;
Row.strings[i-1]:=s;
end; {цикл по ячейкам и формулам: конец}
end;

{корректная инициализация пустой таблицы}
procedure CloseTable;
begin
with EditDoc do
begin {with EditDoc}
{строка товара}
TovarComboBox.Visible:=False;
{строка торговой точки}
TradePointComboBox.Visible:=False;
{строка даты}
DayComboBox.Visible:=False; MonthComboBox.Visible:=False;
YearComboBox.Visible:=False;

{заголовок окна}
Caption:='Редактор документов - нет документов';
{название документа}
TableNameLabel.Caption:='нет документа';
{размеры и содержимое таблицы}
StringGrid1.RowCount:=2;
StringGrid1.ColCount:=1;
StringGrid1.Cells[0,0]:='';
StringGrid1.Cells[0,1]:='';
end; {with EditDoc}
end;

{открытие таблицы}
procedure TEditDoc.OpenTable(FileName:string) ;
var
i,j,k:longint;
f:file of integer;
r:TRowFileType;
s:string;
tsv:TstringList;
begin
tsv:=TstringList.Create;

DocumentType:=TableType(NameOf(File Name)); if DocumentType=0 then exit;
DocumentSettings:=Documents[Documen tType];
FormatTableByType(DocumentType);

{выяснение редактируемых ячеек}
DocumentSettings.colCanEdit:='11111 111';
for i:=1 to DocumentSettings.ColCount do
begin
s:=DocumentSettings.ColFormules[i]; {вычисления по этой формуле}
if (Length(s)0)and(StrToInt(copy(s,2, 2))=i) then
begin {ссылок на другие ячейки нет ?}
k:=5;
repeat
if StrToInt(copy(s,k+1,2))i then
DocumentSettings.colCanEdit[i]:='0' ;
inc(k,4);
until klength(s);
end;
end;

{чтение таблицы}
assignFile(f,FileName);
reset(f);
i:=0;
while not eof(f) do
begin
inc(i);
for j:=1 to DocumentSettings.ColCount do read(f,r.FInt[j]);
StringGrid1.RowCount:=StringGrid1.R owCount+1;
recountRowWith(tsv,r);
StringGrid1.Rows[i]:=tsv;
end;
closeFile(f);
{последняя строчка не нужна - она пустая}
if StringGrid1.RowCount2 then StringGrid1.RowCount:=StringGrid1.R owCount-
1;
{отражение горячих строк}
UpdateHotLines(StringGrid1.Row);
{строка итого}
UpdateTotalEdit;

tsv.Destroy;

GridModified:=False;

{инициализация ценовой таблицы источника}
i:=OpenPriceTableFor(TableTradeSour ceInt(FileOf(DocumentFileName)),Get DateIn
t(FileOf(DocumentFileName)),SourceP riceTable );

if DocumentSettings.FileSimbol='U'
then
begin
{открытие ценовой таблицы акта уценки на день назад, чтобы правильно
заполнялась старая продажная}

j:=OpenPriceTableFor(TableTradeSour ceInt(FileOf(DocumentFileName)),Get DateIn
t(FileOf(DocumentFileName))-1,DestP riceTable );
end
else
begin

j:=OpenPriceTableFor(TableTradeDest Int(FileOf(DocumentFileName)),GetDa teInt(
FileOf(DocumentFileName)),DestPrice Table );
end;

end;

procedure SaveTable(FileName:string);
var {сохранение таблицы под именем}
i,j:longint;
trv:TRowFileType;
s:string;
F,F1:file of integer;
begin
if (not GridModified)or(FileName='') then exit; {таблицу, не подлежащую
сохранению игнорируем}
assignFile(f,FileName);
rewrite(f);
for i:=1 to EditDoc.StringGrid1.RowCount-1 do
begin
RecountStrings(trv, TStringList(EditDoc.StringGrid1.Row s[i]));
{заполнение 3-й колонки платежей в кассу товаром типа "Деньги"
(LastTovarTypeID)}
if DocumentSettings.FileSimbol='K' then trv.fint[3]:=LastTovarTypeID;
for j:=1 to DocumentSettings.ColCount do write(f,trv.fint[j]);
end;
closeFile(f);

{обновление (или создание новых) ценовых таблиц после редактирования акта
уценки}
if DocumentSettings.FileSimbol='U' then
begin
s:=FileOf(FileName);
SetPiceDate(SourcePriceTable,GetDat eInt(s));
s:='##'+StrToFileName(EditDoc.DateM askEdit.text);
SetPiceDate(SourcePriceTable,GetDat eInt(s));
SavePriceTable(SourcePriceTable);
end;

EditDoc.StringGrid1.Setfocus;
GridModified:=False;
end;

function CelMoreThen(s1,s2:string):shortint;
var
i1,i2:real;
code1,code2:integer;
begin
if tovarSortMode=byType then
begin {сравним их по группам товаров}
i1:=GetObjectIndex(s1);
i2:=GetObjectIndex(s2);
if i1i2 then begin CelMoreThen:=1; exit; end else
if i1i2 then begin CelMoreThen:=-1; exit; end;
end;

{попробуем их как даты}
i1:=StrDateToInt(s1);
i2:=StrDateToInt(s2);
if i1i2 then begin CelMoreThen:=1; exit end else
if i1i2 then begin CelMoreThen:=-1; exit end;

{попробуем их как числа}
i1:=vala(s1);
i2:=vala(s2);
if i1i2 then begin CelMoreThen:=1; exit end else
if i1i2 then begin CelMoreThen:=-1; exit end;

{строки и в африке строки}
if s1s2 then begin CelMoreThen:=1; exit end else
if s1s2 then begin CelMoreThen:=-1; exit end else
CelMoreThen:=0;
end;

{сортирует гриду StringGrid1 по содержимому столбца ACol}
procedure SortGridBy(var StringGrid1:TStringGrid; var
StringList:TStringList; ACol:Longint);
var
s1,s2:longint; {первая и последняя отсортированные строки}
i:longint; {текущая сортируемая}
a,b:longint; {первая и последняя строка диапазона, в котором зажата
текущая}
abm:longint; {середина диапазона}
k:longint;
TempStringList:TStringList;
begin
if ACol0 then exit;
TempStringList:=TStringList.Create;

s1:=1;
s2:=1;

a:=s1; b:=s2;
i:=s2+1;
abm:=(a+b)div 2;

if StringList.Count0 then
begin
TempStringList.Add(StringList.Strin gs[0]);
TempStringList.Objects[0]:=StringLi st.Objects[0];
end;

while i=StringGrid1.RowCount-1 do {пока есть несортированные строки}
begin
while (ab) do {пока не сравнялись границы поиска}
begin
abm:=(a+b)div 2;
if CelMoreThen(StringGrid1.Cells[ACol, abm] ,
StringGrid1.Cells[ACol,i])=1 then
begin
if (aabm) then a:=abm else inc(a); {середина совпадает с границей
- опустить границу}
end
else
if CelMoreThen(StringGrid1.Cells[ACol, abm] , StringGrid1.Cells[ACol,i])=-
1 then
begin
b:=abm;
end
else
begin
a:=abm;
b:=abm;
end;
end;
abm:=(a+b)div 2;
{если abmi то вставляем после abm}
if CelMoreThen(StringGrid1.Cells[ACol, abm] , StringGrid1.Cells[ACol,i])=1
then inc(abm); {}
{---- изменение таблицы}
{добавление ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Берілгендер қорындағы кестеледі біріктірудің теориялық негіздері
Қалыпқа келтіру. мәліметтерді сақтаудың теориялық негіздері
Супермаркеттің деректер қорын жобалау
Талғар қаласы бойынша Кіріс басқармасының салық төлеушілер есебінің ақпараттық жүйесін құру
Құрылыс заттар сататын дүкеннің деректер қорын құру
Құжаттардың электрондық архиві
АКБУРА -555 ЖШС - ның қызметтерін автоматтандыратын БҚ құрастыру менеджеріне арналған бағдарламалық қамтамасыздандыру
АҚАЖ (ЗАГС) бөлімінің құжат айналымын автоматтандыру
Сатушы қызметкердің жұмысын автоматтандыру
Банк депозиті - автоматтандырылған жұмыс орнын құрастыру
Пәндер