unit U_ClothPurchaseQtyInPut; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, System.Types, Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, cxCalendar, cxDropDownEdit, ComCtrls, ToolWin, cxGridLevel, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses, cxControls, cxGridCustomView, cxGrid, cxGridCustomPopupMenu, cxGridPopupMenu, ADODB, DBClient, cxButtonEdit, cxTextEdit, StdCtrls, ExtCtrls, cxLookAndFeels, cxLookAndFeelPainters, cxNavigator, dxDateRanges, dxBarBuiltInMenu, U_BaseInput, System.ImageList, Vcl.ImgList, ComObj, dxScrollbarAnnotations, cxContainer, dxCore, cxDateUtils, cxMaskEdit, cxImageList, cxCurrencyEdit, Vcl.Menus, Clipbrd; type TfrmClothPurchaseQtyInPut = class(TfrmBaseInput) DataSource3: TDataSource; CDS_Sub: TClientDataSet; ADOQueryCmd: TADOQuery; ADOQueryMain: TADOQuery; ADOQueryTemp: TADOQuery; GPM_1: TcxGridPopupMenu; CDS_LM: TClientDataSet; OpenDialog1: TOpenDialog; pnl1: TPanel; cxGrid1: TcxGrid; Tv1: TcxGridDBTableView; cxGrid1Level1: TcxGridLevel; tlb1: TToolBar; btnAdd: TToolButton; btn3: TToolButton; btn4: TToolButton; pnl2: TPanel; inPiece: TcxCurrencyEdit; Label9: TLabel; inQty: TcxCurrencyEdit; Label13: TLabel; Tv1Column2: TcxGridDBColumn; Tv1Column3: TcxGridDBColumn; Tv1Column4: TcxGridDBColumn; Tv1Column5: TcxGridDBColumn; btndaoru: TToolButton; ToolButton2: TToolButton; TBSave: TToolButton; TBClose: TToolButton; Tv1Column1: TcxGridDBColumn; lbl5: TLabel; IOTime: TcxDateEdit; Tv1Column6: TcxGridDBColumn; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); procedure TBDelClick(Sender: TObject); procedure FromCoNameDblClick(Sender: TObject); procedure inQtyKeyPress(Sender: TObject; var Key: Char); procedure btndaoruClick(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure ToolButton5Click(Sender: TObject); procedure TBSaveClick(Sender: TObject); procedure btnAddClick(Sender: TObject); procedure Tv1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCreate(Sender: TObject); private { Private declarations } function SaveData(): Boolean; procedure NianTie(); function Split(const s: string; Separator: char): TStringDynArray; public { Public declarations } FBCIONO, FPurMId, FPurSId, FQtyUnit: string; end; var frmClothPurchaseQtyInPut: TfrmClothPurchaseQtyInPut; implementation uses U_DataLink, U_RTFun, U_RPFun; {$R *.dfm} // 分割字符串函数 function TfrmClothPurchaseQtyInPut.Split(const s: string; Separator: char): TStringDynArray; var i, ItemIndex: Integer; len: Integer; SeparatorCount: Integer; Start: Integer; begin len := Length(s); if len = 0 then begin Result := nil; Exit; end; // 计算分隔符数量 SeparatorCount := 0; for i := 1 to len do if s[i] = Separator then Inc(SeparatorCount); SetLength(Result, SeparatorCount + 1); ItemIndex := 0; Start := 1; // 拆分字符串 for i := 1 to len do begin if s[i] = Separator then begin Result[ItemIndex] := Copy(s, Start, i - Start); Inc(ItemIndex); Start := i + 1; end; end; Result[ItemIndex] := Copy(s, Start, len - Start + 1); end; procedure TfrmClothPurchaseQtyInPut.NianTie(); var hmem: THandle; pstr: PChar; ArrStr: TStringList; i, x, h, Row, Z: Integer; FColumn: string; begin //检查剪贴板类容类型 if IsClipboardFormatAvailable(CF_TEXT) then begin OpenClipboard(0); hmem := GetClipboardData(CF_TEXT); pstr := GlobalLock(hmem); // Memo1.Text := pstr; pstr := PChar(StringReplace(pstr, #$A, #$A#$3F, [rfReplaceAll])); // pstr := PAnsiChar(StringReplace(pstr, #$D#$A#$D, #$D#$A#$20#$D, [rfReplaceAll])); ArrStr := TStringList.Create; ArrStr.Clear; ExtractStrings([#13], [], PChar(pstr), ArrStr); GlobalUnlock(hmem); CloseClipboard; end; ArrStr.Delete(ArrStr.Count - 1); Row := Tv1.Controller.FocusedRowIndex; CDS_Sub.Locate('xhno', Row + 1, []); x := (Tv1.DataController.RowCount - (Row + 1)); // showmessage(ArrStr.Text); //自动增行 if x < ArrStr.count then begin for i := x to ArrStr.count - 2 do begin if VarIsNull(Tv1.DataController.Summary.FooterSummaryValues[0]) = True then begin h := 0; end else h := Tv1.DataController.Summary.FooterSummaryValues[0]; h := h + 1; with CDS_Sub do begin Append; FieldByName('XHNO').Value := IntToStr(h); Post; end; end; end; CDS_Sub.Locate('xhno', Row + 1, []); i := 0; Z := 0; FColumn := Tv1.Controller.FocusedColumn.DataBinding.FilterFieldName; with CDS_Sub do begin DisableControls; while not Eof do begin edit; if ArrStr.Count > i then begin CDS_Sub.FieldByName(FColumn).Value := StringReplace(ArrStr[i], '?', '', [rfReplaceAll]); end else Break; i := i + 1; Post; Next; end; EnableControls; end; end; procedure TfrmClothPurchaseQtyInPut.btnAddClick(Sender: TObject); begin // if CDS_Sub.IsEmpty = False then // begin // CopyAddRowCDS(CDS_Sub); // with CDS_Sub do // begin // Edit; // FieldByName('Piece').Value := 1; // FieldByName('BCIOID').Value := null; // FieldByName('StkCoNo').Value := '本厂仓库'; // FieldByName('StkCoName').Value := '本厂仓库'; // post; // end; // end // else // begin with CDS_Sub do begin Append; FieldByName('Piece').Value := 1; // FieldByName('IOTime').Value := Trim(FormatDateTime('yyyy-MM-dd', Now)); FieldByName('StkCoNo').Value := '本厂仓库'; FieldByName('StkCoName').Value := '本厂仓库'; Post; end; // end; end; procedure TfrmClothPurchaseQtyInPut.btndaoruClick(Sender: TObject); var excelApp, WorkBook: Variant; i, j, k, LX, ExcelRowCount: integer; maxId, FCPID, FCPName, t1, t2, t3, FFID: string; begin 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('加载EXCEL错误!', '错误信息', MB_ICONERROR); exit; end; CDS_LM.EmptyDataSet; for j := 0 to Tv1.ColumnCount - 1 do begin with CDS_LM do begin Append; FieldByName('LCode').Value := trim(Tv1.Columns[j].DataBinding.FieldName); FieldByName('LName').Value := trim(Tv1.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('加载数组错误!', '错误信息', MB_ICONERROR); exit; end; try for i := 2 to ExcelRowCount do begin with CDS_Sub do begin Append; CDS_LM.First; while not CDS_LM.Eof do begin if CDS_LM.FieldByName('LXH').AsInteger > 0 then CDS_Sub.fieldbyname(CDS_LM.FieldByName('LCode').AsString).Value := WorkBook.WorkSheets[1].Cells[i, CDS_LM.FieldByName('LXH').AsInteger].Value; CDS_LM.Next; end; FieldByName('Piece').Value := 1; Post; end; end; WorkBook.Close; excelApp.Quit; excelApp := Unassigned; WorkBook := Unassigned; except WorkBook.Close; excelApp.Quit; excelApp := Unassigned; WorkBook := Unassigned; exit; end; end; procedure TfrmClothPurchaseQtyInPut.FormClose(Sender: TObject; var Action: TCloseAction); begin inherited; Action := caFree; end; procedure TfrmClothPurchaseQtyInPut.FormCreate(Sender: TObject); begin inherited; IOTime.Date := SGetServerDate(ADOQueryTemp); end; function TfrmClothPurchaseQtyInPut.SaveData(): Boolean; var Maxno, MBCIOID: string; begin try ADOQueryCmd.Connection.BeginTrans; if FBCIONo = '' then if not GetLSNo(ADOQueryCmd, FBCIONo, 'RK', 'BS_Cloth_IO', 4, 1) then raise Exception.Create('取染色坯布入库编号失败!'); CDS_Sub.DisableControls; with CDS_Sub do begin First; while not eof do begin with ADOQueryTemp do begin Close; sql.Clear; sql.Add('select * from BS_Cloth_IO where BCIOID=''' + Trim(CDS_Sub.fieldbyname('BCIOID').AsString) + ''''); open; end; MBCIOID := Trim(ADOQueryTemp.fieldbyname('BCIOID').AsString); if Trim(MBCIOID) = '' then begin if not GetLSNo(ADOQueryCmd, Maxno, 'MR', 'BS_Cloth_IO', 4, 1) then raise Exception.Create('取染色坯布入库编号失败!'); end else begin Maxno := Trim(MBCIOID); end; with ADOQueryCmd do begin Close; sql.Clear; sql.Add('select * from BS_Cloth_IO where BCIOID=''' + Trim(Maxno) + ''''); Open; end; with ADOQueryCmd do begin if Trim(MBCIOID) = '' then begin Append; FieldByName('Fillid').Value := Trim(Dcode); FieldByName('Filler').Value := Trim(DName); FieldByName('BCIOID').Value := Trim(Maxno); FieldByName('STKID').Value := Trim(Maxno); FieldByName('CIID').Value := Trim(Maxno); end else begin Edit; FieldByName('Editid').Value := Trim(Dcode); FieldByName('Editer').Value := Trim(DName); FieldByName('EditTime').Value := SGetServerDate(ADOQueryTemp); end; FieldByName('IOTime').Value := IOTime.Date; RTSetSaveDataCDS(ADOQueryCmd, Tv1, CDS_Sub, 'BS_Cloth_IO', 0); FieldByName('STKName').Value := '贸易布匹'; FieldByName('IOFlag').Value := '入库'; FieldByName('IOQtyFlag').Value := 1; FieldByName('Piece').Value := 1; FieldByName('Qty').Value := CDS_Sub.FieldByName('Qty').Value; FieldByName('FromPurMId').Value := FPurMId; FieldByName('FromPurSId').Value := FPurSId; FieldByName('QtyUnit').Value := FQtyUnit; Post; end; Next; end; end; CDS_Sub.EnableControls; with ADOQueryCmd do begin Close; Sql.Clear; Sql.Add('exec P_BS_Cloth_UpdateByPurchase '); Sql.Add(' @PurSId=' + quotedstr(Trim(FPurSId))); Sql.Add(',@DCode=' + quotedstr(Trim(DCode))); Sql.Add(',@DName=' + quotedstr(Trim(DName))); Open; end; if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString))); ADOQueryCmd.Connection.CommitTrans; Result := True; except Result := False; ADOQueryCmd.Connection.RollbackTrans; application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0); end; end; procedure TfrmClothPurchaseQtyInPut.FormShow(Sender: TObject); begin inherited; ReadCxGrid('码单登记', Tv1, '贸易汇总仓库'); 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; with ADOQueryTemp do begin Close; sql.Clear; sql.Add(' select A.* '); sql.Add(' from BS_Cloth_IO A'); sql.Add(' where ioflag=''入库'' and BCIONo=''' + Trim(FBCIONo) + ''''); sql.Add(' order by qty desc '); Open; end; if not ADOQueryTemp.IsEmpty then IOTime.Date := ADOQueryTemp.FieldByName('IOTime').AsDateTime; SCreateCDS(ADOQueryTemp, CDS_Sub); SInitCDSData(ADOQueryTemp, CDS_Sub); end; procedure TfrmClothPurchaseQtyInPut.FromCoNameDblClick(Sender: TObject); begin TcxButtonEdit(Sender).Text := ''; TcxButtonEdit(Sender).Properties.LookupItems.Text := ''; end; procedure TfrmClothPurchaseQtyInPut.inQtyKeyPress(Sender: TObject; var Key: Char); var i: Integer; begin if Key = #13 then begin with CDS_Sub do begin DisableControls; for i := 1 to StrToIntDef(inPiece.Text, 1) do begin Append; if FQtyUnit = 'M' then begin FieldByName('Meter').Value := StrTofloatDef(inQty.Text, 0); end else if FQtyUnit = 'Y' then begin FieldByName('Yardage').Value := StrTofloatDef(inQty.Text, 0); end else begin FieldByName('NetWeight').Value := StrTofloatDef(inQty.Text, 0); end; Post; end; EnableControls; end; inPiece.Text := '1'; inQty.Text := ''; end; end; procedure TfrmClothPurchaseQtyInPut.TBDelClick(Sender: TObject); begin if CDS_Sub.IsEmpty then Exit; if Trim(CDS_Sub.fieldbyname('BCIOID').AsString) <> '' then begin if Application.MessageBox('确定要删除数据吗?', '提示', 32 + 4) <> IDYES then Exit; with ADOQueryTemp do begin Close; sql.Clear; sql.Add('exec P_Fin_Flow_Judge '); Sql.Add(' @FFIDS=' + quotedstr(Trim(CDS_Sub.fieldbyname('BCIOID').AsString))); Sql.Add(',@DCode=' + quotedstr(Trim(DCode))); Sql.Add(',@DName=' + quotedstr(Trim(DName))); Open; end; if ADOQueryTemp.FieldByName('intReturn').AsInteger = -1 then begin Application.MessageBox(PChar(ADOQueryTemp.fieldbyname('ShowMsg').AsString), '提示', 0); exit; end; try ADOQueryCmd.Connection.BeginTrans; with ADOQueryCmd do begin Close; Sql.Clear; sql.Add('insert into Finance_Need_Up(UType,UDataId,UOperation,UOperator,UModule,UDetails) '); sql.Add('values(''贸易样布入库'' '); sql.Add(',' + quotedstr(Trim(CDS_Sub.fieldbyname('BCIOID').AsString))); sql.Add(',''删除'' '); sql.Add(',' + quotedstr(DName)); sql.Add(',' + quotedstr(trim(self.Caption))); sql.Add(',' + quotedstr(Trim(CDS_Sub.fieldbyname('BCIOID').AsString))); sql.Add(') '); Sql.Add('exec P_BS_Cloth_In_Del '); Sql.Add(' @BCIOIDS=' + quotedstr(Trim(CDS_Sub.fieldbyname('BCIOID').AsString))); Sql.Add(',@DCode=' + quotedstr(Trim(DCode))); Sql.Add(',@DName=' + quotedstr(Trim(DName))); Open; end; if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString))); ADOQueryCmd.Connection.CommitTrans; CDS_Sub.Delete; except ADOQueryCmd.Connection.RollbackTrans; application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0); end; end else begin CDS_Sub.Delete; end; end; procedure TfrmClothPurchaseQtyInPut.TBSaveClick(Sender: TObject); var Maxno: string; begin if CDS_Sub.IsEmpty then Exit; with CDS_Sub do begin DisableControls; First; while not Eof do begin Edit; if FQtyUnit = 'M' then begin FieldByName('Qty').Value := FieldByName('Meter').Value; end else if FQtyUnit = 'Y' then begin FieldByName('Qty').Value := FieldByName('Yardage').Value; end else begin FieldByName('Qty').Value := FieldByName('NetWeight').Value; end; Post; Next; end; EnableControls; end; if CDS_Sub.Locate('Qty', null, []) = True then begin Application.MessageBox('数量不能为空!', '提示', 0); Exit; end; if CDS_Sub.Locate('Qty', 0, []) = True then begin Application.MessageBox('数量不能为0!', '提示', 0); Exit; end; if SaveData() then begin Application.MessageBox('保存成功!', '提示', 0); ModalResult := 1; end; end; procedure TfrmClothPurchaseQtyInPut.ToolButton2Click(Sender: TObject); var MFiltration: string; MPrintJson: string; begin if CDS_sub.IsEmpty then Exit; if CDS_Sub.Locate('BCIOID', '', []) = True then begin Application.MessageBox('有数据未保存请先保存!', '提示', 0); Exit; end; if CDS_Sub.Locate('BCIOID', null, []) = True then begin Application.MessageBox('有数据未保存请先保存!', '提示', 0); Exit; end; MFiltration := ''; with CDS_sub do begin First; while not eof do begin MFiltration := MFiltration + ',' + CDS_sub.FieldByName('BCIOID').AsString; next; end; end; MPrintJson := ' {"LMType": "TradeFinishClothInPrt1" '; MPrintJson := MPrintJson + ' ,"PreviewPrint": true '; MPrintJson := MPrintJson + ' ,"PrtArgs": [ { "IsSql": false, "Filtration":" ' + MFiltration + '" }, '; MPrintJson := MPrintJson + ' { "IsSql": false, "Filtration":" ' + MFiltration + '" }, '; MPrintJson := MPrintJson + ' { "IsSql": false, "Filtration":" ' + MFiltration + '" }, '; MPrintJson := MPrintJson + ' { "IsSql": false, "Filtration":" ' + MFiltration + '" }, '; MPrintJson := MPrintJson + ' { "IsSql": false, "Filtration":" ' + MFiltration + '" } ] } '; FromPrintFr3(Application, PChar(DConString), PChar(MPrintJson)); end; procedure TfrmClothPurchaseQtyInPut.ToolButton5Click(Sender: TObject); begin inherited; Close; end; procedure TfrmClothPurchaseQtyInPut.Tv1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin // 检测是否按下 Ctrl+V if (Key = Ord('V')) and (Shift = [ssCtrl]) then begin pasteDatatTocxGrid(Tv1); end; end; end.