unit U_CPSMCK;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage,
  cxEdit, DB, cxDBData, StdCtrls, ExtCtrls, ADODB, DBClient,
  cxGridCustomPopupMenu, cxGridPopupMenu, cxGridLevel, cxGridCustomTableView,
  cxGridTableView, cxGridDBTableView, cxClasses, cxControls, cxGridCustomView,
  cxGrid, MovePanel, cxCheckBox, Menus, ComCtrls, BtnEdit, ShellAPI, cxTextEdit;

type
  TfrmCPSMCK = class(TForm)
    ADOQueryTemp: TADOQuery;
    ADOQueryCmd: TADOQuery;
    DS_MainSel: TDataSource;
    CDS_MainSel: TClientDataSet;
    cxGridPopupMenu4: TcxGridPopupMenu;
    cxGrid3: TcxGrid;
    Tv3: TcxGridDBTableView;
    cxGridDBColumn1: TcxGridDBColumn;
    v3Column3: TcxGridDBColumn;
    cxGridDBColumn4: TcxGridDBColumn;
    v3Column1: TcxGridDBColumn;
    cxGridLevel1: TcxGridLevel;
    v3Column2: TcxGridDBColumn;
    Panel2: TPanel;
    Label5: TLabel;
    Label4: TLabel;
    CKOrdNo: TEdit;
    BaoID: TEdit;
    CRTime: TDateTimePicker;
    Button2: TButton;
    cxStyleRepository1: TcxStyleRepository;
    cxStyle1: TcxStyle;
    Label12: TLabel;
    CDS_Main: TClientDataSet;
    CRType: TEdit;
    Button1: TButton;
    v3Column4: TcxGridDBColumn;
    v3Column5: TcxGridDBColumn;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BaoIDKeyPress(Sender: TObject; var Key: Char);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    function YSData(Order_Main10: TClientDataSet): Boolean;
  private
    { Private declarations }
    FCKOrdNo, FSMStr, JXFlag: string;
    procedure TMPanDuan();
  public
    { Public declarations }
  end;

var
  frmCPSMCK: TfrmCPSMCK;

implementation

uses
  U_DataLink, U_Fun, MMSystem, U_PBKCList;

{$R *.dfm}

function TfrmCPSMCK.YSData(Order_Main10: TClientDataSet): Boolean;
var
  CRID, YFID, PriceUnit, OrderUnit, FComTaiTou, FromSubID: string;
  fprice, huilv: double;
