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

📄 frmmaterialoutp.~pas

📁 二次开发模块 一、条形码的批量生成
💻 ~PAS
字号:
unit FrmMaterialOutP;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, dxExEdtr, DB, ADODB, Buttons, DBCtrls, StdCtrls, dxDBTLCl,
  dxGrClms, dxDBCtrl, dxDBGrid, dxTL, dxCntner, ExtCtrls, dfsSplitter,
  ComCtrls, xmldom, XMLIntf, msxmldom, XMLDoc;

type
  TFrmMaterialOut = class(TForm)
    Bevel1: TBevel;
    Panel1: TPanel;
    Panel2: TPanel;
    GroupBox1: TGroupBox;
    RadioButton1: TRadioButton;
    btnText: TButton;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    GroupBox2: TGroupBox;
    Date1: TDateTimePicker;
    btnCheck: TButton;
    btnXML: TButton;
    Panel3: TPanel;
    dfsSplitter1: TdfsSplitter;
    dxDBGrid1: TdxDBGrid;
    dxDBGrid1cc: TdxDBGridColumn;
    dxDBGrid1cOrderCode: TdxDBGridMaskColumn;
    dxDBGrid1cType: TdxDBGridColumn;
    dxDBGrid1cDeptName: TdxDBGridMaskColumn;
    dxDBGrid1cWhName: TdxDBGridMaskColumn;
    dxDBGrid1cError: TdxDBGridColumn;
    dxDBGrid1cMaker: TdxDBGridMaskColumn;
    dxDBGrid2: TdxDBGrid;
    dxDBGrid2cc: TdxDBGridColumn;
    dxDBGrid2cBarCode: TdxDBGridMaskColumn;
    dxDBGrid2cInvCode: TdxDBGridMaskColumn;
    dxDBGrid2cInvName: TdxDBGridMaskColumn;
    dxDBGrid2cInvStd: TdxDBGridMaskColumn;
    dxDBGrid2iQuantity: TdxDBGridMaskColumn;
    dxDBGrid2iUnitCost: TdxDBGridMaskColumn;
    dxDBGrid2iPrice: TdxDBGridCurrencyColumn;
    dxDBGrid2cError: TdxDBGridColumn;
    Panel4: TPanel;
    Label1: TLabel;
    btnOutHead: TSpeedButton;
    sbDelete: TSpeedButton;
    DBNavigator1: TDBNavigator;
    BtnSave: TBitBtn;
    Panel5: TPanel;
    Label2: TLabel;
    btnOutBody: TSpeedButton;
    SpeedButton1: TSpeedButton;
    Label3: TLabel;
    DBNavigator2: TDBNavigator;
    Qrymo: TADOQuery;
    Qrymoid: TAutoIncField;
    QrymocMaker: TStringField;
    QrymoPCID: TStringField;
    QrymocVouchType: TStringField;
    QrymocOrderCode: TStringField;
    Qrymoipurorderid: TIntegerField;
    QrymocType: TStringField;
    QrymocVenCode: TStringField;
    QrymocVenAbbName: TStringField;
    QrymocDept: TStringField;
    QrymocDeptName: TStringField;
    QrymocPerson: TStringField;
    QrymocPersonName: TStringField;
    QrymocWhCode: TStringField;
    QrymocWhName: TStringField;
    QrymocPTCode: TStringField;
    QrymocRdCode: TStringField;
    QrymocMemo: TStringField;
    Qrymoipurarriveid: TIntegerField;
    QrymocCusCode: TStringField;
    QrymocCusAbbName: TStringField;
    QrymocPTName: TStringField;
    QrymocSTCode: TStringField;
    QrymocSTName: TStringField;
    QrymoDLID: TIntegerField;
    Qrymocc: TStringField;
    QrymocError: TStringField;
    QrymocRdName: TStringField;
    dsQrymo: TDataSource;
    QrymoList: TADOQuery;
    QrymoListcc: TStringField;
    QrymoListID: TAutoIncField;
    QrymoListPCID: TStringField;
    QrymoListiPurID: TIntegerField;
    QrymoListcInvCode: TStringField;
    QrymoListcInvName: TStringField;
    QrymoListcInvStd: TStringField;
    QrymoListcBarCode: TStringField;
    QrymoListiQuantity: TFloatField;
    QrymoListiUnitCost: TFloatField;
    QrymoListiPrice: TBCDField;
    QrymoListiPosID: TIntegerField;
    QrymoListcError: TStringField;
    QrymoListiArrsId: TIntegerField;
    QrymoListcVouchType: TStringField;
    QrymoListiDLsID: TIntegerField;
    dsQrymoList: TDataSource;
    LsQryPop: TADOQuery;
    QryCheckPo: TADOQuery;
    QryCheckType: TADOQuery;
    SaveDialog1: TSaveDialog;
    RadioButton2: TRadioButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure btnTextClick(Sender: TObject);
    procedure FindList;
    procedure RefData;
    procedure btnCheckClick(Sender: TObject);
    procedure BtnSaveClick(Sender: TObject);
    procedure sbDeleteClick(Sender: TObject);
    procedure btnOutHeadClick(Sender: TObject);
    procedure btnOutBodyClick(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure QrymoAfterPost(DataSet: TDataSet);
    procedure QrymoAfterScroll(DataSet: TDataSet);
    procedure QrymoBeforeEdit(DataSet: TDataSet);
    procedure QrymoBeforePost(DataSet: TDataSet);
    procedure QrymoListAfterScroll(DataSet: TDataSet);
    procedure QrymoListBeforeEdit(DataSet: TDataSet);
    Procedure UpdateType(cType:String);
    procedure btnXMLClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmMaterialOut: TFrmMaterialOut;

implementation

uses DataDmP, SUFunctionP, FrmMainP;

{$R *.dfm}

procedure TFrmMaterialOut.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  DataDm.DeleteTabe('Szb_PurIn','11');
  DataDm.DeleteTabe('Szb_PurInList','11');
  Action:=caFree;
  FrmMaterialOut:=nil;
end;

procedure TFrmMaterialOut.FormShow(Sender: TObject);
begin
  CheckBox2.Checked:=False;
  date1.Date:=Date();
  SUFunction.SetGridColor(dxDBGrid1);
  SUFunction.SetGridColor(dxDBGrid2);
end;

procedure TFrmMaterialOut.btnTextClick(Sender: TObject);
begin
  if RadioButton1.Checked  then
     FrmMain.ReadTxtFile('MO.TXT','0','11',Qrymo);

  FindList;
  btnCheck.Enabled:=True;
  btnCheck.Click;
end;

procedure TFrmMaterialOut.FindList;
Var ii:Integer;
begin
  QrymoList.Close;
  if Qrymo.RecordCount=0 then Exit;
  ii:=Qrymo.FieldByName('ID').AsInteger;
  QrymoList.SQL.Clear;
  QrymoList.SQL.Add('select * from Szb_PurInList');
  QrymoList.SQL.Add('Where (PCID='''+FrmMain.PCID+''')');
  QrymoList.SQL.Add(' And  (iPurID='+IntToStr(II)+')');
  QrymoList.Open;
  Label1.Caption:='记录:'+IntToStr(Qrymo.RecNo)+'/'+IntToStr(Qrymo.RecordCount);
  Label2.Caption:='记录:'+IntToStr(QrymoList.RecNo)+'/'+IntToStr(QrymoList.RecordCount);

end;

procedure TFrmMaterialOut.RefData;
Var ii:Integer;
begin
 II:=Qrymo.RecNo;
 CheckBox1.Checked:=False;
 Qrymo.Close;
 Qrymo.Open;
 CheckBox1.Checked:=True;
 FindList;

end;

procedure TFrmMaterialOut.btnCheckClick(Sender: TObject);
begin
  btnXML.Enabled:=False;
  FrmMain.CheckInv('11');
  FrmMain.UpdateInv('11');
  if RadioButton1.Checked then
    begin
      FrmMain.CheckType('无上游单据','11');
      UpdateType('无上游单据');
    end;
  RefData;
  FrmMain.SumNumber('11',Label3);
  btnXML.Enabled:=True;
end;

procedure TFrmMaterialOut.BtnSaveClick(Sender: TObject);
begin
  if (Qrymo.State = dsEdit) or (Qrymo.State = dsInsert) then
      Qrymo.Post;
  btnCheck.Click;
end;

procedure TFrmMaterialOut.sbDeleteClick(Sender: TObject);
begin
   CheckBox1.Checked:=False;
   FrmMain.DeleteRD(Qrymo);
   FindList;
   CheckBox1.Checked:=True;
   FrmMain.SumNumber('11',Label3);
end;

procedure TFrmMaterialOut.btnOutHeadClick(Sender: TObject);
begin
  SUFunction.DBGridSaveToFile(dxDBGrid1,'材料出库单.xls');
end;

procedure TFrmMaterialOut.btnOutBodyClick(Sender: TObject);
begin
  SUFunction.DBGridSaveToFile(dxDBGrid2,'材料出库单表体.xls');
end;

procedure TFrmMaterialOut.SpeedButton1Click(Sender: TObject);
Var ii,kk,nn: Integer;
begin
     ii:=Qrymo.FieldByName('ID').AsInteger;
     kk:=QrymoList.FieldByName('ID').AsInteger;
     nn:=QrymoList.RecNo;
     FrmMain.DeleteRDS(ii,kk);
     FindList;
     QrymoList.MoveBy(nn-1);
     FrmMain.SumNumber('11',Label3);
end;

procedure TFrmMaterialOut.QrymoAfterPost(DataSet: TDataSet);
Var ii:Integer;
begin
   ii:=Qrymo.FieldByName('ID').AsInteger;
   FrmMain.UpdateNull(ii,'11');
end;

procedure TFrmMaterialOut.QrymoAfterScroll(DataSet: TDataSet);
begin
  if CheckBox1.Checked then
     FindList;
end;

procedure TFrmMaterialOut.QrymoBeforeEdit(DataSet: TDataSet);
begin
  if not CheckBox2.Checked then Abort;
end;

procedure TFrmMaterialOut.QrymoBeforePost(DataSet: TDataSet);
Var II:Integer;
begin
   II:=Application.MessageBox('数据已修改,是否保存?','信息',MB_YESNOCANCEL+ MB_ICONINFORMATION);
   if II=IDNO	then
     begin
      Qrymo.Cancel;
      Abort;
     end;
   if II=IDCANCEL	then
     begin
      Abort;
     end;
end;

procedure TFrmMaterialOut.QrymoListAfterScroll(DataSet: TDataSet);
begin
  Label2.Caption:='记录:'+IntToStr(QrymoList.RecNo)+'/'+IntToStr(QrymoList.RecordCount);
end;

procedure TFrmMaterialOut.QrymoListBeforeEdit(DataSet: TDataSet);
begin
  Abort;
end;

procedure TFrmMaterialOut.UpdateType(cType: String);
Var LsQry:TADOQuery;
begin
  LsQry:=TADOQuery.Create(Self);
  LsQry.Connection:=DataDm.AdoConUfsoft;
  LsQry.SQL.Add('update Szb_PurIn set Szb_PurIn.cWhcode=aa.cWhcode,Szb_PurIn.cWhName=aa.cWhName,Szb_PurIn.cRdCode=aa.cRdCodeOut,Szb_PurIn.cRdName=aa.cRdNameOut');
  LsQry.SQL.Add('FROM (SELECT *');
  LsQry.SQL.Add('        FROM szb_ini');
  LsQry.SQL.Add('        WHERE (Szb_Ini.cMaker = '''+DataDm.Maker+''')');
  LsQry.SQL.Add('         AND  (Szb_Ini.cVouch = ''11'')');
  LsQry.SQL.Add('         AND  (Szb_Ini.cType = '''+ctype+'''))');
  LsQry.SQL.Add('      AA INNER JOIN');
  LsQry.SQL.Add('      Szb_PurIn ON AA.cNO = Szb_PurIn.cType');
  LsQry.SQL.Add('Where  (Szb_PurIn.PCID='''+FrmMain.PCID+''')');
  LsQry.SQL.Add(' And   (Szb_PurIn.cVouchType=''11'')');
  LsQry.ExecSQL;
  LsQry.Destroy;

end;

procedure TFrmMaterialOut.btnXMLClick(Sender: TObject);
var xmlDoc:IXMLDocument; RootNode,FirstNode,aNode,bNode:IXMLNode;
    ii,vt_id:Integer;
    LsStr,cDate:String;
begin
  btnCheck.Click;
 cDate:=Trim(DateToStr(Date1.Date));
 DataDm.CheckLin(cDate);
{ if RadioButton1.Checked then
    FrmMain.GetNullNumber('采购订单','01');
 if RadioButton2.Checked then
    FrmMain.GetNullNumber('采购到货单','01');
}
 LsStr:=SUFunction.ReadInformation('XML文件保存路径','cValue','');
 vt_id:=StrToIntDef(SUFunction.ReadInformation('材料出库单ID','cValue',''),0);
 if vt_id=0 then
   begin
     Application.MessageBox(Pchar('材料出库单ID不能为空,请设置!'),'信息',MB_OK+ MB_ICONINFORMATION);
     Abort;
   end;
 SaveDialog1.InitialDir:=LsStr;
 SaveDialog1.FileName:='材料出库单_'+FrmMain.GetFileDate+'.xml';
 if not SaveDialog1.Execute then Abort;
 LsStr:=FrmMain.CheckFileName(SaveDialog1.FileName);
 RefData;
// cDate:=Trim(DateToStr(Date1.Date));
 xmlDoc:= TXMLDocument.Create(nil);
 xmlDoc.Active := True;
// xmlDoc.Version := '1.0';
 xmlDoc.Encoding :='GB2312';
 try
//加入根结点

   FirstNode:=xmlDoc.AddChild('vouchers');
   FirstNode.SetAttribute('vouchertype', '11');
   FirstNode.SetAttribute('withdraw', 'False');
   //加入子结点
   while not Qrymo.Eof do
     begin
       RootNode:=FirstNode.AddChild('voucher');
       RootNode.SetAttribute('worked', 'False');
    //   bNode:=aNode;
       //设置接点主表属性

       aNode:=RootNode.AddChild('header');
       aNode.SetAttribute('brdflag'    ,'1');
       aNode.SetAttribute('cvouchtype' ,'11');
       aNode.SetAttribute('cbustype'   ,'领料');
       aNode.SetAttribute('ddate'      ,cDate);
       aNode.SetAttribute('csource'    ,'库存');
       aNode.SetAttribute('cwhcode'    ,Qrymo.FieldByName('cWhCode').AsString);
       aNode.SetAttribute('cwhname'    ,Qrymo.FieldByName('cWhName').AsString);
//       aNode.SetAttribute('crdcode'    ,Qrymo.FieldByName('crdcode').AsString);
//       aNode.SetAttribute('crdname'    ,Qrymo.FieldByName('crdname').AsString);
       aNode.SetAttribute('cdepcode'   ,Qrymo.FieldByName('cdept').AsString);
       aNode.SetAttribute('cmaker'     ,Qrymo.FieldByName('cMaker').AsString);
       aNode.SetAttribute('vt_id'      ,vt_id);
       //设置接点子表属性
       QrymoList.First;
       while not QrymoList.Eof do
         begin
           bNode:=RootNode.AddChild('body') ;
           bNode:=bNode.AddChild('item') ;
           bNode.SetAttribute('cinvcode', QrymoList.FieldByName('cinvcode').AsString);
           bNode.SetAttribute('cinvname', QrymoList.FieldByName('cinvName').AsString);
           bNode.SetAttribute('cinvstd' , QrymoList.FieldByName('cinvStd').AsString);
           bNode.SetAttribute('cbarcode', QrymoList.FieldByName('cBarcode').AsString);
           bNode.SetAttribute('iquantity',QrymoList.FieldByName('iQuantity').asfloat);
           bNode.SetAttribute('cFree1',   QrymoList.FieldByName('cFree1').AsString);
           bNode.SetAttribute('cFree2',   QrymoList.FieldByName('cFree2').AsString);              
           QrymoList.Next;
         End;
       Qrymo.Next;
    end;
   xmlDoc.SaveToFile(LsStr);
 finally
   xmlDoc := nil ;
 end;
 Application.MessageBox(Pchar('生成用友材料出库单XML成功!'),'信息',MB_OK+ MB_ICONINFORMATION);

end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -