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

📄 depotoutputunit.pas

📁 简单的进销存系统,包含登陆等界面,内容丰富,各种技巧,适合初学者
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit depotOutputUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, ComCtrls, StdCtrls, ExtCtrls, DB, DBTables, ADODB;

type
  TdepotOutputfrm = class(TForm)
    P_back: TPanel;
    P_main: TPanel;
    Panel_down: TPanel;
    Bevel_bass: TBevel;
    L_count: TLabel;
    Panel_button: TPanel;
    PageScroller_input: TPageScroller;
    Panel1: TPanel;
    Label1: TLabel;
    Label3: TLabel;
    Label2: TLabel;
    DTP_date: TDateTimePicker;
    IMPSG_DATA: TStringGrid;
    L_title: TLabel;
    OKBtn: TButton;
    CancelBtn: TButton;
    ADOQuery_data: TADOQuery;
    DataSource_data: TDataSource;
    cb_depot: TComboBox;
    cb_ywy: TComboBox;
    function User_save: boolean;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure CancelBtnClick(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure IMPSG_DATADblClick(Sender: TObject);
    procedure IMPSG_DATAKeyPress(Sender: TObject; var Key: Char);
    procedure IMPSG_DATASelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure IMPSG_DATASetEditText(Sender: TObject; ACol, ARow: Integer;
      const Value: string);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure OKBtnClick(Sender: TObject);
  private
    I_lastcol, I_lastrow: integer;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  depotOutputfrm: TdepotOutputfrm;

implementation

uses MainUnit, GoodsSelectUnit, DMUnit,functionUnit, GoodsInfoUnit;

{$R *.dfm}

function TdepotOutputfrm.User_save: boolean;
var
  I_errordb, I_temp, I_count, I_recordcount, I_number: integer;
  S_depotid, S_tempid, S_id: string;
begin
  I_errordb := 0;
  I_count := 0;
  S_depotid := '';
  if CB_depot.Text = '' then
  begin
    messagedlg(Errormsg0002, mtwarning, [mbok], 0);
    cb_depot.SetFocus;
    result := false;
  end
  else
    result := true;
  /////////////////////////////////////////
  if result then
  begin
    for I_temp := 1 to 99 do //逐行检测进货记录是否有效
    begin
      if IMPSG_DATA.Cells[1, I_temp] <> '' then //有效记录
      begin
        inc(I_count);
        if (IMPSG_DATA.cells[4, I_temp] = '') or (IMPSG_DATA.cells[5, I_temp] = '') then
        begin
          messagedlg('第' + inttostr(I_temp) +'行记录的' + Errormsg0002, mtError, [mbok], 0);
          IMPSG_DATA.Row := I_temp;
          IMPSG_DATA.Col := 4;
          IMPSG_DATA.SetFocus;
          result := false;
          exit;
        end;
        try
          strtofloat(IMPSG_DATA.Cells[4, I_temp]);
          strtofloat(IMPSG_DATA.Cells[5, I_temp]);
        except
         messagedlg('第' + inttostr(I_temp) +'行记录的' + Errormsg0002 , mtError, [mbok], 0);
          IMPSG_DATA.Row := I_temp;
          IMPSG_DATA.Col := 4;
          IMPSG_DATA.SetFocus;
          result := false;
          exit;
        end;
      end;
    end;
    if I_count < 1 then
    begin
      result := false;
      messagedlg(Errormsg0008, mtwarning, [mbok], 0);
    end;
  end;
  //////////////////////
  if result then
  begin
    ////////////////////////////////////////////////////////////
    try
        with ADOQuery_data do
        begin

                close;
                sql.Clear;
                sql.Text := 'select id from depot where name=''' + cb_depot.Text + '''';
                open;
                S_depotid := fieldbyname('id').AsString;
                close;
        end;
       //检查主仓库是否有库存,即主仓库退货数量是否合法
       for I_temp := 1 to 99 do
        begin
          if IMPSG_DATA.Cells[1, I_temp] <> '' then //有效记录
          begin
            I_errordb := 1;
             with ADOQuery_data do
                begin
                        close;
                        close;
                        sql.Clear;
                        sql.text := 'select id,goodsnum from Storagerecord where depotid="'
                        + S_depotid + '" and goodsid="' + IMPSG_DATA.Cells[1, I_temp] + '"';
                        open;
                        S_id := fieldbyname('id').asstring;
                        I_number := fieldbyname('goodsnum').AsInteger - strtoint(IMPSG_DATA.cells[4, I_temp]);
                end;
            if (I_recordcount <= 0) or (s_id = '') then //本行商品没有库存记录
            begin
              messagedlg('在【' + cb_depot.Text + '】内' + Errormsg0009, mtwarning, [mbok], 0);
              impsg_data.Row := I_temp;
              impsg_data.Col := 1;
              result := false;
              close;
              exit;
            end
            else if I_number < 0 then //库存数量小于退货数量
            begin
              messagedlg('在【' + cb_depot.Text + '】内' + Errormsg0010, mtwarning, [mbok], 0);
              impsg_data.Row := I_temp;
              impsg_data.Col := 4;
              result := false;
              close;
              exit;
            end;
          end;
        end;
  /////////////////////////////////////////////////
        for I_temp := 1 to 99 do
        begin
             if IMPSG_DATA.Cells[1, I_temp] <> '' then //有效记录
             begin
                I_errordb := 1;  //销售记录更新
                with ADOQuery_data do
                begin
                        close;
                        sql.Clear;
                        ADOquery_data.SQL.Text:='insert into threcord (depotid,goodsid,goodsnum,mydate,id,goodsmemo,price)'
                        +' '+' Values(:id,:goodsid,:goodsnum,:mydate,:id,:goodsmemo,:price)';
                        Parameters.Items[0].Value:=S_depotid;
                        Parameters.Items[1].Value:=IMPSG_DATA.Cells[1, I_temp];
                        Parameters.Items[2].Value:=IMPSG_DATA.cells[4, I_temp];
                        Parameters.Items[3].Value:=formatdatetime('yyyy-mm-dd', DTP_date.DateTime);
                        Parameters.Items[4].Value:=Nowindex + '-' + inttostr(I_temp);
                        Parameters.Items[5].Value:=IMPSG_DATA.cells[7, i_temp];
                        Parameters.Items[6].Value:=IMPSG_DATA.cells[5, i_temp];
                        ExecSQL;
                        close;
                end;
                /////////////////////////////////
                I_errordb := 2; //库存记录表查询
                with ADOQuery_data do
                begin
                        close;
                        sql.clear;
                        sql.Text:= 'select id,goodsnum from Storagerecord where depotid=''' +
                        S_depotid + ''' and goodsid=''' + IMPSG_DATA.Cells[4, I_temp] + '''';
                        open;
                         //进货仓库统计
                        S_tempid := fieldbyname('id').asstring;
                        I_count := fieldbyname('goodsnum').AsInteger - strtoint(IMPSG_DATA.cells[4, I_temp]);
                        I_recordcount := recordcount;
                        close;
                end;
                ////////////////////////////////////
                I_errordb := 3;//库存记录更新
                with ADOQuery_data do
                begin
                   if (I_recordcount > 0) and (S_tempid <> '') then
                   begin
                      sql.Clear;
                      sql.Text := 'update Storagerecord set goodsnum=' + inttostr(I_count) + ',price=' + IMPSG_DATA.cells[5, I_temp]
                      + ' where id=''' + s_tempid + '''';
                      ADOquery_data.ExecSQL;
                      ADOquery_data.Close;
                   end
                   else
                   begin
                        close;
                        sql.Clear;
                        ADOquery_data.SQL.Text:='insert into Storagerecord (depotid,goodsid,goodsnum,price,id,goodsmemo)'
                        +' '+' Values(:depotid,:goodsid,:goodsnum,:price,:id,:goodsmemo)';
                        Parameters.Items[0].Value:=S_depotid;
                        Parameters.Items[1].Value:=IMPSG_DATA.Cells[1, I_temp];
                        Parameters.Items[2].Value:=I_count;
                        //Parameters.Items[2].Value:=IMPSG_DATA.cells[4, I_temp];
                        Parameters.Items[3].Value:=IMPSG_DATA.cells[5, I_temp];
                        Parameters.Items[4].Value:=Nowindex + '-' + inttostr(I_temp);
                        Parameters.Items[5].Value:=IMPSG_DATA.cells[7, i_temp] ; 
                        ExecSQL;
                        close;
                   end;
                end;
             end;
        end;
  
    except
        result := false;
        if I_errordb = 1 then
          messagedlg(Errormsg0001, mtwarning, [mbok], 0)
        else if I_errordb = 2 then
          messagedlg(Errormsg0004 , mtwarning, [mbok], 0)
        else if I_errordb = 3 then
          messagedlg(Errormsg0004 , mtwarning, [mbok], 0)
        else
                messagedlg(Errormsg0001 , mtwarning, [mbok], 0);
                close;
                exit;
    end;
  end;
end;  



procedure TdepotOutputfrm.FormCreate(Sender: TObject);
var
  I_windows: integer;
  i_temp: integer;
begin
  with MainForm do
  begin
    for I_windows := 0 to Panel_main.DockClientCount - 1 do
    begin
      Panel_main.DockClients[I_windows].Hide;
    end;
  end;
  I_lastcol := 1; //上一次编辑单元格位置指针
  I_lastrow := 1;
  dtp_date.DateTime := now;
    Adoquery_data.Connection:=DM.ADOCon;

  //初始化显示表格IMPSG_DATA
  with IMPSG_DATA do
  begin
    ColCount := 10;
    ColWidths[0] := 16;
    ColWidths[1] := 80;

⌨️ 快捷键说明

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