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

📄 pr110.pas

📁 一套融入了系统营销管理思想的管理软件产品
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  sNewProductID, sOldProductID : String;
begin
  inherited;
  if ReSortting then Exit;
  fNewPurchaseQuantity := 0;
  fOldPurchaseQuantity := 0;
  fNewPurchaseAmount := 0;
  fOldPurchaseAmount := 0;
  sNewProductID := '';
  sOldProductID := '';
  case UpdateKind of
    ukInsert :
      begin
        fNewPurchaseQuantity := DataSet.FieldByName('PurchaseQuantity').NewValue;
        fOldPurchaseQuantity := 0;
        fNewPurchaseAmount := DataSet.FieldByName('PurchaseAmount').NewValue;
        fOldPurchaseAmount := 0;
        sNewProductID := DataSet.FieldByName('ProductID').NewValue;
        sOldProductID := DataSet.FieldByName('ProductID').NewValue;
        with DM.qyTemp1 do
        begin
          Close;
          SQL.Clear;
          SQL.Add('UPDATE Product SET LastPurchaseDate = :LastPurchaseDate ');
          SQL.Add('WHERE CompanyID = :CompanyID AND ProductID = :ProductID ');
          ParamByName('CompanyID').AsString := sCompanyID;
          ParamByName('ProductID').AsString := DataSet.FieldByName('ProductID').AsString;
          ParamByName('LastPurchaseDate').AsString := qyMaster.FieldByName('PurchaseDate').AsString;
          ExecSQL;
        end;
      end;
    ukModify :
      begin
        fNewPurchaseQuantity := DataSet.FieldByName('PurchaseQuantity').NewValue;
        fOldPurchaseQuantity := DataSet.FieldByName('PurchaseQuantity').OldValue;
        fNewPurchaseAmount := DataSet.FieldByName('PurchaseAmount').NewValue;
        fOldPurchaseAmount := DataSet.FieldByName('PurchaseAmount').OldValue;
        sNewProductID := DataSet.FieldByName('ProductID').NewValue;
        sOldProductID := DataSet.FieldByName('ProductID').OldValue;
      end;
    ukDelete :
      begin
        fNewPurchaseQuantity := 0;
        fOldPurchaseQuantity := DataSet.FieldByName('PurchaseQuantity').OldValue;
        fNewPurchaseAmount := 0;
        fOldPurchaseAmount := DataSet.FieldByName('PurchaseAmount').OldValue;
        sNewProductID := DataSet.FieldByName('ProductID').OldValue;
        sOldProductID := DataSet.FieldByName('ProductID').OldValue;
      end;
  end;
  if (sPrevPurchaseProperty = '5') or (sPrevPurchaseProperty = '6') then
  begin
    UpdatePurchaseAnalyst(sPrevPurchaseDate, sPrevSupplierID,
                          sOldProductID, sPrevPurchaseProperty,
                          (fOldPurchaseQuantity * -1),
                          (fOldPurchaseAmount * -1));
    UpdatePurchaseAnalyst(sPrevPurchaseDate, sPrevSupplierID,
                          sNewProductID, sPrevPurchaseProperty,
                          (fNewPurchaseQuantity),
                          (fNewPurchaseAmount));
  end;
  if (sPrevPurchaseProperty = '7') then
  begin
    UpdateSupplierInventory(sPrevSupplierID, sOldProductID,
                            (fOldPurchaseQuantity * -1));
    UpdateSupplierInventory(sPrevSupplierID, sNewProductID,
                            fNewPurchaseQuantity);
  end;
  if (sPrevPurchaseProperty = '8') then
  begin
    UpdateSupplierInventory(sPrevSupplierID, sOldProductID,
                            (fOldPurchaseQuantity));
    UpdateSupplierInventory(sPrevSupplierID, sNewProductID,
                            fNewPurchaseQuantity * -1);
  end;
  UpdateInventoryAnalyst(sPrevPurchaseDate, sOldProductID,
                         sPrevWarehouseID, '0' + sPrevPurchaseProperty,
                         (fOldPurchaseQuantity * -1),
                         (fOldPurchaseAmount * -1));
  UpdateInventoryAnalyst(sPrevPurchaseDate, sNewProductID,
                         sPrevWarehouseID, '0' + sPrevPurchaseProperty,
                         fNewPurchaseQuantity,
                         fNewPurchaseAmount);
end;

procedure TfmPR110.UpdatePurchaseAnalyst(PurchaseDate, SupplierID,
  ProductID, PurchaseProperty: String; PurchaseQuantity,
  PurchaseAmount: Extended);
