📄 ckjh_jjw.pas
字号:
{清空原有的票品的库存情况}
VL_PPDMList.Clear;
VL_PPKCList.Clear;
{主表信息}
qry_List.Append;
qry_List.FieldByName('DWDM').AsString := qry_DW.FieldByName('DWDM').AsString;
qry_List.FieldByName('DWJC').AsString := qry_DW.FieldByName('DWJC').AsString;
qry_List.FieldByName('CKXZ').AsString := fcb_CKXZ.FieldString;
qry_List.FieldByName('RCKXZMC').AsString := fcb_CKXZ.Text;
if qry_List.State in [dsEdit, dsInsert] then
qry_List.Post;
case rg_CKXZ.ItemIndex of {根据依据的来源,添加从表}
0:
begin
VL_QLDH := qry_YJD.FieldByName('QLDH').AsString;
Add_FPInfo(qry_DW.FieldByName('DWDM').AsString, qry_PPInfo_Y);
end;
1:
with qry_PPInfo_N do
Add_WYTSJ(qry_DW.FieldByName('DWDM').AsString, qry_PPInfo_N, dbg_PP);
end;
GetGG(qry_Detail.FieldByName('PPDM').AsString); {取得凑整的规格}
rg_Round.ItemIndex := 2;
rg_Round.OnClick(self.rg_Round);
end;
finally
free;
qry_Detail.BeforeInsert := qry_DetailBeforeInsert;
end;
if l_Modal <> mrOK then
Exit;
{ qry_Detail.AfterScroll(nil);}
{显示库存}
l_Modal := VL_PPDMList.IndexOf(qry_Detail.FieldByname('PPDM').AsString);
if l_Modal > -1 then
medt_KC.Text := VL_PPKCList[l_Modal];
{ medt_KC.Text := FloatToStr(StrToFloat(VL_PPKCList[l_Modal]) - FieldByName('FPSL').AsInteger);}
GetGG(qry_Detail.FieldByName('PPDM').AsString);
VL_CKJHDH := ''; {新增}
Set_State(True); {设置界面可修改状态}
end;
{-------------------------------------------------------------------------------}
{添加信息}
procedure TFrm_CKJH_JJW.Add_FPInfo(a_DWDM: String; a_SourceQuery: TQuery);
begin
{1.添加从表信息}
with a_SourceQuery do
begin
while not Eof do
begin
if a_SourceQuery.FieldbyName('KFDM').AsString = '' then
begin
{库存中没有该票品}
Application.MessageBox(Pchar('票品:' + FieldByName('PPMC').asString + '没有库存!'), '提示', mb_Ok + MB_ICONINFORMATION);
Next;
Continue;
end;
{添加库存信息}
VL_PPDMList.Add(FieldbyName('PPDM').AsString);
VL_PPKCList.Add(FLoatToStr(PS_GetSYTS(FieldByName('KFDM').AsString, FieldByName('PPDM').AsString, FieldByName('JJ').AsFloat)));
qry_Detail.Append;
VL_CanPost := False;
qry_Detail.FieldByName('DWDM').AsString := a_DWDM;
qry_Detail.FieldByName('KFDM').AsString := FieldByName('KFDM').AsString;
qry_Detail.FieldByName('KFMC').AsString := FieldByName('KFMC').AsString;
if FieldList.IndexOf('TDM') > -1 then
qry_Detail.FieldByName('PPDM').AsString := FieldbyName('TDM').AsString
else
qry_Detail.FieldByName('PPDM').AsString := FieldbyName('PPDM').AsString;
qry_Detail.FieldByName('PPMC').AsString := FieldByName('PPMC').AsString;
if FieldbyName('JJ').AsString <> '' then
qry_Detail.FieldByName('JJ').AsFloat := FieldByName('JJ').AsFloat / 100;
qry_Detail.FieldByName('ZK').AsString := FieldByName('ZK').AsString;
if Trim(FieldByName('XJ').AsString) <> '' then
qry_Detail.FieldByName('XJ').AsFloat := FieldByName('XJ').AsFloat / 100;
if Trim(FieldByName('JSJ').AsString) <> '' then
qry_Detail.FieldByName('JSJ').AsFloat := FieldByName('JSJ').AsFloat / 100;
if FieldList.IndexOf('XQZTS') > -1 then
qry_Detail.FieldByName('FPSL').AsString := FieldByName('XQZTS').AsString;
if qry_Detail.State in [dsEdit, dsInsert] then
qry_Detail.Post;
VL_CanPost := True;
Next;
end;
end;
end;
{-------------------------------------------------------------------------------}
{选择凑包凑版}
procedure TFrm_CKJH_JJW.rg_RoundClick(Sender: TObject);
var
l_SingleDest: Integer;
begin
l_SingleDest := 0;
pgc_SeleInfo.ActivePageIndex := rg_Round.ItemIndex; {YJ}
case rg_Round.ItemIndex of
0: {凑包} {}
begin
rg_Round_Style.Visible := True;
if cb_BZGG.Items.Count = 0 then
begin
Application.MessageBox('包装规格可能不完整,无法按包进行凑整!', '提示', MB_OK + MB_IconInformation);
rg_Round.ItemIndex := 2; {默认为不凑}
Exit;
end;
// l_SingleDest := StrToInt(cb_BZGG.Text);
l_SingleDest := StrToInt(VL_ZXTS[cb_BZGG.ItemIndex]);
end;
1: {凑版} {}
begin
rg_Round_Style.Visible := True;
l_SingleDest := VL_Ban_GG;
end;
2: {不用凑整数} {}
rg_Round_Style.Visible := False;
end;
if not qry_Detail.IsEmpty then
begin
with qry_Detail do
begin
BeforePost := nil;
Edit;
if rg_Round.ItemIndex = 2 then {不凑} {}
FieldByName('FPSL').AsInteger := FieldByName('FPSL_OLD').AsInteger
else
FieldByName('FPSL').AsInteger :=
GetRoundNumber(FieldByName('FPSL_OLD').AsInteger, l_SingleDest, rg_Round_Style.ItemIndex); {返回凑整后的数据}
Post;
BeforePost := qry_DetailBeforePost;
end;
{显示出修改后的理论库存}
end;
end;
{-------------------------------------------------------------------------------}
{得到凑包后的结果}
function TFrm_CKJH_JJW.GetRoundNumber(A_source, A_SingleDest,
A_type: Integer): Integer;
var
l_Mod, l_Div: Integer;
begin
Result := 0;
if A_SingleDest <= 0 then {为0或者小于0时直接返回}
begin
Result := A_Source;
Exit;
end;
l_Mod := A_Source Mod A_SingleDest; {求余数,为0时整除}
if (l_Mod = 0) and (A_Source >= A_SingleDest) then {恰好为整包或整版}
begin
Result := A_Source;
Exit;
end;
l_Div := A_Source Div A_SingleDest; {}
case A_type of
0: {向上} {}
Result := (l_Div + 1) * A_SingleDest;
1: {向下} {}
Result := l_Div * A_SingleDest;
end;
if Result < 0 then {向下取整时为负数时返回0}
Result := 0;
end;
{-------------------------------------------------------------------------------}
{凑包凑版}
procedure TFrm_CKJH_JJW.SetRounding;
var
l_Dest: Integer;
begin
l_Dest := 0;
case rg_Round.ItemIndex of
0: {凑包} {}
begin
if cb_BZGG.Items.Count = 0 then
begin
Application.MessageBox('包装规格可能不完整,无法按包进行凑整!', '提示', MB_OK + MB_IconInformation);
rg_Round.ItemIndex := 2; {默认为不凑}
Exit;
end;
{ l_Dest := StrToInt(cb_BZGG.Text);}
l_Dest :=StrToInt(VL_ZXTS[cb_BZGG.ItemIndex]);
end;
1: {凑版} {}
begin
if cb_BGG.Items.Count = 0 then
begin
Application.MessageBox('版规格可能不完整,无法按版进行凑整!', '提示', MB_OK + MB_IconInformation);
rg_Round.ItemIndex := 2; {默认为不凑}
Exit;
end;
l_Dest := VL_Ban_GG;
end;
2: {不用凑整数} {}
l_Dest := 0;
// Exit;
end;
SetRoundSL(rg_Round.ItemIndex, rg_Round_Style.ItemIndex, L_Dest); {分配数量的凑整处理}
end;
{-------------------------------------------------------------------------------}
{凑包凑版只凑当前的票品}
procedure TFrm_CKJH_JJW.SetRoundSL(A_Round, A_Round_Style,
A_SingleDest: Integer);
{参数说明:凑包方式、凑整的方式(向上、向下)、凑整时的单包或者单版包装规格}
begin
{凑整}
qry_Detail.BeforePost := nil;
with qry_Detail do
begin
DisableControls;
if not Eof then
begin
Edit;
if A_Round = 2 then {不凑} {}
FieldByName('FPSL').AsInteger := FieldByName('FPSL_OLD').AsInteger
else
FieldByName('FPSL').AsInteger :=
GetRoundNumber(FieldByName('FPSL_OLD').AsInteger, A_SingleDest, A_Round_Style); {返回凑整后的数据}
Post;
end;
EnableControls;
end;
qry_Detail.BeforePost := qry_DetailBeforePost;
end;
{-------------------------------------------------------------------------------}
{改变数据前保存该数据}
procedure TFrm_CKJH_JJW.qry_DetailBeforePost(DataSet: TDataSet);
begin
qry_Detail.Edit;
qry_Detail.FieldByName('FPSL_OLD').AsString := qry_Detail.FieldByName('FPSL').AsString;
end;
{-------------------------------------------------------------------------------}
{取消手工输入}
procedure TFrm_CKJH_JJW.qry_DetailBeforeInsert(DataSet: TDataSet);
begin
Abort;
end;
{-------------------------------------------------------------------------------}
{改变凑版凑包方式}
procedure TFrm_CKJH_JJW.rg_Round_StyleClick(Sender: TObject);
var
l_SingleDest: Integer;
begin
l_SingleDest := 0;
pgc_SeleInfo.ActivePageIndex := rg_Round.ItemIndex; {YJ}
case rg_Round.ItemIndex of
0: {凑包} {}
begin
rg_Round_Style.Visible := True;
if cb_BZGG.Items.Count = 0 then
begin
Application.MessageBox('包装规格可能不完整,无法按包进行凑整!', '提示', MB_OK + MB_IconInformation);
rg_Round.ItemIndex := 2; {默认为不凑}
Exit;
end;
{ l_SingleDest := StrToInt(cb_BZGG.Text);}
l_SingleDest := StrToInt(VL_ZXTS[cb_BZGG.ItemIndex]);
end;
1: {凑版} {}
begin
rg_Round_Style.Visible := True;
l_SingleDest := VL_Ban_GG;
end;
2: {不用凑整数} {}
rg_Round_Style.Visible := False;
end;
if not qry_Detail.IsEmpty then
begin
with qry_Detail do
begin
BeforePost := nil;
Edit;
if rg_Round.ItemIndex = 2 then {不凑} {}
FieldByName('FPSL').AsInteger := FieldByName('FPSL_OLD').AsInteger
else
FieldByName('FPSL').AsInteger :=
GetRoundNumber(FieldByName('FPSL_OLD').AsInteger, l_SingleDest, rg_Round_Style.ItemIndex); {返回凑整后的数据}
Post;
BeforePost := qry_DetailBeforePost;
end;
end;
end;
{-------------------------------------------------------------------------------}
procedure TFrm_CKJH_JJW.cb_BZGGChange(Sender: TObject);
begin
SetRounding; {凑包凑版调用}
end;
{-------------------------------------------------------------------------------}
procedure TFrm_CKJH_JJW.cb_BGGChange(Sender: TObject);
begin
VL_Ban_GG := StrToInt(cb_BGG.Text);
SetRounding; {凑包凑版调用}
end;
{-------------------------------------------------------------------------------}
{用户填入数量,计算判断}
procedure TFrm_CKJH_JJW.qry_DetailFPSLSetText(Sender: TField;
const Text: String);
var
l_Dest, l_Index: Integer;
L_Text: string;
l_SetTextEvent: TFieldSetTextEvent;
begin
l_SetTextEvent := qry_DetailFPSL.OnSetText;
qry_DetailFPSL.OnSetText := nil; {防止用鼠标点击其他记录时递归调用}
l_Text := Text;
if Trim(Text) = '' then
begin
Sender.AsString := Text;
qry_DetailFPSL.OnSetText := l_SetTextEvent; {防止用鼠标点击其他记录时递归调用}
Exit;
end;
try
if (StrToFloat(Text) >= 10000000) or (StrToFloat(Text) <= 0) then
Abort; {触发abort异常}
except
Application.MessageBox('所输入的分配数量必须合法!', '提示', MB_ICONINFORMATION + mb_ok);
qry_DetailFPSL.OnSetText := l_SetTextEvent; {防止用鼠标点击其他记录时递归调用}
qry_Detail.Cancel;
Exit;
end;
try
Sender.AsInteger := Trunc(StrToFloat(l_Text)); {分配数量只能为自然数}
l_Index := VL_PPDMList.IndexOf(qry_Detail.FieldbyName('PPDM').AsString);
if l_Index > -1 then
medt_KC.Text := FloatToStr(StrToFloat(VL_PPKCList[l_Index]) - qry_Detail.FieldByName('FPSL').AsInteger);
l_Dest := 0;
case rg_Round.ItemIndex of
0: {凑包} {}
{ l_Dest := StrToInt(cb_BZGG.Text);}
l_Dest :=StrToInt(VL_ZXTS[cb_BZGG.ItemIndex]);
1: {凑版} {}
l_Dest := VL_Ban_GG;
2: {不用凑整数} {}
begin
qry_Detail.Edit;
qry_Detail.FieldByName('FPSL').AsInteger := Trunc(StrToFloat(l_Text));
if VL_CanPost then
qry_Detail.Post;
Exit;
end;
end;
qry_Detail.Edit;
qry_Detail.FieldByName('FPSL').AsInteger :=
GetRoundNumber(Trunc(StrToFloat(l_Text)), l_Dest, rg_Round_Style.ItemIndex); {返回凑整后的数据}
if VL_CanPost then
qry_Detail.Post;
{如果凑包,重新写库存显示库存}
l_Index := VL_PPDMList.IndexOf(qry_Detail.FieldbyName('PPDM').AsString);
if l_Index > -1 then
medt_KC.Text := FloatToStr(StrToFloat(VL_PPKCList[l_Index]) - qry_Detail.FieldByName('FPSL').AsInteger);
finally
qry_DetailFPSL.OnSetText := l_SetTextEvent; {防止用鼠标点击其他记录时递归调用}
end;
end;
{-------------------------------------------------------------------------------}
{用户输入数量后,程序计算其他数据}
procedure TFrm_CKJH_JJW.qry_DetailFPSLValidate(Sender: TField);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -