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

📄 invdm.pas

📁 文件包含程序源原文件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    lcP := SearchFieldDefData(TableName, lcUdP^.Index);
    if lcP = nil then begin
      Error := -1;
      Exit;
    end;
    Sqls := Sqls + Sep + lcP^.ColumnName +
             '=' + MakeUpdateValue(lcP^.DataType, lcUdP^.TARGET);
    Sep := ',';
  end;
  if RecIdType = 0 then SRecId := 'rec_id'
  else SRecId := 'rec_id';
  Result := 'UPDATE ' + TableName + ' SET '+ Sqls +
            ' WHERE ' + SRecId + '=' + IntToStr(Recid);
end;

{***********************************************************************************}
procedure Tdm_Inventory.DataModuleCreate(Sender: TObject);
var
  Alias, UserName, Password: string;
begin
  LoadDBInfo(Alias, UserName, Password);
  DBConnected := DataBaseOpen(Alias, UserName, Password);

  if not DBConnected then Exit;

  RecIdType := 1;
  //-- TList Create & Public List Data Read
  FAllIOList := TList.Create;
  FAllIOList.Clear;

  FShiZaiList := TList.Create;
  FShiZaiList.Clear;

  FEmpList := TList.Create;
  FEmpList.Clear;

  FGuageList := TList.Create;
  FGuageList.Clear;

  FInOutIDList := TList.Create;
  FInOutIDList.Clear;

  ShigenTBL  := TList.Create;
  ShigenTBL.Clear;

  FDepartShigen := TList.Create;
  FDepartShigen.Clear;

  SeihinTBL  := TList.Create;
  SeihinTBL.Clear;

  shizai_kubunList := TList.Create;
  shizai_kubunList.Clear;

  FInOutStkList := TList.Create;
  FInOutStkList.Clear;

  FInOutStkCostList := TList.Create;
  FInOutStkCostList.Clear;

  FUserPrivilegeList := TList.Create;
  FUserPrivilegeList.Clear;

  ReRead_Cnt := 0;
  Delete_Cnt := 0;
  SetLength(ReRead_RID, ReRead_Cnt);
  SetLength(Delete_RID, Delete_Cnt);
  SetTableDefs;

  Delete_RepeatMaterialcode;
  
  Read_empInfo;
  Read_MatGuageInfo(FGuageList);
  Read_IOIDInfo(-1, FInOutIDList);
  ReadShigen;
  ReadDepartment;
  ReadSeihin;
  ReadShiZai_Kubun;
  ReadShizai(FShiZaiList);
  
  Read_UserPrivilegeList(FUserPrivilegeList);

  cUType[00] := GetMultiLingalMsg(3101, 'PCS');
  cUType[01] := GetMultiLingalMsg(3102, '套');
  cUType[02] := GetMultiLingalMsg(3103, '支');
  cUType[03] := GetMultiLingalMsg(3104, '卷');
  cUType[04] := GetMultiLingalMsg(3105, '批');
  cUType[05] := GetMultiLingalMsg(3106, '块');
  cUType[06] := GetMultiLingalMsg(3107, '双');
  cUType[07] := GetMultiLingalMsg(3108, '付');
  cUType[08] := GetMultiLingalMsg(3109, '桶');
  cUType[09] := GetMultiLingalMsg(3110, '个');
  cUType[10] := GetMultiLingalMsg(3111, '公斤');
  cUType[11] := GetMultiLingalMsg(3112, '吨');
  cUType[12] := GetMultiLingalMsg(3113, '条');
  cUType[13] := GetMultiLingalMsg(3114, '打');
  cUType[14] := GetMultiLingalMsg(3115, '把');
  cUType[15] := GetMultiLingalMsg(3116, '张');
  cUType[16] := GetMultiLingalMsg(3117, '枚');
  cUType[17] := GetMultiLingalMsg(3118, '根');
  cUType[18] := GetMultiLingalMsg(3119, '台');
  cUType[19] := GetMultiLingalMsg(3120, '杯');

end;

procedure Tdm_Inventory.DataModuleDestroy(Sender: TObject);
begin
  if DBConnected then begin
    //-- TList Variant Release
    ListFreeMemory(FShiZaiList);
    ListFreeMemory(FEmpList);
    ListFreeMemory(FGuageList);
    ListFreeMemory(FAllIOList);
    ListFreeMemory(FInOutIDList);
    ListFreeMemory(ShigenTBL);
    ListFreeMemory(FDepartShigen);
    ListFreeMemory(SeihinTBL);
    ListFreeMemory(shizai_kubunList);
    ListFreeMemory(FInOutStkList);
    ListFreeMemory(FInOutStkCostList);
  end;
  DatabaseClose;
