Тема: Некорректность работы макросов

На одном из предприятий г. Челябинска установлена система TechnologiCS v5.7.0.0 (10959). Для оптимизации работы пользователей (конструкторов, технологов) были добалены макросы, причем некоторые одни из важных макросов не работают:

1. При запуске макроса  «Назначить штрих-код выделенным позициям» (FormMacro_93_Set_BarCode_EAN13_doc) автоматически формируется 12-ти значный штрихкод. Например (000000000015). После запуска макроса «Поиск по штрих-коду» (FormMacro_91_Find_NBarCode) система не находит данные, содержащий этот штрих-код. Попробовал сформировать штрих-код вручную. Задал не 12-ть символов, а 11. Например (12345678910) После чего повторно запустил макрос «Поиск по штрих-коду» и система произвела поиск и выдала желаемый результат.

2. При запуске макроса «Добавить стандартный фрагмент ТП (блок)» (FormMacro_31_Add_Block) система выдает сообщение об ошибке.

Re: Некорректность работы макросов

Добавлены - это значит вы переносили их код из демо-базы версии 5.7.0.0 в вашу рабочую базу данных?

Re: Некорректность работы макросов

Совершенно верно! Макросы были экспортированы из демо базы версии 5.7.0.0, со следующим импортом в базу данных предприятия. Следует отметить, что большая часть добавленных макросов работает корректно, за исключением описанных выше.

Re: Некорректность работы макросов

Когда вы запускаете "поиск по штрих коду" штрих код вы вводите вручную или нет?
Это принципиально важно!

Re: Некорректность работы макросов

При запуске макроса "Поиск по штрих-коду" я вставляю заранее скопированный штрих-код, полученный макросом "Назначить штрих-код выделенным позициям".

Re: Некорректность работы макросов

т.е. вы вводите его вручную, а не с помощью спец. считывающего устройства для штрих-кодов.
Т.о. не хватает стоп кода.
Поробуйте приписать в конце скопированного кода 0, тогда должно заработать.

привожу вам 2 модификации скрипта для считывания штрих кода:

Для ввода с устройства:

....
        BarCode = TCSApp.InputBox("Поиск","Введите штрих-код:" ,ctNBar)   
               
        IBar = GetBarCode( BarCode )
....

Для ручного воода:

...
        BarCode = TCSApp.InputBox("Поиск","Введите штрих-код:" ,ctNBar)   
        BarCode = BarCode & "0"       
        IBar = GetBarCode( BarCode )
...

Re: Некорректность работы макросов

Насчет второго пункта:

2. При запуске макроса «Добавить стандартный фрагмент ТП (блок)» (FormMacro_31_Add_Block) система выдает сообщение об ошибке.

Какая конкретно ошибка?
Сделайте, пожалуйста, принт скрин самой ошибки и места в коде, где она возникает?

Re: Некорректность работы макросов

