Тема: Возможность "клонирования" номенклатуры со свойствами

Прошу рассмотреть возможность добавления функции копирования (клонирования) номенклатуры с идентичными свойствами (параметрами).
В существующем виде можно формировать номенклатурный справочник только по названиям с переходом на следующую позицию без сохранения всех параметров "оригинала". Это сильно увеличивает обьем работы - в последующем нужно редактировать каждую позицию отдельно.
В качестве примера - внести весь сортамент прутка Д16 от 8 до ~ 200 мм с идентичными свойствами (в номенклатурной карточке - все параметры, кроме диаметра + номенклатурный текст+ коэфф пересч.+привязанные эскизы+ привязанные документы + и т.д.) - это рутинный ручной труд в обьеме тысяч позиций в существующем виде.
Это актуально для любых номенклатурных позиций, как то, сортамент, метизы, нормали, типовые изделия и т.д., имеющие только оригинальный номер или наименование/обозначение и практически идентичные параметры.
Предлагаю создать стандартную функцию в "Номенклатура (добавление)" копирование (аналог кнопки следующий, но с переходом в следующую позицию с сохранением всех добавленных свойств исходной позиции).
Заранее благодарен.

Re: Возможность "клонирования" номенклатуры со свойствами

Проблема в том, что под понятием копирование каждый понимает свое.

Кто-то параметры, кто-то СП, кто-то ТП, кто-то связь с документами, коэффициента пересчета  и так далее. Оттого и откладывается постоянно реализация данной функции.

Конкретно в параметрах обычно есть функции Копировать - Вставить.

Можно конечно и на АПИ написать то что требуется именно вам. Такие штуки делаются довольно просто.

Re: Возможность "клонирования" номенклатуры со свойствами

Буду признателен, если Вы предоставите возможность реализовывать на практике данную функцию в примерно том виде, как я уже описывал:
При копировании номенклатурной позиции - подхватывались бы все свойства "исходника" с карточки номенклатуры, номенклатурный текст, коэфф. пересчета, параметры номенклатуры (по возможности) и документы номенклатуры (возможно в виде ссылки на документ из Папки или Архива).
Благодарю за оперативный ответ.

Re: Возможность "клонирования" номенклатуры со свойствами

Подумаем над таким расширением в базовой поставке (на внедрениях разное делалось).

Версия TechnologiCS какая?

Re: Возможность "клонирования" номенклатуры со свойствами

TechnologiCS 7.0 -мы новые пользователи, поэтому и столкнулись с данной проблемой на первоначальной стадии оформления справочников.
Не хотелось бы ждать следующую версию - будет неактуально, но драгоценного времени потратим неимоверно много.

Re: Возможность "клонирования" номенклатуры со свойствами

Вот простой макрос по копированию номенклатуры, параметров, коэффициентов пересчета, документов, текста.

Это просто пример, не причесывал, можно сделать красивее и универсальнее конечно.

Рекомендую ознакомиться с Редактором форм, 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

Можно также ознакомиться с демонстрационным роликом (отправил ссылку в личку), он старый но функции описанные в нем никуда не делись, только стали лучше. Не перевели еще его на ютуб, к сожалению.

Re: Возможность "клонирования" номенклатуры со свойствами

Благодарю за оперативно предоставленную помощь.
Запустили, опробовали - на первых порах все работает.
Считаю, что данная функция в перспективе должна быть реализована в стандартном опционе программы уже на вкладке номенклатура (редакирование) - дополнением кнопки "Следующий" (напр "Следующий с сохр. св-ми")