199 lines
5.9 KiB
ObjectPascal
199 lines
5.9 KiB
ObjectPascal
unit U_CraftSync;
|
|
|
|
interface
|
|
|
|
uses
|
|
SysUtils, Classes, Variants, DB, ADODB;
|
|
|
|
//将工艺数据静默同步到所有绑定该工艺的产品:
|
|
// 主表工艺字段(含工艺编号/名称) + 经纬纱配比子表 + 纹版图子表
|
|
//注意:必须在调用方的事务内执行,本过程不自己开事务
|
|
procedure SyncCraftToProduct(const ACRID: string);
|
|
//将工艺数据同步到所有绑定该工艺的合同明细行(仅工艺管辖列:编号/名称/门幅/克重/颜色)
|
|
//注意:必须在调用方的事务内执行,本过程不自己开事务
|
|
procedure SyncCraftToContract(const ACRID: string);
|
|
|
|
implementation
|
|
|
|
uses
|
|
U_DataLink, U_RTFun;
|
|
|
|
function StrSQL(const AValue: Variant): string;
|
|
begin
|
|
if VarIsNull(AValue) then
|
|
Result := 'null'
|
|
else
|
|
Result := QuotedStr(Trim(VarToStr(AValue)));
|
|
end;
|
|
|
|
function NumSQL(const AValue: Variant): string;
|
|
begin
|
|
if VarIsNull(AValue) then
|
|
Result := 'null'
|
|
else
|
|
Result := FormatFloat('0.##########', VarAsType(AValue, varDouble));
|
|
end;
|
|
|
|
function WBColList(const APrefix: string): string;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
Result := '';
|
|
for i := 1 to 72 do
|
|
begin
|
|
if Result <> '' then
|
|
Result := Result + ',';
|
|
Result := Result + APrefix + 'WB_' + IntToStr(i);
|
|
end;
|
|
end;
|
|
|
|
procedure SyncCraftToProduct(const ACRID: string);
|
|
var
|
|
Qry, QryYarn: TADOQuery;
|
|
Products: TStringList;
|
|
i: Integer;
|
|
NewNo: string;
|
|
begin
|
|
if Trim(ACRID) = '' then
|
|
Exit;
|
|
Qry := TADOQuery.Create(nil);
|
|
QryYarn := TADOQuery.Create(nil);
|
|
Products := TStringList.Create;
|
|
try
|
|
Qry.Connection := DataLink_ClothInfo.ADOLink;
|
|
QryYarn.Connection := DataLink_ClothInfo.ADOLink;
|
|
|
|
//1.主表工艺字段镜像(只更新工艺管辖列,不碰产品自有字段)
|
|
with Qry do
|
|
begin
|
|
Close;
|
|
SQL.Clear;
|
|
SQL.Add('update B set B.CRID=C.CRID,B.CR_Code=C.CR_Code,B.CR_Name=C.CR_Name');
|
|
SQL.Add(',B.C_Width=C.C_Width,B.C_GramWeight=C.C_GramWeight,B.C_Color=C.C_Color');
|
|
SQL.Add(',B.C_YarnQty=C.C_YarnQty,B.head_count=C.head_count,B.strip_width=C.strip_width');
|
|
SQL.Add(',B.C_MachLatitudeDensity=C.C_MachLatitudeDensity,B.row_count_top=C.row_count_top');
|
|
SQL.Add(',B.displace=C.displace,B.reed_width=C.reed_width,B.C_ReedNo=C.C_ReedNo');
|
|
SQL.Add(',B.ends_per_dent=C.ends_per_dent,B.selvage_yarn=C.selvage_yarn,B.yardage=C.yardage');
|
|
SQL.Add(',B.warp_arrange=C.warp_arrange,B.weft_arrange=C.weft_arrange,B.threading_method=C.threading_method');
|
|
SQL.Add('from BS_Cloth_Info B join BS_Craft_Info C on C.CRID=B.CRID');
|
|
SQL.Add('where B.CRID=' + QuotedStr(Trim(ACRID)));
|
|
ExecSQL;
|
|
end;
|
|
|
|
//2.纹版图镜像(每产品一行,整行替换)
|
|
with Qry do
|
|
begin
|
|
Close;
|
|
SQL.Clear;
|
|
SQL.Add('delete W from Bs_Cloth_Info_WB W join BS_Cloth_Info B on B.BCIID=W.BCIID');
|
|
SQL.Add('where B.CRID=' + QuotedStr(Trim(ACRID)));
|
|
ExecSQL;
|
|
|
|
Close;
|
|
SQL.Clear;
|
|
SQL.Add('insert into Bs_Cloth_Info_WB (BCIID,' + WBColList('') + ')');
|
|
SQL.Add('select B.BCIID,' + WBColList('C.'));
|
|
SQL.Add('from BS_Cloth_Info B join BS_Craft_Info_WB C on C.CRID=B.CRID');
|
|
SQL.Add('where B.CRID=' + QuotedStr(Trim(ACRID)));
|
|
ExecSQL;
|
|
end;
|
|
|
|
//3.经纬纱配比镜像(逐产品整删整插,YRId按产品表自己的流水取号)
|
|
with Qry do
|
|
begin
|
|
Close;
|
|
SQL.Clear;
|
|
SQL.Add('select BCIID from BS_Cloth_Info where CRID=' + QuotedStr(Trim(ACRID)));
|
|
Open;
|
|
while not Eof do
|
|
begin
|
|
Products.Add(Trim(FieldByName('BCIID').AsString));
|
|
Next;
|
|
end;
|
|
Close;
|
|
end;
|
|
|
|
if Products.Count > 0 then
|
|
begin
|
|
with QryYarn do
|
|
begin
|
|
Close;
|
|
SQL.Clear;
|
|
SQL.Add('select * from BS_Craft_Yarn where CRID=' + QuotedStr(Trim(ACRID)));
|
|
SQL.Add('order by YRType,seq_no,YRId');
|
|
Open;
|
|
end;
|
|
try
|
|
for i := 0 to Products.Count - 1 do
|
|
begin
|
|
with Qry do
|
|
begin
|
|
Close;
|
|
SQL.Clear;
|
|
SQL.Add('delete BS_Cloth_Yarn where BCIID=' + QuotedStr(Products[i]));
|
|
ExecSQL;
|
|
end;
|
|
|
|
QryYarn.First;
|
|
while not QryYarn.Eof do
|
|
begin
|
|
if GetLSNo(Qry, NewNo, 'RJ', 'BS_Cloth_Yarn', 4, 1) = False then
|
|
raise Exception.Create('取产品配比流水号失败');
|
|
with Qry do
|
|
begin
|
|
Close;
|
|
SQL.Clear;
|
|
SQL.Add('insert into BS_Cloth_Yarn (YRId,BCIID,YRType,seq_no,Y_Code,Y_Name,Brand,Y_Color,Denier,Y_Ratio,Y_Qty,Filler,FillTime)');
|
|
SQL.Add('values (' + QuotedStr(Trim(NewNo)) + ',' + QuotedStr(Products[i]));
|
|
SQL.Add(',' + StrSQL(QryYarn.FieldByName('YRType').Value));
|
|
SQL.Add(',' + StrSQL(QryYarn.FieldByName('seq_no').Value));
|
|
SQL.Add(',' + StrSQL(QryYarn.FieldByName('Y_Code').Value));
|
|
SQL.Add(',' + StrSQL(QryYarn.FieldByName('Y_Name').Value));
|
|
SQL.Add(',' + StrSQL(QryYarn.FieldByName('Brand').Value));
|
|
SQL.Add(',' + StrSQL(QryYarn.FieldByName('Y_Color').Value));
|
|
SQL.Add(',' + NumSQL(QryYarn.FieldByName('Denier').Value));
|
|
SQL.Add(',' + NumSQL(QryYarn.FieldByName('Y_Ratio').Value));
|
|
SQL.Add(',' + NumSQL(QryYarn.FieldByName('Y_Qty').Value));
|
|
SQL.Add(',' + QuotedStr(Trim(DName)) + ',getdate())');
|
|
ExecSQL;
|
|
end;
|
|
QryYarn.Next;
|
|
end;
|
|
end;
|
|
finally
|
|
QryYarn.Close;
|
|
end;
|
|
end;
|
|
finally
|
|
Products.Free;
|
|
QryYarn.Free;
|
|
Qry.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure SyncCraftToContract(const ACRID: string);
|
|
var
|
|
Qry: TADOQuery;
|
|
begin
|
|
if Trim(ACRID) = '' then
|
|
Exit;
|
|
Qry := TADOQuery.Create(nil);
|
|
try
|
|
Qry.Connection := DataLink_ClothInfo.ADOLink;
|
|
with Qry do
|
|
begin
|
|
Close;
|
|
SQL.Clear;
|
|
SQL.Add('update S set S.C_Code=C.CR_Code,S.C_Name=C.CR_Name');
|
|
SQL.Add(',S.C_Width=C.C_Width,S.C_GramWeight=C.C_GramWeight,S.C_Color=C.C_Color');
|
|
SQL.Add('from BS_Contract_Sub S join BS_Craft_Info C on C.CRID=S.CRID');
|
|
SQL.Add('where S.CRID=' + QuotedStr(Trim(ACRID)));
|
|
ExecSQL;
|
|
end;
|
|
finally
|
|
Qry.Free;
|
|
end;
|
|
end;
|
|
|
|
end.
|