begin
//  Result:=False;
//  fprice:=0;
//  huilv:=0;
//  PriceUnit:='RMB';
//  with Order_Main10 do
//  begin
//    begin
//      with ADOQueryTemp do
//      begin
//        Close;
//        SQL.Clear;
//        sql.Add('select *,fPrice=dbo.F_Get_Order_Price(MainID,subID) from JYOrder_Sub Where subID='''+Trim(Order_Main10.fieldbyname('subID').AsString)+'''');
//        Open;
//      end;
//      IF not ADOQueryTemp.IsEmpty then
//      begin
//        PriceUnit:=Trim(ADOQueryTemp.fieldbyname('PriceUnit').AsString);
//        OrderUnit:=Trim(ADOQueryTemp.fieldbyname('OrderUnit').AsString);
//        fPrice:= ADOQueryTemp.fieldbyname('fPrice').AsFloat;
//        huilv:= ADOQueryTemp.fieldbyname('huilv').AsFloat;
//      end;
//      IF huilv=0 then huilv:=1;
//      CRID:='0';
//      with ADOQueryTemp do
//      begin
//        Close;
//        sql.Clear;
//        sql.Add(' select * from YF_Money_CR ');
//        sql.Add(' where mainID='''+Trim(Order_Main10.fieldbyname('mainID').AsString)+'''');
//        sql.Add(' and subID='''+Trim(Order_Main10.fieldbyname('subID').AsString)+'''');
//        sql.Add(' and CRTime='''+FormatDateTime('yyyy-MM-dd',CRTime.Date)+'''') ;
//        sql.Add(' and YFName=''销售金额'' ');
//        Open;
//      end;
//      if ADOQueryTemp.IsEmpty then
//      begin
//        if GetLSNo(ADOQueryCmd,YFID,'CS','YF_Money_CR',3,1)=False then
//        begin
//          Application.MessageBox('取成品应收最大号失败!','提示',0);
//          Exit;
//        end;
//        with ADOQueryCmd do
//        begin
//          Close;
//          sql.Clear;
//          sql.Add('select * from YF_Money_CR where 1<>1');
//          Open;
//        end;
//        with ADOQueryCmd do
//        begin
//          Append;
//          FieldByName('YFID').Value:=Trim(YFID);
//          FieldByName('YFTypeId').Value:=Trim(Order_Main10.fieldbyname('mainID').AsString);
//          FieldByName('CRID').Value:=StrToInt(CRID);
//          FieldByName('Filler').Value:=Trim(DName);
//          FieldByName('CRType').Value:='应收款登记';
//          FieldByName('CRFlag').Value:='应收收';
//          FieldByName('QtyFlag').Value:=1;
//          FieldByName('FactoryName').Value:=Trim(TocustName.Text);
//          FieldByName('CRTime').Value:=Trim(FormatDateTime('yyyy-MM-dd',CRTime.Date));
//          FieldByName('YFType').Value:='自动生成';
//          FieldByName('Price').Value:=fprice;
//          FieldByName('HuiLv').Value:=huilv;
//          FieldByName('BZType').Value:=Trim(PriceUnit);
//          FieldByName('QtyUnit').Value:=Trim(OrderUnit);
//          FieldByName('ComTaiTou').Value:=Trim(FComTaiTou);
//          FieldByName('YFName').Value:='销售金额';
//          FieldByName('MainId').Value:=Trim(Order_Main10.fieldbyname('Mainid').AsString);
//          FieldByName('subID').Value:=Trim(Order_Main10.fieldbyname('subID').AsString);
//          FieldByName('OrderNO').Value:=Trim(Order_Main10.fieldbyname('OrderNO').AsString);
//          FieldByName('P_CodeName').Value:=Trim(Order_Main10.fieldbyname('MprtCodeName').AsString);
//          FieldByName('P_Spec').Value:=Trim(Order_Main10.fieldbyname('MprtSpec').AsString);
//          FieldByName('P_color').Value:=Trim(Order_Main10.fieldbyname('PRTColor').AsString);
//          FieldByName('status').Value:='0';
//          Post;
//        end;
//      end
//      else
//      begin
//        YFID:=Trim(ADOQueryTemp.fieldbyname('YFID').AsString);
//      end;
//      IF uppercase(OrderUnit)='KG' then
//      begin
//        with ADOQueryCmd do
//        begin
//          Close;
//          sql.Clear;
//          sql.Add('update YF_Money_CR Set Qty=(select isnull(Sum(B.MJQty4),0) from CK_BanCP_CR A,WFB_MJJY B where A.MJID=B.MJID and  A.MainID=YF_Money_CR.MainID and A.subID=YF_Money_CR.subID and A.CRtime=YF_Money_CR.CRTime and A.CRType=''销售出库'') ');
//          sql.Add(',PS=(select isnull(count(A.mainID),0) from CK_BanCP_CR A where A.maiNID=YF_Money_CR.maiNID and A.subID=YF_Money_CR.subID and A.CRtime=YF_Money_CR.CRTime and A.CRType=''销售出库'')  ');
//          sql.Add(' where YFID='''+Trim(YFID)+'''');
//          ExecSQL;
//        end;
//      end
//      else
//      IF (uppercase(OrderUnit)='Y') and (uppercase(Trim(Order_Main10.fieldbyname('QtyUnit').AsString))='M')  then
//      begin
//        with ADOQueryCmd do
//        begin
//          Close;
//          sql.Clear;
//          sql.Add('update YF_Money_CR Set Qty=(select cast(isnull(Sum(A.Qty),0)/0.9144 as decimal(18,1)) from CK_BanCP_CR A where A.MainID=YF_Money_CR.MainID and A.subID=YF_Money_CR.subID and A.CRtime=YF_Money_CR.CRTime and A.CRType=''销售出库'') ');
//          sql.Add(',PS=(select isnull(count(A.mainID),0) from CK_BanCP_CR A where A.maiNID=YF_Money_CR.maiNID and A.subID=YF_Money_CR.subID and A.CRtime=YF_Money_CR.CRTime and A.CRType=''销售出库'')  ');
//          sql.Add(' where YFID='''+Trim(YFID)+'''');
//          ExecSQL;
//        end;
//      end
//      else
//      IF (uppercase(OrderUnit)='M') and (uppercase(Trim(Order_Main10.fieldbyname('QtyUnit').AsString))='Y')  then
//      begin
//        with ADOQueryCmd do
//        begin
//          Close;
//          sql.Clear;
//          sql.Add('update YF_Money_CR Set Qty=(select cast(isnull(Sum(A.Qty),0)*0.9144 as decimal(18,1)) from CK_BanCP_CR A where A.MainID=YF_Money_CR.MainID and A.subID=YF_Money_CR.subID and A.CRtime=YF_Money_CR.CRTime and A.CRType=''销售出库'') ');
//          sql.Add(',PS=(select isnull(count(A.mainID),0) from CK_BanCP_CR A where A.maiNID=YF_Money_CR.maiNID and A.subID=YF_Money_CR.subID and A.CRtime=YF_Money_CR.CRTime and A.CRType=''销售出库'')  ');
//          sql.Add(' where YFID='''+Trim(YFID)+'''');
//          ExecSQL;
//        end;
//      end
//      else
//      begin
//        with ADOQueryCmd do
//        begin
//          Close;
//          sql.Clear;
//          sql.Add('update YF_Money_CR Set Qty=(select isnull(Sum(A.Qty),0) from CK_BanCP_CR A where A.MainID=YF_Money_CR.MainID and A.subID=YF_Money_CR.subID and A.CRtime=YF_Money_CR.CRTime and A.CRType=''销售出库'') ');
//          sql.Add(',PS=(select isnull(count(A.mainID),0) from CK_BanCP_CR A where A.maiNID=YF_Money_CR.maiNID and A.subID=YF_Money_CR.subID and A.CRtime=YF_Money_CR.CRTime and A.CRType=''销售出库'')  ');
//          sql.Add(' where YFID='''+Trim(YFID)+'''');
//          ExecSQL;
//        end;
//      end;
//      with ADOQueryCmd do
//      begin
//        Close;
//        sql.Clear;
//        sql.Add('Update YF_Money_CR Set Money=Price*Qty,BBMoney=Price*Qty*HuiLv');
//        sql.Add(' where YFID='''+Trim(YFID)+'''');
//        ExecSQL;
//      end;
//      with ADOQueryTemp do
//      begin
//        Close;
//        sql.Clear;
//        sql.Add('select * from YF_Money_CR where YFId='''+Trim(YFID)+'''');
//        Open;
//      end;
//      if ADOQueryTemp.FieldByName('Qty').Value=0 then
//      begin
//        with ADOQueryCmd do
//        begin
//          Close;
//          sql.Clear;
//          sql.Add('delete from YF_Money_CR where YFID='''+Trim(YFID)+'''');
//          ExecSQL;
//        end;
//      end;
//      //Next;
//    end;
//  end;
//  Result:=True;
end;