Спасибо за ответ. Попробовал прописать код для ручного ввода. Поиск сработал, т.е выдал положительный результат, но после закрытия номенклатурной позиции остается висеть окно поиска. Нажатие кнопок "OK" или "Cancel"  ни к чему не приводит. Приходится убивать процесс. (((

Re: Некорректность работы макросов

хм хм

Как теперь выглядит код?

Re: Некорректность работы макросов

Думаю стоит закоментить     

While IBar <> ctNBar

и

Wend

т.к. если вы "приписываете" нолик в конце, то IBar никогда не сравняется с ctNBar...

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

Я в подобных случаях делаю "форму" с двумя разными кнопочками:
"ввести вручную"
"считать"

Re: Некорректность работы макросов

Sub Find_NBarCode(TCSActiveModule) 'Поиск по штрих-коду 
'Режим: Любой

'Sub FormMacro_Find_NBarCode(TCSActiveModule)                        'Поиск по штрих-коду
'Call CSDN_DESEAN_Library.Find_NBarCode(TCSActiveModule) : End Sub        

    LogObject.ScriptTimeOut = 0 
    TCSapp.ShowOneTreeNodeData = False
    Call TCSApp.HideProgressMessage
    
    Dim IBar           'Штрих-код
    Dim IStr           'Служебная строковая переменная 
    Dim JStr           'Служебная строковая переменная
    Dim CatalogName    'Название справочника в котором находится штрих-код
    Dim ID1,ID2        'Идентификаторы найденых записей 
    Const ctNBar = "****************"
    Dim Module
    Dim ErrorMessage

    IBar=""           
    ErrorMessage = ""
    While IBar <> ctNBar
        LastBarCode = "" & vbNewLine & BarCode
        BarCode = TCSApp.InputBox("Поиск","Введите штрих-код:" + ErrorMessage + LastBarCode,ctNBar)
        BarCode = BarCode & "0"   
        IBar = GetBarCode( BarCode ) 
        If IBar <> ctNBar Then                    
            CatalogName=""
            If TCSApp.GetCatalogIdByBarCode (IBar,CatalogName,ID1,ID2) Then    
                ErrorMessage = ""
                Set Module = Nothing
                Set Module_1 = Nothing
                Select Case CatalogName
                    Case "Nomenclatures"                   Set Module = TCSApp.SingleNmkFromId( ID1 )
                    Case "Mesuriments"                     Set Module = TCSApp.Mesuriments
                    Case "MechanizationLevels"             Set Module = TCSApp.MechanizationLevels
                    Case "ProfessionCodes"                 Set Module = TCSApp.ProfessionCodes
                    Case "WorkCategories"                  Set Module = TCSApp.WorkCategories
                    Case "WorkConditions"                  Set Module = TCSApp.WorkConditions
                    Case "WorkKinds"                       Set Module = TCSApp.WorkKinds
                    Case "PlantDepartments"                Set Module = TCSApp.PlantDepartments
                    Case "SerialNumberStates"              Set Module = TCSApp.Inventory.SerialNumberStates
                    Case "WorkMans"                        Set Module = TCSApp.WorkMans
                    Case "CounterAgents"                   Set Module = TCSApp.CounterAgents
                    Case "SpoliageTypes"                   Set Module = TCSApp.Manufacturing.SpoliageTypes
                    Case "SpoliageCauses"                  Set Module = TCSApp.Manufacturing.SpoliageCauses
                    Case "ProductionPlan"                  Set Module = TCSApp.Manufacturing.ProductionPlanFromID( ID2, ID1 )
                    Case "FinishedProducts"                Set Module = TCSApp.Manufacturing.FinishedProductsFromID( Id2, Id1 )
                    Case "NomenclatureBatchs"              Set Module = TCSApp.Inventory.SingleNomenclatureBatchFromID( ID1 )
                    Case "NomenclatureSerialNumbers"       Set Module = TCSApp.Inventory.SingleNomenclatureSerialNumberFromID( ID1 )
                    Case "BalanceNmkCards"                 Set Module = TCSApp.Inventory.BalanceNmkCardFromID( ID1 )
                    Case "Archive"                         Set Module = TCSapp.SingleDoc( dspSearchDocByDocID, ID1 )
                    Case "DocumentVersions"                Set Module_1 = TCSapp.SingleDoc( dspSearchDocByVerID, ID1 )
                    Case "ProductionBatch"                 Set Module = TCSApp.Manufacturing.ProductionBatchByID( ID1 )
                    Case "Accounting documents"            Set Module_1 = TCSapp.Inventory.SingleBalanceDocFromID( ID1 )
                    Case "Calculated documents"            Set Module_1 = TCSApp.Inventory.SingleCalculateDocFromID( ID1 )
                Case Else                                  Set Module = Nothing
                End Select
                If Not Module Is Nothing Then 
                    If Module.Locate("ID", ID1, 0 ) Then 
                        Module.UserModuleName = Module.UniqueUserModuleName
'                        LogObject.ShowPropExplorer(Module)
                        If Module.ActionList.ActionByName( "EditAction").Enabled Then
                            Call Module.ActionList.ActionByName( "EditAction").Execute
                        Else
                            Call Module.ActionList.ActionByName( "ShowAction").Execute
                        End If
                        TCSApp.DeleteModuleByUserModuleName( Module.UserModuleName )                      
                    End If
                Else 
                    If Not Module_1 Is Nothing Then 
                        Module_1.UserModuleName = Module_1.UniqueUserModuleName
                        If Module_1.ActionList.ActionByName( "EditAction").Enabled Then
                            Call Module_1.ActionList.ActionByName( "EditAction").Execute
                        Else
                            Call Module_1.ActionList.ActionByName( "ShowAction").Execute
                        End If
                        TCSApp.DeleteModuleByUserModuleName( Module_1.UserModuleName )                      
                    Else
                        ErrorMessage = vbNewLine & "В базе данных нет записи с штрих-кодом: " & CStr(IBar) & vbNewLine & "CatalogName = " & CatalogName
                        Call TCSapp.ShowErrorMessage(ErrorMessage)
                    End If
                End If
            End If
        End If 
    Wend 

End Sub

Re: Некорректность работы макросов

Если вы скажете мне что именно вы ищите по штрих коду (документы, архива, номенклатуру или еще что-то)
И подождете пол дня я сделаю для вас такую форму с двумя кнопочками.

Re: Некорректность работы макросов

И попробуй-те закоментить

While IBar <> ctNBar

и

Wend

Re: Некорректность работы макросов

Закомментировал. Помогло! Поиск работает. Окно поиска больше не висит.
Спасибо!!!