Re: Используеься параметр у номенклатуры?

Хотелось бы иметь возможность в Администрировании давать возможность не только на "Ведение справочника параметров", но и на Видимость. Либо в место этого иметь возможность при работе с номенклатурными справочниками, через зависимые объекты "Где используется номенклатура" просматривать Где используется номенклатура как параметр.

P.S. Есть еще одна проблемка. При работе со справочником параметров, в зависимых объектах "Где используется параметр в Номенклатурах". Попробуйте команду "Найти". Найти она сможет, но хотелось бы, при нажатии на кнопку "Перейти", увидеть перехот на найденую позицию.

Заранее спасибо.

Re: Используеься параметр у номенклатуры?

Павел писал(а):
Либо в место этого иметь возможность при работе с номенклатурными справочниками, через зависимые объекты "Где используется номенклатура" просматривать Где используется номенклатура как параметр.


Можете воспользоваться скриптом

Sub FormMacro_ShowWhereUsedNmkAsPar( INomenklatures )'Где используется в качестве значения параметра
    Dim NmkID
    Dim IParameters
    Dim WhereUsed_parametres
    Dim WhereUsed  
    Dim UserGModule 
    Dim Result
    Set UserGModule = TCSApp.CreateUserGModule("UserGModule") : Call UserGModule.ClearProps : Call UserGModule.ClearScripCommands : UserGModule.ReadOnlyUserMode = False
    Call UserGModule.AddProp("Par_NOTE", "Параметр|Обозначение", 1, True, True, 150)
    Call UserGModule.AddProp("Par_NAME", "Параметр|Наименование", 1, True, True, 150)
    Call UserGModule.AddProp("NMK_CLASSIF_TYPE_NOTE", "Используется в качестве значения параметра в номенклатуре|Класс", 1, True, True, 50)
    Call UserGModule.AddProp("NMK_NOTE", "Используется в качестве значения параметра в номенклатуре|Обозначение", 1, True, True, 150)
    Call UserGModule.AddProp("NMK_NAME", "Используется в качестве значения параметра в номенклатуре|Наименование", 1, True, True, 200)
    Call UserGModule.AddProp("NMK_CODE", "Используется в качестве значения параметра в номенклатуре|Код", 1, True, True, 50)
    NmkID = INomenklatures.Properties( "ID" ).AsSafeInteger
    If NmkID > 0 Then
        LogObject.ScriptTimeOut = 0 
        TCSapp.ShowOneTreeNodeData = False
        Set IParameters = TCSApp.Parameters
        If Not IParameters Is Nothing Then
            IParameters.UserModuleName = IParameters.UniqueUserModuleName
            Call IParameters.Filter.ClearFilter
            Call IParameters.Filter.NewFilterItem( IParameters.Properties( "PAR_TYPE" ), fkEQ, "R" )
            Call IParameters.Filter.ApplyFilter
            Call IParameters.First 
            Do While Not IParameters.Eof
                Set WhereUsed_parametres = IParameters.ChildModules.ModuleByName("WhereUsed_parametres").AsIDispatch
                Set WhereUsed = WhereUsed_parametres.ChildModules.ModuleByName("WhereUsed_parametres_in_nomenklature").AsIDispatch
                Call WhereUsed.Filter.ClearFilter
                Call WhereUsed.Filter.NewFilterItem( WhereUsed.Properties( "NMK_ID_1" ), fkEQ, NmkID )
                Call WhereUsed.Filter.ApplyFilter
                Call WhereUsed.Refresh
                Do While Not WhereUsed.Eof
                    Call UserGModule.CancelChanges
                    Call UserGModule.CreateNew
                    UserGModule.Properties( "Par_NOTE" ).AsString = IParameters.Properties( "NOTE" ).DisplayText
                    UserGModule.Properties( "Par_NAME" ).AsString = IParameters.Properties( "NAME" ).DisplayText
                    UserGModule.Properties( "NMK_CLASSIF_TYPE_NOTE" ).AsString = WhereUsed.Properties( "NMK_CLASSIF_TYPE_NOTE" ).DisplayText
                    UserGModule.Properties( "NMK_NOTE" ).AsString = WhereUsed.Properties( "NMK_NOTE" ).DisplayText
                    UserGModule.Properties( "NMK_NAME" ).AsString = WhereUsed.Properties( "NMK_NAME" ).DisplayText
                    UserGModule.Properties( "NMK_CODE" ).AsString = WhereUsed.Properties( "NMK_CODE" ).DisplayText
                    On Error Resume Next     : Call UserGModule.SaveChanges                
                    On Error GoTo 0          : Call UserGModule.CancelChanges
                    Call WhereUsed.Next
                Loop
                Set WhereUsed = Nothing
                Set WhereUsed_parametres = Nothing
                Call IParameters.Next
            Loop
            UserGModule.First
            If UserGModule.Properties( "NMK_CLASSIF_TYPE_NOTE" ).IsNull Then
                Result = TCSApp.MessageBox("Данная номенклатурная позиция не используется в качестве значения параметра.", "Где используется", vbExclamation )
            Else 
                If UserGModule.ShowModal(Trim(INomenklatures.Properties( "NOTE" ).DisplayText & " " & INomenklatures.Properties( "NAME" ).DisplayText & " " & INomenklatures.Properties( "NMK_CODE" ).DisplayText)) Then
                End If
            End If
            Set UserGModule = Nothing
            TCSApp.DeleteModuleByUserModuleName( IParameters.UserModuleName )
        End If
    End If
