Читайте данную работу прямо на сайте или скачайте
Разработка автоматизированного рабочего места менеджера розничной торговли
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ ЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ НИВЕРСИТЕТ»
ФАКУЛЬТЕТ ЭКОНОМИКИ И ИНФОРМАТИКИ
КАФЕДРА ИНФОРМАТИКИ
КУРСОВОЙ ПРОЕКТ
по дисциплине «Программирование» на тему: “Разработка автоматизированного рабочего места менеджера розничной торговли”
Выполнил: студент курса гр.: И-04-2 Пивков В.А. Проверил: асс. Гаршин И.Л.
Липецк 2006
ЗАДАНИЕ.
Разработать клиентское приложение для СУБД mySQL 5.0.x на примере создания автоматизированного рабочего места менеджера розничной торговли.
ОГЛАВЛЕНИЕ
Введение
Глава 1. Постановка задачи 1.1.Литературный и патентный обзор постановки подобных задач. Анализ аналогичных информационных систем (ИС) 1.2.Характеристика организационной либо производственной структуры объекта или структуры предметной области 1.3.Назначение и цели создания системы
Глава 2. Проектная 2.1.Схема функциональной структуры системы с кратким описанием 2.2.Описание информационныхфункций и комплекса решаемых задач
2.3. Разработка решений по специальному математическому обеспечению ИС 2.3.1.Общий алгоритм функционирования системы
- Разработка алгоритмов решения отдельных функциональных задач
- Разработка решений по информационному обеспечению ИС
- Разработка решений по техническому обеспечению ИС
2.3.5. Разработка решений по программному обеспечению Библиографический список ПРИЛОЖЕНИЯ
Приложение 1. «Руководство оператора» Приложение 2. «Листинг исходного кода ИС»
ВВЕДЕНИЕ.
В настоящее время существует множество ИС для розничной торговли и каждая из них обладает своими достоинствами и недостатками. К основным недостаткам наверное можно отнести достаточно высокую цену за данные программные пакеты. Из-за этого еще многие торговые предприятия, не могут перейти на современные технологии ведения своего бизнеса.
Целью данной работы является разработка клиент-серверного приложения на основе свободно распространяемой СУБД mySQL 5.0 для ведения розничной торговли. В качестве примера в данной работе мы используем некую Компания “X” для которой разрабатывается данная ИС.
Для достижения поставленной нами цели система должна решать следующие задачи:
- Учет поставленной и реализованной продукции
- Предоставлять актуальную информацию о наличии товара
- Осуществлять поиск по базе данных
- Генерировать отчет о продажах
ГЛАВА I. ПОСТАНОВКА ЗАДАЧИ
1.1 Литературный и патентный обзор постановки подобных задач. Анализ аналогичных систем
Информационные системы, в наше время, же прочно заняли свои законные места в экономической сфере общества, в частности розничной торговле. же трудно представить себе, важающее себя торговое предприятие, не использующее специализированного программного обеспечения для ведения своей деятельности. Спрос, как известно, рождает предложение и в настоящее время на рынке представлено множество систем, как отечественных, так и зарубежных. В данном материале рассмотрены некоторые российские и зарубежные разработки. Оставшуюся долю рынка занимает ряд малораспространенных продуктов, также локализованные версии иностранных систем. Кроме того, существует довольно большое количество компаний, предлагающих проектные решения по реализации розничной торговли.
Рассмотрим системы для правления розничной торговлей, которые широко представлены на российском рынке.
Продукт LS Retail Axapta представляет собой единое программное решение для компаний, занимающихся розничной торговлей. Он может использоваться как в головных офисах, так и в офисах магазинов и на кассовых аппаратах (POS). Технически решение LS Retail Axapta состоит из ERP системы Microsoft Dynamics™ AX и двух специально разработанных к ней модулей. Это решение подходит для крупных компании, которые себе могут позволить покупку дорогостоящего программного обеспечения, ибо затраты на внедрение данного продукта в небольшую сеть, могут оказаться чрезмерно высокими.
Для малого бизнеса подходит отечественная разработка “С: Предприятие”. Этот продукт является ниверсальной системой автоматизации деятельности предприятия. Основная его особенность – это настройка под особенности конкретного предприятия. Для использования данного пакета требуется не только покупка базового комплекта, но и так же написание собственной конфигурации, которая сможет довлетворить нужды компании, что отразится на стоимости владения системой.
После анализа этих систем было решено начать разработку собственной системы правления розничной продажи, так как ни одна из приведенных систем не отвечает нуждам нашего предприятия.
1.2 Характеристика структуры предметной области.
Предметной областью системы является продукция, реализуемая Компания “X”. Для любого продукта существуют несколько характеристик:
- Код товара
- Наименование товара
- Цена товара за шт.
- Страна производитель
- Гарантия
Исходя, из этих характеристик мы можем выделить некоторые задачи, которые должна реализовывать наша система:
- Отбор наименовании имеющихся в наличии
- Ведение чета по каждому наименованию
- Обеспечение поиска по наименованиям
- Добавление наименований
- Удаление наименований
- Редактирование характеристик наименований
- Генерация отчета при реализации продукции
С точки зрения организационной структуры наша система используется сотрудниками компании, непосредственно задействованным в розничной торговле.
1.3. Назначение и цели создания системы.
Разрабатываемая мною система предназначается для автоматизации деятельности сотрудников задействованных непосредственно в розничной торговле в магазинах Компания “X”.
Цели создания:
• скорение обслуживания клиентов
• Предоставление актуальной информации о наличии товара в магазине
- Автоматический расчет стоимости покупки
- Автоматическая генерация отчета
- Реализация единого представления информации
ГЛАВА II ПРОЕКТНАЯ ЧАСТЬ.
2.1 Описание функциональной структуры системы.
втоматизируемые функции данной программы определяются необходимыми данными для ведения розничной торговли.
Схема 1. Функциональная структура системы
2.2. Описание информационных функции и комплекса решаемых задач.
Все информационные функции системы так или иначе связаны с ведением чета товара, или организацией этого процесса.
1. Подключение к серверу Входная информация – четная запись пользователя на сервере БД. Выходная информация – получение доступа к БД При запуске системы требуется пройти аутентификацию на сервере БД
для получения подключения. Подключение реализовано в модуле Unit8 и предоставляет пользовательские интерфейсы на специально организованной форме - Form8.
2. Добавление товара Входная информация – это перечень характеристик товара. Обычно
предоставляется в бумажной форме Выходная информация – это запись о товаре в базе данных. По своей структуре информация выглядит так:
- Код товара
- Наименование товара
- Цена товара
- Количество
- Страна – производитель
• Гарантийный срок Добавление товара происходит на специально выделенной форме Form4. Для добавления надо заполнить находящиеся на форме поля
типа TEdit и выбрать из списка типа TComboBox значение характеристики товара – страна-производитель. В случае спешного завершения операции будет сообщение.
3. Редактирование характеристик товара Входная информация – исходная запись Выходная информация – исправленная запись Редактирование записей происходит на специально выделенных полях
типа TEdit находящихся на форме Form5. Для редактирования доступны лишь следующие поля:
- Наименование товара
- Цена товара
- Гарантийный срок
Оставшиеся поля не могут быть редактированы, чтобы не нарушать целостности данных.
4. даление товара Входные данные – исходная запись Выходные данные – сообщение о завершении операции даления
Удаление записей происходит на специально выделенной форме Form3. На данной форме находятся таблица с данными типа DBGrid и две кнопки “Удалить” и “Выход” типа TBinBtn. При выбранной записи и нажатой кнопки “Удалить” из нашей БД сначала даляются все подчиненные ей записи, только после этого даляется сама запись о товаре и выводится сообщение о спешном завершении операции даления.
5. Поиск товара Входные данные – исходная строка для поиска Выходные данные – записи БД довлетворяющие исходному значению
либо пустой набор данных
Функция поиска реализована на главной форме проекта Form1 и предоставляет поле для ввода данных типа TEdit и кнопку для запуска операции типа TSpeedButton. В поле вводится исходная строка-шаблон и нажимается кнопка. Если операция завершена спешно то на главной форме мы получаем список соответствующих строке-шаблону товаров иначе мы получаем пустой набор данных.
6. Формирование списка покупки Входные данные – выбранная запись в DBGrid1 Выходные данные – полученная запись в StringGrid1 Формирования списка покупки происходит, на главной форме проекта
и предоставляет две таблицы типа TDBGrid и TStringGrid. При двойном нажатии левой клавиши мыши по записи находящейся в таблице DBGrid1 происходит перемещение одной единицы товара в список покупки – таблица StringGrid1. Одновременно в таблицы tbrko и tbrko_ware БД происходит занесение соответствующих записей о выбранном товаре.
7. Отмена покупки. Входные данные – массив строк содержащийся в StringGrid1 Выходные данные – восстановление исходных данных (до выполнения
последней сессии Формирование списка покупки) в DBGrid1
Данная функция даляет все записи сделанные в БД последней сессией функции формирования списка покупки, очищает StringGrid1.
8. Генерация отчета (товарного чека) Входные данные – массив строк содержащийся в StringGrid1 Выходные данные – Excel – лист, бумажный товарный чек Генерирует товарный чек на основе содержимого SringGrid1
2.3 Разработка решений по специальному математическому обеспечению ИС.
-
- Общий алгоритм работы программы. Общий алгоритм моей программы можно представить так:
- Загружается клиентская часть программы.
- Пользователь вводит свои данные в форму для подключения к серверу БД
- Подключение к серверу БД
- Пользователь начинает работу с программой
- Общий алгоритм работы программы. Общий алгоритм моей программы можно представить так:
- Завершение работы с системой, отключение от сервера БД Действия в п.4. полностью зависят от пользователя. Общего алгоритма работы системы нет, т.к. невозможно знать какие задачи и в какой последовательности будет выполнять пользователь. Графическое изображение алгоритма представлено ниже.
Схема 2. Общий алгоритм работы программы
2.3.2 Разработка алгоритма для решения отдельных функциональных задач.
-
- Поиск товара Алгоритм решения данной задачи достаточно прост, после ввода исходной строки -шаблона пользователь нажимает на кнопку “Поиск” вызывается функция которая:
- Формируется запрос
- Оправляет запрос на сервер БД
- Обрабатывает полученный ответ
- Поиск товара Алгоритм решения данной задачи достаточно прост, после ввода исходной строки -шаблона пользователь нажимает на кнопку “Поиск” вызывается функция которая:
- Выводит результат поиска Проверка корректности работы осуществляется путём ввода различных строк
– шаблонов.
-
- Генерация товарного чека При готовом наборе покупки пользователь нажимает на кнопку “Оплатить” вызывается функция, которая:
- Отображает форму отчета Form9
- Создает на форме Form9 объект отчета типа Excel.Sheet
- Оформляет отчет и импортирует строковый массив о покупке из Form1.StringGrid1 в отчет
- Генерация товарного чека При готовом наборе покупки пользователь нажимает на кнопку “Оплатить” вызывается функция, которая:
- Отображает отчет Проверка корректности работы осуществляется путём генерации отчетов с различными наборами данных.
2.3.3. Разработка решений по информационному обеспечению ИС
Принципы организации информационного обеспечения ИС
Основные принципы организации информационного обеспечения, необходимого для корректной работы программы “Розничная торговля ”:
• отделение данных от интерфейса пользователя;
2.3.4. Разработка решений по техническому обеспечению ИС. Минимальные требования к аппаратному обеспечению приложения “Розничная торговля ”
- Процессор: Pentium – 2 450 Mhz
- ОЗУ: 64 Mb
- Video : int
- LAN
2.3.5. Разработка решений по программному обеспечению Структура программного обеспечения
Схема 3. Структура программного обеспечения
Краткая характеристика общего программного обеспечения Операционная система Приложение “Розничная торговля ” может функционировать в компьютерах с становленной ОС Window 2 и новее, также для корректной работы приложения на машине должен быть становлен MS EXCEL XP.
ЗАКЛЮЧЕНИЕ
В ходе данной работы была разработана система «Розничная торголя», которая полностью выполняет необходимые функции. Система полностью разработана в среде программирования Delphi 7 Studio с использованием компонента TmySQLDataBase.
Система «Розничная торговля» является открытой и легко может быть дополнена произвольными функциями, реализующими дополнительные возможности, например:
- система авторизации;
- дополнительные отчёты;
- интеграция со складом, бухгалтерией и тп.;
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
- Архангельский А.Я. “Delphi 2006 Справочное пособие” ”Бином” 2006
- Богомолов С. “MySQL: становка, настройка, описание”
ссылка более недоступнаdocs
- Дархвелидзе П., Марков Е. “Delphi 2005 для WIN 32” “БВХ-ПЕТЕРБУРГ” 2005
- Дархвелидзе П., Марков Е. “Программирование в Delphi 7” “БВХ-ПЕТЕРБУРГ” 2004
- Елманова Н., Трепалин С., Тенцер А. “Delphi и технология COM” “Питер” 2003
- Ильин М. “MySQL (введение)” ссылка более недоступнаdocs
- Марков Е., Никифоров В. “Delphi 2005 для.NET” “БВХ-ПЕТЕРБУРГ” 2005
- Мишенин А.И. Теория экономических информационных систем: учебник. – 4-е изд. доп. и перераб. – М.: Финансы и статистика, 2001.
- Паутов А. “Описание СУБД MySQL” ссылка более недоступнаdocs 10.Ревич Ю. “Нестандартные приемы программирования на Delphi” “БВХ-ПЕТЕРБУРГ” 2005
11.Романов В.П., Емельянова Н.З., Партыка Т.Л. Проектирование экономических информационных систем: методология и современные технологии. учебное пособие. – М.: Издательство «Экзамен», 2005.
12.Руссинович М., Соломон Д. Внутреннее стройство MS Windows: Windows 2003 Server, Windows XP, Windows 2. Мастер-класс. / Пер. с англ. – 4-е издание – Пб.: Питер, 2005
13.Семенов М.И. Автоматизированные информационные технологии в экономике. – М.: Финансы и статистика, 2002.
14.Справочное руководство по MySQL ссылка более недоступнаdocs 15.Стиввене Род “Delphi готовые алгоритмы” “Питер” 2004 16.В.Фаронов “Программирование БД в Delphi 7” “Питер” 2003 17.Флёнов М.Е. “Delphi 2005 Секреты программирования” “Питер” 2006
ПРИЛОЖЕНИЕ 1 РУКОВОДСТВО ОПЕРАТОРА
При запуске программы мы попадаем на главную форму системы см. рис. 1
Рис. 1 Главная форма системы “Розничная торговля”
Для того чтобы начать работу с системой необходимо пройти становить подключение к серверу БД. Для этого следует нажать на кнопку
. После нажатия на данную кнопку перед вами появится окно “Настройки подключения” см. рис.2
Рис. 2 Окно “Настройки соединения”
После подключения к серверу БД окно автоматически закроется, и вы можете начинать работу с системой.
Товар может быть добавлен в список покупок двойным щелчком по либо клавише мыши, либо через контекстное меню “Добавить”. Выбрав в контекстном меню “Добавить” перед вами появится окно см. рис 3.
Рис 3. Ввод количества выбранного товара После ввода значения и нажатия клавиши “Ok” выбранный вами товар окажется в списке покупок см. Рис. 4
Рис. 4 Список покупок Для того чтобы очистить весь список покупок, воспользуйтесь клавишей “ОТМЕНА”, если же вы хотите далить только один пункт из списка покупок, то воспользуйтесь контекстным меню.
Если надо оформить покупку, то нажмите на кнопку “ОПЛАТИТЬ”, перед Вами появится см рис 5.
Рис 5. Товарный чек. Если на этой форме нажать “ПЕЧАТЬ”, то бланк казанный на форме будет распечатан на принтере. Если же В нажимаете закрыть, то чек напечатан не будет, но данные о покупке все равно будут сохранены.
Для добавления товара в БД воспользуйтесь кнопкой
или в горизонтальном меню Правка => Добавить При нажатии на данную клавишу появится см рис.6
Рис. 6 Окно добавления товаров
Для редактирования характеристик товара в БД воспользуйтесь кнопкой или в горизонтальном меню Правка => Редактировать При нажатии на данную клавишу появится см рис. 7
Рис 7. Окно редактирования информации о товаре Для даления товара из БД воспользуйтесь кнопкой
или в горизонтальном меню Правка => далить При нажатии на данную клавишу появится см рис. 8
Рис. 8 Окно даления товара
В системе розничная торговля также присутствует функция поиска в БД см. рис. 9
Рис. 9 Поиск При вводе строки в поле поиска нажатии клавиши
запустится процедура поиска по введенной вами строке. Если результат поиска спешен, то вы получите результаты поиска на месте списка товаров. Если нет, то пустое поле.
При нажатии клавиши
вы вернетесь к исходному списку товаров.
Листинг 1 Unit1.pas | procedure SpeedButton5Click(Sender: TObject); | |
unit Unit1; | procedure SpeedButton4Click(Sender: TObject); | |
procedure Action1Execute(Sender: TObject); | ||
interface | procedure Action2Execute(Sender: TObject); | |
uses | procedure Edit1KeyPress(Sender: TObject; var Key: | |
Windows, Messages, SysUtils, Variants, Classes, | Char); | |
Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, Buttons, | procedure Action3Execute(Sender: TObject); | |
Grids, DBGrids, ExtCtrls, DB, DBClient, ComCtrls, ActnList; | procedure N13Click(Sender: TObject); | |
procedure N14Click(Sender: TObject); | ||
type | procedure N10Click(Sender: TObject); | |
TForm1 = class(TForm) | ||
Panel1: TPanel; | private | |
DBGrid1: TDBGrid; | { Private declarations } | |
BitBtn1: TBitBtn; | public | |
BitBtn2: TBitBtn; | { Public declarations } | |
StringGrid1: TStringGrid; | end; | |
Label1: TLabel; | ||
Label2: TLabel; | var | |
Label3: TLabel; | Form1: TForm1; | |
SpeedButton2: TSpeedButton; | sql : String; | |
SpeedButton3: TSpeedButton; | Rec : Integer; | |
SpeedButton4: TSpeedButton; | d : Integer; | |
SpeedButton6: TSpeedButton; | e : Boolean; | |
MainMenu1: TMainMenu; | r : Word; | |
N1: TMenuItem; | procedure Init; | |
N2: TMenuItem; | implementation | |
N3: TMenuItem; | uses | |
N4: TMenuItem; | Unit2, Unit3, Unit4, Unit5, Unit6, Unit7, Unit8, | |
N5: TMenuItem; | Unit9, Other; | |
N6: TMenuItem; | {$R *.dfm} | |
N7: TMenuItem; | procedure Init; | |
N8: TMenuItem; | begin | |
N9: TMenuItem; | Form1.Label2.Caption:= '0'; | |
N11: TMenuItem; | Form1.BitBtn1.Enabled:= False; | |
N13: TMenuItem; | Form1.BitBtn2.Enabled:= False; | |
SpeedButton1: TSpeedButton; | with Form1.StringGrid1 do | |
ActionList1: TActionList; | begin | |
Panel2: TPanel; | Cells[0, 0]:= 'Код товара'; | |
Action4: TAction; | Cells[1, 0]:= 'Наименование товара'; | |
Edit1: TEdit; | Cells[2, 0]:= 'Цена за ед.'; | |
SpeedButton5: TSpeedButton; | Cells[3, 0]:= 'Количество'; | |
Action1: TAction; | Cells[4, 0]:= 'Стоимость'; | |
Action2: TAction; | Cells[5, 0]:= 'Гарантия'; | |
Action3: TAction; | end; | |
PopupMenu1: TPopupMenu; | end; | |
N14: TMenuItem; | ||
PopupMenu2: TPopupMenu; | procedure TForm1.FormCreate(Sender: TObject); | |
N10: TMenuItem; | begin | |
procedure FormCreate(Sender: TObject); | init; | |
procedure DBGrid1DblClick(Sender: TObject); | end; | |
procedure BitBtn2Click(Sender: TObject); | procedure TForm1.DBGrid1DblClick(Sender: TObject); | |
procedure BitBtn1Click(Sender: TObject); | var | |
procedure Action4Execute(Sender: TObject); | s : Integer; |
begin s:= 0; //ShowMessage(IntToStr(Rec)); Form1.BitBtn1.Enabled:= True; Form1.BitBtn2.Enabled:= True; if StringGrid1.RowCount = 1 then begin
sql:= 'INSERT INTO tbrko(date) VALUES (' + #39 +
DBDate + #39 + ');'; Query(MyData.Query2, sql, True); Rec:= count(MyData.Query2, 'tbrko');
end; if StringGrid1.RowCount > 1 then s:= FindART(StringGrid1, MyData.Query1.Fields[0].AsString); sql:= 'INSERT INTO tbrko_ware(ware, rko) VALUES (' + #39 + MyData.Query1.Fields[0].AsString + #39 + ',' +
IntToStr(Rec) + ');'; Query(MyData.Query2, sql, True); if (s > 0) then begin
with StringGrid1 do
begin Cells[3, s]:= FloatToStr(StrToInt(Cells[3, s]) + 1); Cells[4, s]:= FloatToStr(StrToInt(Cells[3, s]) *
StrToFloat(Cells[2, s]));
end; end else begin
with StringGrid1 do begin Cells[0, RowCount]:= MyData.Query1.Fields[0].AsString; Cells[1, RowCount]:= MyData.Query1.Fields[1].AsString; Cells[2, RowCount]:=
MyData.Query1.Fields[2].AsString; Cells[3, RowCount]:= '1'; Cells[4, RowCount]:= FloatToStr(StrToInt(Cells[3,
RowCount]) * StrToInt(Cells[2, RowCount])); Cells[5, RowCount]:= MyData.Query1.Fields[5].AsString; RowCount:= RowCount + 1;
end; end; Label2.Caption:=
FloatToStr(StrToFloat(Label2.Caption) + StrToFloat(MyData.Query1.Fields[2].AsString)); MyData.Query1.Refresh; end;
procedure TForm1.BitBtn2Click(Sender: TObject); begin sql:= 'DELETE FROM tbrko_ware WHERE rko = ' +
FloatToStr(Rec) + ';'; Query(MyData.Query2, sql, True); sql:= 'DELETE FROM tbrko WHERE code = ' +
FloatToStr(Rec) + ';'; Query(MyData.Query2, sql, True); StringGrid1.RowCount:= 1; MyData.Query1.Refresh; Label2.Caption:= '0'; BitBtn1.Enabled:= False; BitBtn2.Enabled:= False; Rec:= 0;
end; procedure TForm1.BitBtn1Click(Sender: TObject); begin
Form9.ShowModal; Rec:= 0; BitBtn1.Enabled:= False; BitBtn2.Enabled:= False; Label2.Caption:= '0'; StringGrid1.RowCount:= 1;
end;
procedure TForm1.Action4Execute(Sender: TObject); begin Form8.ShowModal; end;
procedure TForm1.SpeedButton5Click(Sender: TObject); begin sql:= 'SELECT art, name, price, country, garant FROM tbware, tbmanufacturer WHERE tbware.man = ' + 'tbmanufacturer.code AND tbware.name LIKE ' + #39
+ '%' + Edit1.Text + '%' + #39 + ';';
Query(MyData.Query1, sql, False); end;
procedure TForm1.SpeedButton4Click(Sender: TObject); begin sql:= 'SELECT art, name, price, country, garant FROM tbware, tbmanufacturer WHERE tbware.man = ' + 'tbmanufacturer.code;'; Query(MyData.Query1, sql, False); end;
procedure TForm1.Action1Execute(Sender: TObject); begin Form4.ShowModal; end;
procedure TForm1.Action2Execute(Sender: TObject);
begin Unit5.Form5.ShowModal; end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then SpeedButton4Click(Sender); end;
procedure TForm1.Action3Execute(Sender: TObject); begin Form3.ShowModal; end;
procedure TForm1.N13Click(Sender: TObject); begin AboutBox.ShowModal; end;
procedure TForm1.N14Click(Sender: TObject); var
i : Word; r, k : String;
begin if StringGrid1.Row > 0 then begin k:= StringGrid1.Cells[4, StringGrid1.Row]; r:= StringGrid1.Cells[0, StringGrid1.Row];;
with StringGrid1 do begin for i:=Row to RowCount do Rows[i].Assign(Rows[i+1]);
RowCount:= RowCount - 1; end; sql:= 'DELETE FROM tbrko_ware WHERE rko = ' +
IntToStr(Rec) + ' AND ware = ' + #39 + r + #39 + ';'; Query(MyData.Query2, sql, True); Label2.Caption:= IntToStr(StrToInt(Label2.Caption) -
StrToInt(k)); MyData.Query1.Refresh; end
else exit; end;
procedure TForm1.N10Click(Sender: TObject); var k,i : Word;
begin if MyData.Query1ART.AsString <> '' then begin
Form7.ShowModal;
if r > MyData.Query1.Fields[3].AsInteger then r:= MyData.Query1.Fields[3].AsInteger; for i:= 1 to r do
DBGrid1DblClick(Sender); end else exit;
end; end.
Листинг 2 Unit2.pas
unit Unit2;
interface
uses SysUtils, Classes, DB, mySQLDbTables;
type
TMyData = class(TDataModule) Connection1: TmySQLDatabase; Query1: TmySQLQuery; Query2: TmySQLQuery; Query3: TmySQLQuery; DataSource1: TDataSource; DataSource2: TDataSource; DataSource3: TDataSource; Query1ART: TStringField; Query1NAME: TStringField; Query1PRICE: TFloatField; Query1COUNTRY: TStringField; Query1GARANT: TLargeintField; Query1COUNT: TWordField; DataSource4: TDataSource; Query4: TmySQLQuery; procedure Query1CalcFields(DataSet: TDataSet); procedure Query1FilterRecord(DataSet: TDataSet; var
Accept: Boolean); private { Private declarations } public { Public declarations } end;
ar MyData: TMyData; sql : String;
function MyConnection : Boolean; function Query(var name : TmySQLQuery; sql : String;
Ex : Boolean) : Boolean; procedure a(var m, n : Word); function count(name : TMySQLQuery; table : String) :
Word; implementation {$R *.dfm} // Подключение к СУБД function MyConnection : Boolean; begin
try Unit2.MyData.Connection1.Open; MyConnection:= True;
except MyConnection:= False;
end; end; //Выполняем запрос function Query(var name : TmySQLQuery; sql : String;
Ex : Boolean) : Boolean; var
sql:= 'SELECT * FROM tbpko_ware WHERE ware =' + #39 +
myData.Query1.Fields[0].AsString + #39 +';'; Query(myData.Query2, sql, False); m:= myData.Query2.RecordCount; sql:= 'SELECT * FROM tbrko_ware WHERE ware = '
+ #39 +
myData.Query1.Fields[0].AsString + #39 +';'; Query(myData.Query2, sql, False); n:= myData.Query2.RecordCount;
end; procedure TMyData.Query1CalcFields(DataSet: TDataSet); var m, n : Word;
begin a(m, n); Query1COUNT.Value:= (m - n);
end; procedure TMyData.Query1FilterRecord(DataSet: TDataSet; var Accept: Boolean); var m, n : Word; begin
t : TStrings; a(m, n);
begin if (m - n) > 0 then Accept:= True else Accept:= False; t:= TStringList.Create; end; t.Append(sql); //==Кол-во записей в таблице=== try function count(name : TMySQLQuery; table : String) :
case Ex ofWord; False : var begin sql : String;
name.Active:= False; begin name.SQL := t; sql:= 'SELECT * FROM ' + table + ';'; name.Active:= True; Query(name, sql, False);
end; //ShowMessage(table + ' ' + True : IntToStr(name.RecordCount)); begin if name.RecordCount <> 0 then
name.Active:= False; begin name.SQL := t; name.Last; name.ExecSQL; count:= StrToInt(name.Fields[0].AsString);
end; name.First; end; end Query:= True; else count:= 0;
except end; Query:= False;
end; end. end; procedure a(var m, n : Word); Листинг 3 Unit3.pas var
sql : String; unit Unit3; begin
interface ShowMessage('Товар спешно дален!!!'); end; uses Windows, Messages, SysUtils, Variants, Classes, procedure TForm3.BitBtn2Click(Sender: TObject); Graphics, Controls, Forms,begin Dialogs, StdCtrls, Buttons, Grids, DBGrids; MyData.Query1.Refresh; Close; type end;
TForm3 = class(TForm) DBGrid1: TDBGrid; end. BitBtn1: TBitBtn; BitBtn2: TBitBtn; Листинг 4 Unit4.pas procedure FormActivate(Sender: TObject);unit Unit4; procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject);interface
private { Private declarations } uses public Windows, Messages, SysUtils, Variants, Classes, { Public declarations } Graphics, Controls, Forms, end; Dialogs, StdCtrls, ExtCtrls, DBCtrls;
ar Form3: TForm3; sql : String;
implementation uses Unit2; {$R *.dfm}
procedure TForm3.FormActivate(Sender: TObject); begin sql:= 'SELECT art, name, price, country, garant FROM tbware, tbmanufacturer WHERE ' +
'tbware.man = tbmanufacturer.code;'; Query(MyData.Query2, sql, False); DBGrid1.DataSource:= MyData.DataSource2;
end;
procedure TForm3.BitBtn1Click(Sender: TObject); var
type
TForm4 = class(TForm) Panel1: TPanel; Edit1: TEdit; Edit2: TEdit; Edit4: TEdit; Edit5: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Button2: TButton; Button3: TButton; Label6: TLabel; Edit6: TEdit; ComboBox1: TComboBox; procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject);
k : String;
begin k:= MyData.Query2.Fields[0].AsString; sql:= 'DELETE FROM tbpko_ware WHERE ware = ' +
#39 + k + #39 + ';'; Query(MyData.Query3, sql, True); sql:= 'DELETE FROM tbrko_ware WHERE ware = ' +
#39 + k + #39 + ';'; Query(MyData.Query3, sql, True); sql:= 'DELETE FROM tbware WHERE art = ' + #39 + k
procedure Button1Click(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure Edit3KeyPress(Sender: TObject; var Key: Char); procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations }
+ #39 + ';'; end; Query(MyData.Query3, sql, True);type MyData.Query2.Refresh; s = set of Char;
ar if (MyData.Query3.RecordCount > 0) and Form4: TForm4; (MyData.Query2.RecordCount = 0) then art, nm, man,price, n, g, sql : String;c:= MyData.Query3.Fields[0].AsString;
- k : Boolean; if (MyData.Query2.RecordCount = 0) then
- w : s; procedure Clear; implementation uses Unit2, Other, Unit1; {$R *.dfm} procedure Clear; begin
with Form4 do
begin Edit1.Clear; Edit2.Clear; //Edit3.Clear; Edit4.Clear; Edit5.Clear; Edit6.Clear;
end; end;
procedure TForm4.Button2Click(Sender: TObject); begin Close; end;
procedure TForm4.Button3Click(Sender: TObject); var
begin sql:= 'INSERT INTO tbware VALUES (' + #39 + art + #39 + ',' + #39 + nm + #39 + ',' + c + ',' + price + ',' + g + ');';
Query(MyData.Query3, sql, True); end; if k then begin
k := False; sql:= 'INSERT INTO tbpko(date) VALUES (' + #39 +
DBDate + #39 + ');'; Query(MyData.Query3, sql, True); m:= count(MyData.Query3, 'tbpko');
end; for i:= 1 to StrToInt(n) do begin
sql:= 'INSERT INTO tbpko_ware(ware, pko) VALUES ('+ #39 + art + #39 + ',' + IntToStr(m) + ');';
Query(MyData.Query3, sql, True); end; ShowMessage('Товар спешно добавлен!!!'); Clear; MyData.Query1.Refresh;
end; procedure TForm4.Button1Click(Sender: TObject);
c : String; i, l, m : Word;
begin art := Edit1.Text; nm := Edit2.Text; man := ComboBox1.Text; price := Edit4.Text; n := Edit5.Text; g := Edit6.Text; ShowMessage(man); if (art = '') or (nm = '') or (man = '') or (price = '') or (n =
'') or (g = '') then begin MessageBox(0, 'Заполнены не все поля!!!', 'АХТУНГ!!!', MB_OK);
exit; end; sql:= 'SELECT * FROM tbware WHERE
art='+#39+art+#39+';'; Query(MyData.Query2, sql, False); sql:= 'SELECT code FROM tbmanufacturer WHERE
country = ' + #39 + man + #39 + ';'; Query(MyData.Query3, sql, False);
begin Button3Click(Sender); Clear; Close;
end;
procedure TForm4.Edit1KeyPress(Sender: TObject; var Key: Char);
begin w:= ['0'..'9', #8]; if not (key in w) then key:= #0;
end;
procedure TForm4.Edit3KeyPress(Sender: TObject; var Key: Char);
begin w:= ['А'..'Я', 'а'..'я', #8]; if not (key in w) then key:= #0;
end;
procedure TForm4.FormActivate(Sender: TObject); var
i : Word; begin
k:= True; sql:= 'SELECT * FROM tbmanufacturer;'; Query(MyData.Query2, sql, False); while not MyData.Query2.Eof do begin
ComboBox1.Items.Append(MyData.Query2.Fields[1].AsString); MyData.Query2.Next; end; end;
end.
Листинг 5 Unit5.pas
unit Unit5;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids;
type
TForm5 = class(TForm) Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Button2: TButton; DBGrid1: TDBGrid; procedure DBGrid1DblClick(Sender: TObject); procedure Edit2KeyPress(Sender: TObject; var Key:
Char); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormActivate(Sender: TObject);
private { Private declarations } public { Public declarations } end;
ar Form5: TForm5; sql : String;
implementation uses Unit2; {$R *.dfm}
procedure TForm5.DBGrid1DblClick(Sender: TObject); begin
Button1.Enabled:= True;
Label1.Caption:= MyData.Query2.Fields[0].AsString;
Edit1.Text:= MyData.Query2.Fields[1].AsString;
Edit2.Text:= MyData.Query2.Fields[2].AsString;
Edit3.Text:= MyData.Query2.Fields[3].AsString;
Edit1.Enabled:= True;
Edit2.Enabled:= True;
Edit3.Enabled:= True;
end;
procedure TForm5.Edit2KeyPress(Sender: TObject; var Key: Char); type a = set of Char; var
f : a;
begin
f:= ['0'..'9', #8];
if not (key in f) then key:= #0;
end;
procedure TForm5.Button1Click(Sender: TObject); var sql : String; begin if (Edit1.Text = '') or (Edit2.Text = '') or (Edit3.Text = '') then begin ShowMessage('Одно или несколько полей не содержат значении!!!');
exit;
end;
sql:= 'UPDATE tbware SET name = ' + #39 + Edit1.Text + #39 +
', price = ' + Edit2.Text + ', garant = ' + Edit3.Text + ' WHERE art = ' + #39
+ Label1.Caption + #39 + ';'; Query(MyData.Query3, sql, True); MyData.Query2.Refresh; //MyData.Query1.Refresh; Button1.Enabled:= False; Label1.Caption:= ''; Edit1.Text:= '<Описание товара>'; Edit2.Text:= '<Цена>'; Edit3.Text:= '<Гарантия>'; Edit1.Enabled:= False; Edit2.Enabled:= False; Edit3.Enabled:= False;
end;
procedure TForm5.Button2Click(Sender: TObject); begin
MyData.Query1.Refresh; interface Close; end; uses
Windows, Messages, SysUtils, Variants, Classes, procedure TForm5.FormActivate(Sender: TObject); Graphics, Controls, Forms,begin Dialogs, StdCtrls, Buttons;
Button1.Enabled:= False; Edit1.Enabled:= False; type Edit2.Enabled:= False; TForm7 = class(TForm) Edit3.Enabled:= False; Edit1: TEdit; sql:= 'SELECT art, name, price, garant FROM tbware'; BitBtn1: TBitBtn; Query(MyData.Query2, sql, False); procedure Edit1KeyPress(Sender: TObject; var Key: DBGrid1.DataSource:= MyData.DataSource2; Char);
end; procedure BitBtn1Click(Sender: TObject); procedure FormActivate(Sender: TObject);end. private { Private declarations } public
{ Public declarations } Листинг 6 Unit6.pas end; unit Unit6;
ar interface Form7: TForm7;
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls, jpeg;
type
TAboutBox = class(TForm) Panel1: TPanel; ProgramIcon: TImage; ProductName: TLabel; Version: TLabel; Copyright: TLabel; Comments: TLabel; OKButton: TButton;
private { Private declarations } public { Public declarations } end;
ar
AboutBox: TAboutBox; implementation {$R *.dfm} end.
Листинг 7 Unit7.pas
implementation uses Unit1; {$R *.dfm}
procedure TForm7.Edit1KeyPress(Sender: TObject; var Key: Char); type d = set of Char; var c : d;
begin c:= ['0'..'9', #8]; if not(key in c) then key:= #0;
end;
procedure TForm7.BitBtn1Click(Sender: TObject);
begin if Edit1.Text = '' then begin
ShowMessage(' !!!');
exit; end; Unit1.r:= StrToInt(Edit1.Text); Close;
end;
unit Unit7; procedure TForm7.FormActivate(Sender: TObject); begin type
Edit1.Clear; | procedure TForm8.BitBtn1Click(Sender: TObject); |
End; | begin |
end. | if (Edit1.Text = '') or (Edit2.Text = '') or (Edit3.Text = '') |
unit Unit8; | or (Edit4.Text = '') or (Edit5.Text = '') then |
begin | |
interface | ShowMessage('Одно из полей не заполнено!!!'); |
exit; | |
uses | end; |
Windows, Messages, SysUtils, Variants, Classes, | Form8.DragCursor:= crHourGlass; |
Graphics, Controls, Forms, | MyData.Connection1.Connected := False; |
Dialogs, StdCtrls, Buttons, ExtCtrls; | MyData.Connection1.UserName := Edit1.Text; |
MyData.Connection1.UserPassword:= Edit2.Text; | |
type | MyData.Connection1.Host := Edit3.Text; |
TForm8 = class(TForm) | MyData.Connection1.DatabaseName:= Edit4.Text; |
Panel1: TPanel; | MyData.Connection1.Port := StrToInt(Edit5.Text); |
Panel2: TPanel; | if not MyConnection then |
Edit1: TEdit; | begin |
Edit2: TEdit; | MessageBox(0, 'ИНВАЛИД КОННЕКШН!!!', |
Edit3: TEdit; | 'АХТУНГ', MB_OK); |
Edit4: TEdit; | exit; |
Edit5: TEdit; | end; |
BitBtn1: TBitBtn; | Form1.DBGrid1.Enabled:= True; |
BitBtn2: TBitBtn; | Form1.SpeedButton1.Enabled:= True; |
Label1: TLabel; | Form1.SpeedButton2.Enabled:= True; |
Label2: TLabel; | Form1.SpeedButton3.Enabled:= True; |
Label3: TLabel; | Form1.SpeedButton4.Enabled:= True; |
Label4: TLabel; | Form1.SpeedButton5.Enabled:= True; |
Label5: TLabel; | Form1.Edit1.Enabled:= True; |
procedure FormActivate(Sender: TObject); | Form1.MainMenu1.Items[0][1].Enabled:= True; |
procedure BitBtn1Click(Sender: TObject); | Form1.MainMenu1.Items[1][0].Enabled:= True; |
procedure BitBtn2Click(Sender: TObject); | Form1.MainMenu1.Items[1][1].Enabled:= True; |
private | Form1.MainMenu1.Items[1][2].Enabled:= True; |
{ Private declarations } | MyData.Query1.Active:= True; |
public | Form8.DragCursor:= crDefault; |
{ Public declarations } | Close; |
end; | end; |
var | procedure TForm8.BitBtn2Click(Sender: TObject); |
Form8: TForm8; | begin |
implementation | Close; |
uses | end; |
Unit2, Unit1; | |
{$R *.dfm} | end. |
Листинг 9 Unit9.pas | |
procedure TForm8.FormActivate(Sender: TObject); | unit Unit9; |
begin | |
Edit1.Text:= MyData.Connection1.UserName; | interface |
Edit2.Text:= MyData.Connection1.UserPassword; | |
Edit3.Text:= MyData.Connection1.Host; | uses |
Edit4.Text:= MyData.Connection1.DatabaseName; | Windows, Messages, SysUtils, Variants, Classes, |
Edit5.Text:= IntToStr(MyData.Connection1.Port); | Graphics, Controls, Forms, |
end; | Dialogs, OleCtnrs, ComObj, StdCtrls, Buttons, ExtCtrls; |
Листинг 8 Unit8.pas |
TForm9 = class(TForm) Panel1: TPanel; OleContainer1: TOleContainer; BitBtn1: TBitBtn; Panel2: TPanel; BitBtn2: TBitBtn; procedure FormActivate(Sender: TObject); procedure FormClose(Sender: TObject; var Action:
TCloseAction); procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject);
private { Private declarations } public { Public declarations } end; const xlCenter = -4108;
ar Form9: TForm9; WB : Variant;
i : Word; implementation uses Unit1, Other; {$R *.dfm}
procedure TForm9.FormActivate(Sender: TObject);
begin // создаем OLE объект OleContainer1.CreateObject('Excel.Sheet', False); // присваиваем его псевдониму WB:= OleContainer1.OleObject; // Дизаин чека //=== начало === WB.Worksheets[1].Range['A1:D1'].MergeCells:= True; WB.Worksheets[1].Range['A1:A5'].Font.Bold:= True; WB.Worksheets[1].Cells[1, 1].Font.Size:= 14; WB.Worksheets[1].Cells[1, 1]:= 'ТОВАРНЫЙ ЧЕК №
' + IntToStr(Rec); WB.Worksheets[1].Range['A2:C2'].MergeCells:= True; WB.WorkSheets[1].Cells[2, 1].Font.Italic:= True; WB.WorkSheets[1].Cells[2, 1].Font.Size:= 8; WB.Worksheets[1].Cells[2, 1]:= DateToStr(Date) + ' ' +
TimeToStr(Time); WB.Worksheets[1].Range['A4:C4'].MergeCells:= True; WB.Worksheets[1].Cells[4, 1]:= 'Продавец: "X"'; WB.Worksheets[1].Range['D4: I4'].MergeCells:= True; WB.Worksheets[1].Cells[4, 4].Font.Bold:= True; WB.Worksheets[1].Cells[4, 4].Font.Italic:= True; WB.Worksheets[1].Cells[4, 4].Font.Size:= 8; WB.Worksheets[1].Cells[4, 4]:= 'ИНН
AA Юр. адрес: ';
WB.Worksheets[1].Range['A5:C5'].MergeCells:=True; WB.Worksheets[1].Cells[5, 1]:= 'Покупатель: физ. лицо'; WB.Worksheets[1].Rows['6:6'].RowHeight:= 30;
WB.Worksheets[1].Range['A6:I6'].Interior.ColorIndex:= 15; WB.Worksheets[1].Range['A6:I6'].VerticalAlignment:= xlCenter; WB.Worksheets[1].Columns['F:F'].ColumnWidth:=
10.29; WB.Worksheets[1].Columns['G:G'].ColumnWidth:= 10; WB.Worksheets[1].Columns['H:H'].ColumnWidth:= 9; //Вывод из грида -начало for i:= 0 to Form1.StringGrid1.RowCount do begin
WB.Worksheets[1].Range[WB.Worksheets[1].Cells[i
+ 6, 2],WB.Worksheets[1].Cells[i + 6, 5]].MergeCells:=True; WB.Worksheets[1].Cells[i + 6, 1]:= Form1.StringGrid1.Cells[0, i]; WB.Worksheets[1].Cells[i + 6, 2]:= Form1.StringGrid1.Cells[1, i]; WB.Worksheets[1].Cells[i + 6, 6]:= Form1.StringGrid1.Cells[2, i]; WB.Worksheets[1].Cells[i + 6, 7]:= Form1.StringGrid1.Cells[3, i]; WB.Worksheets[1].Cells[i + 6, 8]:=
Form1.StringGrid1.Cells[4, i]; end; //Вывод из грида -конец WB.Worksheets[1].Cells[i + 6, 7].Font.Bold:= True; WB.Worksheets[1].Cells[i + 6, 8].Font.Bold:= True; WB.Worksheets[1].Cells[i + 6, 7]:= 'Итого: '; WB.Worksheets[1].Cells[i + 6, 8]:=
Form1.Label2.Caption; WB.Worksheets[1].Range[WB.Worksheets[1].Cells[i + 7, 1],WB.Worksheets[1].Cells[i + 7, 8]].MergeCells:=True;
WB.Worksheets[1].Cells[i + 7, 1].Font.Bold:= True; WB.Worksheets[1].Cells[i + 7, 1].Font.Italic:= True; WB.Worksheets[1].Cells[i + 7, 1]:= 'Всего к оплате: ' +
SumNumToFull(StrToFloat(Form1.Label2.Caption)); WB.Worksheets[1].Range[WB.Worksheets[1].Cells[i + 9, 1],WB.Worksheets[1].Cells[i + 9, 5]].MergeCells:=True; WB.Worksheets[1].Cells[i + 9, 1]:= 'Отпустил:'; WB.Worksheets[1].Range[WB.Worksheets[1].Cells[i + 10, 1],WB.Worksheets[1].Cells[i + 10, 5]].MergeCells:=True; WB.Worksheets[1].Cells[i + 10, 1]:= 'Получил:'; //---Конец дизайна-------- end;
procedure TForm9.FormClose(Sender: TObject; var Action: TCloseAction);
begin | begin | |
WB.Application.Quit; | FindART:= i; | |
end; | exit; | |
end; | ||
procedure TForm9.BitBtn1Click(Sender: TObject); | end; | |
begin | FindART:= -1; | |
WB.ActiveSheet.PrintOut; | end; | |
WB.Application.Quit; | function SumNumToFull(Number:real):string; | |
Close; | var | |
end; | PartNum, TruncNum, NumTMP, D: integer; | |
NumStr : string; | ||
procedure TForm9.BitBtn2Click(Sender: TObject); | i, R : byte; | |
begin | Flag11 : boolean; | |
WB.Application.Quit; | begin | |
Close; | D:=1; | |
end; | R:=4; | |
end. | //выделяем рубли | |
TruncNum:=Trunc(Number); | ||
Листинг 11 Other.pas | if TruncNum<>0 then | |
repeat | ||
unit Other; | PartNum:=TruncNum div D; | |
Dec(R); | ||
interface | D:=D div 1; | |
uses | until | |
SysUtils, Grids, Unit2; | PartNum<>0 | |
function DBDate : String; | else | |
function FindART(name : TStringGrid; k : String) : | R:=0; | |
Integer; | // перевод рублей | |
function SumNumToFull(Number:real):string; | for i:=R downto 1 do | |
begin | ||
Flag11:=False; | ||
implementation | // выделение цифры сотен | |
//Время в формате БД | NumTMP:=PartNum div 100; | |
function DBDate : String; | case NumTMP of | |
var | 1: NumStr:=NumStr+'сто '; | |
DelphiDate, SqlDate : String; | 2: NumStr:=NumStr+'двести '; | |
begin | 3: NumStr:=NumStr+'триста '; | |
DelphiDate:=DateToStr(Date()); | 4: NumStr:=NumStr+'четыреста '; | |
SqlDate:=Copy(DelphiDate,7,4)+' | 5: NumStr:=NumStr+'пятьсот '; | |
'+Copy(DelphiDate,4,2)+'-'+Copy(DelphiDate,1,2); | 6: NumStr:=NumStr+'шестьсот '; | |
DBDate:=SqlDate; | 7: NumStr:=NumStr+'семьсот '; | |
end; | 8: NumStr:=NumStr+'восемьсот '; | |
//===Поиск в гриде по коду товара==== | 9: NumStr:=NumStr+'девятьсот '; | |
function FindART(name : TStringGrid; k : String) : | end; | |
Integer; | // выделение цифры десятков | |
var | NumTMP:=(PartNum mod 100) div 10; | |
i : Word; | case NumTMP of | |
begin | 1: | |
begin | ||
//ShowMessage(IntToStr(Form1.StringGrid1.RowCount)); | NumTMP:=PartNum mod 100; | |
for i:= 1 to name.RowCount - 1 do | case NumTMP of | |
begin | 10: NumStr:=NumStr+'десять '; | |
if (name.Cells[0, i] = k) then | 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*1)) div D; D:=D div 1;
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;
end.