unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, Grids, DB, DBTables;
type
TForm1 = class(TForm)
Table1: TTable;
Label1: TLabel;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Button1: TButton;
MaskEdit1: TMaskEdit;
Query1: TQuery;
StringGrid1: TStringGrid;
ComboBox1: TComboBox;
Button2: TButton;
Label8: TLabel;
MaskEdit2: TMaskEdit;
Button3: TButton;
DataSource1: TDataSource;
Button4: TButton;
procedure FormCreate(Sender: TObject);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure ComboBox1Exit(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure MaskEdit2Exit(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
function CreateTable(TabName, TabStruct, TabIDX: string): boolean;
public
{ Public declarations }
end;
var
Form1: TForm1;
FileNames: String;
implementation
uses Unit2, Unit3;
{$R *.dfm}
const
CreateTab = 'CREATE TABLE ';
IDXTab = 'PRIMARY KEY ';
MyTabStruct =
'NKART CHARACTER(4), ' +
'DOST DATE, ' +
'CHTO CHARACTER(18), ' +
'NCHTO CHARACTER(50), ' +
'OCN DECIMAL(12,2), ' +
'VES DECIMAL(10,3), ' +
'NKL CHARACTER(1), ' +
'NSKL CHARACTER(2), ' +
'EI CHARACTER(2), ' +
'CI CHARACTER(2), ' +
'OST DECIMAL(5), ' +
'KZK CHARACTER(6) ';
function TForm1.CreateTable(TabName, TabStruct, TabIDX: string): boolean; // Создаём новую таблицу
begin
result := true;
with Query1 do // Для query делаем
try
try
SQL.Clear; // Отчистили запрос
SQL.Add(CreateTab + TabName + '(' + TabStruct + TabIDX + ')'); // Добавили новый запрос
Prepare; // Оптимизация выполнения запроса
ExecSQL; // Выполняем запрос
except
// Обработка ошибок открытия таблицы
Exception.Create('Ошибка открытия таблицы'); // Генерация исключения
result := false;
end;
finally
Close; // Закрыть запрос
end;
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
{Перебросим выбранное в значение из ComboBox в grid}
StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row]:= ComboBox1.Items[ComboBox1.ItemIndex];
ComboBox1.Visible:= False; // Спрятали комбобокс
StringGrid1.SetFocus; // Фокус на сетку
end;
procedure TForm1.ComboBox1Exit(Sender: TObject);
begin
{Перебросим выбранное в значение из ComboBox в grid}
StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row]:= ComboBox1.Items[ComboBox1.ItemIndex];
ComboBox1.Visible:= False; // Спрятали комбобокс
StringGrid1.SetFocus; // Фокус на сетку
end;
procedure TForm1.FormCreate(Sender: TObject);
var
row: integer;
begin
MaskEdit1.Text:= (DateToStr(Now)); // Присвоили полю ввода текущую дату
ComboBox1.Visible:= False; // Спрятать combobox
MaskEdit2.Visible:= false; // Спрятать maskedit
{Высоту combobox'а не изменишь, так что вместо combobox'а
будем изменять высоту строки grid'а !}
StringGrid1.DefaultRowHeight:= ComboBox1.Height;
{Table1.TableName:= ExtractFilePath(ParamStr(0))+'KACZCH.DBF'; }// Добавление имя базы
FileNames:= #39 + ExtractFilePath(ParamStr(0)) + 'KACZCH.DBF' + #39; // Получили строку с именем файла исходной таблицы
Query1.Close; // Закрыли запрос
Query1.SQL.Clear; // Отчистили запрос
Query1.SQL.Add('Select * from ' + FileNames); // Добавили новый запрос
Query1.Open; // Открыли запрос
Query1.first; // Перешли на первую строку запроса
// Выставляем нужную ширину колонок сетки
StringGrid1.colWidths[0]:= 60;
StringGrid1.colWidths[1]:= StringGrid1.Width - 395;
StringGrid1.colWidths[2]:= 60;
StringGrid1.colWidths[3]:= 64;
StringGrid1.colWidths[4]:= 64;
StringGrid1.colWidths[5]:= 119;
//
row:= 0;
StringGrid1.rowcount:= Query1.recordCount; // Уравняли количество строк в сетке с количеством записей в запросе
while not Query1.eof do // Пока не достигнут конец запроса делаем
begin
StringGrid1.cells[1,row]:= Query1.FieldValues['NCHTO']; // Добавляем данные в сетку
StringGrid1.cells[2,row]:= {Query1.FieldValues['EI']}'шт';
StringGrid1.cells[3,row]:= Query1.FieldValues['OCN'];
inc(row); // Увеличили на 1
Query1.next; // Переход на следующую запись
end;
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
var
row: integer;
begin
if key = #13 then // Делаем поиск по нажатию enter
begin
// выполнить поиск
Query1.Close; // Закрыли запрос // |
Query1.SQL.Clear; // ' LIKE "%'+Edit2.Text+'%"' - ищет фрагмент текста
Query1.SQL.Add('Select * from ' + FileNames + ' where NCHTO LIKE "%'+Edit2.Text+'%"');
Query1.Open; // Окрыли запрос
if Query1.RecordCount <> 0 then // Если количество записей не равно 0 вставляем данные в сетку
begin
row:= 0;
StringGrid1.rowcount:= Query1.recordCount;
while not Query1.eof do
begin
StringGrid1.cells[0,row]:= '';
StringGrid1.cells[1,row]:= Query1.FieldValues['NCHTO'];
StringGrid1.cells[2,row]:= 'шт';
StringGrid1.cells[3,row]:= Query1.FieldValues['OCN'];
StringGrid1.cells[4,row]:= '';
StringGrid1.cells[5,row]:= '';
inc(row);
Query1.next;
end;
end
else // Иначе делаем запрос с текстом из заглавных букв
begin
Query1.Close; // |
Query1.SQL.Clear; // ' LIKE "%'+Edit2.Text+'%"' - ищет фрагмент текста
Query1.SQL.Add('Select * from ' + FileNames + ' where NCHTO LIKE "%'+AnsiUpperCase(Edit2.Text)+'%"');
Query1.Open;
if Query1.RecordCount <> 0 then // Если количество записей не равно 0 вставляем данные в сетку
begin
row:= 0;
StringGrid1.rowcount:= Query1.recordCount;
while not Query1.eof do
begin
StringGrid1.cells[0,row]:= '';
StringGrid1.cells[1,row]:= Query1.FieldValues['NCHTO'];
StringGrid1.cells[2,row]:= 'шт';
StringGrid1.cells[3,row]:= Query1.FieldValues['OCN'];
StringGrid1.cells[4,row]:= '';
StringGrid1.cells[5,row]:= '';
inc(row);
Query1.next;
end;
end
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
s: string;
begin
if not FileExists(ExtractFilePath(ParamStr(0))+'OSGP.DBF') then // Если таблицы не существует
CreateTable('"OSGP.DBF"', MyTabStruct, ''); // Создаём её
Table1.TableName:= ExtractFilePath(ParamStr(0))+'OSGP.DBF'; // Добавление имя базы
Table1.Active:= true; // Открыли таблицу
for i:= 0 to StringGrid1.RowCount - 1 do // Проходим все строки сетки
if (StringGrid1.Cells[4, i] <> '') or (StringGrid1.Cells[5, i] <> '') then // Если ввели число в ячейку
begin
s:= #39 + StringGrid1.Cells[1, i] + #39; // Получаем строку для запроса обрамлённую апострофами
Query1.Close; // Закрыли запрос
Query1.SQL.Clear; // Отчистили запрос
Query1.SQL.Add('Select * from ' + FileNames + ' where NCHTO = '+s+''); // Добавили запрос
Query1.Open; // Открыли запрос
if Table1.Locate('NCHTO', StringGrid1.Cells[1, i], [loPartialKey]) then // Нашли в таблице нужную запись
begin // Такие данные уже есть
if ((Table1.FieldValues['DOST'] = MaskEdit1.Text) and (Table1.FieldValues['NKL'] = StringGrid1.Cells[5, i]) and (Table1.FieldValues['OST'] = StringGrid1.Cells[4, i])) then
ShowMessage('Введенные данные для записи ' + StringGrid1.Cells[1, i] + ' имеются в базе OSGP.dbf')
else
begin // Меняем данные в записи
Table1.Edit; // Ставим запись на редлактирование
Table1.FieldValues['NKART']:= StringGrid1.Cells[0, i];
Table1.FieldValues['DOST']:= MaskEdit1.Text; // Записываем новые данные
Table1.FieldValues['CHTO']:= Query1.FieldValues['CHTO'];
Table1.FieldValues['NCHTO']:= Query1.FieldValues['NCHTO'];
Table1.FieldValues['OCN']:= Query1.FieldValues['OCN'];
Table1.FieldValues['VES']:= Query1.FieldValues['VES'];
Table1.FieldValues['EI']:= Query1.FieldValues['EI'];
Table1.FieldValues['NKL']:= StringGrid1.Cells[5, i];
Table1.FieldValues['NSKL']:= '72';
Table1.FieldValues['OST']:= StringGrid1.Cells[4, i];
Table1.FieldValues['CI']:= Query1.FieldValues['CI'];
Table1.FieldValues['KZK']:= Query1.FieldValues['KZK'];
Table1.Post; // Сохранили изменения
end;
end
else // Нужную запись не нашли
begin
Table1.Insert; // Вставили новую запись в таблицу
Table1.FieldValues['NKART']:= StringGrid1.Cells[0, i];
Table1.FieldValues['DOST']:= MaskEdit1.Text; // Записываем новые данные
Table1.FieldValues['CHTO']:= Query1.FieldValues['CHTO'];
Table1.FieldValues['NCHTO']:= Query1.FieldValues['NCHTO'];
Table1.FieldValues['OCN']:= Query1.FieldValues['OCN'];
Table1.FieldValues['VES']:= Query1.FieldValues['VES'];
Table1.FieldValues['EI']:= Query1.FieldValues['EI'];
Table1.FieldValues['NKL']:= StringGrid1.Cells[5, i];
Table1.FieldValues['NSKL']:= '72';
Table1.FieldValues['OST']:= StringGrid1.Cells[4, i];
Table1.FieldValues['CI']:= Query1.FieldValues['CI'];
Table1.FieldValues['KZK']:= Query1.FieldValues['KZK'];
Table1.Post; // Сохранили таблицу
end;
//
end;
Table1.Active:= false; // Закрыли таблицу
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
var
R: TRect;
begin
if (ACol = 0) or (ACol = 4) or (ACol = 5) then // Редактируем только 3 и 4 ячейки
StringGrid1.Options := StringGrid1.Options + [goEditing] // Разрешаем редактировать таблицу
else
StringGrid1.Options := StringGrid1.Options - [goEditing]; // Запрещаем редактировать таблицу
if ACol = 5 then
begin
{Ширина и положение ComboBox должно соответствовать ячейке StringGrid}
R:= StringGrid1.CellRect(ACol, ARow);
R.Left:= R.Left + StringGrid1.Left;
R.Right:= R.Right + StringGrid1.Left;
R.Top:= R.Top + StringGrid1.Top;
R.Bottom:= R.Bottom + StringGrid1.Top;
ComboBox1.Left:= R.Left + 1;
ComboBox1.Top:= R.Top + 1;
ComboBox1.Width:= (R.Right + 1) - R.Left;
ComboBox1.Height:= (R.Bottom + 1) - R.Top; {Покажем combobox}
ComboBox1.Text:= '';
ComboBox1.Visible:= True;
ComboBox1.SetFocus;
end;
if ACol = 0 then
begin
{Ширина и положение MaskEdit должно соответствовать ячейке StringGrid}
R:= StringGrid1.CellRect(ACol, ARow);
R.Left:= R.Left + StringGrid1.Left;
R.Right:= R.Right + StringGrid1.Left;
R.Top:= R.Top + StringGrid1.Top;
R.Bottom:= R.Bottom + StringGrid1.Top;
MaskEdit2.Left:= R.Left + 1;
MaskEdit2.Top:= R.Top + 1;
MaskEdit2.Width:= (R.Right + 1) - R.Left;
MaskEdit2.Height:= (R.Bottom + 1) - R.Top; {Покажем MaskEdit}
MaskEdit2.Text:= '';
MaskEdit2.Visible:= True;
MaskEdit2.SetFocus;
end;
CanSelect:= True;
end;
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
case key of // Разрешаем вводить только цифры
'0'..'9' : ;
#8 : ;
#13: ;
else
key:= chr(0); // Другие символы не отображать
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
row: integer;
begin
Query1.Close; // Закрыли запрос
Query1.SQL.Clear; // Отчистили запрос
Query1.SQL.Add('Select * from ' + FileNames); // Добавили новый запрос
Query1.Open; // Открыли запрос
Query1.first; // Перешли на первую запись
row:= 0;
StringGrid1.rowcount:= Query1.recordCount; // Выставили количество строк в сетке сколько записей в запросе
while not Query1.eof do // Пока не бедет конец запроса делаем
begin
StringGrid1.cells[0,row]:= '';
StringGrid1.cells[1,row]:= Query1.FieldValues['NCHTO']; // Заносим данные в сетку
StringGrid1.cells[2,row]:= 'шт';
StringGrid1.cells[3,row]:= Query1.FieldValues['OCN'];
StringGrid1.cells[4,row]:= '';
StringGrid1.cells[5,row]:= '';
inc(row); // Увеличили на 1
Query1.next; // Перешли на новую запись запроса
end;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
StringGrid1.colWidths[1]:= StringGrid1.Width - 395;
end;
procedure TForm1.MaskEdit2Exit(Sender: TObject);
begin
{Перебросим выбранное в значение из MaskEdit в grid}
StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row]:= MaskEdit2.Text;
MaskEdit2.Visible:= False; // Спрятали MaskEdit
StringGrid1.SetFocus; // Фокус на сетку
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree; // Освободили ресурсы занимаемые программой
end;
procedure TForm1.Button3Click(Sender: TObject);
var
s: string;
begin
s:= #39 + 'OSGP.DBF' + #39; // Сделали строку с именем таблицы для запроса
Query1.Close; // Закрыли запрос
Query1.SQL.Clear; // Отчистили запрос
Query1.SQL.Add('Select * from ' + (#39 + 'OSGP.DBF' + #39)); // Добавили новый запрос
Query1.Open; // Открыли запрос
Form2.Showmodal; // Показ формы в модальном режиме
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Query1.Close; // Закрыли запрос
Form3.Showmodal; // Показ формы в модальном режиме
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB;
type
TForm2 = class(TForm)
Button1: TButton;
DBGrid1: TDBGrid;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids;
type
TForm3 = class(TForm)
Button1: TButton;
Label1: TLabel;
ComboBox1: TComboBox;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Edit1: TEdit;
Label2: TLabel;
Label3: TLabel;
DBGrid1: TDBGrid;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses unit1;
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TForm3.FormResize(Sender: TObject);
begin
DBGrid1.Columns[1].Width:= DBGrid1.Width - 93;
end;
procedure TForm3.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then // нажата клавиша enter
begin
if ComboBox1.Text = '' then
begin
ShowMessage('Выбирете сначала кладовщика');
exit;
end;
if RadioButton1.Checked then
begin
Form1.Query1.Close; // Закрыли запрос
Form1.Query1.SQL.Clear; // Отчистили запрос
Form1.Query1.SQL.Add('Select NKART, NCHTO, NKL from ' + (#39 + 'OSGP.DBF' + #39) + ' where NKART = ' + (#39 + Edit1.Text + #39) + ' and (NKL = ' + #39 + ComboBox1.Text + #39 +')'); // Добавили новый запрос
Form1.Query1.Open; // Открыли запрос
if Form1.Query1.RecordCount <> 0 then
ComboBox1.Text:= Form1.Query1.FieldValues['NKL']; // Показали в комбобоксе номер кладовщика
end
else
begin
Form1.Query1.Close; // Закрыли запрос
Form1.Query1.SQL.Clear; // Отчистили запрос
Form1.Query1.SQL.Add('Select NKART, NCHTO, NKL from ' + (#39 + 'OSGP.DBF' + #39) + ' where (NCHTO LIKE "%' + AnsiUpperCase(Edit1.Text) +'%") and (NKL = ' + #39 + ComboBox1.Text + #39 +')'); // Добавили новый запрос
Form1.Query1.Open; // Открыли запрос
end;
end;
end;
procedure TForm3.Button2Click(Sender: TObject);
begin
if ComboBox1.Text = '' then // Нужен ноиер кладовщика
begin
ShowMessage('Выбирете сначала кладовщика');
exit;
end;
Form1.Query1.Close; // Закрыли запрос
Form1.Query1.SQL.Clear; // Отчистили запрос
Form1.Query1.SQL.Add('Select NKART, NCHTO from ' + (#39 + 'OSGP.DBF' + #39) + ' where NKL = ' + (#39 + ComboBox1.Items.Strings[ComboBox1.Itemindex] + #39)); // Добавили новый запрос
Form1.Query1.Open; // Открыли запрос
end;
end.
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.