📄 ordertobarcode.~pas
字号:
var Key: Char);
begin
inherited;
//if (not (Key in ['0'..'9','.',#8])) then Key:=#0;
end;
procedure TFrmOrderToBarCode.BitBtnpostClick(Sender: TObject);
var i, j: integer;
num, DevNum: dword;
SerialNumberStart, SerialNumberTemp, LastSerialNumberStr: string;
LastSerialNumberInt: integer;
begin
inherited;
StringGridOrderSelectCell(self, StringGridOrder.Col, StringGridOrder.Row, Canselect);
if (EdtOrderID.Text = '') // or (DBEditNum.Text = '') or (DBEditbusiness.Text = '') or (DBLookupComboBoxDevNum.Text = '')
or (EdtCustomer.Text = '')
then
begin
ShowMessage('信息输入不全,请输入订单号和客户名称!');
exit;
end;
if checkValue('OrderS', 'OrderID', edtOrderID.Text) then
begin //限制编号不可重复否则打印不好控制一次性只打印本次所输的
messagedlg('此订单号已经存在,请重输!', mtinformation, [mbok], 0);
exit;
end;
StockDM.ADOConn.BeginTrans;
//try
try
//保存订单基本信息
with StockDM.QOrders do
begin
if not Active then Active := true;
//不检查重复,订单重复,就进行修改
if Locate('OrderID', edtOrderID.Text, []) then
edit
else
Append;
FieldValues['OrderID'] := edtOrderID.Text; //要防止重复
FieldValues['CustomerName'] := EdtCustomer.Text;
FieldValues['PostDate'] := DateTimePickerPostDate.Date;
FieldValues['SellPrincipal'] := edtSellPrincipal.Text;
FieldValues['PanTab'] := edtPanTab.Text;
FieldValues['OrderDetail'] := MemoOrderDetail.Text;
FieldValues['OrderMemo'] := MemoOrderMemo.Text;
FieldValues['PanPrincipal'] := edtPanPrincipal.Text;
FieldValues['PanAuditing'] := edtPanAuditing.Text;
FieldValues['SpecificPro'] := edtSpecificPro.Text;
FieldValues['ApplyDept'] := edtApplyDept.Text;
FieldValues['ProPrincipal'] := edtProPrincipal.Text;
FieldValues['RDMemo'] := MemoRDMemo.Text;
FieldValues['EngMemo'] := MemoEngMemo.Text;
FieldValues['EngAudting'] := edtEngAudting.Text;
FieldValues['AppendDate'] := date;
post;
end;
ProgressBar1.Position := 0;
ProgressBar1.Max := 0;
for i := 1 to StringGridOrder.RowCount - 1 do
begin
if (trim(StringGridOrder.Cells[1, i]) = '') or (trim(StringGridOrder.Cells[2, i]) = '') then Continue;
ProgressBar1.Max := ProgressBar1.Max + strtoint(trim(StringGridOrder.Cells[2, i])); //数量
end;
//保存订单明细(机型与数量)
with StringGridOrder do
begin
for i := 1 to RowCount - 1 do
begin //机器类型 //数量
if (trim(Cells[1, i]) = '') or (trim(Cells[2, i]) = '') then Continue;
num := strtoint(trim(Cells[2, i])); //数量
DevNum := strtoint(GetValueTostr('DeviceType', 'DevNum', 'DevName', trim(Cells[1, i])));
with StockDM.QGBarCode do //机型
begin
if not Active then Active := true;
//if Locate('OrderID;DevNum;Num',VarArrayOf([strtoint(EdtOrderID.Text),devnum,num]),[])then Continue;//重复或者又一次增加就跳过
Append;
FieldValues['OrderID'] := edtOrderID.Text; //要防止重复
//FieldValues['GBarCodeID'] := edtCustomerName;
FieldValues['DevNum'] := DevNum;
FieldValues['Num'] := num;
FieldValues['UPDateDate'] := date;
FieldValues['Memo'] := trim(Cells[3, i]);
post;
//保存并生成条码
SerialNumberStart := CreateSerialNumberStart(DevNum, DateTimePickerPostDate.Date, edtOrderID.Text);
LastSerialNumberInt := strtoint(copy(SerialNumberStart, length(SerialNumberStart) - 4 + 1, 4));
SerialNumberStart := copy(SerialNumberStart, 1, length(SerialNumberStart) - 4);
for j := 0 to num - 1 do
begin
with stockdm.QSQLBarCode do //条码
begin
if not Active then Active := true;
ProgressBar1.Position := ProgressBar1.Position + 1;
SerialNumberTemp := SerialNumberStart + copy('0000' + inttostr(LastSerialNumberInt + j), length(inttostr(LastSerialNumberInt + j)) + 1, 4);
Append;
FieldValues['BarCode'] := SerialNumberTemp;
FieldValues['GBarCodeID'] := StockDM.QGBarCode.FieldValues['GBarCodeID'];
FieldValues['OrderID'] := edtOrderID.Text;
FieldValues['DevNum'] := DevNum;
FieldValues['Isout'] := false;
FieldValues['InComeDate'] := Date;
post;
end;
end; //end for j := 0 to num - 1 do
end; //end with StockDM.QGBarCode do
end; // end for i := 1 to RowCount - 1 do
end; //end with StringGridOrder do
stockdm.ADOConn.CommitTrans;
except
stockdm.ADOConn.RollbackTrans;
raise Exception.Create('保存数据时出现错误,请重新提交!');
end;
loadBarcodeToTreeView; //过滤并显示
BitBtnPrintBarcode.Enabled:=true;
//finally
//end;
end;
procedure TFrmOrderToBarCode.loadBarcodeToTreeView;
var nodeDevName, nodeCode: TTreeNode;
begin
with StockDM.QGBarCode do
begin
fcTreeViewBarcode.Items.Clear;
close;
Filter := 'OrderID=' + EdtOrderID.Text + '';
Filtered := true;
Active := true;
First;
while not Eof do
begin
nodeDevName := fcTreeViewBarCode.items.add(nil, Fieldbyname('devName').AsString+' 数量:'+Fieldbyname('num').AsString );
//nodeDevName.ImageIndex := 0;
//nodemanger.Expanded:=true;
//nodemanger.MultiSelected := True;
//nodemanger.CheckboxType := tvctCheckbox;
StockDM.QSQLBarCode.close;
StockDM.QSQLBarCode.Filter := 'GBarCodeID=' + Fieldbyname('GBarCodeID').asstring + '';
StockDM.QSQLBarCode.Filtered := true;
StockDM.QSQLBarCode.Active := true;
while not StockDM.QSQLBarCode.Eof do
begin
nodeCode := fcTreeViewBarCode.Items.AddChild(nodeDevName, StockDM.QSQLBarCode.Fieldbyname('barcode').AsString);
//nodeEnterprise.MultiSelected := True;
//nodeEnterprise.MultiSelected := True;
//nodeEnterprise.ImageIndex := 1;
StockDM.QSQLBarCode.Next
end;
//StockDM.QSQLBarCode.Filtered := false;
Next;
end;
Filtered := false;
end;
StockDM.QSQLBarCode.close;
StockDM.QSQLBarCode.Filter := 'OrderID=' + EdtOrderID.Text + '';;
StockDM.QSQLBarCode.Filtered := true;
StockDM.QSQLBarCode.Active := true;
end;
function TFrmOrderToBarCode.CreateMachineNumberStar(Devnum: dword; postDate: Tdate; orderIDStr: string): string;
var INIDeviceNumStr: string;
Year, weakstr, d, orderID: string;
INIDeviceNum: integer;
date: TDate;
begin
INIDeviceNum := Devnum;
date := postDate;
orderID := orderIDStr;
INIDeviceNumStr := IntToStr(INIDeviceNum);
INIDeviceNumStr := copy('0000' + INIDeviceNumStr, length(INIDeviceNumStr) + 1, 4);
Year := copy(inttostr(YearOf(date)), 4, 1); //只取最后一位的年
weakstr := inttostr(WeekOfTheYear(date));
weakstr := copy('00' + weakstr, length(weakstr) + 1, 2);
d := inttostr(DayOfTheWeek(date));
orderID := copy('000' + orderID, length(orderID) + 1, 3);
Result := INIDeviceNumStr + orderID + year + weakstr + d;
end; //4位产品系列号 3位订单号 1位年 2星期 1天
function TFrmOrderToBarCode.CreateSerialNumberStart(DevNumINT: dword; postDate: tdate; orderIDStr: string): string;
var
SerialNumberStart, SerialNumberTemp, LastSerialNumberStr: string;
LastSerialNumberInt, DevNum: integer;
OrderID: string;
begin
SerialNumberStart := CreateMachineNumberStar(DevNumINT, postDate, orderIDStr, ); //4+3+1+2+1共11+4位序列号
OrderID := orderIDStr;
DevNum := DevNumINT;
with TADOQuery.Create(self) do
begin
try
Connection := StockDM.ADOConn;
close;
sql.Clear;
sql.Add(format('select * from BarCode where OrderID=%s and DevNum=%D order by BarCode', [OrderID, DevNum]));
Prepared := True;
Open;
if IsEmpty then
SerialNumberStart := SerialNumberStart + '0001' //0000 从第一开始
else
begin
Last;
LastSerialNumberstr := FieldValues['BarCode'];
LastSerialNumberInt := strtoint(copy(LastSerialNumberstr, length(LastSerialNumberstr) - 4 + 1, 4)) + 1; //原值+1
SerialNumberStart := SerialNumberStart + copy('0000' + inttostr(LastSerialNumberInt + 0), length(inttostr(LastSerialNumberInt + 0)) + 1, 4)
end;
Result := SerialNumberStart;
finally
free;
end;
end;
end;
procedure TFrmOrderToBarCode.ComboBoxDevNameKeyPress(Sender: TObject;
var Key: Char);
begin
inherited;
key := #0
end;
procedure TFrmOrderToBarCode.BitBtnPrintBarcodeClick(Sender: TObject);
begin
inherited;
//打印不易控制
ProgressBar1.Position := 0;
RvProjectBarCode.ProjectFile := CurPath + '\条码\Probarcode.rav';
RvProjectBarCode.Execute;
BitBtnPrintBarcode.Enabled:=false;
//打印完成后再进行保存 //仅打印本次设置生成的条码
end;
procedure TFrmOrderToBarCode.EdtOrderIDKeyPress(Sender: TObject;
var Key: Char);
begin
inherited;
if (not (Key in ['0'..'9', #8])) then Key := #0;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -