⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ordertobarcode.pas

📁 Barcode And LabelPrint
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    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 + -