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

📄 purc.pas

📁 this is sample for traders
💻 PAS
字号:
unit Purc;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, JvGradientCaption, ImgList, DB, ComCtrls, StdCtrls, Buttons,
  JvExControls, JvComponent, JvDBLookup, Grids, DBGrids, JvExDBGrids,
  JvDBGrid, JvDBUltimGrid, DBNumEdit, JvToolEdit, JvDBControls, JvExMask,
  DBCtrls, Mask, JvStaticText, JclStrings, ZAbstractRODataset,
  ZAbstractDataset, ZDataset, DynamicSkinForm;

type
  TPurcForm = class(TForm)
    LineSource: TDataSource;
    PurcSplSource: TDataSource;
    dsPurc: TDataSource;
    GroupBox1: TGroupBox;
    SplEdit: TJvDBComboEdit;
    Memo1: TMemo;
    GroupBox2: TGroupBox;
    SJNOEDIT: TDBEdit;
    SJDateEdit: TJvDBDateEdit;
    SJDueEdit: TJvDBDateEdit;
    JvStaticText2: TJvStaticText;
    GroupBox3: TGroupBox;
    LineGrid: TJvDBUltimGrid;
    dbneD1: TDBNumEdit;
    GroupBox4: TGroupBox;
    JvStaticText1: TJvStaticText;
    DBEdit20: TDBEdit;
    JvStaticText4: TJvStaticText;
    JvStaticText5: TJvStaticText;
    DBEdit5: TDBEdit;
    btnSave: TBitBtn;
    btnCancel: TBitBtn;
    dbneD2: TDBNumEdit;
    dbneQTY: TDBNumEdit;
    dsSatItem: TDataSource;
    LkSat: TJvDBLookupCombo;
    ChkSerialBox: TDBCheckBox;
    PPNVALUE: TDBEdit;
    JTempoEdit: TDBNumEdit;
    JvStaticText6: TJvStaticText;
    DBEdit2: TDBEdit;
    JvDBDateEdit1: TJvDBDateEdit;
    dbnePrice: TDBNumEdit;
    JvStaticText7: TJvStaticText;
    JvStaticText3: TJvStaticText;
    spDynamicSkinForm1: TspDynamicSkinForm;
    procedure PickLgnNo(Sender: TObject);
    procedure PickPartNo(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure LineGridKeyPress(Sender: TObject; var Key: Char);
    procedure btnCancelClick(Sender: TObject);
    procedure LineGridKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure PurcSplSourceDataChange(Sender: TObject; Field: TField);
    procedure dsPurcDataChange(Sender: TObject; Field: TField);
    procedure JTempoEditChange(Sender: TObject);
    procedure JTempoEditKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure LkSatChange(Sender: TObject);
    procedure ChkSerialBoxClick(Sender: TObject);
    procedure dbneQTYKeyPress(Sender: TObject; var Key: Char);
    procedure dbneD2Exit(Sender: TObject);
    procedure dbneQTYExit(Sender: TObject);
    procedure dbneD1Exit(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
    procedure SplEditChange(Sender: TObject);
    procedure DBNE1Change(Sender: TObject);
    procedure DBNE1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    function CodeValidate: Boolean;
    function AutoFakNo: String;
    procedure PostingPurc;
    procedure BonusItem(ItemCode: String);
  public
    procedure Enter;
  end;

var
  PurcForm: TPurcForm;
  findcode: String;

implementation

uses DataMod1, Main, FuncLib, FindItem, RPreview, FindSpl, SelectGudang;

{$R *.dfm}

procedure TPurcForm.BonusItem(ItemCode: String);
begin
  DM1.qPURCLINE.Append;
  DM1.qPURCLINEITEMCODE.Value := ItemCode;
  if CodeValidate then
  begin
    DM1.qPurcLineBONUS.Value:=1;
    DM1.qPurcLineDISC_1.Value:=100;
    LineGrid.SelectedField:=DM1.qPurcLineQTY;
  end;
end;

procedure TPurcForm.PostingPurc;
var
  PrevRecord: TBookMark;
  sqltxt: String;
begin
  try
  DM1.dtaCon.StartTransaction;
//Posting Item kepada Inventory
  PrevRecord := DM1.qPurcLINE.GetBookmark;
  try
    DM1.qPurcLINE.DisableControls;
    DM1.qPurcLINE.First;
    while not DM1.qPurcLINE.Eof do
    begin
      with SQLp do
      begin
        sqltxt:='INSERT INTO ITEM_QTY(ITEMCODE,GDGCODE,OPBAL,ONHAND,QTYSALES,QTYRETSALES, '+
        'QTYPURC,QTYRETPURC,QTYADJ,RELEVEL,LASTUPDATE) VALUES '+
        '(:nCode,:nGudang,0,:nQTY,0,0,:nQTY,0,0,1,CURDATE()) '+
        'ON DUPLICATE KEY UPDATE ONHAND=ONHAND+:nQTY, QTYPURC=QTYPURC+:nQTY,LASTUPDATE=CURDATE(); ';
        Script.Clear;
        Script.Add(sqltxt);
        ParamByName('nCode').Value :=DM1.qPurcLineITEMCODE.Value;
        ParamByName('nGudang').Value:=SELECTGUDANGFORM.CODE;
        ParamByName('nQTY').Value :=DM1.qPurcLineQTY.Value;
        Execute;
      end;
      with qSQL do
      begin
        Close;
        SQL.clear;
        SQL.Add('UPDATE ITEM,PURCLINE SET '+
                'ITEM.LASTCOST =:nNetprice, PURCLINE.POSTED=1 '+
                'WHERE ITEM.ITEMCODE=:nCode AND PURCLINE.TRNO=:nTRNO ');
        ParamByName('nCode').Value :=DM1.qPurcLineITEMCODE.Value;
        ParamByName('nNetprice').Value :=DM1.qPurcLineNETPRICE.Value;
        ParamByName('nTRNO').Value :=DM1.qPurcTRNO.Value;
        ExecSQL;
      end;
      DM1.qPurcLINE.Next;
    end;
  finally
    DM1.qPurcLINE.EnableControls;
    if PrevRecord <> nil then
    begin
      DM1.qPurcLINE.GotoBookmark(PrevRecord);
      DM1.qPurcLINE.FreeBookmark(PrevRecord);
    end;
  end;
//Posting Hutang Supplier dari table purc
  try
    DM1.qPurc.DisableControls;
      with qSQL do
      begin
        Close;
        SQL.clear;
        SQL.Add('UPDATE SPL,PURC SET SPL.CURBAL = '+
                'SPL.CURBAL + :nBAL,PURC.POSTED=1 '+
                'WHERE SPL.SPLCODE=:nCode AND PURC.TRNO=:nTRNO');
        ParamByName('nCode').Value :=DM1.qPurcSPLCODE.Value;
        ParamByName('nBal').Value :=DM1.qPurcTRDUE.Value;
        ParamByName('nTRNO').Value :=DM1.qPurcTRNO.Value;
        ExecSQL;
      end;
  finally
    DM1.qPurc.EnableControls;
  end;
  DM1.dtaCon.Commit;
  except
    DM1.dtaCon.Rollback;
  end;
end;

function TPurcForm.AutoFakNo: String;
var
  SNO: String;
  SURUT: Integer;
begin
  SURUT:=0;
  with qSQL do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT COUNT(TRNO) AS LASTNUM FROM PURC');
    Open;
  end;
  if qSQL.RecordCount <> 0 then
  SURUT:=qSQL.FieldValues['LASTNUM']+1;
  SNO:=(StrMid(DateToStr(date()),4,2)+StrRight(DateToStr(date()),4));
  SNO:=SNO+('-'+strrepeat('0',(12-length(SNO)-length(IntToStr(SURUT)))));
  if PPNVALUE.Field.Value=0 then
  SNO:='A'+SNO+IntToStr(SURUT) else
  SNO:='B'+SNO+IntToStr(SURUT);
  result:=SNO;
end;

procedure TPurcForm.PickLgnNo(Sender: TObject);
begin
  FindSplForm:=TFindSplForm.Create(Self);
  //if DM1.qPurcSPLCODE.Value <> '' then FindSplForm.edFind.Text := DM1.qPurcSPLCODE.value;
  if FindSplForm.ShowModalCODE = mrOk then
  begin
    DM1.qPurc.Edit;
    DM1.qPurcSPLCODE.Value := FindSplForm.CODE;
  end;
end;

procedure TPurcForm.PickPartNo(Sender: TObject);
begin
  DM1.qPurclineITEMCODE.FocusControl;
  FindItemForm:=TFindItemForm.Create(Self);
  //if DM1.qPurcLINEITEMCODE.Value <> '' then FindItemForm.edFind.Text := DM1.qPurcLINEITEMCODE.value;
  if FindItemForm.ShowModalCODE = mrOk then
  begin
    //DM1.qPurcLINE.Edit;
    //DM1.qPurcLINEITEMCODE.Value := FindItemForm.CODE;
    //if CodeValidate then LineGrid.SelectedField:=DM1.qPurcLineQTY;

    if not DM1.qPurcline.Locate('ITEMCODE',FindItemForm.CODE,[]) then
    begin
    DM1.qPurcline.Append;
    DM1.qPURCLINE.Edit;
    DM1.qPURCLINEITEMCODE.Value := FindItemForm.CODE;
    if CodeValidate then LineGrid.SelectedField:=DM1.qPurcLineQTY;
    end else
    begin
      LineGrid.SelectedField:=DM1.qPurcLineQTY;
    end;

  end;
end;

function TPurcForm.CodeValidate: Boolean;
begin
  with DM1.qSatItem do
  begin
    Close;
    Params[0].Value:=DM1.qPurcLineITEMCODE.Value;
    Open;
  end;
  if DM1.ItemByPurcITEMCODE.Value<>'' then
  begin
    Result:=True;
    DM1.qPurcLine.Edit;
    DM1.qPurcLineITEMNAME.Value := DM1.ItemByPurc.FieldValues['ITEMNAME'];
    DM1.qPurcLinePRICE.Value := DM1.ItemByPurc.FieldValues['LASTCOST'];
    DM1.qPurcLineSAT.Value := DM1.ItemByPurc.FieldValues['SAT'];
    DM1.qPurclineGDGCODE.Value := SELECTGUDANGFORM.CODE;
  end else
  begin
    Result:=False;
    DM1.qPurcLine.Delete;
  end;
end;

procedure TPurcForm.Enter;
begin
  SelectGudangForm:=TSelectGudangForm.Create(nil);
  if SelectGudangForm.ShowModalCODE = mrOk then
  begin
  with DM1.qPurc do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM PURC WHERE TRNO=:SNO');
    ParamByName('SNO').Value := 'Auto';
    Open;
  end;
  DM1.qPurc.Append;
  DM1.qPurcTRNO.Value:='AUTO';
  DM1.qPurcLine.Open;
  MainForm.CreateMDIChild(TPurcForm);
  end else
  begin
    //
  end;
end;

procedure TPurcForm.FormCreate(Sender: TObject);
begin
  DateSeparator := '-'; ShortDateFormat := 'dd/mm/yyyy';
  Top := 1; Left := 1; Width := 785; Height := 495;
  self.Caption:=' FAKTUR PEMBELIAN GUDANG : '+SELECTGUDANGFORM.CODE+' ';
end;

procedure TPurcForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then
    if not (ActiveControl is TDBGrid) then
    begin
      key := #0;
      Perform(WM_NEXTDLGCTL, 0, 0);
    end
end;

procedure TPurcForm.LineGridKeyPress(Sender: TObject; var Key: Char);
begin
  if Key in ['a'..'z'] then Dec(Key,32);
  if (key = Chr(9)) then LineGrid.SelectedField := DM1.qPurclineITEMCODE;
  if (key = #13) then
  begin
    with TJvDBUltimGrid(ActiveControl) do
    begin
      if selectedindex = 1 then
      begin
        findcode:=DM1.qPurcLineITEMCODE.Value;
        DM1.qPurcLine.Delete;
    if not DM1.qPurcline.Locate('ITEMCODE',FindCODE,[]) then
    begin
    DM1.qPurcline.Append;
    DM1.qPURCLINE.Edit;
    DM1.qPURCLINEITEMCODE.Value := FindCODE;
    if CodeValidate then LineGrid.SelectedField:=DM1.qPurcLineQTY;
    end else
    begin
      LineGrid.SelectedField:=DM1.qPurcLineQTY;
    end;

        //if CodeValidate then SelectedField:=DM1.qPurcLineQTY;
      end else if SelectedField = DM1.qPurcLineQTY then
      begin
        SelectedField:=DM1.qPurcLinePRICE;
      end else if SelectedField = DM1.qPurcLinePRICE then
      begin
        SelectedField:=DM1.qPurcLineDISC_1;
      end else if SelectedField = DM1.qPurcLineDISC_1 then
      begin
        SelectedField:=DM1.qPurcLineDISC_2;
      end else if SelectedField = DM1.qPurcLineDISC_2 then
      begin
        SelectedField:=LineSource.DataSet.FieldByName('ITEMCODE');
        if DM1.qPurcLine.RecordCount<=99 then DM1.qPurcLine.Append;
      end;
    end;
  end;
end;

procedure TPurcForm.LineGridKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=(vk_f1) then PickPartNo(Sender);
  if key=(vk_f5) then BonusItem(DM1.qpurcLineITEMCODE.Value);
  if (Shift = [ssCtrl]) and (Key = VK_DELETE) then Key := 0;
  if (key in [vk_down, vk_next, vk_insert]) then key:=0;
  If (key in [vk_delete]) and (DM1.qPurcLine.State in [dsBrowse]) then
  DM1.qPurcLine.Delete;
end;

procedure TPurcForm.PurcSplSourceDataChange(Sender: TObject; Field: TField);
begin
  Memo1.Clear;
  if DM1.SplByPurc.RecordCount=1 then
  begin
  Memo1.Text := PurcSplSource.DataSet.FieldValues['JENIS']+' - '+
                PurcSplSource.DataSet.FieldValues['NAMASPL']+#13#10+
                PurcSplSource.DataSet.FieldValues['ADDRESS']+'-'+
                PurcSplSource.DataSet.FieldValues['CITY']+#13#10+
                PurcSplSource.DataSet.FieldValues['NPWP'];
  end;
end;

procedure TPurcForm.dsPurcDataChange(Sender: TObject; Field: TField);
begin
  //if (DM1.qSalesHITLIMIT.Value<=0) and not (SjLgnSource.DataSet.FieldByName('LGNCODE').IsNull) then JvImage1.Visible:=true else JvImage1.Visible:=false;
  if (length(trim(DM1.qPurcSJNO.Value))<=0) or (DM1.qpurcGRANDTOTAL.Value<=0) then
  btnSave.Enabled:=False else btnSave.Enabled:=true;
  {if Field = DM1.qPurcSPLCODE then
  begin
    with DM1.SplbyPurc do
    begin
      Close;
      Open;
    end;
  end;}
end;

procedure TPurcForm.JTempoEditChange(Sender: TObject);
begin
  SJDueEdit.Date := JVDBDateEdit1.Date + JTempoEdit.Value;
end;

procedure TPurcForm.JTempoEditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=(vk_return) then Perform(WM_NEXTDLGCTL, 0, 0);
end;

procedure TPurcForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  action:=caFree;
end;

procedure TPurcForm.LkSatChange(Sender: TObject);
begin
  //DM1.qPurcLinePRICE.Value:=dsSatItem.DataSet.FieldValues['SELLPRICE'];
end;

procedure TPurcForm.ChkSerialBoxClick(Sender: TObject);
begin
  if ChkSerialBox.Checked then
  begin
    PPNVALUE.Field.Value:=DM1.qPurc.FieldValues['TRTOTAL']*10/100;
  end else
  begin
    PPNVALUE.Field.Value:=0;
  end;
end;

procedure TPurcForm.dbneQTYKeyPress(Sender: TObject; var Key: Char);
begin
  if Key in ['a'..'z'] then Dec(Key,32);
end;

procedure TPurcForm.dbneD2Exit(Sender: TObject);
begin
  LineGrid.SetFocus;
end;

procedure TPurcForm.dbneQTYExit(Sender: TObject);
begin
  LineGrid.SetFocus;
end;

procedure TPurcForm.dbneD1Exit(Sender: TObject);
begin
  LineGrid.SetFocus;
end;

procedure TPurcForm.btnSaveClick(Sender: TObject);
begin
  DM1.qPurc.FieldByName('TRTIME').Value:=time;
  DM1.qPurc.FieldByName('TRDUE').Value:=DM1.qPurc.FieldValues['GRANDTOTAL'];
  DM1.qPurc.FieldByName('TRNO').Value:=AutoFakNo;
  try
  DM1.qPurcLine.DisableControls;
  DM1.qPurcLine.First;
  while not DM1.qPurcLine.Eof do
  begin
    DM1.qPurcLine.Edit;
    DM1.qPurcLine.FieldByName('TRNO').Value:=DM1.qPurc.FieldValues['TRNO'];
    DM1.qPurcLineNETPRICE.Value:=DM1.qPurcLineCSUBTOTAL.Value/DM1.qPurcLineQTY.Value;
    DM1.qPurcLine.Next;
  end;
  finally
  DM1.qPurcLine.EnableControls;
  end;
  try
    DM1.dtaCon.StartTransaction;
    DM1.qPurcline.ApplyUpdates; DM1.qPurcline.CommitUpdates;
    DM1.qPurc.ApplyUpdates;DM1.qPurc.CommitUpdates;
    DM1.dtaCon.Commit;
  except
    DM1.dtaCon.Rollback;
  end;
  PostingPurc;
  Close;
end;

procedure TPurcForm.btnCancelClick(Sender: TObject);
begin
  DM1.qPurc.Close;
  Close;
end;

procedure TPurcForm.SplEditChange(Sender: TObject);
begin
  //DM1.SplByPurc.Close;
  //DM1.SplByPurc.Open;
end;

procedure TPurcForm.DBNE1Change(Sender: TObject);
begin
  //DM1.qPurc.FieldValues['GRANDTOTAL']:=DM1.qPurc.FieldValues['GRANDTOTAL']+DBNE1.Value;
end;

procedure TPurcForm.DBNE1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  //if key=(vk_return) then Perform(WM_NEXTDLGCTL, 0, 0);
end;

end.

⌨️ 快捷键说明

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