End Sub

Re: Используеься параметр у номенклатуры?

А если номенклатура как параметр позмцмм спецификации использутся, то каким скриптом воспользоваться можно?

Re: Используеься параметр у номенклатуры?

Вам поиграться или для дела?

Re: Используеься параметр у номенклатуры?

Нам для дела.
На одном из предпиятий в спецификациях к позициям привязываются параметры ДЕ(Заг)(Деталь-заготовка). Конструкторы работают в PDM режиме. Им не доступно посмотреть, где используется номенклатура в техпроцессах. Следовательно им необходимо посмотреть в каких активных версиях СП, какой номенклатуры (Используемой/ неиспользуемой) к позициям СП привязана данная номенклатура.

Все это необходимо для определения Используемая или неиспользуемой выбранная номенклатура.

Re: Используеься параметр у номенклатуры?

Тогда давайте уточним:
Необходимо вывести таблицу с перечнем позиций и версий СП, в которых текущая номенклатура используется в качестве значения параметра. Так?
Какой GUID параметра?
какой номенклатуры (Используемой/ неиспользуемой) - про это по подробнее.

Re: Используеься параметр у номенклатуры?

Нахожусь в справочние (предположим ДЕ) тогда GUID = "RM_ZAG_DE"
т.е. нужно первым делом посмотреть в каких активных версиях спецификаций данная номенклатура используется как параметр позиции СП. Далее определяем к какой номенклатуре (использумой/неиспользуемой) относится каждая найденная активная СП. И выводим перечень используемых номенклатур (обозначение, наименовани, обозначение версии СП(активной)).

Если в справочнике "Прочие" то GUID = "RM_ZAG_PR"
Если в справочнике "СТД" то GUID = "RM_ZAG_STD"

Re: Используеься параметр у номенклатуры?

Вопрос не в тему, но интересно - в чем кайф от того что параметры разные, почему не сделали один для всех?

Re: Используеься параметр у номенклатуры?

Дело в том, что патаметр имеет тип "Ссылка на справочник".
Если бы в TCS был единый справочник, а права видимости и возможности работы распределялася на первие ветви классификатора, то можно было бы обойтись и одним параметром.

А так приходится для каждого справочника создавать свой параметр.
Для деталей (ДЕ) - ДЕ(Заг)(Деталь-заготовка)
Для стандартных изделий (СТД) - СТД(Заг)(Стандартное изделие-заготовка)
Для прочих (Прочие) - Пр(Заг)(Прочие-заготовка)

Re: Используеься параметр у номенклатуры?

