!! Формирование строки с параметрами или/или свойствами элемента по шаблону ! mgp_in_str - шаблон строки, имена параметров или свойств должны быть обрамлены в знаки % ! mgp_prim1...5 - свободные текстовые параметры, для замены вхождений %pr1%...%pr5% ! mgp_qty - количество элементов, для замены выхождений "qty_v" ! mgp_ld - формат единиц для параметров библ. элемента ! mgp_error_char - На что знаменять значение параметров, если значение не найдено или пустое ! Параметры на выходе ! mgp_out_str - сформированная строка ! Использование: !mgp_in_str = "%id% - размеры %razm%" !mgp_prim1="прим. 1" : mgp_prim2="" : mgp_prim3="" : mgp_prim4="" : mgp_prim5="" !mgp_qty=1 : mgp_ld="%.0mm" !call "macro_get_param" parameters mgp_in_str=mgp_in_str ! mgp_prim1=mgp_prim1, ! mgp_prim2=mgp_prim2, ! mgp_prim3=mgp_prim3, ! mgp_prim4=mgp_prim4, ! mgp_prim5=mgp_prim5, ! mgp_qty=mgp_qty, ! mgp_ld=mgp_ld, ! mgp_error_char=mgp_error_char, ! RETURNED_PARAMETERS mgp_out_str LCODE = 1 if LibraryLangCode = "RUS" then LCODE = 1 if LibraryLangCode = "INT" then LCODE = 2 dim stringarr[][] : LCRUS = 1 : LCINT = 2 stringarr[LCRUS][1] = "Да" stringarr[LCRUS][2] = "Нет" stringarr[LCRUS][3] = "шт." stringarr[LCINT][1] = "True" stringarr[LCINT][2] = "False" stringarr[LCINT][3] = "" FILE_DEPENDENCE "macro_trim_space", "macro_replace_word" param_name_str = "" param_name_str_old = "" param_name_str_old_lower = "" unit_name_str = "" unstr="%.0" EPS = 0.0001 dict propInputIds dict propOutputVals if strlen(mgp_in_str) = 0 or mgp_in_str = "%%" then mgp_in_str_ = "" goto "m_end" endif gl_id="" : full_id="" : master_id = "" n = REQUEST ("Full_ID_of_parent", "", master_id) !Удаляем пробелы в начале и конце if STRSTR(master_id, " ")>EPS then mts_in_str = master_id call "macro_trim_space" parameters mts_in_str=mts_in_str, RETURNED_PARAMETERS mts_out_str master_id = mts_out_str endif gl_id=GLOB_ID if vartype(gl_id)=1 then gl_id = str("%.0", gl_id) !Удаляем пробелы в начале и конце if STRSTR(gl_id, " ")>EPS then mts_in_str = gl_id call "macro_trim_space" parameters mts_in_str=mts_in_str, RETURNED_PARAMETERS mts_out_str gl_id = mts_out_str endif if master_id <> "" then full_id = master_id + "." + gl_id else full_id = gl_id endif if strlen(mgp_ignore_id)0 then gl_id = "@" if STRSTR(full_id, mgp_ignore_id)>0 then full_id = "@" if STRSTR(master_id, mgp_ignore_id)>0 then master_id = "@" mgp_in_str_ = mgp_in_str if STRSTR(mgp_in_str_, "%", 1)0 then in_str = mgp_in_str_ : gosub "get_param_name" if STRLEN(unit_name_str)>0 then unstr = "%" + unit_name_str else unstr = mgp_ld endif if param_name_str <> "" then var_param = "" if STRSTR("%"+param_name_str+"%","%id%",0)>0 then var_param = gl_id if STRSTR("%"+param_name_str+"%","%f_id%",0)>0 then var_param = full_id if STRSTR("%"+param_name_str+"%","%m_id%",0)>0 then var_param = master_id if STRSTR("%"+param_name_str+"%","%pr1%",0)>0 then var_param = mgp_prim1 if STRSTR("%"+param_name_str+"%","%pr2%",0)>0 then var_param = mgp_prim2 if STRSTR("%"+param_name_str+"%","%pr3%",0)>0 then var_param = mgp_prim3 if STRSTR("%"+param_name_str+"%","%pr4%",0)>0 then var_param = mgp_prim4 if STRSTR("%"+param_name_str+"%","%pr5%",0)>0 then var_param = mgp_prim5 if STRSTR("%"+param_name_str+"%","%symb_pos_x%",0)>0 then var_param = STR (unstr,symb_pos_x) if STRSTR("%"+param_name_str+"%","%symb_pos_y%",0)>0 then var_param = STR (unstr,symb_pos_y) if STRSTR("%"+param_name_str+"%","%symb_pos_z%",0)>0 then var_param = STR (unstr,symb_pos_z) if STRSTR("%"+param_name_str+"%","%glob_elevation%",0)>0 then var_param = STR (unstr,GLOB_ELEVATION) if STRSTR("%"+param_name_str+"%","%qty_v%",0)>0 then if mgp_qty>EPS then var_param = STR ("%.0", mgp_qty)+stringarr[LCODE][3] else var_param = "" endif endif if var_param = "" then nd1 = request("Assoclp_parvalue", param_name_str, namindd1, typed1, flagd1, dim1d1, dim2d1, var_param) if nd1=6 then if vartype(var_param)=1 then var_param = STR (unstr, var_param) else param_name_str_old_lower = STRTOLOWER(param_name_str_old) param_name_str_lower = STRTOLOWER(param_name_str) flag_find = 0 var_param = "" dim parentPropertiesArray[] n = request ("Properties_Of_Parent", "", parentPropertiesArray) for i=1 to vardim1(parentPropertiesArray) step 4 if i+3<=vardim1(parentPropertiesArray) then PropertyName = parentPropertiesArray[i+3] id = parentPropertiesArray[i] if param_name_str_old_lower = STRTOLOWER(PropertyName) or param_name_str_old_lower = STRTOLOWER(id) then _stPropertyValue = stringarr[LCODE][2] _stPropertyID = id gosub "getPropertyValue" var_param = _stPropertyValue i=vardim1(parentPropertiesArray) flag_find = 1 endif endif next i if custom_unit=1 and flag_find = 0 then for i=1 to vardim1(parentPropertiesArray) step 4 if i+3<=vardim1(parentPropertiesArray) then PropertyName = parentPropertiesArray[i+3] id = parentPropertiesArray[i] if param_name_str_lower = STRTOLOWER(PropertyName) or param_name_str_lower = STRTOLOWER(id) then _stPropertyValue = stringarr[LCODE][2] _stPropertyID = id gosub "getPropertyValue" var_param = _stPropertyValue i=vardim1(parentPropertiesArray) flag_find = 1 endif endif next i endif if flag_find = 0 then _stPropertyValue = stringarr[LCODE][2] DIM folderNamesArray[] n = APPLICATION_QUERY ("OwnCustomParameters", "GetParameterFolderNames()", folderNamesArray) for iii = 1 to vardim1(folderNamesArray) step 3 DIM parNamesArray[] querystring = "GetParameterNames(" + folderNamesArray[iii] + ")" n = APPLICATION_QUERY ("OwnCustomParameters", querystring, parNamesArray) for jjj = 1 to vardim1(parNamesArray) step 3 if strstr(STRTOLOWER(parNamesArray[jjj]), param_name_str_lower)>0 then querystring = "GetParameter(" + parNamesArray[jjj] + ")" n = APPLICATION_QUERY ("OwnCustomParameters", querystring, _stPropertyValue) flag_find = 1 jjj = vardim1(parNamesArray) iii = vardim1(folderNamesArray) endif next jjj next iii endif if flag_find = 0 and strstr(param_name_str_old, "/")>0 then for i=1 to vardim1(parentPropertiesArray) step 4 if i+3<=vardim1(parentPropertiesArray) then GroupName = parentPropertiesArray[i+2] PropertyName = parentPropertiesArray[i+3] id = parentPropertiesArray[i] full_name_1 = STRTOLOWER(GroupName+"/"+PropertyName) full_name_2 = STRTOLOWER(GroupName+"/"+id) if full_name_1 = param_name_str_old_lower or full_name_2 = param_name_str_old_lower then _stPropertyValue = stringarr[LCODE][2] _stPropertyID = id gosub "getPropertyValue" var_param = _stPropertyValue i=vardim1(parentPropertiesArray) flag_find = 1 endif endif next i endif endif endif if var_param = "@" then var_param = "" if var_param = "-" then var_param = "" if var_param = "0" then var_param = "" mts_in_str = var_param call "macro_trim_space" parameters mts_in_str=mts_in_str, RETURNED_PARAMETERS mts_out_str var_param = mts_out_str if strlen(var_param)EPS then mrw_in_str = mgp_in_str_ mrw_wordToReplace = " " mrw_newWord = " " call "macro_replace_word" parameters mrw_in_str=mrw_in_str, mrw_newWord=mrw_newWord, mrw_wordToReplace = mrw_wordToReplace, RETURNED_PARAMETERS mrw_out_str mgp_in_str_ = mrw_out_str endif !Удаляем пробелы в начале и конце if STRSTR(mgp_in_str_, " ")>EPS then mts_in_str = mgp_in_str_ call "macro_trim_space" parameters mts_in_str=mts_in_str, RETURNED_PARAMETERS mts_out_str mgp_in_str_ = mts_out_str endif goto "m_end" "get_param_name": param_name_str_old = "" param_name_str = "" unit_name_str = "" start_find = STRSTR(in_str, "%", 1) if start_find > 0 then len_in_str = STRLEN (in_str) chapt_1 = STRSUB(in_str, start_find+1, len_in_str) start_find_2 = STRSTR(chapt_1, "%", 1) if start_find_2 > 0 then param_name_str = STRSUB(chapt_1, 1, start_find_2-1) endif endif param_name_str_old = param_name_str start_find = STRSTR(param_name_str, ".", 1) custom_unit = 0 if STRLEN(param_name_str)>0 and start_find then len_in_str = STRLEN(param_name_str) unit_name_str = STRSUB(param_name_str, start_find, len_in_str) param_name_str = STRSUB(param_name_str, 1, start_find-1) custom_unit = 1 endif return "getPropertyValue": _stPropertyValue = "" propInputIds.propertyIds[1].id = _stPropertyID if HASKEY(propOutputVals.propertyValues) then t = REMOVEKEY(propOutputVals.propertyValues) n = REQUEST ("Property_Values_Of_Parent", propInputIds, propOutputVals) if HASKEY(propOutputVals.propertyValues)=0 then return if propOutputVals.propertyValues[1].value_status = 1 then _typeValue = propOutputVals.propertyValues[1].type _value = 0 for j = 1 to vardim1(propOutputVals.propertyValues[1].value) _value = propOutputVals.propertyValues[1].value[j] flag_empty=0 if vartype(_value)=1 and _typeValue <> 1 then if abs(_value)EPS then _value = stringarr[LCODE][1] goto 40 else _value = stringarr[LCODE][2] goto 40 endif endif if vartype(_value)=2 then if strlen(_value)=0 or _value=" " then flag_empty=1 goto 40 endif endif 40: if not(flag_empty) then if j > 1 then _stPropertyValue = _stPropertyValue + "; " + _value else _stPropertyValue = _value endif endif next j endif if HASKEY(propInputIds.propertyIds) then t = REMOVEKEY(propInputIds.propertyIds) return "m_end": if vartype(mgp_in_str_) = 2 then mgp_out_str = mgp_in_str_ else mgp_out_str = "" endif !!!parameters mgp_out_str=mgp_out_str EXIT mgp_out_str