end;

{***********************************************************************************}
procedure Tdm_Inventory.LoadDBInfo(var Alias, UserName, Password: string);
var
  IniFile: TIniFile;
begin
  IniFile := TIniFile.Create(ChangeFileExt(ParamStr(0), '.INI'));
  with IniFile do begin
    UserName := IniFile.ReadString('LOGIN', 'UI', 'DP40');
    Password := IniFile.ReadString('LOGIN', 'PA', '4640');
    Alias    := IniFile.ReadString('LOGIN', 'ALIAS', 'PM');

    IniData.OutPrice     := ReadString('UNITPIRCE', 'OutPrice','0');
    IniData.InPrice      := ReadString('UNITPIRCE', 'InPrice','0');
    IniData.isExcelPrint := (ReadString('ExcelPrint','Print','0')='0');
    IniData.isCheckQty   := (ReadString('CheckStatus', 'checkQty', '0') = '0');
    IniData.isTuneQty    := (ReadString('CheckStatus', 'tuneQty', '0') = '0');
    IniData.matstkid     := ReadString('CheckStatus', 'matstkid','A');
    IniData.otherstkid   := ReadString('CheckStatus', 'otherstkid','B');

    Free;
  end;
end;

function Tdm_Inventory.DatabaseOpen(Alias, UserName, PassWord: string): Boolean;
begin
  Result := True;
  try
    DataBase.Connected    := False;
    DataBase.LoginPrompt  := False;
    DataBase.AliasName    := Alias;
    DataBase.DatabaseName := 'POPDB';
    DataBase.Params.Clear;
    DataBase.Params.Add('USER NAME='+ UserName);
    DataBase.Params.Add('PASSWORD=' + Password);
    DataBase.DatabaseName   := DataBase.DatabaseName;
    Query.DatabaseName      := DataBase.DatabaseName;
    StoredProc.DatabaseName := DataBase.DatabaseName;
    qryAutoPaperNo.DatabaseName := DataBase.DatabaseName;
    StpInOutStk.DatabaseName    := DataBase.DatabaseName;
    qrypm_mrp.DatabaseName        := DataBase.DatabaseName;
    //-- Initlize TQuery & TStoreProc.Database

    DataBase.Connected    := True;
  except
    Result := False;
  end;
end;

procedure Tdm_Inventory.DatabaseClose;
begin
  DataBase.Close;
  DataBase.Connected := False;
end;

{***********************************************************************************}
Function  Tdm_Inventory.CreateQuery(qryName: string; dbName: string): TQuery;
var
  sQry: TQuery;
Begin
  sQry := TQuery.Create(nil);
  with sQry do
  begin
    Name := qryName;
    DatabaseName := dbName;
    SQL.Clear;
  end;
  result := sQry;
end;

Function  Tdm_Inventory.CreateStroreProc(StorProc: string; dbName: string): TStoredProc;
var
  tmpStoreProc: TStoredProc;
begin
  tmpStoreProc := TStoredProc.Create(nil);
  with tmpStoreProc do
  begin
    Name := StorProc;
    DatabaseName := dbName;
    SessionName  := SessionName;
    Params.Clear;
  end;
  result := tmpStoreProc
end;

function Tdm_Inventory.ExecuteQuery(Sqls: string): Boolean;
begin
  Result := True;
  with Query do begin
    Active := False;
    RequestLive :=False;
    Sql.Clear;
    Sql.Add(Sqls);
    try
      RequestLive := True;
      ExecSQL;
    except
      RequestLive :=False;
      Result := False;
    end;
    Close;
  end;
end;

function Tdm_Inventory.GetRecid1: LongInt;
begin
  with StoredProc do begin
    close;
    StoredProcName := 'GetRecid1';
    Params.Clear;
    Params.CreateParam(ftInteger, '@outrecid', ptOutput).AsInteger;
    Prepare;
    ExecProc;
    try
      Result := ParamByName('@outrecid').AsInteger;
    except
      Result := 0;
    end;
    Unprepare;
  end;
end;

//--  get REC_ID
function Tdm_Inventory.GetRecid7: LongInt;
begin
  with StoredProc do begin
    close;
    StoredProcName := 'GetRecid7';
    Params.Clear;
    Params.CreateParam(ftInteger, '@outrecid', ptOutput).AsInteger;
    Prepare;
    ExecProc;
    try
      Result := ParamByName('@outrecid').AsInteger;
    except
      Result := 0;
    end;
    Unprepare;
  end;
end;

