Вот простой макрос по копированию номенклатуры, параметров, коэффициентов пересчета, документов, текста.
Это просто пример, не причесывал, можно сделать красивее и универсальнее конечно.
Рекомендую ознакомиться с Редактором форм, TCS API Explorer, ну и с самим редактором возможно.
В справочнике номенклатуры выполните команду Редактировать макросы, перейдите на закладку Используемый модуль, создайте его если он отсутствует и вызовите Редактор скрипта. Вставьте в него ниже приведенный код, закройте редактор скрипты, перейдите на закладку Макросы и создайте макрос ( как это описано в документации https://help.technologics.ru/7.0/TCSHelp/_723.htm). Вернитесь в номенклатурный справочник, встаньте на номенклатуру и выполните макрос.
Sub FormMacro_CopyNmk(TCSActiveModule) 'Копировать номенклатуру
if TCSActiveModule.IsEmpty then Exit Sub
'Dim Nmk As ISingleNomenclature
'Запомним исходную номенклатуру
Set Nmk = TCSApp.SingleNmkFromId( TCSActiveModule.p_ID.AsInteger )
'Освободим ее после использования
Nmk.UserModuleName = NMk.UniqueUserModuleName
TCSApp.DeleteModuleByUserModuleName( Nmk.UserModuleName )
'Создадим форму для ввода обозначения/наименования
Set Form = TCSApp.TCSForm( "", False )
Form.Caption = "Копирование номенклатуры"
Call Form.CreateControl( "Label", "lb1", "" )
Call Form.CreateControl( "Label", "lb2", "" )
Call Form.CreateControl( "Label", "lb3", "" )
Call Form.CreateControl( "Edit", "ed1", "" )
Call Form.CreateControl( "Edit", "ed2", "" )
Call Form.CreateControl( "Edit", "ed3", "" )
Call Form.CreateControl( "BitBtn", "bt1", "" )
Call Form.CreateControl( "BitBtn", "bt2", "" )
Set c = Form.Controls("lb1" )
c.Caption = "Обозначение:"
c.Left = 10
c.top = 10
c.AutoSize = False
c.Width = 100
c.Alignment = "taRightJustify"
Set c = Form.Controls("lb2" )
c.Caption = "Наименование:"
c.Left = 10
c.top = 30
c.AutoSize = False
c.Width = 100
c.Alignment = "taRightJustify"
Set c = Form.Controls("lb3" )
c.Caption = "Код:"
c.Left = 10
c.top = 50
c.AutoSize = False
c.Width = 100
c.Alignment = "taRightJustify"
Set c = Form.Controls("ed1" )
c.Text = Nmk.p_NOTE.AsSafeString
c.Left = 120
c.top = 10
c.Width = 200
Set c = Form.Controls("ed2" )
c.Text = Nmk.p_NAME.AsSafeString
c.Left = 120
c.top = 30
c.Width = 200
Set c = Form.Controls("ed3" )
c.Text = Nmk.p_NMK_CODE.AsSafeString
c.Left = 120
c.top = 50
c.Width = 200
Set c = Form.Controls("bt1" )
c.Left = 150
c.top = 100
c.Caption = "Ok"
c.ModalResult = 1
c.StdImageKind = "sikOK"
Set c = Form.Controls("bt2" )
c.Left = 250
c.top = 100
c.Caption = "Cancel"
c.ModalResult = 2
c.StdImageKind = "sikCancel"
Form.Width = 350
Form.Height= 180
Call Form.ShowModal
If Form.ModalResult=1 Then
'Создаем новую номенклатуру
On Error Resume Next
TCSActiveModule.CancelChanges
TCSActiveModule.CreateNew
TCSActiveModule.p_NOTE.AsString = Form.Controls("ed1").Text
TCSActiveModule.p_NAME.AsString = Form.Controls("ed2").Text
TCSActiveModule.p_NMK_CODE.AsString = Form.Controls("ed3").Text
TCSActiveModule.p_NODE_ID.AsInteger = Nmk.p_NODE_ID.AsInteger
TCSActiveModule.p_MESUR_ID.AsInteger = Nmk.p_MESUR_ID.AsInteger
Call TCSActiveModule.SaveChangesEx
If Err Then
Call TCSApp.ShowDetailedErrorMessage( "Ошибка при создании номенклатуры", Err.Description )
Call TCSActiveModule.CancelChanges
Exit Sub
End If
On Error Goto 0
'Копируем коэффициенты пересчета (просто таблица)
Set cmc = NMk.Properties( "NmkMesurTranslate" ).AsIDispatch
Set cmd = TCSActiveModule.Properties( "NmkMesurTranslate" ).AsIDispatch
'Dim cmc, cmd As IGModule
cmc.First
while not cmc.Eof
cmd.CancelChanges
cmd.CreateNew
cmd.p_MESUR_IN.AsInteger = cmc.p_MESUR_IN.AsInteger
cmd.p_MESUR_TO.AsInteger = cmc.p_MESUR_TO.AsInteger
cmd.p_VALUE.AsFloat = cmc.p_VALUE.AsSafeFloat
cmd.SaveChangesEx
cmc.Next
Wend
'Копируем номенклатурный текст (просто поле)
Set cmc = NMk.Properties( "NmkText" ).AsIDispatch
Set cmd = TCSActiveModule.Properties( "NmkText" ).AsIDispatch
cmd.Edit
cmd.p_NMK_TEXT.AsString = cmc.p_NMK_TEXT.AsSafeString
cmd.SaveChangesEx
'Копируем параметры (здесь спец. интерфейс )
'Dim pc, pd As IParameterValues
Set pc = NMk.Properties( "Parameters" ).AsIDispatch
Set pd = TCSActiveModule.Properties( "Parameters" ).AsIDispatch
pc.First
While Not pc.Eof
On Error Resume Next
res = pd.SetParameterValueByParId( pc.p_PAR_ID.AsInteger, pc.CurrentParameterValue, pc.p_PAR_REF.AsSafeInteger, False )
On Error Goto 0
pc.Next
WEnd
'Копируем ссылки на документы (здесь спец. интерфейс )
'Dim dc, dd As INomenclatureDocuments
Set dc = NMk.Properties( "NomenclatureDocuments" ).AsIDispatch
Set dd = TCSActiveModule.Properties( "NomenclatureDocuments" ).AsIDispatch
dc.ShowMainDocument
On Error Resume Next
if not dc.IsEmpty then Id = dd.LinkNomenclatureToDocument( dc.p_ID.AsInteger )
On Error Goto 0
dc.ShowNomenclatureDocuments
dc.First
While not dc.Eof
On Error Resume Next
if not dc.IsMainDocument Then Id = dd.LinkNomenclatureToDocument( dc.p_ID.AsInteger )
On Error Goto 0
dc.Next
WEnd
End If
End Sub
Можно также ознакомиться с демонстрационным роликом (отправил ссылку в личку), он старый но функции описанные в нем никуда не делись, только стали лучше. Не перевели еще его на ютуб, к сожалению.