|
|
@@ -1,10 +1,16 @@
|
|
|
+{
|
|
|
+ Chenshilong, 2010-9-17 10:54:23 从单价文件库读取机械台班改为从Data\MachineCalcData.dat库读取。
|
|
|
+ Zhangyin 2026-05-28 因为不同省份存在不同编号不同单位的液化气,
|
|
|
+ 在补充定额库中新增表MachineMachine,保存机械台班
|
|
|
+ 在补充定额库中新增表MachineDetail,保存动力燃料明细
|
|
|
+}
|
|
|
unit ScMachine;
|
|
|
|
|
|
interface
|
|
|
|
|
|
uses
|
|
|
SysUtils, Classes, DB, ScFeeTaxDM, ADODB, Forms, Controls,
|
|
|
- sdDB, sdProvider;
|
|
|
+ sdDB, sdProvider, Variants;
|
|
|
|
|
|
type
|
|
|
TScMachinePriceRecord = class(TsdDataRecord)
|
|
|
@@ -36,6 +42,7 @@ type
|
|
|
FYHQ: TsdValue;
|
|
|
FTRQ: TsdValue;
|
|
|
FMeiQ: TsdValue;
|
|
|
+ FLibID: TsdValue;
|
|
|
public
|
|
|
procedure DoAfterAddFields; override;
|
|
|
property Code: TsdValue read FCode;
|
|
|
@@ -65,8 +72,42 @@ type
|
|
|
property KBFee: TsdValue read FKBFee;
|
|
|
property RGType: TsdValue read FRGType;
|
|
|
property Visible: TsdValue read FVisible;
|
|
|
+ property LibID: TsdValue read FLibID;
|
|
|
end;
|
|
|
|
|
|
+ TScMachineDetailRecord = class(TsdDataRecord)
|
|
|
+ private
|
|
|
+ FID: TsdValue;
|
|
|
+ FOwnerID: TsdValue;
|
|
|
+ FOwnerCode: TsdValue;
|
|
|
+ FOwnerName: TsdValue;
|
|
|
+ FOwnerSpecs: TsdValue;
|
|
|
+ FOwnerUnit: TsdValue;
|
|
|
+ FCode: TsdValue;
|
|
|
+ FName: TsdValue;
|
|
|
+ FSpecs: TsdValue;
|
|
|
+ FUnit: TsdValue;
|
|
|
+ FBasePrice: TsdValue;
|
|
|
+ FBudgetPrice: TsdValue;
|
|
|
+ FQuantity: TsdValue;
|
|
|
+ protected
|
|
|
+ procedure DoAfterAddFields; override;
|
|
|
+ public
|
|
|
+ property ID: TsdValue read FID;
|
|
|
+ property OwnerID: TsdValue read FOwnerID;
|
|
|
+ property OwnerCode: TsdValue read FOwnerCode;
|
|
|
+ property OwnerName: TsdValue read FOwnerName;
|
|
|
+ property OwnerSpecs: TsdValue read FOwnerSpecs;
|
|
|
+ property OwnerUnit: TsdValue read FOwnerUnit;
|
|
|
+ property Code: TsdValue read FCode;
|
|
|
+ property Name: TsdValue read FName;
|
|
|
+ property Specs: TsdValue read FSpecs;
|
|
|
+ property Units: TsdValue read FUnit;
|
|
|
+ property BasePrice: TsdValue read FBasePrice;
|
|
|
+ property BudgetPrice: TsdValue read FBudgetPrice;
|
|
|
+ property Quantity: TsdValue read FQuantity;
|
|
|
+ end;
|
|
|
+
|
|
|
TMachineEvent = procedure (ARecord: TScMachinePriceRecord) of object;
|
|
|
|
|
|
TMachineData = class(TDataModule)
|
|
|
@@ -76,6 +117,9 @@ type
|
|
|
sdsMachinePrice: TsdDataSet;
|
|
|
sdvMachinePrice: TsdDataView;
|
|
|
sdvMachineLabours: TsdDataView;
|
|
|
+ sapMachineDetail: TsdADOProvider;
|
|
|
+ sdsMachineDetail: TsdDataSet;
|
|
|
+ sdvMachineDetail: TsdDataView;
|
|
|
procedure DataModuleCreate(Sender: TObject);
|
|
|
procedure DataModuleDestroy(Sender: TObject);
|
|
|
procedure sdsMachinePriceGetRecordClass(
|
|
|
@@ -89,6 +133,8 @@ type
|
|
|
procedure sdvMachineLaboursAfterRecordChanged(ARecord: TsdDataRecord);
|
|
|
procedure sdsMachinePriceAfterRecordChanged(ARecord: TsdDataRecord);
|
|
|
procedure sdsMachineLaboursAfterRecordChanged(ARecord: TsdDataRecord);
|
|
|
+ procedure sdsMachineDetailGetRecordClass(
|
|
|
+ var ARecordClass: TsdRecordClass);
|
|
|
private
|
|
|
{ Private declarations }
|
|
|
FProject: TObject;
|
|
|
@@ -100,6 +146,11 @@ type
|
|
|
FidxCode: TsdIndex;
|
|
|
FOnMachinePriceChanged: TMachineEvent;
|
|
|
FIsSyncing: Boolean;
|
|
|
+ // 用于显示的燃料列头,用sdvMachinePrice遍历
|
|
|
+ FFuelColumns: TStringList;
|
|
|
+ // 所有有数据的燃料,用sdsMachinePrice遍历
|
|
|
+ FFuelList: TStringList;
|
|
|
+ FOnMachineDetailColumnChanged: TNotifyEvent;
|
|
|
function GetPrice(AID: Integer): Currency;
|
|
|
function GetModified: Boolean;
|
|
|
procedure SetActive(const Value: Boolean);
|
|
|
@@ -113,6 +164,7 @@ type
|
|
|
// 判断是否需要计算台班的机械
|
|
|
function IsCalcMachine(AID: Integer): Boolean;
|
|
|
procedure LoadMachinePrice(ARecord: TsdDataRecord; AKey: string);
|
|
|
+ procedure LoadMachineDetail(ARecord: TsdDataRecord; AKey, AKey2: string);
|
|
|
procedure LoadMachineLabours(ARecord: TsdDataRecord);
|
|
|
procedure LoadProperty(AFieldName, AValue: string);
|
|
|
function GetKeys(AID: Integer): string;
|
|
|
@@ -122,6 +174,9 @@ type
|
|
|
procedure BeginAllOperate;
|
|
|
// Connect InterFace
|
|
|
procedure EndAllOperate;
|
|
|
+ function LoadMachineFromRationLib(AGLJKey: string; var ARationLib: TObject): TsdDataRecord;
|
|
|
+ function AddMachineDetailFromLib(AMachineID: Integer; AGLJKey: string; ARationLib: TObject): Boolean;
|
|
|
+ procedure DeleteMachineDetail(AMachineID: Integer);
|
|
|
public
|
|
|
{ Public declarations }
|
|
|
function GetLabourPrice(ALabourCode: Integer): Double;
|
|
|
@@ -154,9 +209,11 @@ type
|
|
|
procedure SyncMachineLabours(APrice: Double);
|
|
|
// 同步数据
|
|
|
procedure SyncData(ATableName, AFieldName: string; ARecord: TsdDataRecord;
|
|
|
- AKey: string);
|
|
|
+ AKey, AKey2: string);
|
|
|
// 刷新显示机械
|
|
|
procedure RefreshMachines;
|
|
|
+ // 是否机械台班相关工料机
|
|
|
+ function IsMachineRelaGL(AKey: string): Boolean;
|
|
|
// 同步工料机单价
|
|
|
function SyncGLJPrice(AKey: string; APrice: Currency;
|
|
|
ACalculateAll: Boolean): Boolean;
|
|
|
@@ -165,9 +222,15 @@ type
|
|
|
// 获取机械工类型名称
|
|
|
function LookupMachineLabourName(AType: Integer): string;
|
|
|
// 是否有机械台班
|
|
|
- function HasDetail(AID: Integer): Boolean; overload;
|
|
|
- function HasDetail(ARecord: TScMachinePriceRecord): Boolean; overload;
|
|
|
+ function HasMachine(AID: Integer): Boolean; overload;
|
|
|
+ function HasMachine(ARecord: TScMachinePriceRecord): Boolean; overload;
|
|
|
function MachineLabourFee(AID: Integer): Currency;
|
|
|
+ // 刷新DLRL列表
|
|
|
+ procedure RefreshFuelColums;
|
|
|
+ // 获得动力燃料数量
|
|
|
+ function GetFuelQuantity(AMachineID: Integer; AName: string): Double;
|
|
|
+ // 赋值动力燃料数量
|
|
|
+ function SetFuelQuantity(AMachineID: Integer; AName: string; AQuantity: Double): Boolean;
|
|
|
// 是否修改
|
|
|
property Modified: Boolean read GetModified;
|
|
|
// 获得机械价格
|
|
|
@@ -178,8 +241,12 @@ type
|
|
|
property Active: Boolean read FActive write SetActive;
|
|
|
// 当前机械代号
|
|
|
property CurrentID: Integer read GetCurrenID;
|
|
|
+ // 动态动力燃料列
|
|
|
+ property FuelColumns: TStringList read FFuelColumns;
|
|
|
// 机械单价变化事件
|
|
|
property OnMachinePriceChanged: TMachineEvent read FOnMachinePriceChanged write FOnMachinePriceChanged;
|
|
|
+ // 动力燃料明细变化事件
|
|
|
+ property OnMachineDetailColumnChanged: TNotifyEvent read FOnMachineDetailColumnChanged write FOnMachineDetailColumnChanged;
|
|
|
end;
|
|
|
|
|
|
implementation
|
|
|
@@ -187,7 +254,7 @@ implementation
|
|
|
uses
|
|
|
ScUtils, ScConsts, ScProject, ScProjectGLJ, Math, ScProjBaseDM, ScUnitPriceLibsUnit,
|
|
|
ScTablesUnit, ScProjectUnitPriceLibsUnit, ScProgressFrm,
|
|
|
- ScCustomMachineDM;
|
|
|
+ ScCustomMachineDM, ScProjectRationLibsUnit, ScRationLibsUnit;
|
|
|
|
|
|
{$R *.dfm}
|
|
|
|
|
|
@@ -222,6 +289,26 @@ begin
|
|
|
FKBFee := ValueByName('KBFee');
|
|
|
FRGType := ValueByName('RGType');
|
|
|
FVisible := ValueByName('Visible');
|
|
|
+ FLibID := ValueByName('LibID');
|
|
|
+end;
|
|
|
+
|
|
|
+{ TScMachineDetailRecord }
|
|
|
+
|
|
|
+procedure TScMachineDetailRecord.DoAfterAddFields;
|
|
|
+begin
|
|
|
+ FID := ValueByName('ID');
|
|
|
+ FOwnerID := ValueByName('OwnerID');
|
|
|
+ FOwnerCode := ValueByName('OwnerCode');
|
|
|
+ FOwnerName := ValueByName('OwnerName');
|
|
|
+ FOwnerSpecs := ValueByName('OwnerSpecs');
|
|
|
+ FOwnerUnit := ValueByName('OwnerUnit');
|
|
|
+ FCode := ValueByName('Code');
|
|
|
+ FName := ValueByName('Name');
|
|
|
+ FSpecs := ValueByName('Specs');
|
|
|
+ FUnit := ValueByName('Unit');
|
|
|
+ FBasePrice := ValueByName('BasePrice');
|
|
|
+ FBudgetPrice := ValueByName('BudgetPrice');
|
|
|
+ FQuantity := ValueByName('Quantity');
|
|
|
end;
|
|
|
|
|
|
{ TScMachineData }
|
|
|
@@ -230,63 +317,98 @@ function TMachineData.Calculate(ARecord: TScMachinePriceRecord): Boolean;
|
|
|
var
|
|
|
fValue, fValue1, fValue2, fDLRL, fBBFee, fKBFee: Double;
|
|
|
fZY, fQY, fCY, fMei, fDian, fShui, fMC, fMeiQ, fYHQ, fTRQ, fRG: Double;
|
|
|
+ fPrice, fFuelTotal: Double;
|
|
|
ProjectGLJ: TProjectGLJ;
|
|
|
- iDigit: Integer;
|
|
|
+ I, iDigit: Integer;
|
|
|
+ lstFuel: TList;
|
|
|
+ bMeiQ, bYHQ, bTRQ: Boolean;
|
|
|
+ DetailRec: TScMachineDetailRecord;
|
|
|
+ ProjectGLJRec: TScProjectGLJRecord;
|
|
|
begin
|
|
|
Result := False;
|
|
|
ProjectGLJ := TProjectGLJ(FProjectGLJ);
|
|
|
iDigit := -TScProject(FProject).DigitManager.BudgetPriceDigit;
|
|
|
-
|
|
|
- fZY := ARecord.ZY.AsCurrency * ProjectGLJ.BudgetPrice(SZYKeys);
|
|
|
- fQY := ARecord.QY.AsCurrency * ProjectGLJ.BudgetPrice(SQYKeys);
|
|
|
- fCY := ARecord.CY.AsCurrency * ProjectGLJ.BudgetPrice(SCYKeys);
|
|
|
- fMei := ARecord.Mei.AsCurrency * ProjectGLJ.BudgetPrice(SMeiKeys);
|
|
|
- fDian := ARecord.Dian.AsCurrency * ProjectGLJ.BudgetPrice(SDianKeys);
|
|
|
- fShui := ARecord.Shui.AsCurrency * ProjectGLJ.BudgetPrice(SShuiKeys);
|
|
|
- fMC := ARecord.MC.AsCurrency * ProjectGLJ.BudgetPrice(SMCKeys);
|
|
|
- fMeiQ := ARecord.MeiQ.AsCurrency * ProjectGLJ.BudgetPrice(SMeiQKeys);
|
|
|
- fYHQ := ARecord.YHQ.AsCurrency * ProjectGLJ.BudgetPrice(SYHQKeys);
|
|
|
- fTRQ := ARecord.TRQ.AsCurrency * ProjectGLJ.BudgetPrice(STRQKeys);
|
|
|
- fRG := ARecord.RG.AsCurrency * GetLabourPrice(ARecord.RGType.AsInteger);
|
|
|
- fDLRL :=
|
|
|
- ScRoundTo(fZY, iDigit) +
|
|
|
- ScRoundTo(fQY, iDigit) +
|
|
|
- ScRoundTo(fCY, iDigit) +
|
|
|
- ScRoundTo(fMei, iDigit) +
|
|
|
- ScRoundTo(fDian, iDigit) +
|
|
|
- ScRoundTo(fShui, iDigit) +
|
|
|
- ScRoundTo(fMC, iDigit) +
|
|
|
- ScRoundTo(fMeiQ, iDigit) +
|
|
|
- ScRoundTo(fYHQ, iDigit) +
|
|
|
- ScRoundTo(fTRQ, iDigit);
|
|
|
- fBBFee :=
|
|
|
- ScRoundTo(ARecord.ZJ.AsCurrency, iDigit) +
|
|
|
- ScRoundTo(ARecord.DXL.AsCurrency, iDigit) +
|
|
|
- ScRoundTo(ARecord.JCXL.AsCurrency, iDigit) +
|
|
|
- ScRoundTo(ARecord.AZFZ.AsCurrency, iDigit);
|
|
|
- fKBFee :=
|
|
|
- ScRoundTo(fRG, iDigit) +
|
|
|
- fDLRL +
|
|
|
- ScRoundTo(ARecord.YLCC.AsCurrency, iDigit);
|
|
|
-
|
|
|
- fValue := fBBFee * TScProject(FProject).MachineBBFeeRate + fKBFee;
|
|
|
- fValue := ScRoundTo(fValue, iDigit);
|
|
|
-
|
|
|
- if (ARecord.Price.AsCurrency <> fValue) or (ARecord.DLRL.AsCurrency <> fDLRL) or
|
|
|
- (ARecord.BBFee.AsCurrency <> fBBFee) or (ARecord.KBFee.AsCurrency <> fKBFee)
|
|
|
- then
|
|
|
- begin
|
|
|
- ARecord.BeginUpdate;
|
|
|
- try
|
|
|
- ARecord.DLRL.AsCurrency := fDLRL;
|
|
|
- ARecord.BBFee.AsCurrency := fBBFee;
|
|
|
- ARecord.KBFee.AsCurrency := fKBFee;
|
|
|
- ARecord.Price.AsCurrency := fValue;
|
|
|
- finally
|
|
|
- ARecord.EndUpdate;
|
|
|
+ bMeiQ := False;
|
|
|
+ bYHQ := False;
|
|
|
+ bTRQ := False;
|
|
|
+ fMeiQ := 0;
|
|
|
+ fYHQ := 0;
|
|
|
+ fTRQ := 0;
|
|
|
+ lstFuel := TList.Create;
|
|
|
+ try
|
|
|
+ fRG := ARecord.RG.AsCurrency * GetLabourPrice(ARecord.RGType.AsInteger);
|
|
|
+ // 动力燃料
|
|
|
+ fZY := ARecord.ZY.AsCurrency * ProjectGLJ.BudgetPrice(SZYKeys);
|
|
|
+ fQY := ARecord.QY.AsCurrency * ProjectGLJ.BudgetPrice(SQYKeys);
|
|
|
+ fCY := ARecord.CY.AsCurrency * ProjectGLJ.BudgetPrice(SCYKeys);
|
|
|
+ fMei := ARecord.Mei.AsCurrency * ProjectGLJ.BudgetPrice(SMeiKeys);
|
|
|
+ fDian := ARecord.Dian.AsCurrency * ProjectGLJ.BudgetPrice(SDianKeys);
|
|
|
+ fShui := ARecord.Shui.AsCurrency * ProjectGLJ.BudgetPrice(SShuiKeys);
|
|
|
+ fMC := ARecord.MC.AsCurrency * ProjectGLJ.BudgetPrice(SMCKeys);
|
|
|
+ // 新增动力燃料单独计算
|
|
|
+ sdsMachineDetail.RecordsByKey('idxOwner', ARecord.ID.AsInteger, lstFuel);
|
|
|
+ fFuelTotal := 0;
|
|
|
+ for I := 0 to lstFuel.Count - 1 do
|
|
|
+ begin
|
|
|
+ DetailRec := TScMachineDetailRecord(lstFuel[I]);
|
|
|
+ fPrice := ProjectGLJ.BudgetPrice(DetailRec.ID.AsInteger);
|
|
|
+ fFuelTotal := fFuelTotal + RoundTo(DetailRec.Quantity.AsFloat * fPrice, iDigit);
|
|
|
+ if SameText(DetailRec.Name.AsString, SNMeiQCode) then
|
|
|
+ bMeiQ := True;
|
|
|
+ if SameText(DetailRec.Name.AsString, SNYHQCode) then
|
|
|
+ bYHQ := True;
|
|
|
+ if SameText(DetailRec.Name.AsString, SNTRQCode) then
|
|
|
+ bTRQ := True;
|
|
|
end;
|
|
|
+ // 煤气/液化气/天然气可能存在并行,以MachineDetail表为准
|
|
|
+ if not bMeiQ then
|
|
|
+ fMeiQ := ARecord.MeiQ.AsCurrency * ProjectGLJ.BudgetPrice(SMeiQKeys);
|
|
|
+ if not bYHQ then
|
|
|
+ fYHQ := ARecord.YHQ.AsCurrency * ProjectGLJ.BudgetPrice(SYHQKeys);
|
|
|
+ if not bTRQ then
|
|
|
+ fTRQ := ARecord.TRQ.AsCurrency * ProjectGLJ.BudgetPrice(STRQKeys);
|
|
|
+ fDLRL :=
|
|
|
+ ScRoundTo(fZY, iDigit) +
|
|
|
+ ScRoundTo(fQY, iDigit) +
|
|
|
+ ScRoundTo(fCY, iDigit) +
|
|
|
+ ScRoundTo(fMei, iDigit) +
|
|
|
+ ScRoundTo(fDian, iDigit) +
|
|
|
+ ScRoundTo(fShui, iDigit) +
|
|
|
+ ScRoundTo(fMC, iDigit) +
|
|
|
+ ScRoundTo(fMeiQ, iDigit) +
|
|
|
+ ScRoundTo(fYHQ, iDigit) +
|
|
|
+ ScRoundTo(fTRQ, iDigit) +
|
|
|
+ fFuelTotal;
|
|
|
+ fBBFee :=
|
|
|
+ ScRoundTo(ARecord.ZJ.AsCurrency, iDigit) +
|
|
|
+ ScRoundTo(ARecord.DXL.AsCurrency, iDigit) +
|
|
|
+ ScRoundTo(ARecord.JCXL.AsCurrency, iDigit) +
|
|
|
+ ScRoundTo(ARecord.AZFZ.AsCurrency, iDigit);
|
|
|
+ fKBFee :=
|
|
|
+ ScRoundTo(fRG, iDigit) +
|
|
|
+ fDLRL +
|
|
|
+ ScRoundTo(ARecord.YLCC.AsCurrency, iDigit);
|
|
|
+
|
|
|
+ fValue := fBBFee * TScProject(FProject).MachineBBFeeRate + fKBFee;
|
|
|
+ fValue := ScRoundTo(fValue, iDigit);
|
|
|
+
|
|
|
+ if (ARecord.Price.AsCurrency <> fValue) or (ARecord.DLRL.AsCurrency <> fDLRL) or
|
|
|
+ (ARecord.BBFee.AsCurrency <> fBBFee) or (ARecord.KBFee.AsCurrency <> fKBFee)
|
|
|
+ then
|
|
|
+ begin
|
|
|
+ ARecord.BeginUpdate;
|
|
|
+ try
|
|
|
+ ARecord.DLRL.AsCurrency := fDLRL;
|
|
|
+ ARecord.BBFee.AsCurrency := fBBFee;
|
|
|
+ ARecord.KBFee.AsCurrency := fKBFee;
|
|
|
+ ARecord.Price.AsCurrency := fValue;
|
|
|
+ finally
|
|
|
+ ARecord.EndUpdate;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ lstFuel.Free;
|
|
|
end;
|
|
|
-
|
|
|
if ProjectGLJ.BudgetPrice(ARecord.ID.AsInteger) <> fValue then
|
|
|
begin
|
|
|
if ARecord.Price.AsCurrency <> 0 then
|
|
|
@@ -341,9 +463,11 @@ begin
|
|
|
FProjectGLJ := AProjectGLJ;
|
|
|
FProject := TProjectGLJ(AProjectGLJ).Project;
|
|
|
sapMachinePrice.Connection := TScProject(FProject).ADOConnection;
|
|
|
+ sapMachineDetail.Connection := TScProject(FProject).ADOConnection;
|
|
|
sapMachineLabours.Connection := TScProject(FProject).ADOConnection;
|
|
|
FidxID := sdsMachinePrice.AddIndex('idxID', SID);
|
|
|
FidxCode := sdsMachinePrice.AddIndex('idxCode', Format('%s;%s;%s;%s', [SCode, SName, SSpecs, SUnit]));
|
|
|
+ sdsMachineDetail.AddIndex('idxOwner', Format('%s;%s', [SOwnerID, SCode]));
|
|
|
sdvMachinePrice.IndexName := 'idxCode';
|
|
|
end;
|
|
|
|
|
|
@@ -400,6 +524,8 @@ var
|
|
|
strKeys, strCode, strName, strSpecs, strUnit: string;
|
|
|
Rec: TScMachinePriceRecord;
|
|
|
DataRec: TsdDataRecord;
|
|
|
+ objLib: TObject;
|
|
|
+ RationLib: TScRationLib;
|
|
|
begin
|
|
|
Result := False;
|
|
|
Rec := LocateMachine(AID);
|
|
|
@@ -407,7 +533,12 @@ begin
|
|
|
begin
|
|
|
strKeys := GetKeys(AID);
|
|
|
ResolveGLJKeys(strKeys, strCode, strName, strSpecs, strUnit);
|
|
|
- DataRec := CustomMachine.FindMachineData(strKeys);
|
|
|
+ // 先查找定额库中是否有此机械台班
|
|
|
+ DataRec := LoadMachineFromRationLib(strKeys, objLib);
|
|
|
+ RationLib := TScRationLib(objLib);
|
|
|
+ // 所有定额库中找不到,则到MachineCalcData.dat中找部颁台班
|
|
|
+ if DataRec = nil then
|
|
|
+ DataRec := CustomMachine.FindMachineData(strKeys);
|
|
|
if DataRec <> nil then
|
|
|
begin
|
|
|
TProjectGLJ(FProjectGLJ).AddMachineRelaGL(0);
|
|
|
@@ -435,6 +566,13 @@ begin
|
|
|
Rec.TRQ.AsCurrency := DataRec.ValueByName(STRQ).AsCurrency;
|
|
|
Rec.YLCC.AsCurrency := GetFeeTax(strKeys);
|
|
|
Rec.RGType.AsInteger := DataRec.ValueByName(SRGType).AsInteger;
|
|
|
+ if RationLib <> nil then
|
|
|
+ begin
|
|
|
+ Rec.LibID.AsInteger := RationLib.ID;
|
|
|
+ AddMachineDetailFromLib(AID, strKeys, RationLib);
|
|
|
+ end
|
|
|
+ else
|
|
|
+ Rec.LibID.AsInteger := -1;
|
|
|
finally
|
|
|
Rec.EndUpdate;
|
|
|
end;
|
|
|
@@ -475,6 +613,7 @@ begin
|
|
|
Result := True;
|
|
|
end;
|
|
|
end;
|
|
|
+ RefreshFuelColums;
|
|
|
end;
|
|
|
|
|
|
procedure TMachineData.SyncAllFeeTax;
|
|
|
@@ -496,7 +635,10 @@ begin
|
|
|
Result := False;
|
|
|
Rec := LocateMachine(AID);
|
|
|
if Rec <> nil then
|
|
|
+ begin
|
|
|
+ DeleteMachineDetail(Rec.ID.AsInteger);
|
|
|
Result := sdsMachinePrice.Remove(Rec);
|
|
|
+ end;
|
|
|
end;
|
|
|
|
|
|
function TMachineData.GetModified: Boolean;
|
|
|
@@ -514,12 +656,16 @@ begin
|
|
|
try
|
|
|
FidxCode.RecordsByKey(0, List);
|
|
|
for I := 0 to List.Count - 1 do
|
|
|
+ begin
|
|
|
+ DeleteMachineDetail(TScMachinePriceRecord(List[I]).ID.AsInteger);
|
|
|
sdsMachinePrice.Remove(TsdDataRecord(List[I]));
|
|
|
+ end;
|
|
|
finally
|
|
|
List.Free;
|
|
|
end;
|
|
|
|
|
|
sdsMachinePrice.Save;
|
|
|
+ sdsMachineDetail.Save;
|
|
|
sdsMachineLabours.Save;
|
|
|
end;
|
|
|
|
|
|
@@ -537,11 +683,15 @@ procedure TMachineData.DataModuleCreate(Sender: TObject);
|
|
|
begin
|
|
|
FFeeTaxDM := TFeeTaxDM.Create(nil);
|
|
|
FIsSyncing := False;
|
|
|
+ FFuelColumns := TStringList.Create;
|
|
|
+ FFuelList := TStringList.Create;
|
|
|
end;
|
|
|
|
|
|
procedure TMachineData.DataModuleDestroy(Sender: TObject);
|
|
|
begin
|
|
|
FFeeTaxDM.Free;
|
|
|
+ FFuelColumns.Free;
|
|
|
+ FFuelList.Free;
|
|
|
end;
|
|
|
|
|
|
procedure TMachineData.SetActive(const Value: Boolean);
|
|
|
@@ -555,13 +705,18 @@ begin
|
|
|
|
|
|
sdsMachinePrice.Open;
|
|
|
sdvMachinePrice.Open;
|
|
|
+ sdsMachineDetail.Open;
|
|
|
+ sdvMachineDetail.Open;
|
|
|
|
|
|
FActive := Value;
|
|
|
+ RefreshFuelColums;
|
|
|
end
|
|
|
else
|
|
|
begin
|
|
|
sdsMachinePrice.Close;
|
|
|
sdvMachinePrice.Close;
|
|
|
+ sdsMachineDetail.Close;
|
|
|
+ sdvMachineDetail.Close;
|
|
|
sdsMachineLabours.Close;
|
|
|
sdvMachineLabours.Close;
|
|
|
FActive := Value;
|
|
|
@@ -931,6 +1086,7 @@ begin
|
|
|
sdvMachinePrice.Filter := Format('Code<>''%s''', [SSmallMachineFeeCode]);
|
|
|
|
|
|
sdvMachinePrice.Filtered := True;
|
|
|
+ RefreshFuelColums;
|
|
|
end;
|
|
|
|
|
|
procedure TMachineData.BeginAllOperate;
|
|
|
@@ -993,6 +1149,28 @@ begin
|
|
|
TProjectGLJ(FProjectGLJ).LocateCurrentGLJ(TScMachinePriceRecord(ARecord).ID.AsInteger);
|
|
|
end;
|
|
|
|
|
|
+function TMachineData.IsMachineRelaGL(AKey: string): Boolean;
|
|
|
+var
|
|
|
+ I: Integer;
|
|
|
+ strCode, strName, strSpecs, strUnit: string;
|
|
|
+begin
|
|
|
+ Result := False;
|
|
|
+ for I := Low(MachineRelaGLKeys) to High(MachineRelaGLKeys) do
|
|
|
+ if AKey = MachineRelaGLKeys[I] then
|
|
|
+ begin
|
|
|
+ Result := True;
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ if Result then Exit;
|
|
|
+ ResolveGLJKeys(AKey, strCode, strName, strSpecs, strUnit);
|
|
|
+ for I := 0 to FFuelList.Count - 1 do
|
|
|
+ if SameText(strName, FFuelList.Names[I]) then
|
|
|
+ begin
|
|
|
+ Result := True;
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
function TMachineData.SyncGLJPrice(AKey: string; APrice: Currency;
|
|
|
ACalculateAll: Boolean): Boolean;
|
|
|
begin
|
|
|
@@ -1098,6 +1276,51 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
+procedure TMachineData.LoadMachineDetail(ARecord: TsdDataRecord;
|
|
|
+ AKey, AKey2: string);
|
|
|
+var
|
|
|
+ iID, iOwnerID: Integer;
|
|
|
+ strCode, strName, strSpecs, strUnit: string;
|
|
|
+ DetailRec: TScMachineDetailRecord;
|
|
|
+begin
|
|
|
+ if not ResolveGLJKeys(AKey, strCode, strName, strSpecs, strUnit) then Exit;
|
|
|
+ iID := TProjectGLJ(FProjectGLJ).KeysToID(AKey);
|
|
|
+ iOwnerID := TProjectGLJ(FProjectGLJ).KeysToID(AKey2);;
|
|
|
+ if (iID < 0) or (iOwnerID < 0) then Exit;
|
|
|
+ DetailRec := TScMachineDetailRecord(sdsMachineDetail.Locate(Format('%s;%s', [SID, SOwnerID]), VarArrayOf([iID, iOwnerID])));
|
|
|
+ if DetailRec <> nil then
|
|
|
+ begin
|
|
|
+ // 消耗量,单价相等,无需同步
|
|
|
+ if (DetailRec.Quantity.AsFloat = ARecord.ValueByName(SQuantity).AsFloat) and
|
|
|
+ (DetailRec.BasePrice.AsCurrency = ARecord.ValueByName(SBasePrice).AsCurrency) and
|
|
|
+ (DetailRec.BudgetPrice.AsCurrency = ARecord.ValueByName(SBudgetPrice).AsCurrency) then
|
|
|
+ Exit;
|
|
|
+ DetailRec.BeginUpdate;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ DetailRec := TScMachineDetailRecord(sdsMachineDetail.Add(True));
|
|
|
+ try
|
|
|
+ if DetailRec.Inserting then
|
|
|
+ begin
|
|
|
+ DetailRec.ID.AsInteger := iID;
|
|
|
+ DetailRec.Code.AsString := strCode;
|
|
|
+ DetailRec.Name.AsString := strName;
|
|
|
+ DetailRec.Specs.AsString := strSpecs;
|
|
|
+ DetailRec.Units.AsString := strUnit;
|
|
|
+ DetailRec.OwnerID.AsInteger := iOwnerID;
|
|
|
+ DetailRec.OwnerCode.AsString := ARecord.ValueByName(SOwnerCode).AsString;
|
|
|
+ DetailRec.OwnerName.AsString := ARecord.ValueByName(SOwnerName).AsString;
|
|
|
+ DetailRec.OwnerSpecs.AsString := ARecord.ValueByName(SOwnerSpecs).AsString;
|
|
|
+ DetailRec.OwnerUnit.AsString := ARecord.ValueByName(SOwnerUnit).AsString;
|
|
|
+ end;
|
|
|
+ DetailRec.Quantity.AsFloat := ARecord.ValueByName(SQuantity).AsFloat;
|
|
|
+ DetailRec.BasePrice.AsCurrency := ARecord.ValueByName(SBasePrice).AsCurrency;
|
|
|
+ DetailRec.BudgetPrice.AsCurrency := ARecord.ValueByName(SBudgetPrice).AsCurrency;
|
|
|
+ finally
|
|
|
+ DetailRec.EndUpdate;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
procedure TMachineData.LoadMachineLabours(ARecord: TsdDataRecord);
|
|
|
var
|
|
|
iCode: Integer;
|
|
|
@@ -1116,12 +1339,14 @@ begin
|
|
|
end;
|
|
|
|
|
|
procedure TMachineData.SyncData(ATableName, AFieldName: string;
|
|
|
- ARecord: TsdDataRecord; AKey: string);
|
|
|
+ ARecord: TsdDataRecord; AKey, AKey2: string);
|
|
|
begin
|
|
|
FIsSyncing := True;
|
|
|
try
|
|
|
if SameText(ATableName, SMachinePrice) then
|
|
|
LoadMachinePrice(ARecord, AKey)
|
|
|
+ else if SameText(ATableName, SMachineDetail) then
|
|
|
+ LoadMachineDetail(ARecord, AKey, AKey2)
|
|
|
else if SameText(ATableName, SMachineLabours) then
|
|
|
LoadMachineLabours(ARecord)
|
|
|
else if SameText(ATableName, SProperty) then
|
|
|
@@ -1178,15 +1403,15 @@ begin
|
|
|
Result := CombineGLJKeys(ProjectGLJRec);
|
|
|
end;
|
|
|
|
|
|
-function TMachineData.HasDetail(AID: Integer): Boolean;
|
|
|
+function TMachineData.HasMachine(AID: Integer): Boolean;
|
|
|
var
|
|
|
Rec: TScMachinePriceRecord;
|
|
|
begin
|
|
|
Rec := LocateMachine(AID);
|
|
|
- Result := HasDetail(Rec);
|
|
|
+ Result := HasMachine(Rec);
|
|
|
end;
|
|
|
|
|
|
-function TMachineData.HasDetail(ARecord: TScMachinePriceRecord): Boolean;
|
|
|
+function TMachineData.HasMachine(ARecord: TScMachinePriceRecord): Boolean;
|
|
|
begin
|
|
|
Result := False;
|
|
|
if ARecord = nil then Exit;
|
|
|
@@ -1204,4 +1429,242 @@ begin
|
|
|
Result := Rec.RG.AsCurrency * GetLabourPrice(Rec.RGType.AsInteger);
|
|
|
end;
|
|
|
|
|
|
+function TMachineData.LoadMachineFromRationLib(
|
|
|
+ AGLJKey: string; var ARationLib: TObject): TsdDataRecord;
|
|
|
+var
|
|
|
+ I, J, K: Integer;
|
|
|
+ ProjectRationLib: TScProjectRationLib;
|
|
|
+ RationLib: TScRationLib;
|
|
|
+ DetailRec: TsdDataRecord;
|
|
|
+begin
|
|
|
+ Result := nil;
|
|
|
+ ARationLib := nil;
|
|
|
+ // 查找定额库中有没有指定机械台班
|
|
|
+ for I := 0 to TScProject(FProject).RationLibs.Count - 1 do
|
|
|
+ begin
|
|
|
+ ProjectRationLib := TScProject(FProject).RationLibs.FindLib(I);
|
|
|
+ if ProjectRationLib.Active and ProjectRationLib.Selected then
|
|
|
+ begin
|
|
|
+ RationLib := ProjectRationLib.Lib;
|
|
|
+ if RationLib.sdsMachinePrice.Active then
|
|
|
+ begin
|
|
|
+ DetailRec := LocateByKeys(RationLib.sdsMachinePrice, AGLJKey);
|
|
|
+ if DetailRec <> nil then
|
|
|
+ begin
|
|
|
+ ARationLib := RationLib;
|
|
|
+ Result := DetailRec;
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TMachineData.AddMachineDetailFromLib(
|
|
|
+ AMachineID: Integer; AGLJKey: string; ARationLib: TObject): Boolean;
|
|
|
+var
|
|
|
+ I, iLibID: Integer;
|
|
|
+ LibDetailRecord, DetailRecord: TsdDataRecord;
|
|
|
+ ProjectGLJRecord: TScProjectGLJRecord;
|
|
|
+ RationLib: TScRationLib;
|
|
|
+ lstDetail: TList;
|
|
|
+ strCode, strName, strSpecs, strUnit, strKey: string;
|
|
|
+begin
|
|
|
+ Result := False;
|
|
|
+ RationLib := TScRationLib(ARationLib);
|
|
|
+ iLibID := TScProject(FProject).RationLibs.IDByLibID(RationLib.ID);
|
|
|
+ lstDetail := TList.Create;
|
|
|
+ try
|
|
|
+ // 删除已有记录
|
|
|
+ DeleteMachineDetail(AMachineID);
|
|
|
+ // 查找定额库中台班明细
|
|
|
+ ResolveGLJKeys(AGLJKey, strCode, strName, strSpecs, strUnit);
|
|
|
+ RationLib.sdsMachineDetail.FilterBy(
|
|
|
+ Format('OwnerCode=''%s'' AND OwnerName=''%s'' AND OwnerSpecs=''%s'' AND OwnerUnit=''%s''', [strCode, strName, strSpecs, strUnit]),
|
|
|
+ lstDetail, 'OwnerCode');
|
|
|
+ for I := 0 to lstDetail.Count - 1 do
|
|
|
+ begin
|
|
|
+ LibDetailRecord := TsdDataRecord(lstDetail[I]);
|
|
|
+ strKey := CombineGLJKeys(LibDetailRecord);
|
|
|
+ ProjectGLJRecord := TProjectGLJ(FProjectGLJ).AddGLJFromLibRec(iLibID, strKey);
|
|
|
+ DetailRecord := sdsMachineDetail.Add(True);
|
|
|
+ try
|
|
|
+ DetailRecord.ValueByName(SID).AsInteger := ProjectGLJRecord.ID.AsInteger;
|
|
|
+ DetailRecord.ValueByName(SOwnerID).AsInteger := AMachineID;
|
|
|
+ DetailRecord.ValueByName(SCode).AsString := LibDetailRecord.ValueByName(SCode).AsString;
|
|
|
+ DetailRecord.ValueByName(SName).AsString := LibDetailRecord.ValueByName(SName).AsString;
|
|
|
+ DetailRecord.ValueByName(SSpecs).AsString := LibDetailRecord.ValueByName(SSpecs).AsString;
|
|
|
+ DetailRecord.ValueByName(SUnit).AsString := LibDetailRecord.ValueByName(SUnit).AsString;
|
|
|
+ DetailRecord.ValueByName(SOwnerCode).AsString := LibDetailRecord.ValueByName(SOwnerCode).AsString;
|
|
|
+ DetailRecord.ValueByName(SOwnerName).AsString := LibDetailRecord.ValueByName(SOwnerName).AsString;
|
|
|
+ DetailRecord.ValueByName(SOwnerSpecs).AsString := LibDetailRecord.ValueByName(SOwnerSpecs).AsString;
|
|
|
+ DetailRecord.ValueByName(SOwnerUnit).AsString := LibDetailRecord.ValueByName(SOwnerUnit).AsString;
|
|
|
+ DetailRecord.ValueByName(SQuantity).AsFloat := LibDetailRecord.ValueByName(SQuantity).AsFloat;
|
|
|
+ DetailRecord.ValueByName(SBasePrice).AsCurrency := LibDetailRecord.ValueByName(SBasePrice).AsCurrency;
|
|
|
+ DetailRecord.ValueByName(SBudgetPrice).AsCurrency := ProjectGLJRecord.BudgetPrice.AsCurrency;
|
|
|
+ finally
|
|
|
+ DetailRecord.EndUpdate;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ lstDetail.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TMachineData.DeleteMachineDetail(AMachineID: Integer);
|
|
|
+var
|
|
|
+ I: Integer;
|
|
|
+ lstDetail: TList;
|
|
|
+begin
|
|
|
+ lstDetail := TList.Create;
|
|
|
+ try
|
|
|
+ sdsMachineDetail.RecordsByKey('idxOwner', AMachineID, lstDetail);
|
|
|
+ for I := 0 to lstDetail.Count - 1 do
|
|
|
+ sdsMachineDetail.Remove(TsdDataRecord(lstDetail[I]));
|
|
|
+ finally
|
|
|
+ lstDetail.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+// 刷新动力燃料列定义(不包含部颁7种)
|
|
|
+procedure TMachineData.RefreshFuelColums;
|
|
|
+var
|
|
|
+ I, iFieldNo: Integer;
|
|
|
+ MachineRec: TScMachinePriceRecord;
|
|
|
+ DetailRec: TScMachineDetailRecord;
|
|
|
+ strKey, strName, strField: string;
|
|
|
+ bMeiQ, bYHQ, bTRQ, bView: Boolean;
|
|
|
+ lstFuel, lstFuelView: TStringList;
|
|
|
+begin
|
|
|
+ iFieldNo := 0;
|
|
|
+ bMeiQ := False;
|
|
|
+ bYHQ := False;
|
|
|
+ bTRQ := False;
|
|
|
+ lstFuel := TStringList.Create;
|
|
|
+ lstFuelView := TStringList.Create;
|
|
|
+ try
|
|
|
+ // 从sdsMachinePrice中检查煤气/天然气/液化气列
|
|
|
+ for I := 0 to sdsMachinePrice.RecordCount - 1 do
|
|
|
+ begin
|
|
|
+ MachineRec := TScMachinePriceRecord(sdsMachinePrice[I]);
|
|
|
+ if MachineRec.MeiQ.AsCurrency <> 0 then
|
|
|
+ bMeiQ := True;
|
|
|
+ if MachineRec.YHQ.AsCurrency <> 0 then
|
|
|
+ bYHQ := True;
|
|
|
+ if MachineRec.TRQ.AsCurrency <> 0 then
|
|
|
+ bTRQ := True;
|
|
|
+ if bMeiQ and bYHQ and bTRQ then
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ if bMeiQ then
|
|
|
+ lstFuel.Add(SMeiQFieldTitle);
|
|
|
+ if bYHQ then
|
|
|
+ lstFuel.Add(SYHQFieldTitle);
|
|
|
+ if bTRQ then
|
|
|
+ lstFuel.Add(STRQFieldTitle);
|
|
|
+ // 从sdvMachinePrice中检查煤气/天然气/液化气列
|
|
|
+ for I := 0 to sdvMachinePrice.RecordCount - 1 do
|
|
|
+ begin
|
|
|
+ MachineRec := TScMachinePriceRecord(sdvMachinePrice[I]);
|
|
|
+ if MachineRec.MeiQ.AsCurrency <> 0 then
|
|
|
+ bMeiQ := True;
|
|
|
+ if MachineRec.YHQ.AsCurrency <> 0 then
|
|
|
+ bYHQ := True;
|
|
|
+ if MachineRec.TRQ.AsCurrency <> 0 then
|
|
|
+ bTRQ := True;
|
|
|
+ if bMeiQ and bYHQ and bTRQ then
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ if bMeiQ then
|
|
|
+ lstFuelView.Add(SMeiQFieldTitle);
|
|
|
+ if bYHQ then
|
|
|
+ lstFuelView.Add(SYHQFieldTitle);
|
|
|
+ if bTRQ then
|
|
|
+ lstFuelView.Add(STRQFieldTitle);
|
|
|
+ // 从MachinePrice中检查煤气/天然气/液化气及新增列
|
|
|
+ for I := 0 to sdsMachineDetail.RecordCount - 1 do
|
|
|
+ begin
|
|
|
+ DetailRec := TScMachineDetailRecord(sdsMachineDetail[I]);
|
|
|
+ // 检查当前机械是否显示
|
|
|
+ bView := sdvMachinePrice.Locate(SID, DetailRec.OwnerID.AsInteger) <> nil;
|
|
|
+ strKey := CombineGLJKeys(DetailRec);
|
|
|
+ strName := DetailRec.Name.AsString;
|
|
|
+ // 煤气/天然气/液化气仍然需要检查
|
|
|
+ if SameText(strName, SNMeiQCode) then
|
|
|
+ begin
|
|
|
+ if lstFuel.IndexOf(SMeiQFieldTitle) < 0 then
|
|
|
+ lstFuel.Add(SMeiQFieldTitle);
|
|
|
+ if bView and (lstFuelView.IndexOf(SMeiQFieldTitle) < 0) then
|
|
|
+ lstFuelView.Add(SMeiQFieldTitle);
|
|
|
+ end
|
|
|
+ else if SameText(strName, SNYHQCode) then
|
|
|
+ begin
|
|
|
+ if lstFuel.IndexOf(SYHQFieldTitle) < 0 then
|
|
|
+ lstFuel.Add(SYHQFieldTitle);
|
|
|
+ if bView and (lstFuelView.IndexOf(SYHQFieldTitle) < 0) then
|
|
|
+ lstFuelView.Add(SYHQFieldTitle);
|
|
|
+ end
|
|
|
+ else if SameText(strName, SNTRQCode) then
|
|
|
+ begin
|
|
|
+ if lstFuel.IndexOf(STRQFieldTitle) < 0 then
|
|
|
+ lstFuel.Add(STRQFieldTitle);
|
|
|
+ if bView and (lstFuelView.IndexOf(STRQFieldTitle) < 0) then
|
|
|
+ lstFuelView.Add(STRQFieldTitle);
|
|
|
+ end
|
|
|
+ // 未定义过的以Fuel+数字作为字段名
|
|
|
+ else
|
|
|
+ begin
|
|
|
+ if lstFuel.IndexOfName(strName) < 0 then
|
|
|
+ begin
|
|
|
+ Inc(iFieldNo);
|
|
|
+ strField := SFuel + IntToStr(iFieldNo);
|
|
|
+ lstFuel.Add(Format('%s=%s', [strName, strField]));
|
|
|
+ if bView then
|
|
|
+ lstFuelView.Add(Format('%s=%s', [strName, strField]));
|
|
|
+ end;
|
|
|
+ end
|
|
|
+ end;
|
|
|
+
|
|
|
+ if (lstFuel.Count <> FFuelList.Count) or (not SameText(lstFuel.Text, FFuelList.Text))then
|
|
|
+ FFuelList.Assign(lstFuel);
|
|
|
+ if (lstFuelView.Count <> FFuelColumns.Count) or (not SameText(lstFuelView.Text, FFuelColumns.Text))then
|
|
|
+ begin
|
|
|
+ FFuelColumns.Assign(lstFuelView);
|
|
|
+ if Assigned(FOnMachineDetailColumnChanged) then
|
|
|
+ FOnMachineDetailColumnChanged(Self);
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ lstFuel.Free;
|
|
|
+ lstFuelView.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TMachineData.GetFuelQuantity(AMachineID: Integer;
|
|
|
+ AName: string): Double;
|
|
|
+var
|
|
|
+ Rec: TScMachineDetailRecord;
|
|
|
+begin
|
|
|
+ Result := 0;
|
|
|
+ Rec := TScMachineDetailRecord(sdsMachineDetail.Locate('OwnerID;Name', VarArrayOf([AMachineID, AName])));
|
|
|
+ if Rec <> nil then
|
|
|
+ Result := Rec.Quantity.AsFloat;
|
|
|
+end;
|
|
|
+
|
|
|
+function TMachineData.SetFuelQuantity(AMachineID: Integer; AName: string;
|
|
|
+ AQuantity: Double): Boolean;
|
|
|
+var
|
|
|
+ Rec: TScMachineDetailRecord;
|
|
|
+begin
|
|
|
+ Rec := TScMachineDetailRecord(sdsMachineDetail.Locate('OwnerID;Name', VarArrayOf([AMachineID, AName])));
|
|
|
+ Result := Rec <> nil;
|
|
|
+ if Result then
|
|
|
+ Rec.Quantity.AsFloat := AQuantity;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TMachineData.sdsMachineDetailGetRecordClass(
|
|
|
+ var ARecordClass: TsdRecordClass);
|
|
|
+begin
|
|
|
+ ARecordClass := TScMachineDetailRecord;
|
|
|
+end;
|
|
|
+
|
|
|
end.
|