?? purc.~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'];
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 + -