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

📄 arinvoiceform.pas

📁 功能全面的商业财会系统源码,清晰,很有参考价值.扩展性强.
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  tblARInvInvoiceAmount.AsCurrency := tblARInvInvoiceAmount.value - OldExtAmount + tblARInvDetExtAmount.value - OldTaxAmount + Tax1Amount + Tax2Amount;
end;

procedure TfrmARInvoice.tblARInvDetAfterDelete(DataSet: TDataSet);
var
  TaxCode: string;
  OldTaxAmount: currency;
begin
  TaxCode := Copy(OldTaxCodes,1,1); if TaxCode <> '' then CalcTaxableAmount(TaxCode,-OldExtAmount, tblARInvTaxableAmtCode1, tblARInvTaxableAmtCode2, tblARInvTaxableAmtCode3, tblARInvTaxableAmount1, tblARInvTaxableAmount2, tblARInvTaxableAmount3);
  TaxCode := Copy(OldTaxCodes,2,1); if TaxCode <> '' then CalcTaxableAmount(TaxCode,-OldExtAmount, tblARInvTaxableAmtCode1, tblARInvTaxableAmtCode2, tblARInvTaxableAmtCode3, tblARInvTaxableAmount1, tblARInvTaxableAmount2, tblARInvTaxableAmount3);
  TaxCode := Copy(OldTaxCodes,3,1); if TaxCode <> '' then CalcTaxableAmount(TaxCode,-OldExtAmount, tblARInvTaxableAmtCode1, tblARInvTaxableAmtCode2, tblARInvTaxableAmtCode3, tblARInvTaxableAmount1, tblARInvTaxableAmount2, tblARInvTaxableAmount3);

  OldTaxAmount := Tax1Amount + Tax2Amount;
  //calcTax(tblARInvTax1Code, tblARInvTax2Code, tblARInvTax1Description, tblARInvTax2Description, tblARInvTaxableAmtCode1, tblARInvTaxableAmtCode2, tblARInvTaxableAmtCode3, tblARInvTax1Rate, tblARInvTax2Rate, tblARInvTaxableAmount1, tblARInvTaxableAmount2, tblARInvTaxableAmount3);
  if tblARInvTax1Code.value = tblARInvTaxableAmtCode1.value then Tax1Amount := frmBS1.RoundIt(tblARInvTaxableAmount1.value * tblARInvTax1Rate.value)/100
  else if tblARInvTax1Code.value = tblARInvTaxableAmtCode2.value then Tax1Amount := frmBS1.RoundIt(tblARInvTaxableAmount2.value * tblARInvTax1Rate.value)/100
  else if tblARInvTax1Code.value = tblARInvTaxableAmtCode3.value then Tax1Amount := frmBS1.RoundIt(tblARInvTaxableAmount3.value * tblARInvTax1Rate.value)/100
  else Tax1Amount := 0;
  if tblARInvTax2Code.value = tblARInvTaxableAmtCode1.value then Tax2Amount := frmBS1.RoundIt(tblARInvTaxableAmount1.value * tblARInvTax2Rate.value)/100
  else if tblARInvTax2Code.value = tblARInvTaxableAmtCode2.value then Tax2Amount := frmBS1.RoundIt(tblARInvTaxableAmount2.value * tblARInvTax2Rate.value)/100
  else if tblARInvTax2Code.value = tblARInvTaxableAmtCode3.value then Tax2Amount := frmBS1.RoundIt(tblARInvTaxableAmount3.value * tblARInvTax2Rate.value)/100
  else Tax2Amount := 0;
  if Tax1Amount <> 0 then lblTaxes.caption := tblARInvTax1Description.value + ': ' + FloatToStrF(Tax1Amount,ffCurrency,18,2) + '     '
  else lblTaxes.caption := '';
  if Tax2Amount <> 0 then lblTaxes.caption := lblTaxes.caption + tblARInvTax2Description.value + ': ' + FloatToStrF(Tax2Amount,ffCurrency,18,2);
  tblARInvInvoiceAmount.AsCurrency := tblARInvInvoiceAmount.value - OldExtAmount - OldTaxAmount + Tax1Amount + Tax2Amount;

  if tblARInvDet.RecordCount = 0 then begin   //Reset.
    tblARInvInvoiceAmount.AsVariant := null;
    tblARInvTaxableAmount1.AsVariant := null;
    tblARInvTaxableAmount2.AsVariant := null;
    tblARInvTaxableAmount3.AsVariant := null;
    tblARInvTaxableAmtCode1.AsVariant := null;
    tblARInvTaxableAmtCode2.AsVariant := null;
    tblARInvTaxableAmtCode3.AsVariant := null;
    Tax1Amount := 0;
    Tax2Amount := 0;
  end;
end;

procedure TfrmARInvoice.btnInvoiceDateClick(Sender: TObject);
begin
  frmCalendar.caption := 'Invoice Date';
  if tblARInvInvoiceDate.AsVariant <> null then frmCalendar.date := tblARInvInvoiceDate.value
  else frmCalendar.date := Date;
  if frmCalendar.ShowModal = mrOk then begin
    tblARInv.Edit;
    tblARInvInvoiceDate.value := frmCalendar.Date;
  end;
  editInvoiceDate.setfocus;
  editInvoiceDate.SelectAll;
end;

procedure TfrmARInvoice.DBGrid1EditButtonClick(Sender: TObject);
var
  aComponent: TComponent;
begin
  if DBGrid1.SelectedField = tblARInvDetItemNo then begin
    screen.cursor := crHourglass;
    aComponent := Application.FindComponent('frmItemSearch');
    if not Assigned (aComponent) then frmItemSearch := TfrmItemSearch.Create(Application);
    frmItemSearch.ItemNo := tblARInvDetItemNo.value;
    screen.cursor := crDefault;
    if frmItemSearch.ShowModal = mrOk then begin
      tblARInvDet.Edit;
      tblARInvDetItemNo.value := frmItemSearch.ItemNo;
    end;
  end;
end;

procedure TfrmARInvoice.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if (Key = ^J) and (DBGrid1.SelectedField = tblARInvDetItemNo) then begin   //Ctrl+Enter show Item Search.
    Key := #0;
    try DBGrid1EditButtonClick(sender); except; end;
  end;
end;

procedure TfrmARInvoice.mnuNewClick(Sender: TObject);
begin
  tblARInvDet.append;
  DBGrid1.SelectedIndex := 0;
end;

procedure TfrmARInvoice.mnuDeleteClick(Sender: TObject);
begin
  try tblARInvDet.delete; except; end;
end;

procedure TfrmARInvoice.DBGrid1ColEnter(Sender: TObject);
begin
  if (DBGrid1.Focused = true)   //Prevent problem when Shift Tab out of grid, ColEnter (on last column) fires after GridExit. 
  and (DBGrid1.SelectedIndex >0) then DBGrid1.Options := [dgEditing,dgAlwaysShowEditor,dgTitles,dgIndicator,dgColumnResize,dgColLines,dgRowLines,dgTabs,dgConfirmDelete,dgCancelOnExit];   //Toggle dgAlwaysShowEditor to prevent 1st field from being left-justified if always dgAlwaysShowEditor.
end;

procedure TfrmARInvoice.tblARInvCustomerIDChange(Sender: TField);
var
  OldTaxAmount: currency;