{***********************************************************************************}
procedure Tdm_Inventory.ListFreeMemory(List:TList);
var
  i: Integer;
begin
  for i:=0 to List.Count-1 do Dispose(List[i]);
  List.Clear;
end;


{***********************************************************************************}
function  Tdm_Inventory.UpdateDatabase(TableName: string; var Recid: LongInt; UpdateList: TList): Integer;
var
  Error: Integer;
  Sqls:  string;
  InvValue: TINVENTORY_VALUE;
  TmpRecId, OrderID,
  PartID, ProcessID: Integer;
  iBool: Boolean;
  irtnqty,irtnweight,amount: double;
begin
  TmpRecId := Recid;

  ZeroMemory(@InvValue, SizeOf(TINVENTORY_VALUE));

  InvValue.inv_rec_id := Recid;
  GetInvData(InvValue, UpdateList, Error);
  InvValue.hiyo_kubun_rec_id := dm_Inventory.GetMaterialHiyoKubunID(InvValue.material_rec_id);

  ///////////////////////////////////////////////
  //-- 入库时 --> 对应采购数据的处理
  case InvValue.ikind of
    0: begin                                    //-- 入库
         if InvValue.order_no > 0 then
         begin
           GetOrderPartIDFromOrderNo(InvValue.order_no, OrderID, PartID, ProcessID);
           InvValue.order_rec_id   := OrderID;
           InvValue.part_rec_id    := PartID;
           InvValue.process_rec_id := ProcessID;

           if dm_Inventory.is_NeedUpdateOrdered(InvValue, TmpRecId) then
           begin
             Error := UpdateProcess_jkcd(InvValue);
             if Error = 0 then begin
               Result := UpdateLog_jkcd(InvValue);
             end;
           end;
         end;

         if Recid < 0 then //-- create insert SQL statement
           Sqls := MakeInsertSqlSentence(TableName, Recid, UpdateList, Error)
         else              //-- Create Update SQL Statement
           Sqls := MakeUpdateSqlSentence(TableName, Recid, UpdateList, Error);

         if Error = 0 then
         begin
           if ExecuteQuery(Sqls) = False then Error := -99;

           if (InvValue.inv_rec_id<0) then
           begin
             InvValue.inv_rec_id := 0;
             dm_Inventory.UpdateProcess_flag2(InvValue);
           end;
         end;
         Result := Error;
       end;
    /////////////////////////////////////////////////////////////////////

    1: begin                                    //-- 出库
         GetOrderPartIDFromOrderNo(InvValue.order_no, OrderID, PartID, ProcessID);
         InvValue.order_rec_id   := OrderID;
         InvValue.part_rec_id    := PartID;
         InvValue.process_rec_id := ProcessID;

         if Recid < 0 then //-- create insert SQL statement
           Sqls := MakeInsertSqlSentence(TableName, Recid, UpdateList, Error)
         else              //-- Create Update SQL Statement
           Sqls := MakeUpdateSqlSentence(TableName, Recid, UpdateList, Error);

         if Error = 0 then
         begin
           if ExecuteQuery(Sqls) = False then Error := -99;
         end;
         Result := Error;
         
         InvValue.inv_rec_id := Recid;

         if (InvValue.input_order_rec_id>0) then      //-- 出库有模号的反映到--> Kotei/Log
         begin
           if ((InvValue.order_no>0)and(InvValue.input_order_rec_id=InvValue.order_rec_id)) then exit; //-- 有订货的以订购为准
           //-- 没有订货的但是对应模号的出库则新增出库数据到的成本的用料历史中
           if TmpRecId < 0 then begin
             Error := InsertProcess(InvValue, InvValue.process_rec_id);
             if Error = 0 then
             Error := InsertLog(InvValue);
           end
           else begin
             Error := UpdateProcess(InvValue);
             if Error = 0 then
             Error := UpdateLog(InvValue);
           end;
         end;
       end;
    ////////////////////////////////////////////////////////////////////

    2: begin                                    //-- 退货
         if Recid < 0 then //-- create insert SQL statement
           Sqls := MakeInsertSqlSentence(TableName, Recid, UpdateList, Error)
         else              //-- Create Update SQL Statement
           Sqls := MakeUpdateSqlSentence(TableName, Recid, UpdateList, Error);

         if Error = 0 then
         begin
           if ExecuteQuery(Sqls) = False then Error := -99;
         end;
         Result := Error;

         InvValue.inv_rec_id := Recid;

         if (InvValue.input_order_rec_id>0) then      //-- 出库有模号的反映到--> Kotei/Log
         begin

⌨️ 快捷键说明

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