Вот тут и понадобится TCS API Explorer. Открываем модуль Справочник цехов, в нем вызываем команду - показать где используется данный цех. Выбираем показать Тех операции. Получаем список операций в которых используется данный цех. Теперь вызываем окно Редактировать макросы и в нем вызываем TCS API Explorer. Дальше понадобятся знания АПИ хоть небольшие. Исследуем текущий модуль, на закладке IModule смотрим IModule2 свойство IsChildModules. Оно возвращает True, что означает что у данного модули нет встроенного интерфейса и значить можно работать только на чтение. Переходим на страничку IPModule и изучаем список свойств доступных нам в данный момент Properties. Там мы видим свойства TECH_ID и VER_ID который дают нам информацию о версии техпроцесса и позиции в нем. Этой информации нам достаточно чтобы получить техпроцесс ( а на него интерфейс есть уже) и произвести в нем требуемую замену.
Закрываем TCS API Explorer, создаем используемый модуль (его скорей всего нет), вызываем редактор скриптов и в нем создаем макрос
Sub FormMacro_ReplaceCeha(TCSActiveModule)'Замена цеха
If TCSApp.PlantDepartments.ShowModal( "Выберите цех для замены" )>0 Then
NewCehaId = TCSApp.PlantDepartments.Properties("ID").AsInteger
Set ErrCols = TCSAPp.CreateStrings
'Dim ErrCols As ICSDNStrings
TCSActiveModule.First
While Not TCSActiveModule.Eof
TechId = TCSActiveModule.Properties("TECH_ID").AsInteger
VerId = TCSActiveModule.Properties("VER_ID").AsInteger
DispName = "[Запись:" + TCSActiveModule.Properties("NMK_NOTE").AsSafeString + "-" + _
TCSActiveModule.Properties("NMK_NAME").AsSafeString + "(" + _
TCSActiveModule.Properties("VER_NAME").AsSafeString + ") Операция{" + _
TCSActiveModule.Properties("NAME").AsSafeString + "}]"
Set Tp = Nothing
On Error Resume Next
Set Tp = TCSAPp.NmkTechnology( -1, VerId )
'Dim Tp As INmkTechnology
On Error Goto 0
If Not Tp Is Nothing Then
If Tp.Locate( "ID", TechId, 0 ) Then
If Tp.AllowEdit Then
On Error Resume Next
Set TpAts = Tp.Properties("TechnologyAttributes").AsIDispatch
'Dim TpAts As IGModule
If Not TpAts Is Nothing Then
TpAts.Edit
TpAts.Properties("PlantDepatment_ID").AsInteger = NewCehaId
TpAts.SaveChanges
Else
idx = ErrCols.Add( DispName )
idx = ErrCols.Add( "Техпроцесс с идентификатором " & CStr(VerId) & ": Не могу получить реквизиты!" )
End If
If Err Then
idx = ErrCols.Add( DispName )
idx = ErrCols.Add( "Техпроцесс с идентификатором " & CStr(VerId) & ". Ошибка при работе: " & Err.Description )
Err.Clear
End If
On Error Goto 0
Else
idx = ErrCols.Add( DispName )
idx = ErrCols.Add( "Техпроцесс с идентификатором " & CStr(VerId) & " может быть изменен!" )
End If
Else
idx = ErrCols.Add( DispName )
idx = ErrCols.Add( "Не могу найти запись <" & CStr(TechId) & "> в техпроцесс по идентификатору " & CStr(VerId) )
End If
Tp.UserModuleName = TCSApp.UniqueUserModuleName
Call TCSAPp.DeleteModuleByUserModuleName( Tp.UserModuleName )
Else
idx = ErrCols.Add( DispName )
idx = ErrCols.Add( "Не могу получить техпроцесс по идентификатору " & CStr(VerId) )
End If
TCSActiveModule.Next
Wend
If ErrCols.Count>0 Then
Call ErrCols.ShowModal( "При работе возникли ошибки", 400, 400 )
End If
End If
End Sub
Создаем его описание, запускаем. Это просто пример (хотя кое какие действия он и производит, так что осторожно). Запуская этот макрос можно производить замены цеха по указанным в данном модуле записям. Написан для версии 6.2 но по идее должен работать и в 4.7.1.
Можно конечно организовать работу и по другому (вариантов масса, АПИ дает много различных способов). Это самый простой - что вижу то пишу.
В 5.7 и выше можно организовать полностью свой набор данных и тогда работу можно организовать еще комфортнее конечно, нарисовав свою форму ввода, прописав различные формы взаимодействия с пользователем.