procedure TfrmCPSMCK.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TfrmCPSMCK.FormDestroy(Sender: TObject);
begin
  frmCPSMCK := nil;
end;

procedure TfrmCPSMCK.FormShow(Sender: TObject);
begin
  BaoID.SetFocus;
  ReadCxGrid('扫描出库', Tv3, '坯布仓库');
  CRTime.DateTime := SGetServerDate(ADOQueryTemp);
  with ADOQueryTemp do
  begin
    close;
    sql.Clear;
    sql.Add(' select A.*,B.CRID,C.C_Code PrtCode,C.C_CodeName PrtCodeName from WFB_MJJY_PB A');
    sql.Add(' inner join CK_PBCP_CR B on A.MJID=B.MJID and B.CRFlag=''入库'' ');
    sql.Add(' inner join Cloth_Sub C on C.SubId=B.SubId ');
    sql.Add('  where 1=2');
    Open;
  end;
  SCreateCDS20(ADOQueryTemp, CDS_MainSel);
//  SInitCDSData20(ADOQueryTemp,CDS_MainSel);
end;

procedure TfrmCPSMCK.TMPanDuan();
var
  FCKOrdNo: string;
begin
  //判断扫描的是发货申请单，还是布匹条码 ，判断是否已经扫描过发货单 ，或者更改了发货单
  JXFlag := '';
  FSMStr := Trim(BaoID.Text);

  begin
    if Trim(CKOrdNo.Text) = '' then
    begin
      if GetLSNo(ADOQueryCmd, FCKOrdNo, 'CC', 'CK_PBCp_CR', 4, 1) = False then
      begin
        PlaySound('数据保存失败暂停发货.wav', 0, SND_FILENAME or SND_ASYNC);
      end;
      CKOrdNo.Text := FCKOrdNo;
    end;

    with ADOQueryTemp do
    begin
      Close;
      sql.Clear;
      sql.Add(' select C.CKOrdNo from  WFB_MJJY_PB B ');
      sql.Add(' inner join CK_PBCP_CR C on B.MJID=C.MJID and C.CRFlag=''出库'' ');
      sql.Add(' where B.MJID=''' + Trim(FSMStr) + '''');
      Open;
    end;
    if ADOQueryTemp.IsEmpty = False then
    begin
      if Trim(ADOQueryTemp.fieldbyname('CKOrdNo').AsString) = Trim(CKOrdNo.Text) then
      begin
        JXFlag := '999';
        PlaySound('已扫描.wav', 0, SND_FILENAME or SND_ASYNC);
        Exit;
      end
      else
      begin
        JXFlag := '999';
        PlaySound('已出库暂停发货.wav', 0, SND_FILENAME or SND_ASYNC);
        Exit;
      end;
    end;
    with ADOQueryTemp do
    begin
      Close;
      sql.Clear;
      sql.Add(' select C.CKOrdNo,CPType from  CK_PBCP_CR C  ');
      sql.Add(' where C.CRFlag=''入库'' and C.MJID=''' + Trim(FSMStr) + '''');
      Open;
    end;
    if ADOQueryTemp.IsEmpty then
    begin
      JXFlag := '999';
      PlaySound('未入库暂停发货.wav', 0, SND_FILENAME or SND_ASYNC);
      Exit;
    end;
    if Trim(ADOQueryTemp.fieldbyname('CPType').AsString) <> '报废品' then
    begin
      JXFlag := '999';
      PlaySound('条码错误暂停发货.wav', 0, SND_FILENAME or SND_ASYNC);
      Exit;
    end
  end;
  //判断扫描的是发货申请单，还是布匹条码 ，判断是否已经扫描过发货单 ，或者更改了发货单    FHDate
end;

procedure TfrmCPSMCK.BaoIDKeyPress(Sender: TObject; var Key: Char);
var
  maxno, SMFlag, KYCKFlag, FMainId: string;
  FFQty: Integer;
begin
  if Key = #13 then
  begin
    TMPanDuan();
    if Trim(JXFlag) = '999' then
    begin
      BaoID.Text := '';
      Exit;
    end;

    with ADOQueryTemp do
    begin
      close;
      sql.Clear;
      sql.Add(' select A.*,B.CRID,C.C_Code PrtCode,C.C_CodeName PrtCodeName from WFB_MJJY_PB A');
      sql.Add(' inner join CK_PBCP_CR B on A.MJID=B.MJID and B.CRFlag=''入库'' ');
      sql.Add(' inner join Cloth_Sub C on C.SubId=B.SubId ');
      sql.Add('  where A. MJID=''' + Trim(BaoID.Text) + '''');
      Open;
    end;
    SCreateCDS20(ADOQueryTemp, CDS_Main);
    SInitCDSData20(ADOQueryTemp, CDS_Main);

    try
      with ADOQueryTemp do
      begin
        Close;
        sql.Clear;
        sql.Add('select * from CK_PBCp_KC where MJID=''' + Trim(BaoID.Text) + '''');
        sql.Add(' and KCKGQty>0');
        Open;
      end;
      if ADOQueryTemp.IsEmpty then
      begin
        KYCKFlag := '不能出库';
      end
      else
      begin
        KYCKFlag := '能出库';
      end;
      if Trim(KYCKFlag) = '能出库' then
      begin
        ADOQueryCmd.Connection.BeginTrans;
        with ADOQueryCmd do
        begin
          Close;
          sql.Clear;
          sql.Add('exec P_Do_PBCK @CRFlag=''出库'', @CKOrdNo=' + quotedstr(trim(CKOrdNo.Text))
          + ', @MJID=' + quotedstr(trim(CDS_Main.fieldbyname('MJID').asstring))
          + ', @DName=' + quotedstr(trim(DName)));
          ExecSQL;
        end;

        ADOQueryCmd.Connection.CommitTrans;
        with CDS_MainSel do
        begin
          Append;
          FieldByName('PrtCode').Value := Self.CDS_Main.fieldbyname('PrtCode').Value;
          FieldByName('PrtCodeName').Value := Self.CDS_Main.fieldbyname('PrtCodeName').Value;
          FieldByName('Mainid').Value := Self.CDS_Main.fieldbyname('Mainid').Value;
          FieldByName('SubID').Value := Self.CDS_Main.fieldbyname('SubID').Value;
          FieldByName('MJMaoZ').Value := Self.CDS_Main.fieldbyname('MJMaoZ').Value;
          FieldByName('MJId').Value := Self.CDS_Main.fieldbyname('MJId').Value;
          FieldByName('APXH').Value := Self.CDS_Main.fieldbyname('APXH').Value;
          FieldByName('MJStr3').Value := Self.CDS_Main.fieldbyname('MJStr3').Value;
          FieldByName('CarNo').Value := Self.CDS_Main.fieldbyname('CarNo').Value;
          Post;
        end;

        BaoID.Text := '';
        PlaySound('正确.wav', 0, SND_FILENAME or SND_ASYNC);
        Exit;
      end;
    except
      BaoID.Text := '';
      PlaySound('数据保存失败暂停发货.wav', 0, SND_FILENAME or SND_ASYNC);
      ADOQueryCmd.Connection.RollbackTrans;
      Application.MessageBox('出库异常！', '提示', 0);
    end;
  end;
end;

procedure TfrmCPSMCK.Button2Click(Sender: TObject);
begin
  Close;
  WriteCxGrid('扫描出库', Tv3, '坯布仓库');
end;

procedure TfrmCPSMCK.Button1Click(Sender: TObject);
var
  MKey: Char;
begin
  MKey := #13;
  try
    frmPBKCList := TfrmPBKCList.Create(self);
    with frmPBKCList do
    begin
      if ShowModal = 1 then
      begin
        while frmPBKCList.CDS_Main.Locate('SSel', true, []) do
        begin
          BaoID.Text := Trim(frmPBKCList.CDS_Main.fieldbyname('MJID').AsString);
          BaoIDKeyPress(BaoID, MKey);
          frmPBKCList.CDS_Main.Delete;
        end;
      end;
    end;
  finally
    frmPBKCList.Free;
  end;
end;

end.