begin
  if (tblARInvCustomerID.AsVariant <> null) then begin
    txtAddress.Visible := true;
    txtTerms.Visible := true;
    if dmLookUps.tblCustomerTax1ExemptionNo.value = '' then tblARInvTax1ID.value := dmLookUps.tblCustomerTax1ID.value
    else                                                    tblARInvTax1ID.AsVariant := null;
    if dmLookUps.tblCustomerTax2ExemptionNo.value = '' then tblARInvTax2ID.value := dmLookUps.tblCustomerTax2ID.value
    else                                                    tblARInvTax2ID.AsVariant := null;
    if (dmLookUps.tblCustomerBillToNo.AsVariant = null) or (dmLookUps.tblCustomerCustomerNo.value = dmLookUps.tblCustomerBillToNo.value) then begin
      tblARInvBillToID.value := tblARInvCustomerID.value;
      tblARInvDiscPC.value := dmLookUps.tblCustomerDiscPC.value;
      tblARInvDiscDays.value := dmLookUps.tblCustomerDiscDays.value;
      tblARInvNetDays.value := dmLookUps.tblCustomerNetDays.value;
      tblARInvCOD.value := dmLookUps.tblCustomerCOD.value;
      editBillToNo.text := 'Same';
      editBillToName.text := '';
      lblBillToAddress.caption := '';
    end else begin
      tblBillTo.Active := true;
      if tblBillTo.Locate('CustomerNo', dmLookUps.tblCustomerBillToNo.value, []) = true then begin
        tblARInvBillToID.value := tblBillToCustomerID.value;
        tblARInvDiscPC.value := tblBillToDiscPC.value;
        tblARInvDiscDays.value := tblBillToDiscDays.value;
        tblARInvNetDays.value := tblBillToNetDays.value;
        tblARInvCOD.value := tblBillToCOD.value;
        editBillToNo.text := tblBillToCustomerNo.value;
        editBillToName.text := tblBillToCustomerName.value;
        lblBillToAddress.caption := tblBillToAddress.value;
      end else begin
        tblARInvBillToID.value := tblARInvCustomerID.value;
        tblARInvDiscPC.value := dmLookUps.tblCustomerDiscPC.value;
        tblARInvDiscDays.value := dmLookUps.tblCustomerDiscDays.value;
        tblARInvNetDays.value := dmLookUps.tblCustomerNetDays.value;
        tblARInvCOD.value := dmLookUps.tblCustomerCOD.value;
        editBillToNo.text := 'Same';
        editBillToName.text := '';
        lblBillToAddress.caption := '';
      end;
    end;
  end else begin
    tblARInvTax1ID.AsVariant := null;
    tblARInvTax2ID.AsVariant := null;
    txtAddress.Visible := false;
    txtTerms.Visible := false;
    tblARInvDiscPC.AsVariant := null;
    tblARInvDiscDays.AsVariant := null;
    tblARInvNetDays.AsVariant := null;
    tblARInvCOD.AsVariant := null;
    tblARInvBillToID.AsVariant := null;
    editBillToNo.text := '';
    editBillToName.text := '';
    lblBillToAddress.caption := '';
  end;

  OldTaxAmount := Tax1Amount + Tax2Amount;
  //calcTax(tblARInvTax1Code, tblARInvTax2Code, tblARInvTax1Description, tblARInvTax2Description, tblARInvTaxableAmtCode1, tblARInvTaxableAmtCode2, tblARInvTaxableAmtCode3, tblARInvTax1Rate, tblARInvTax2Rate, tblARInvTaxableAmount1, tblARInvTaxableAmount2, tblARInvTaxableAmount3);
  if tblARInvTax1Code.value = tblARInvTaxableAmtCode1.value then Tax1Amount := frmBS1.RoundIt(tblARInvTaxableAmount1.value * tblARInvTax1Rate.value)/100
  else if tblARInvTax1Code.value = tblARInvTaxableAmtCode2.value then Tax1Amount := frmBS1.RoundIt(tblARInvTaxableAmount2.value * tblARInvTax1Rate.value)/100
  else if tblARInvTax1Code.value = tblARInvTaxableAmtCode3.value then Tax1Amount := frmBS1.RoundIt(tblARInvTaxableAmount3.value * tblARInvTax1Rate.value)/100
  else Tax1Amount := 0;
  if tblARInvTax2Code.value = tblARInvTaxableAmtCode1.value then Tax2Amount := frmBS1.RoundIt(tblARInvTaxableAmount1.value * tblARInvTax2Rate.value)/100
  else if tblARInvTax2Code.value = tblARInvTaxableAmtCode2.value then Tax2Amount := frmBS1.RoundIt(tblARInvTaxableAmount2.value * tblARInvTax2Rate.value)/100
  else if tblARInvTax2Code.value = tblARInvTaxableAmtCode3.value then Tax2Amount := frmBS1.RoundIt(tblARInvTaxableAmount3.value * tblARInvTax2Rate.value)/100
  else Tax2Amount := 0;
  if Tax1Amount <> 0 then lblTaxes.caption := tblARInvTax1Description.value + ': ' + FloatToStrF(Tax1Amount,ffCurrency,18,2) + '     '
  else lblTaxes.caption := '';
  if Tax2Amount <> 0 then lblTaxes.caption := lblTaxes.caption + tblARInvTax2Description.value + ': ' + FloatToStrF(Tax2Amount,ffCurrency,18,2);
  tblARInvInvoiceAmount.AsCurrency := tblARInvInvoiceAmount.value - OldTaxAmount + Tax1Amount + Tax2Amount;
end;