Sub FormMacro_ShowWhereUsedNmkAsSPPosPar( INomenklatures )'Где используется в качестве значения параметра позиции СП
    On Error Resume Next
    Dim NmkID, IParameters, FromSpecification, WhereUsed_parametres, WhereUsed, NmkFullInfo, Version 
    Dim UserGModule 
    Dim Result, pbStr
    Set UserGModule = TCSApp.CreateUserGModule("UserGModule") : Call UserGModule.ClearProps : Call UserGModule.ClearScripCommands : UserGModule.ReadOnlyUserMode = False
    Call UserGModule.AddProp("NMK_NOTE", "Номенклатура|Обозначение", 1, True, True, 150)
    Call UserGModule.AddProp("NMK_NAME", "Номенклатура|Наименование", 1, True, True, 200)
    Call UserGModule.AddProp("NMK_CODE", "Номенклатура|Код", 1, True, True, 30)
    Call UserGModule.AddProp("VerName", "Номенклатура|Версия СП", 1, True, True, 150)
    Call UserGModule.AddProp("NMK_CLASSIF_TYPE_NOTE", "Позиция|Класс", 1, True, True, 50)
    Call UserGModule.AddProp("VerNMK_NOTE", "Позиция|Обозначение", 1, True, True, 150)
    Call UserGModule.AddProp("VerNMK_NAME", "Позиция|Наименование", 1, True, True, 200)
    NmkID = INomenklatures.Properties( "ID" ).AsSafeInteger
    If NmkID > 0 Then
        LogObject.ScriptTimeOut = 0 
        TCSapp.ShowOneTreeNodeData = False
        Set IParameters = TCSApp.Parameters
        If Not IParameters Is Nothing Then
            IParameters.UserModuleName = IParameters.UniqueUserModuleName
            Call IParameters.Filter.ClearFilter
            Call IParameters.Filter.NewFilterItem( IParameters.Properties( "PAR_TYPE" ), fkEQ, "R" )
            Call IParameters.Filter.ApplyFilter
            Call IParameters.First 
            Do While Not IParameters.Eof
                Set WhereUsed_parametres = IParameters.ChildModules.ModuleByName("WhereUsed_parametres").AsIDispatch
                Set WhereUsed = WhereUsed_parametres.ChildModules.ModuleByName("WhereUsed_parametres_in_spec").AsIDispatch
                Call WhereUsed.Filter.ClearFilter
                Call WhereUsed.Filter.NewFilterItem( WhereUsed.Properties( "NMK_ID_1" ), fkEQ, NmkID )
                Call WhereUsed.Filter.NewFilterItem( WhereUsed.Properties( "VER_STATE" ), fkIN, "0;1;" )
                Call WhereUsed.Filter.ApplyFilter
                Call WhereUsed.Refresh
                Do While Not WhereUsed.Eof
                    Set FromSpecification = WhereUsed.ChildModules.ModuleByName("FromSpecification").AsIDispatch
                    Set NmkFullInfo = FromSpecification.ChildModules.ModuleByName("NmkFullInfo").AsIDispatch
                    Set Version = FromSpecification.ChildModules.ModuleByName("Version").AsIDispatch
                    Call UserGModule.CancelChanges
                    Call UserGModule.CreateNew
                    UserGModule.Properties( "NMK_NOTE" ).AsString = NmkFullInfo.Properties( "NMK_NOTE" ).DisplayText
                    UserGModule.Properties( "NMK_NAME" ).AsString = NmkFullInfo.Properties( "NMK_NAME" ).DisplayText
                    UserGModule.Properties( "NMK_CODE" ).AsString = NmkFullInfo.Properties( "NMK_CODE" ).DisplayText
                    UserGModule.Properties( "VerName" ).AsString = Version.Properties( "VER_NAME" ).DisplayText
                    UserGModule.Properties( "NMK_CLASSIF_TYPE_NOTE" ).AsString = WhereUsed.Properties( "NMK_CLASSIF_TYPE_NOTE" ).DisplayText
                    UserGModule.Properties( "VerNMK_NOTE" ).AsString = WhereUsed.Properties( "NMK_NOTE" ).DisplayText
                    UserGModule.Properties( "VerNMK_NAME" ).AsString = WhereUsed.Properties( "NMK_NAME" ).DisplayText
                    Call UserGModule.SaveChanges                
                    Call UserGModule.CancelChanges
                    Call WhereUsed.Next
                Loop
                Set WhereUsed = Nothing
                Set WhereUsed_parametres = Nothing
                Call IParameters.Next
            Loop
            Call TCSApp.HideProgressMessage
            UserGModule.First
            UserGModule.ReadOnlyUserMode = True
            If UserGModule.Properties( "NMK_CLASSIF_TYPE_NOTE" ).IsNull Then
                Result = TCSApp.MessageBox("Данная номенклатурная позиция не используется в качестве значения параметра.", "Где используется", vbExclamation )
            Else 
                If UserGModule.ShowModal(Trim(INomenklatures.Properties( "NOTE" ).DisplayText & " " & INomenklatures.Properties( "NAME" ).DisplayText & " " & INomenklatures.Properties( "NMK_CODE" ).DisplayText)) Then
                End If
            End If
            Set UserGModule = Nothing
            TCSApp.DeleteModuleByUserModuleName( IParameters.UserModuleName )
        End If
    End If
End Sub

Re: Используеься параметр у номенклатуры?

Огромное спасибо.

Re: Используеься параметр у номенклатуры?

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

Хотелось бы иметь возможность в Администрировании давать возможность не только на "Ведение справочника параметров", но и на Видимость. Либо в место этого иметь возможность при работе с номенклатурными справочниками, через зависимые объекты "Где используется номенклатура" просматривать Где используется номенклатура как параметр.

P.S. Есть еще одна проблемка. При работе со справочником параметров, в зависимых объектах "Где используется параметр в Номенклатурах". Попробуйте команду "Найти". Найти она сможет, но хотелось бы, при нажатии на кнопку "Перейти", увидеть перехот на найденую позицию.

Заранее спасибо.