begin
  with qyTemp do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT SupplierID ');
    SQL.Add('FROM PurchaseAnalyst ');
    SQL.Add('WHERE CompanyID = :CompanyID ');
    SQL.Add('AND PurchaseYear = :PurchaseYear AND PurchaseMonth = :PurchaseMonth ');
    SQL.Add('AND SupplierID = :SupplierID AND ProductID = :ProductID ');
    ParamByName('CompanyID').AsString := sCompanyID;
    ParamByName('PurchaseYear').AsString := LeftStr(PurchaseDate, 2);
    ParamByName('PurchaseMonth').AsString := SubStr(PurchaseDate, 4, 2);
    ParamByName('SupplierID').AsString := SupplierID;
    ParamByName('ProductID').AsString := ProductID;
    Open;
  end;
  if qyTemp.FieldByName('SupplierID').AsString = '' then
  begin
    with qyTemp2 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('INSERT INTO PurchaseAnalyst ');
      SQL.Add(' (CompanyID, PurchaseYear, PurchaseMonth, SupplierID, ProductID, ');
      SQL.Add('  PurchaseQuantity, PurchaseAmount, PurchaseReturnQuantity, PurchaseReturnAmount) ');
      SQL.Add('VALUES ');
      SQL.Add(' (:CompanyID, :PurchaseYear, :PurchaseMonth, :SupplierID, :ProductID, ');
      SQL.Add('  :PurchaseQuantity, :PurchaseAmount, :PurchaseReturnQuantity, :PurchaseReturnAmount) ');
      ParamByName('CompanyID').AsString := sCompanyID;
      ParamByName('PurchaseYear').AsString := LeftStr(PurchaseDate, 2);
      ParamByName('PurchaseMonth').AsString := SubStr(PurchaseDate, 4, 2);
      ParamByName('SupplierID').AsString := SupplierID;
      ParamByName('ProductID').AsString := ProductID;
      if PurchaseProperty = '5' then
      begin                                     
        ParamByName('PurchaseQuantity').AsFloat := PurchaseQuantity;
        ParamByName('PurchaseAmount').AsFloat := PurchaseAmount;
        ParamByName('PurchaseReturnQuantity').AsFloat := 0;
        ParamByName('PurchaseReturnAmount').AsFloat := 0;
      end
      else
      begin
        ParamByName('PurchaseQuantity').AsFloat := 0;
        ParamByName('PurchaseAmount').AsFloat := 0;
        ParamByName('PurchaseReturnQuantity').AsFloat := PurchaseQuantity;
        ParamByName('PurchaseReturnAmount').AsFloat := PurchaseAmount;
      end;
      ExecSQL;
    end;
  end
  else
  begin
    with qyTemp2 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('UPDATE PurchaseAnalyst ');
      SQL.Add('SET PurchaseQuantity = PurchaseQuantity + :PurchaseQuantity, ');
      SQL.Add('    PurchaseAmount = PurchaseAmount + :PurchaseAmount, ');
      SQL.Add('    PurchaseReturnQuantity = PurchaseReturnQuantity + :PurchaseReturnQuantity, ');
      SQL.Add('    PurchaseReturnAmount = PurchaseReturnAmount + :PurchaseReturnAmount ');
      SQL.Add('WHERE CompanyID = :CompanyID ');
      SQL.Add('AND PurchaseYear = :PurchaseYear AND PurchaseMonth = :PurchaseMonth ');
      SQL.Add('AND SupplierID = :SupplierID AND ProductID = :ProductID ');
      ParamByName('CompanyID').AsString := sCompanyID;
      ParamByName('PurchaseYear').AsString := LeftStr(PurchaseDate, 2);
      ParamByName('PurchaseMonth').AsString := SubStr(PurchaseDate, 4, 2);
      ParamByName('SupplierID').AsString := SupplierID;
      ParamByName('ProductID').AsString := ProductID;
      if PurchaseProperty = '5' then
      begin
        ParamByName('PurchaseQuantity').AsFloat := PurchaseQuantity;
        ParamByName('PurchaseAmount').AsFloat := PurchaseAmount;
        ParamByName('PurchaseReturnQuantity').AsFloat := 0;
        ParamByName('PurchaseReturnAmount').AsFloat := 0;
      end
      else
      begin
        ParamByName('PurchaseQuantity').AsFloat := 0;
        ParamByName('PurchaseAmount').AsFloat := 0;
        ParamByName('PurchaseReturnQuantity').AsFloat := PurchaseQuantity;
        ParamByName('PurchaseReturnAmount').AsFloat := PurchaseAmount;
      end;
      ExecSQL;
    end;
  end;
end;

procedure TfmPR110.UpdateSupplierInventory(SupplierID, ProductID: String;
  Quantity: Extended);
