Files
WorkNote/SanPinPLM/相关操作/4.0-other/999.Delphi脚本记录.md
2025-05-07 19:48:34 +08:00

5.1 KiB
Raw Blame History

介绍

本笔记用于记录所有编制过的 Delphi 脚本,以便于沉淀相关知识

多属性值拼接至另一属性中

fedtusr_substrate_idfedtusr_substrate_id2fedtusr_substrate_id3fedtusr_substrate_id4 控件中获取值,以逗号为分隔符,按顺序进行拼接,结果输出到 mmmusr_substrate2 控件中

uses MyClass,Variables,BaseUtil,CommonFunc,DataConst,CFFrm,CFSimplePropFrm,Forms,StdCtrls,Variants,SysUtils,Classes,Controls,Dialogs,
     CHostIntf,ProductClas,DocClas,LoginClas,VirtualTrees,CEntClas,PathClas;
var 
  StringList: TStringList;

begin
  // 创建和初始化TStringList
  StringList := TStringList.Create;
  try
  // 如果fedtusr_substrate_id的值不为空则将值添加到StringList中
    if fedtusr_substrate_id.Text <> '' then
      StringList.Add(fedtusr_substrate_id.Text);
    if fedtusr_substrate_id2.Text <> '' then
      StringList.Add(fedtusr_substrate_id2.Text); 
    if fedtusr_substrate_id3.Text <> '' then
      StringList.Add(fedtusr_substrate_id3.Text);
    if fedtusr_substrate_id4.Text <> '' then
      StringList.Add(fedtusr_substrate_id4.Text);

    // 转换为逗号分隔的字符串
    mmmusr_substrate2.Text := StringList.DelimitedText;  // 默认使用逗号作为分隔符

    // 如果需要指定其他分隔符可以设置Delimiter属性
    // StringList.Delimiter := ';';  // 设置分隔符为分号
    // Result := StringList.DelimitedText;
  finally
    StringList.Free;
  end;
end.

属性值添加至另一属性中

fedtusr_gys 控件中的值有多个,采取 ; 进行分隔,现要验证 fedtusr_shgys 控件中的值是否存在于 fedtusr_gys 控件中,如果不存在,则将其添加进去,并进行排序

uses MyClass,Variables,BaseUtil,CommonFunc,DataConst,CFFrm,CFSimplePropFrm,Forms,StdCtrls,Variants,SysUtils,Classes,Controls,Dialogs,
     CHostIntf,ProductClas,DocClas,LoginClas,VirtualTrees,CEntClas,PathClas;

var
	gysList: TStringList;
begin
  	try
	    // 初始化 TStringList
	    gysList := TStringList.Create;
	    gysList.Delimiter := ';';
	    gysList.StrictDelimiter := True;
	    // 将 fedtusr_gys 按分号分隔成列表
	    gysList.DelimitedText := fedtusr_gys.Text;
	    if gysList.IndexOf(fedtusr_shgys.Text) = -1 then
	      begin
			// 如果不存在,则添加到 fedtusr_gys 中
			gysList.Add(fedtusr_shgys.Text);
			gysList.Sort;
			// 将列表重新组合成字符串,使用分号分隔
			fedtusr_gys.Text := gysList.DelimitedText;
	      end;  
  	finally
      	gysList.Free;
  	end;
end.

属性值是否被另一属性所包含校验

fedtusr_gys 控件中的值有多个,采取 ; 进行分隔,现要验证 fedtusr_shgys 控件中的值是否存在于 fedtusr_gys 控件中,如果不存在,则弹窗提示

uses MyClass,Variables,BaseUtil,CommonFunc,DataConst,CFFrm,CFSimplePropFrm,Forms,StdCtrls,Variants,SysUtils,Classes,Controls,Dialogs,
     CHostIntf,ProductClas,DocClas,LoginClas,VirtualTrees,CEntClas,PathClas;

var
	gysList: TStringList;
begin
  	try
	    // 初始化 TStringList
	    gysList := TStringList.Create;
	    gysList.Delimiter := ';';
	    gysList.StrictDelimiter := True;
	    // 将 fedtusr_gys 按分号分隔成列表
	    gysList.DelimitedText := fedtusr_gys.Text;
	    if gysList.IndexOf(fedtusr_shgys.Text) = -1 then
	      begin
			ShowMessage('默认供应商未包含在供应商列表中');
	      end;  
  	finally
      	gysList.Free;
  	end;
end.

不同属性一致性设置

fedtDrawId 的值设置为 fedtItemCode 的值

uses MyClass,Variables,BaseUtil,CommonFunc,DataConst,CFFrm,CFSimplePropFrm,Forms,StdCtrls,Variants,SysUtils,Classes,Controls,Dialogs,
     CHostIntf,ProductClas,DocClas,LoginClas,VirtualTrees,CEntClas,PathClas;

begin

  //注释:在下面添加您的脚本代码
  // 检查 物料编码 是否为空
  if Trim(fedtItemCode.Text) <> '' then
  begin
    // 如果 物料编码 不为空,则将 代号 的值设置为 物料编码 的值
    fedtDrawId.Text := fedtItemCode.Text;
  end
  else
  begin
    // 如果 物料编码 为空,则清空 代号
   fedtDrawId.Text := '';
  end;
end.

执行SQL语句获取查询结果

主要内容为通过 chiGetFieldValueBySql方法去执行 SQL ` 语句

uses MyClass,Variables,BaseUtil,CommonFunc,DataConst,CFFrm,CFSimplePropFrm,Forms,StdCtrls,Variants,SysUtils,Classes,Controls,Dialogs,
     CHostIntf,ProductClas,DocClas,LoginClas,VirtualTrees,CEntClas,PathClas;

Var
  str: String;
begin
  try
    // 1. 查询usr_333的值
    str := chiGetFieldValueBySql('select usr_333 from pdmitem where itemcode = ''' + fedtItemCode.Text + '''');
    
    // 2. 检查查询结果
    if str = '' then
    begin
      ShowMessage('未找到物料编码: ' + fedtItemCode.Text);
      Exit;
    end;

    // 3. 如果usr_333为1则更新usr_444为1
    if str = '1' then
    begin
      // 执行更新操作
      cbxusr_444.checked := false;
      
      // 可选:显示操作成功提示
      ShowMessage('已自动将usr_444更新为1');
    end;
    
  except
    on E: Exception do
      ShowMessage('操作失败: ' + E.Message);
  end;
end.