procedure TfrmARInvoice.tblARInvCustomerIDValidate(Sender: TField);
begin
  if tblARInvCustomerID.AsVariant = null then exit;
  if dmLookUps.tblCustomer.Locate('CustomerID', tblARInvCustomerID.value, []) <> true then begin   //Catch bad ship-to selected via combobox.
    raise(Exception.Create('Ship-to not found'));
  end;
  if dmLookUps.tblCustomerSuspended.value = true then raise(exception.create('Customer '  + '''' + dmLookUps.tblCustomerCustomerNo.value + ': ' + dmLookUps.tblCustomerCustomerName.value + '''' + ' has been suspended'));
  if dmLookUps.tblCustomerBillToOnly.value = true then raise(exception.create('Customer '  + '''' + dmLookUps.tblCustomerCustomerNo.value + ': ' + dmLookUps.tblCustomerCustomerName.value + '''' + ' is specified as a "Bill-to Only"'));

  if (dmLookUps.tblCustomerBillToNo.AsVariant <> null) then begin
    tblBillTo.open;
    if tblBillTo.Lookup('CustomerNo', dmLookUps.tblCustomerBillToNo.value, 'Suspended') = true then raise(exception.create('Ship-to '  + '''' + dmLookUps.tblCustomerCustomerNo.value + ': ' + dmLookUps.tblCustomerCustomerName.value + '''' + ' bill-to has been suspended'));
  end;
end;

procedure TfrmARInvoice.tblARInvDetCalcFields(DataSet: TDataSet);
begin
  if (tblARInvDetQuantity.AsVariant = null) or (tblARInvDetUnitPrice.AsVariant = null) then tblARInvDetExtAmount.AsVariant := null
  else tblARInvDetExtAmount.AsCurrency := frmBS1.RoundIt(tblARInvDetQuantity.value * tblARInvDetUnitPrice.value * 100)/100;
end;

procedure TfrmARInvoice.tblARInvDetItemNoValidate(Sender: TField);
var
  LookupResults: Variant;
begin
  if DBGrid1.SelectedIndex = 1 then begin
    if DBGrid1.SelectedField.value = '' then exit;
    LookupResults := dmLookUps.tblItem.Lookup('ItemNo', DBGrid1.SelectedField.value, 'Suspended');
    if LookupResults = null then raise(exception.create('Item '  + '''' + DBGrid1.SelectedField.value + '''' + ' not found...' +#13 + 'Press Esc or enter a different item no'))
    else if LookupResults = true then raise(exception.create('Item '  + '''' + DBGrid1.SelectedField.value + '''' + ' has been suspended'));
  end else begin
    if dmLookUps.tblItemSuspended.value = true then raise(exception.create('Item '  + '''' + dmLookUps.tblItemItemNo.value + ': ' + dmLookUps.tblItemItemDescription.value + '''' + ' has been suspended'));
  end;
end;

procedure TfrmARInvoice.tblBillToCalcFields(DataSet: TDataSet);
begin
  tblBillToAddress.value := tblBillToAddressLine1.value;
  if tblBillToAddressLine2.value <> '' then tblBillToAddress.value := tblBillToAddress.value + ', ' + tblBillToAddressLine2.value;
  if tblBillToCity.value <> '' then tblBillToAddress.value := tblBillToAddress.value + ', ' + tblBillToCity.value;
  if tblBillToStateProv.value <> '' then tblBillToAddress.value := tblBillToAddress.value + ', ' + tblBillToStateProv.value;
  if tblBillToZipCode.value <> '' then tblBillToAddress.value := tblBillToAddress.value + ', ' + tblBillToZipCode.value;
  if tblBillToCountry.value <> '' then tblBillToAddress.value := tblBillToAddress.value + ', ' + tblBillToCountry.value;
end;

procedure TfrmARInvoice.tblARInvCalcFields(DataSet: TDataSet);
begin
  tblARInvTerms.AsString := 'Terms: ';
  if tblARInvCOD.value = true then tblARInvTerms.AsString := tblARInvTerms.AsString + 'C.O.D.'
  else begin
    if tblARInvDiscPC.value >0 then
      if tblARInvDiscDays.AsVariant = null then tblARInvTerms.AsString := tblARInvTerms.AsString + tblARInvDiscPC.AsString + '% ' + '0' + '   '
      else                                      tblARInvTerms.AsString := tblARInvTerms.AsString + tblARInvDiscPC.AsString + '% ' + tblARInvDiscDays.AsString + '   ';
    if tblARInvNetDays.AsVariant = null then tblARInvTerms.AsString := tblARInvTerms.AsString + 'Net 0'
    else                                     tblARInvTerms.AsString := tblARInvTerms.AsString + 'Net ' + tblARInvNetDays.AsString;
  end;
end;

procedure TfrmARInvoice.tblARInvDetItemNoChange(Sender: TField);
begin
  tblARInvDetUnitPrice.AsCurrency := tblARInvDetItemUnitPrice.value;   //Set default price to current item price.
  tblARInvDetTaxCodes.value := tblARInvDetItemTaxCodes.value;   //Store Tax Codes in case item changed in future.
end;

procedure TfrmARInvoice.tblARInvTax1IDChange(Sender: TField);
begin
  tblARInvTax1Code.value := tblARInvTTax1Code.value;   //Store Tax table tax code & current rate (in case changed in future).
  tblARInvTax1Rate.value := tblARInvTTax1Rate.value;
end;

procedure TfrmARInvoice.tblARInvTax2IDChange(Sender: TField);
begin
  tblARInvTax2Code.value := tblARInvTTax2Code.value;   //Store Tax table tax code & current rate (in case changed in future).
  tblARInvTax2Rate.value := tblARInvTTax2Rate.value;
end;

procedure TfrmARInvoice.tblARInvInvoiceDateSetText(Sender: TField;
  const Text: string);
begin
  tblARInvInvoiceDate.value := frmBS1.Date2000(Text);
end;

end.

⌨️ 快捷键说明

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