📄 ordertobarcode.pas
字号:
exit;
end;
with StockDM.QOrders do
begin
if not Active then Active := true;
if Locate('OrderID;PostDate', VarArrayOf([edtOrderID.Text, FormatDateTime('yyyy-mm-dd',DateTimePickerPostDate.Date)]), []) then //checkValue('OrderS', 'OrderID', edtOrderID.Text)
begin //限制编号不可重复否则打印不好控制一次性只打印本次所输的
messagedlg(FormatDateTime('yyyy年mm月dd日', DateTimePickerPostDate.Date) + '内此订单号已经存在,请重输!', mtinformation, [mbok], 0);
exit;
end;
end;
for i := 1 to StringGridOrder.RowCount - 1 do
begin
for j := i + 1 to StringGridOrder.RowCount - 1 do
begin
if (trim(StringGridOrder.Cells[1, i])<>'')and (trim(StringGridOrder.Cells[1, j])<>'')then
if (trim(StringGridOrder.Cells[1, i]) = trim(StringGridOrder.Cells[1, j])) then
begin
ShowMessage('同订单内不可有相同机型!');
exit;
end;
end;
end;
if messagedlg('一旦提交将不可修改,请保证输入正确,而且此订单信息完整', mtinformation, [mbok, mbno], 0) = mrNO then exit;
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;
if ProgressBar1.Max <= 0 then
begin
ShowMessage('此订单还无生产项目,请输入!');
exit;
end;
//开始保存数据
StockDM.ADOConn.BeginTrans; //进入事务管理
try
//保存订单明细(机型与数量)
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 := 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['OrderIDID'] := StockDM.QOrders.FieldValues['ID'];
FieldValues['DevNum'] := DevNum;
FieldValues['Num'] := num;
FieldValues['UPDateDate'] := FormatDateTime('yyyy-mm-dd',Date); //生产日期
FieldValues['Memo'] := trim(Cells[3, i]);
//GetDevHardOptionsNumAndEName(Cells[1, i], NumS, Enames);
//MemoMemo.Text:=Enames;
FieldValues['devHardOptions'] := trim(Cells[3, i]); //Enames; //NumS;
post;
//保存并生成条码 起始号
SerialNumberStart := CreateSerialNumberStart(strtoint(DevNum), DateTimePickerPostDate.Date, edtOrderID.Text);
//仅取出4位索引号以便进行计数
LastSerialNumberInt := strtoint(copy(SerialNumberStart, length(SerialNumberStart) - 4 + 1, 4));
//前9位
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);
if Locate('BarCode', SerialNumberTemp, []) then
begin
ShowMessage(SerialNumberTemp + '条码已经入库,可能订单号有误请检查!');
stockdm.ADOConn.RollbackTrans;
exit;
// raise Exception.Create();
end;
Append;
FieldValues['BarCode'] := SerialNumberTemp;
FieldValues['GBarCodeID'] := StockDM.QGBarCode.FieldValues['GBarCodeID'];
FieldValues['OrderID'] := edtOrderID.Text;
FieldValues['DevNum'] := DevNum;
FieldValues['CustomerName'] := EdtCustomer.Text;
FieldValues['IsInCome'] := false;
FieldValues['IsOutCome'] := false;
FieldValues['PostDate'] := FormatDateTime('yyyy-mm-dd',Date); //生产日期
//GetDevHardOptionsNumAndEName(Cells[1, i], NumS, Enames);
//MemoMemo.Text:=Enames;
FieldValues['devHardOptions'] := trim(Cells[3, i]); //Enames; // NumS
//FieldValues['InComeDate'] := FormatDateTime('yyyy-mm-dd',Date); //生产日期
//FieldValues['InComeDate'] := FormatDateTime('yyyy-mm-dd',Date); //生产日期
if chk2Copy.Checked then
begin
FieldValues['IsPack'] := true;
FieldValues['PackDate'] := FormatDateTime('yyyy-mm-dd',Date);
FieldValues['PackTime'] := time;
end
else
FieldValues['IsPack'] := false;
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
//保存订单基本信息
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'] := FormatDateTime('yyyy-mm-dd',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'] := FormatDateTime('yyyy-mm-dd',Date); //生产日期
post;
end;
stockdm.ADOConn.CommitTrans;
except
on E: Exception do
begin
ShowMessage('保存数据时出现错误,请检查后重新提交!可能原因'+e.Message);
stockdm.ADOConn.RollbackTrans;
end;
end;
loadBarcodeToTreeView; //过滤并在treeView上显示显示
StockDM.QGBarCode.close;
StockDM.QGBarCode.Filter:= 'OrderID=' + EdtOrderID.Text + ' and UPDateDate=' + FormatDateTime('yyyy-mm-dd',date) + ''; //过滤此订单的所有机型的数据并且是今天
//StockDM.QGBarCode.Filter := 'OrderID=' + EdtOrderID.Text + ''; //过滤此订单的所有条码,准备打印
StockDM.QGBarCode.Filtered := true;
StockDM.QGBarCode.Active := true;
StockDM.QSQLBarCode.close;
StockDM.QSQLBarCode.Filter:= 'OrderID=' + EdtOrderID.Text + ' and postDate=' + FormatDateTime('yyyy-mm-dd',date) + ''; //过滤此订单的所有机型的数据并且是今天
//StockDM.QSQLBarCode.Filter := 'OrderID=' + EdtOrderID.Text + ''; //过滤此订单的所有条码,准备打印
StockDM.QSQLBarCode.Filtered := true;
StockDM.QSQLBarCode.Active := true;
printCopies := 1;
if StockDM.QSQLBarCode.RecordCount >= 1 then
begin
BitBtnPrintBarcode.Caption := '打印第一份条码';
BitBtnPrintBarcode.Enabled := true;
BitBtn1.Enabled := true;
getStatInfo;
PageControl1.ActivePageIndex := 0;
end;
end;
procedure TFrmOrderToBarCode.getStatInfo;
begin
with QToday do
begin
close;
sql.Clear;
sql.Add(Format('select OrderID,PostDate from Orders where PostDate=''%s''', [FormatDateTime('yyyy-mm-dd',date)]));
open;
LabelTodayOrderCount.Caption := inttostr(RecordCount);
LabelTodayOrderCount.Refresh;
close;
sql.Clear;
sql.Add(Format('select BarCode,PostDate from BarCode where PostDate=''%s''', [FormatDateTime('yyyy-mm-dd',date)]));
open;
LabelTodayCount.Caption := inttostr(RecordCount);
LabelTodayCount.Refresh;
close;
sql.Clear;
sql.Add(Format('select BarCode,OrderID from BarCode where OrderID=''%s''', [EdtOrderID.Text]));
open;
LabelThisCount.Caption := inttostr(RecordCount);
LabelThisCount.Refresh;
end;
end;
procedure TFrmOrderToBarCode.BitBtn1Click(Sender: TObject);
begin
inherited;
with QToday do
begin
close;
sql.Clear;
sql.Add(Format('select distinct a.BarCode 条码,a.PostDate 生产日期, a.OrderID 订单号,b.CustomerName 客户,c.DevName 机型 from BarCode a ,Orders b,DeviceType c where a.OrderID=b.OrderID and a.devnum=c.devnum and a.OrderID=''%s''', [EdtOrderID.Text]));
open;
if recordcount >= 1 then ExportToExcel(QToday);
end;
end;
procedure TFrmOrderToBarCode.loadBarcodeToTreeView;
var nodeDevName, nodeCode: TTreeNode;
begin
with StockDM.QGBarCode do
begin
fcTreeViewBarcode.Items.Clear;
close;
Filter := 'OrderID=' + EdtOrderID.Text + ' and UPDateDate=' + FormatDateTime('yyyy-mm-dd',date) + ''; //过滤此订单的所有机型的数据并且是今天
//ShowMessage(Filter);
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;
StockDM.QSQLBarCode.Filtered := false;
Filtered := false;
end;
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('000' + INIDeviceNumStr, length(INIDeviceNumStr) + 1, 3); //机型编号3位
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;
SerialNumberStart := SerialNumberStart;// + '0001'; //0000 从第一开始
Result := SerialNumberStart;
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);
var
MyPage: TRavePage;
begin
inherited;
//打印不易控制
ProgressBar1.Position := 0;
RvProjectBarCode.ProjectFile := CurPath + '\条码\Probarcode.rav';
RvProjectBarCode.Open;
{With RvProjectBarCode.ProjMan do
begin
Units:=unInch;
MyPage := FindRaveComponent('Report1.Page1',nil) as TRavePage; //查找
//MyPage.PaperSize:=DMPAPER_dUSER; //加上之后条码显示不全只能显示一页前6行,后4行无法预览和打印
MyPage.PageHeight:=8;//*25.4;//220;;
MyPage.PageWidth:=4;//*25.4;//220;;
MyPage.Resize; //设置报 表页的尺寸
end;}
if CheckBoxSetPrint.Checked then
RvSystemBarCode.SystemSetups := [ssAllowSetup, ssAllowCopies, ssAllowDestPreview, ssAllowDestPrinter, ssAllowPrinterSetup, ssAllowPreviewSetup]
else
RvSystemBarCode.SystemSetups := [];
if ChkPreview.Checked then RvSystemBarCode.DefaultDest := rdPreview
else RvSystemBarCode.DefaultDest := rdPrinter;
// RvSystemBarCode.
// // if CheckBox1.Checked then
//setPaterSize(8,3);
RvProjectBarCode.ExecuteReport('Report1');
//打印完成后再进行保存 //仅打印本次设置生成的条码
//StockDM.QSQLBarCode.close;
//StockDM.QSQLBarCode.Filter := 'OrderID=' + EdtOrderID.Text + ''; //过滤此订单的所有条码,准备打印
//StockDM.QGBarCode.close;
//StockDM.QGBarCode.Filter := 'OrderID=' + EdtOrderID.Text + ''; //过滤此订单的所有条码,准备打印
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -