mrp_global.pas

来自「一个MRPII系统源代码版本」· PAS 代码 · 共 1,229 行 · 第 1/5 页

PAS
1,229
字号
                             ':SSCode,'+
                             ':OrderLineStatus)';
    Sql.Add(StrSqlText);
    Parameters.ParamByName('ItemCode').Value:=R_AdoQry_Save2.fieldbyname('ItemCode').Value;
    Parameters.ParamByName('DueDate').Value:=R_AdoQry_Save2.fieldbyname('DueDate').Value;
    Parameters.ParamByName('ReleaseDate').Value:=R_AdoQry_Save2.fieldbyname('ReleaseDate').Value;
    Parameters.ParamByName('OrderNo').Value:=R_AdoQry_Save2.fieldbyname('OrderNo').Value;
    Parameters.ParamByName('OrderLineNo').Value:=R_AdoQry_Save2.fieldbyname('OrderLineNo').Value;
    Parameters.ParamByName('OrderQty').Value:=R_DblSaveQty;
    Parameters.ParamByName('Ordinal').Value:=2;
    Parameters.ParamByName('PmCode').Value:=R_AdoQry_Save2.fieldbyname('PmCode').Value;
    If R_AdoQry_Save2.fieldbyname('OrderQty').Value>0 Then
       Parameters.ParamByName('SSCode').Value:=2
    else
      Parameters.ParamByName('SSCode').Value:=3;
      Parameters.ParamByName('OrderLineStatus').Value:=R_AdoQry_Save2.fieldbyname('OrderLineStatus').Value;
      Prepared;
      ExeCSql;
  end;
end;

procedure SaveOverDueMoPo(R_AdoQry_Save1:TAdoQuery;//将当前MOPO记录插入#TmPMrpResult
                          R_AdoQry_Save2:TAdoQuery;
                          R_DblSaveQty:Double);
var StrSqlText:String;
begin
  With R_AdoQry_Save1 Do
  begin
    Close;
    Sql.clear;
    StrSqlText:='Insert '+StrSS+'(ItemCode,'+
                                  'SSQty,'+
                                  'SsSysInfoFlag,'+
                                  'DueDate,'+
                                  'SSDate,'+
                                  'OrderNo,'+
                                  'OrderLineNo,'+
                                  'OrderLineStatus,'+
                                  'DeptVendorCode,'+
                                  'PmType,'+
                                  'ReMainQty) '+
                         'Values(:ItemCode,'+
                                 ':SSQty,'+
                                 ':SsSysInfoFlag,'+
                                 ':DueDate,'+
                                 ':SSDate,'+
                                 ':OrderNo,'+
                                 ':OrderLineNo,'+
                                 ':OrderLineStatus,'+
                                 ':DeptVendorCode,'+
                                 ':PmType,'+
                                 ':ReMainQty)';
    Sql.Add(StrSqlText);
    Parameters.ParamByName('ItemCode').Value:=R_AdoQry_Save2.fieldbyname('ItemCode').Value;
    Parameters.ParamByName('SSQty').Value:=R_DblSaveQty;
    Parameters.ParamByName('SsSysInfoFlag').Value:=4;
    Parameters.ParamByName('DueDate').Value:=R_AdoQry_Save2.fieldbyname('DueDate').Value;
    Parameters.ParamByName('SSDate').Value:=R_AdoQry_Save2.fieldbyname('ReleaseDate').Value;
    Parameters.ParamByName('OrderNo').Value:=R_AdoQry_Save2.fieldbyname('OrderNo').Value;
    Parameters.ParamByName('OrderLineNo').Value:=R_AdoQry_Save2.fieldbyname('OrderLineNo').Value;
    Parameters.ParamByName('OrderLineStatus').Value:=R_AdoQry_Save2.fieldbyname('OrderLineStatus').Value;
    Parameters.ParamByName('DeptVendorCode').Value:=R_AdoQry_Save2.fieldbyname('DeptVendorCode').Value;
    Parameters.ParamByName('PmType').Value:=R_AdoQry_Save2.fieldbyname('PmCode').Value;
    Parameters.ParamByName('ReMainQty').Value:=R_DblSaveQty;
    Prepared;
    ExeCSql;
  end;
end;

procedure SaveTemPmoPo(R_AdoQry_Save1:TAdoQuery;//将当前Query中的MOPO记录插入StrSS表中
                       R_AdoQry_Save2:TAdoQuery;R_StrSS:String);
