D10xhGemei/A02基础产品管理/U_Edit.pas
DESKTOP-E401PHE\Administrator 9f5fcadbd1 123545
2026-06-13 16:49:18 +08:00

446 lines
12 KiB
ObjectPascal
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

unit U_Edit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DB, ADODB, cxGraphics, cxControls, cxLookAndFeels,
cxLookAndFeelPainters, dxSkinsCore, dxSkinsDefaultPainters, cxStyles,
cxCustomData, cxFilter, cxData, cxDataStorage, cxEdit, cxNavigator,
dxDateRanges, dxScrollbarAnnotations, cxDBData, cxTextEdit, cxGridLevel,
cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses,
cxGridCustomView, cxGrid, Vcl.ToolWin, Vcl.ComCtrls, Datasnap.DBClient,
Vcl.Menus, ComObj, cxContainer;
type
TfrmEdit = class(TForm)
ADOQueryMain: TADOQuery;
ADOQueryTemp: TADOQuery;
ADOQueryCmd: TADOQuery;
Panel6: TPanel;
cxGrid4: TcxGrid;
TV4: TcxGridDBTableView;
cxGridDBColumn5: TcxGridDBColumn;
cxGridDBColumn6: TcxGridDBColumn;
cxGridDBColumn7: TcxGridDBColumn;
cxGridDBColumn8: TcxGridDBColumn;
cxGridDBColumn9: TcxGridDBColumn;
cxGridDBColumn10: TcxGridDBColumn;
cxGridLevel4: TcxGridLevel;
DS_4: TDataSource;
CDS_4: TClientDataSet;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
TBClose: TToolButton;
ADO_4: TADOQuery;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
CDS_LM: TClientDataSet;
OpenDialog1: TOpenDialog;
ToolButton5: TToolButton;
TV4Column1: TcxGridDBColumn;
procedure Button2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure TBCloseClick(Sender: TObject);
function SaveData(): Boolean;
procedure ToolButton1Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
procedure ToolButton3Click(Sender: TObject);
procedure ToolButton4Click(Sender: TObject);
procedure ToolButton5Click(Sender: TObject);
procedure TV4CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
procedure TV4KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
private
{ Private declarations }
public
FBCIID, FBCISID: string;
FPrice: double;
{ Public declarations }
end;
var
frmEdit: TfrmEdit;
implementation
uses
U_DataLink, U_RTFun;
{$R *.dfm}
procedure TfrmEdit.Button2Click(Sender: TObject);
begin
Close;
end;
procedure TfrmEdit.FormShow(Sender: TObject);
var
SqlStr: string;
begin
readCxGrid(self.Caption + 'TV4', Tv4, '<27><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>');
SqlStr := 'select A.*,IsRepeat=0 from BS_Cloth_Info_Sub A ';
if FBCISID = '' then
begin
SqlStr := SqlStr + ' where 1<>1';
end
else
begin
SqlStr := SqlStr + ' where A.BCIID=''' + Trim(FBCIID) + '''';
end;
SqlStr := SqlStr + ' ORDER BY CASE WHEN C_COLORNO NOT LIKE ''%[^0-9]%'' THEN dbo.getNum(C_Colorno) ELSE 9999999999 ';
SqlStr := SqlStr + ' END ,C_ColorNo';
InitCDSData(ADO_4, CDS_4, Tv4, SqlStr, '', '');
with CDS_LM do
begin
FieldDefs.Clear;
FieldDefs.Add('LXH', ftInteger, 0);
FieldDefs.Add('lCode', ftString, 40);
FieldDefs.Add('LName', ftString, 40);
close;
CreateDataSet;
end;
end;
procedure TfrmEdit.N1Click(Sender: TObject);
begin
with CDS_4 do
begin
append;
fieldbyname('BCIID').Value := FBCIID;
// fieldbyname('BCISID').Value := maxno;
fieldbyname('floatPrice').Value := 0;
fieldbyname('referencePrice').value := FPrice;
Post;
end;
end;
procedure TfrmEdit.N2Click(Sender: TObject);
begin
if CDS_4.IsEmpty then
Exit;
if Trim(CDS_4.fieldbyname('BCISID').AsString) <> '' then
begin
if Application.MessageBox(<><C8B7>Ҫɾ<D2AA><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>', '<27><>ʾ', 32 + 4) <> IDYES then
Exit;
with ADOQueryCmd do
begin
Close;
sql.Clear;
sql.Add('delete BS_Cloth_Info_Sub where BCISID=''' + Trim(CDS_4.fieldbyname('BCISID').AsString) + '''');
ExecSQL;
end;
end;
CDS_4.Delete;
end;
procedure TfrmEdit.TBCloseClick(Sender: TObject);
begin
Close;
end;
procedure TfrmEdit.ToolButton1Click(Sender: TObject);
begin
ToolBar1.SetFocus;
if SaveData() then
begin
Application.MessageBox('<27><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>', '<27><>ʾ', 0);
if not CDS_4.IsEmpty then
ModalResult := 1;
end;
end;
procedure TfrmEdit.ToolButton2Click(Sender: TObject);
begin
with CDS_4 do
begin
append;
fieldbyname('BCIID').Value := FBCIID;
// fieldbyname('BCISID').Value := maxno;
fieldbyname('floatPrice').Value := 0;
fieldbyname('referencePrice').value := FPrice;
Post;
end;
end;
procedure TfrmEdit.ToolButton3Click(Sender: TObject);
begin
if CDS_4.IsEmpty then
Exit;
if Trim(CDS_4.fieldbyname('BCISID').AsString) <> '' then
begin
if Application.MessageBox(<><C8B7>Ҫɾ<D2AA><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>', '<27><>ʾ', 32 + 4) <> IDYES then
Exit;
with ADOQueryCmd do
begin
Close;
sql.Clear;
sql.Add('delete BS_Cloth_Info_Sub where BCISID=''' + Trim(CDS_4.fieldbyname('BCISID').AsString) + '''');
ExecSQL;
end;
end;
CDS_4.Delete;
end;
procedure TfrmEdit.ToolButton4Click(Sender: TObject);
var
excelApp, WorkBook: Variant;
i, j, k, LX, ExcelRowCount: integer;
maxId, FCPID, FCPName, t1, t2, t3, FFID: string;
begin
with ADOQueryCmd do
begin
Close;
sql.Clear;
sql.Add('insert into BS_Cloth_Info_Sub_Del select * from BS_Cloth_Info_Sub where BCIID=''' + Trim(FBCIID) + '''');
sql.Add('delete from BS_Cloth_Info_Sub where BCIID=''' + Trim(FBCIID) + '''');
ExecSQL;
end;
try
excelApp := CreateOleObject('Excel.Application');
openDialog1.Filter := '*.CSV;*.xls';
if opendialog1.Execute then
begin
WorkBook := excelApp.WorkBooks.Open(OpenDialog1.FileName);
end
else
exit;
excelApp.Visible := false;
ExcelRowCount := WorkBook.WorkSheets[1].UsedRange.Rows.Count;
except
application.MessageBox('<27><><EFBFBD><EFBFBD>EXCEL<45><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>', '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ', MB_ICONERROR);
exit;
end;
CDS_LM.EmptyDataSet;
for j := 0 to Tv4.ColumnCount - 1 do
begin
with CDS_LM do
begin
Append;
FieldByName('LCode').Value := trim(Tv4.Columns[j].DataBinding.FieldName);
FieldByName('LName').Value := trim(Tv4.Columns[j].Caption);
Post;
end;
end;
try
for i := 1 to 50 do
begin
if trim(WorkBook.WorkSheets[1].Cells[1, i].value) = '' then
continue;
if CDS_LM.Locate('LName', trim(WorkBook.WorkSheets[1].Cells[1, i].value), []) then
begin
with CDS_LM do
begin
Edit;
FieldByName('LXH').Value := i;
Post;
end;
end;
end;
except
application.MessageBox('<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>', '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ', MB_ICONERROR);
exit;
end;
try
for i := 2 to ExcelRowCount do
begin
with CDS_4 do
begin
Append;
CDS_LM.First;
while not CDS_LM.Eof do
begin
if CDS_LM.FieldByName('LXH').AsInteger > 0 then
CDS_4.fieldbyname(CDS_LM.FieldByName('LCode').AsString).Value := WorkBook.WorkSheets[1].Cells[i, CDS_LM.FieldByName('LXH').AsInteger].Value;
CDS_LM.Next;
end;
Post;
end;
end;
WorkBook.Close;
excelApp.Quit;
excelApp := Unassigned;
WorkBook := Unassigned;
except
WorkBook.Close;
excelApp.Quit;
excelApp := Unassigned;
WorkBook := Unassigned;
exit;
end;
end;
procedure TfrmEdit.ToolButton5Click(Sender: TObject);
begin
WriteCxGrid(self.Caption + 'TV4', Tv4, '<27><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>');
end;
procedure TfrmEdit.TV4CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
if '1' = AViewInfo.GridRecord.Values[TV4Column1.Index] then
ACanvas.Brush.Color := $008080FF;
end;
procedure TfrmEdit.TV4KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_DOWN then
begin
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD> Button1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD>ť<EFBFBD><C5A5><EFBFBD>ƣ<EFBFBD>
ToolButton2.Click;
// <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ֹ TreeView <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>
Key := 0;
end;
end;
function TfrmEdit.SaveData(): Boolean;
var
maxId4: string;
begin
try
ADOQueryCmd.Connection.BeginTrans;
//////////////////////// <20><><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD> //////////////////////////
with CDS_4 do
begin
First;
while not Eof do
begin
if Trim(CDS_4.fieldbyname('BCISID').AsString) = '' then
begin
if GetLSNo(ADOQueryTemp, maxId4, 'YS', 'BS_Cloth_Info_Sub', 4, 1) = False then
raise Exception.Create(<><C8A1><EFBFBD><EFBFBD>ˮ<EFBFBD><CBAE>ʧ<EFBFBD><CAA7>!');
end
else
begin
maxId4 := Trim(CDS_4.fieldbyname('BCISID').AsString);
end;
with ADOQueryCmd do
begin
Close;
SQL.Clear;
sql.Add(' select * from BS_Cloth_Info_Sub where ');
sql.Add(' BCISID=''' + Trim(maxId4) + '''');
Open;
end;
with ADOQueryCmd do
begin
if Trim(CDS_4.fieldbyname('BCISID').AsString) = '' then
begin
Append;
FieldByName('FillID').Value := Trim(DCode);
FieldByName('Filler').Value := Trim(DName);
FieldByName('FillTime').Value := SGetServerDateTime(ADOQueryTemp);
end
else
begin
Edit;
FieldByName('EditID').Value := Trim(DCode);
FieldByName('Editer').Value := Trim(DName);
FieldByName('EditTime').Value := SGetServerDateTime(ADOQueryTemp);
end;
FieldByName('BCIID').Value := Trim(FBCIID);
FieldByName('BCISID').Value := Trim(maxId4);
RTSetSaveDataCDS(ADOQueryCmd, Tv4, CDS_4, 'BS_Cloth_Info_Sub', 0);
Post;
end;
Next;
end;
end;
CDS_4.DisableControls;
try
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
CDS_4.First;
while not CDS_4.Eof do
begin
CDS_4.Edit;
CDS_4.FieldByName('IsRepeat').AsString := '0';
CDS_4.Post;
CDS_4.Next;
end;
// <20><>ѯ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ɫ+ɫ<><C9AB>
with ADOQueryTemp do
begin
Close;
SQL.Clear;
SQL.Add('select C_Color,C_ColorNo from BS_Cloth_Info_Sub where BCIID=''' + Trim(FBCIID) + '''');
SQL.Add(' group by C_Color,C_ColorNo having count(*)>1');
Open;
end;
// <20><><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
while not ADOQueryTemp.Eof do
begin
CDS_4.First;
while not CDS_4.Eof do
begin
if (Trim(CDS_4.FieldByName('C_Color').AsString) = Trim(ADOQueryTemp.FieldByName('C_Color').AsString)) and (Trim(CDS_4.FieldByName('C_ColorNo').AsString) = Trim(ADOQueryTemp.FieldByName('C_ColorNo').AsString)) then
begin
CDS_4.Edit;
CDS_4.FieldByName('IsRepeat').AsString := '1'; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CDS_4.Post;
end;
CDS_4.Next;
end;
ADOQueryTemp.Next;
end;
finally
CDS_4.EnableControls;
end;
// <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD>׳<EFBFBD><D7B3><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD>
with ADOQueryTemp do
begin
Close;
sql.Clear;
sql.Add('select count(BCISID) as AA,C_Color,C_ColorNo from BS_Cloth_Info_Sub where BCIID=''' + Trim(FBCIID) + '''');
sql.Add(' group by C_Color,C_ColorNo having count(*)>1');
Open;
end;
if ADOQueryTemp.Active and not ADOQueryTemp.IsEmpty then
begin
if StrToFloatDef(ADOQueryTemp.fieldbyname('AA').asstring, 1) > 1 then
begin
raise Exception.Create(<><C9AB><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>ѱ<EFBFBD><D1B1><EFBFBD>');
end;
end;
with ADOQueryCmd do
begin
Close;
SQL.Clear;
sql.Add(' exec P_BS_CloInfo_ZhuBuTongBu @BCIID=' + QuotedStr(trim(FBCIID)));
ExecSQL;
end;
//////////////////////// <20><><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD> //////////////////////////
ADOQueryCmd.Connection.CommitTrans;
Result := True;
except
Result := False;
ADOQueryCmd.Connection.RollbackTrans;
application.MessageBox(PChar(Exception(ExceptObject).Message), '<27><>ʾ<EFBFBD><CABE>Ϣ', 0);
end;
end;
end.