begin
  with qyTemp do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT SupplierID ');
    SQL.Add('FROM SupplierInventory ');
    SQL.Add('WHERE CompanyID = :CompanyID ');
    SQL.Add('AND SupplierID = :SupplierID AND ProductID = :ProductID ');
    ParamByName('CompanyID').AsString := sCompanyID;
    ParamByName('SupplierID').AsString := SupplierID;
    ParamByName('ProductID').AsString := ProductID;
    Open;
  end;
  if qyTemp.FieldByName('SupplierID').AsString = '' then
  begin
    with qyTemp2 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('INSERT INTO SupplierInventory ');
      SQL.Add(' (CompanyID, SupplierID, ProductID, Quantity)');
      SQL.Add('VALUES ');
      SQL.Add(' (:CompanyID, :SupplierID, :ProductID, :Quantity) ');
      ParamByName('CompanyID').AsString := sCompanyID;
      ParamByName('SupplierID').AsString := SupplierID;
      ParamByName('ProductID').AsString := ProductID;
      ParamByName('Quantity').AsFloat := Quantity;
      ExecSQL;
    end;
  end
  else
  begin
    with qyTemp2 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('UPDATE SupplierInventory ');
      SQL.Add('SET Quantity = Quantity + :Quantity ');
      SQL.Add('WHERE CompanyID = :CompanyID ');
      SQL.Add('AND SupplierID = :SupplierID AND ProductID = :ProductID ');
      ParamByName('CompanyID').AsString := sCompanyID;
      ParamByName('SupplierID').AsString := SupplierID;
      ParamByName('ProductID').AsString := ProductID;
      ParamByName('Quantity').AsFloat := Quantity;
      ExecSQL;
    end;
  end;
end;

procedure TfmPR110.qyMasterSupplierIDValidate(Sender: TField);
begin
  inherited;
  qyMaster.FieldByName('SupplierAttribName').AsString :=
           GetSupplierAttribName(qyMaster.FieldByName('SupplierID').AsString);
end;

procedure TfmPR110.qyMasterWarehouseIDValidate(Sender: TField);
begin
  inherited;
  qyMaster.FieldByName('WarehouseName').AsString :=
           GetWarehouseName(qyMaster.FieldByName('WarehouseID').AsString);
end;

procedure TfmPR110.qyDetailProductIDValidate(Sender: TField);
begin
  inherited;
  qyDetail.FieldByName('ProductName').AsString :=
           GetProductName(qyDetail.FieldByName('ProductID').AsString);
end;

procedure TfmPR110.gdDetailEditButtonClick(Sender: TObject);
begin
  inherited;
  if (gdDetail.SelectedField.FieldName = 'ProductID') and
     (qyDetail.State in [dsInsert, dsEdit]) then
    qyDetail.FieldByName('ProductID').AsString := SearchData(edProductID, DM.qyProduct);
end;

procedure TfmPR110.qyDetailAfterInsert(DataSet: TDataSet);
begin
  inherited;
  gdDetail.SelectedField := qyDetailProductID;
end;

procedure TfmPR110.dsMasterStateChange(Sender: TObject);
begin
  inherited;
  rgPurchaseProperty.ReadOnly := (qyMaster.State <> dsInsert);
  ED2.ReadOnly := (qyMaster.State <> dsInsert);
  ED3.ReadOnly := (qyMaster.State <> dsInsert);
  sbPurchaseDate.Enabled := (qyMaster.State = dsInsert);
  sbSupplierID.Enabled := (qyMaster.State = dsInsert);
  sbWarehouseID.Enabled := (qyMaster.State = dsInsert);
end;

procedure TfmPR110.GetPrevValue;
begin
  inherited;
  sPrevPurchaseDate := qyMaster.FieldByName('PurchaseDate').AsString;
  sPrevSupplierID := qyMaster.FieldByName('SupplierID').AsString;
  sPrevWarehouseID := qyMaster.FieldByName('WarehouseID').AsString;
  sPrevPurchaseProperty := qyMaster.FieldByName('PurchaseProperty').AsString;
end;

procedure TfmPR110.qyMasterUpdateRecord(DataSet: TDataSet;
  UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
begin
  inherited;
  if UpdateKind = ukInsert then
  begin
    with qyTemp do
    begin
      Close;
      SQL.Clear;
      SQL.Add('UPDATE Supplier SET LastPurchaseDate = :LastPurchaseDate ');
      SQL.Add('WHERE CompanyID = :CompanyID AND SupplierID = :SupplierID ');
      ParamByName('CompanyID').AsString := sCompanyID;
      ParamByName('SupplierID').AsString := DataSet.FieldByName('SupplierID').NewValue;
      ParamByName('LastPurchaseDate').AsString := DataSet.FieldByName('PurchaseDate').NewValue;
      ExecSQL;
    end;
  end;
end;

procedure TfmPR110.sbSelectClick(Sender: TObject);
begin
  inherited;
  ReData := False;
  qyMaster.DisableControls;
  try
    fmPR110Select := TfmPR110Select.Create(Application);
    fmPR110Select.ShowModal;
    if ReData then begin
      try
        fmLoading := TfmLoading.Create(Application);
        fmLoading.Show;
        fmLoading.Update;
        qyMaster.Close;
        qyMaster.Open;
      finally
        fmLoading.Hide;
        fmLoading.Free;
      end;
    end;
  finally
    qyMaster.EnableControls;
    fmPR110Select.Free;
  end;
end;

procedure TfmPR110.sbReportClick(Sender: TObject);
begin
  inherited;
  PR110Print(qyMaster.FieldByName('PurchaseID').AsString);
end;

end.

⌨️ 快捷键说明

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