var StrSqlText:String;
begin
  With R_AdoQry_Save1 Do
  begin
    Close;
    Sql.clear;
    StrSqlText:='Insert '+R_StrSS+''+
                           '( ItemCode,'+
                              'SSDate,'+
                              'OrderNo,' +
                              'OrderLineNo,'+
                              'SSQty,'+
                              'PmType,'+
                              'SSSysInfoFlag,'+
                              'DeptVendorCode,'+
                              'OrderLineStatus,'+
                              'DueDate) '+
                     'Values( :ItemCode,'+
                              ':SSDate,'+
                              ':OrderNo,' +
                              ':OrderLineNo,'+
                              ':SSQty,'+
                              ':PmType,'+
                              ':SSSysInfoFlag,'+
                              ':DeptVendorCode,'+
                              ':OrderLineStatus,'+
                              ':DueDate)';
    Sql.Add(StrSqlText);
    Parameters.ParamByName('ItemCode').Value:=R_AdoQry_Save2.fieldbyname('ItemCode').Value;
    Parameters.ParamByName('SSDate').Value:=R_AdoQry_Save2.fieldbyname('ReleaseDate').Value;
    Parameters.ParamByName('OrderNo').Value:=R_AdoQry_Save2.fieldbyname('OrderNo').Value;
    Parameters.ParamByName('OrderLineNo').Value:=R_AdoQry_Save2.fieldbyname('OrderLineNo').Value;
    Parameters.ParamByName('SSQty').Value:=R_AdoQry_Save2.fieldbyname('OrderQty').Value;
    Parameters.ParamByName('PmType').Value:=R_AdoQry_Save2.fieldbyname('PmCode').Value;
    If R_AdoQry_Save2.fieldbyname('OrderQty').Value>0 Then
       Parameters.ParamByName('SSSysInfoFlag').Value:=2
    else
       Parameters.ParamByName('SSSysInfoFlag').Value:=3;
    Parameters.ParamByName('DeptVendorCode').Value:=R_AdoQry_Save2.fieldbyname('DeptVendorCode').Value;
    Parameters.ParamByName('OrderLineStatus').Value:=R_AdoQry_Save2.fieldbyname('OrderLineStatus').Value;
    Parameters.ParamByName('DueDate').Value:=R_AdoQry_Save2.fieldbyname('DueDate').Value;
    Prepared;
    ExeCSql;
  end;
end;

procedure SepcialAssignMOPO(R_AdoQry_Assign:TAdoQuery;R_AdoQry_Assign1:TAdoQuery); //分配MO\Po
var StrSqlText:String;
    DblGrossQty:Double;
    DblNetQty:Double;
    DblSaveQty:Double;//  净需求量-在单量
begin
  StrSqlText:='Select Sum(GrossQty) As GrossQty,'+
                      'Sum(OnHand)-('+StrMinQty+') As OnHand '+
                  'From #TmPMrpResult';
  ExecuteSql(R_AdoQry_Assign,StrSqlText,0);//计算毛需求
  DblGrossQty:=0;
  DblNetQty:=0;
  DblGrossQty:=R_AdoQry_Assign.fieldbyname('GrossQty').Value;
  DblNetQty:=R_AdoQry_Assign.fieldbyname('OnHand').Value-(DblGrossQty);
  StrSqlText:='Select * '+
                    'From #TmPmoPo With(Index(ItemCode)) '+
                    'Where ItemCode='''+StrItemCode+''' And '+
                           'ReleaseDate<='''+StrToDate+''' And OrderLINESTATUS<=6 And OrderQty>0 '+
                    'Order By ReleaseDate,OrderNo';
  ExecuteSql(R_AdoQry_Assign,StrSqlText,0);//从#TmPmoPo表选出在当前约定交货日之前的记录
  R_AdoQry_Assign.First;
  IF DblNetQty<0 Then //有净需求
  begin
    While R_AdoQry_Assign.Eof=False Do //查订单未结量
    begin
      If Abs(DblNetQty)>=R_AdoQry_Assign.fieldbyname('OrderQty').Value Then
        begin
          DblNetQty:=DblNetQty+R_AdoQry_Assign.fieldbyname('OrderQty').Value;
          DblSaveQty:=R_AdoQry_Assign.fieldbyname('OrderQty').Value;
          R_AdoQry_Assign.Edit();
          R_AdoQry_Assign.fieldbyname('OrderQty').Value:=0;
          R_AdoQry_Assign.Post();
        end
      Else //MoPO量大于DblNetQty
        begin
           DblSaveQty:=ABS(DblNetQty);
           DblNetQty:=0;
           R_AdoQry_Assign.Edit();
           R_AdoQry_Assign.fieldbyname('OrderQty').Value:=R_AdoQry_Assign.fieldbyname('OrderQty').Value-DblSaveQty;
           R_AdoQry_Assign.Post();
        end;
      SaveCurrentMoPo(R_AdoQry_Assign1,//将当前MOPO记录插入#TmPMrpResult
                      R_AdoQry_Assign,DblSaveQty);
      IF R_AdoQry_Assign.fieldbyname('ReleaseDate').ASString<StrToDate Then
        IF R_AdoQry_Assign.fieldbyname('OrderLineStatus').Value=5 Then
           SaveOverDueMOPO(R_AdoQry_Assign1,//将当前MOPO记录插入StrSS
                           R_AdoQry_Assign,DblSaveQty);
    IF DblNetQty=0 Then
      Break;
    R_AdoQry_Assign.Next;
    end;
  end;
  StrSqlText:='Delete From #TmPmoPo '+
              'Where ItemCode='''+StrItemCode+''' And '+
                     'ReleaseDate<='''+StrToDate+''' And OrderLINESTATUS<=6 '+
                     'And OrderQty=0 And NOFinishQty<>0 ';
  ExecuteSql(R_AdoQry_Assign,StrSqlText,1);//从#TmPmoPo表删除刚选出的记录
end;

procedure SepcialAssignMOPO1(R_AdoQry_Assign:TAdoQuery;R_AdoQry_Assign1:TAdoQuery); //分配替代件子项MO\Po
var StrSqlText:String;
    DblGrossQty:Double;
    DblNetQty:Double;
    DblSaveQty:Double;//  净需求量-在单量
begin
  StrSqlText:='Select Sum(GrossQty) As GrossQty,'+
                      'Sum(OnHand)-('+StrMinQty+') As OnHand '+
                  'From #TmPMrpResult';
  ExecuteSql(R_AdoQry_Assign,StrSqlText,0);//计算毛需求
  DblGrossQty:=0;
  DblNetQty:=0;
  DblGrossQty:=R_AdoQry_Assign.fieldbyname('GrossQty').Value;
  DblNetQty:=R_AdoQry_Assign.fieldbyname('OnHand').Value-(DblGrossQty);
  StrSqlText:='Select * '+
                    'From #TmPmoPo1  '+
                    'Where ReleaseDate<='''+StrToDate+''' And OrderLINESTATUS<=6 And OrderQty>0 '+
                    'Order By ReleaseDate,OrderNo';
  ExecuteSql(R_AdoQry_Assign,StrSqlText,0);//从#TmPmoPo1表选出在当前约定交货日之前的记录
  R_AdoQry_Assign.First;
  IF DblNetQty<0 Then //有净需求
  begin
    While R_AdoQry_Assign.Eof=False Do //查订单未结量
    begin
      If Abs(DblNetQty)>=R_AdoQry_Assign.fieldbyname('OrderQty').Value Then
        begin
          DblNetQty:=DblNetQty+R_AdoQry_Assign.fieldbyname('OrderQty').Value;
          DblSaveQty:=R_AdoQry_Assign.fieldbyname('OrderQty').Value;
          R_AdoQry_Assign.Edit();
          R_AdoQry_Assign.fieldbyname('OrderQty').Value:=0;
          R_AdoQry_Assign.Post();
        end
      Else //MoPO量大于DblNetQty
        begin
           DblSaveQty:=ABS(DblNetQty);
           DblNetQty:=0;
           R_AdoQry_Assign.Edit();
           R_AdoQry_Assign.fieldbyname('OrderQty').Value:=R_AdoQry_Assign.fieldbyname('OrderQty').Value-DblSaveQty;
           R_AdoQry_Assign.Post();
        end;
      SaveCurrentMoPo(R_AdoQry_Assign1,//将当前MOPO记录插入#TmPMrpResult
                      R_AdoQry_Assign,DblSaveQty);
    IF DblNetQty=0 Then
      Break;
    R_AdoQry_Assign.Next;
    end;
  end;
  StrSqlText:='Delete From #TmPmoPo1 '+
              'Where ReleaseDate<='''+StrToDate+''' And OrderLINESTATUS<=6 '+
                     'And OrderQty=0 And NOFinishQty<>0 ';
  ExecuteSql(R_AdoQry_Assign,StrSqlText,1);//从#TmPmoPo1表删除刚选出的记录
end;


procedure AssignMOPO(R_AdoQry_Assign:TAdoQuery;R_AdoQry_Assign1:TAdoQuery); //分配MO\Po
var StrSqlText:String;
    DblGrossQty:Double;
    DblNetQty:Double;
    DblSaveQty:Double;//  净需求量-在单量
begin
  StrSqlText:='Select Sum(GrossQty) As GrossQty,'+
                      'Sum(OnHand)-('+StrMinQty+') As OnHand '+
                  'From #TmPMrpResult';
  ExecuteSql(R_AdoQry_Assign,StrSqlText,0);//计算毛需求
  DblGrossQty:=0;
  DblNetQty:=0;
  DblGrossQty:=R_AdoQry_Assign.fieldbyname('GrossQty').Value;
  DblNetQty:=R_AdoQry_Assign.fieldbyname('OnHand').Value-(DblGrossQty);
  S

⌨️ 快捷键说明

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