Заказ звонка

Закрыть

*
*
*

Ошибка: Layer in not valid!

Страницы: 1
RSS
Ошибка: Layer in not valid!
Здравствуйте

Столкнулся с такой ошибкой, помогите разобраться

Layer is not longer valid!
CSDN.GModule

Возникает в таком случае.
Из плана производства с помощью скрипта открывается(ShowModal) спецификация расчетного документа (Комплектовочная ведомость для операции комплдектация).
Код
...
     Set ReqCalcDoc1 = TCSApp.Inventory.SingleCalculateDocFromID(ReqId1) 
     ReqCalcDoc1.UserModuleName = ReqCalcDoc1.UniqueUserModuleName
     Set ReqCalcDocSpec1 = Nothing
     Set ReqCalcDocSpec1 = ReqCalcDoc1.Properties("CalculateDocumentSpecification").AsIDispatch
     I = ReqCalcDocSpec1.ShowModal("Комплектовочная ведомость")
     Call TCSapp.DeleteModuleByUserModuleName( ReqCalcDoc1.UserModuleName )


Далее из спецификации запускается скрипт чтобы выполнить допустимую замену. При этом скрипт отрабатывает, но при выходе из скрипта, окно со спецификацией не отражается и ошибка возникает в предыдущем скрипте на строке ShowModal

Код
Sub FormMacro_NmkRepacement(TCSActiveModule)   'ÀÑÊ Äîïóñòèìàÿ çàìåíà
     Dim NmkID      
     Dim OldNmk
     Dim NewNmkID 
     Dim NewNmk
     Dim NewNmkList
     
     Dim QUANTITY
     Dim PRICE
     Dim COEFF
     Dim MESUR_ID

     NmkID = TCSActiveModule.Properties("NMK_ID").AsInteger 
     Set OldNmk = TCSApp.SingleNmkFromId(NmkID)  
     OldNmk.UserModuleName = OldNmk.UniqueUserModuleName
     If Not OldNmk Is Nothing Then  
         Set NewNmkList = OldNmk.Properties("NmkReplace").AsIDispatch
         If  Not NewNmkList Is Nothing Then 
            If NewNmkList.RunModuleForSelect("Âûáåðèòå çàìåíó",False) Then 
               NewNmkID = NewNmkList.Properties("NMK_ID").AsInteger   
               Set NewNmk = TCSApp.SingleNmkFromId(NewNmkID)  
               NewNmk.UserModuleName = NewNmk.UniqueUserModuleName
               QUANTITY =  TCSActiveModule.Properties("QUANTITY").Value
               PRICE = TCSActiveModule.Properties("PRICE").Value
               COEFF = TCSActiveModule.Properties("COEFF").Value
               MESUR_ID = TCSActiveModule.Properties("MESUR_ID").Value  

               If  NewNmk.Properties("MESUR_ID").Value = MESUR_ID  Then
                   TCSActiveModule.DeleteRecord( False )
                   Call TCSActiveModule.CreateNew
                      TCSActiveModule.Properties("NMK_ID").Value = NewNmkID
                      TCSActiveModule.Properties("QUANTITY").Value = QUANTITY
                      TCSActiveModule.Properties("PRICE").Value = PRICE
                      TCSActiveModule.Properties("COEFF").Value = COEFF
                      TCSActiveModule.Properties("MESUR_ID").Value = MESUR_ID    

                    On Error Resume Next
                    Call TCSActiveModule.SaveChanges
                    Call TCSActiveModule.CancelChanges   

                Else
                   Call TCSApp.ShowMessageBox("Ñîîáùåíèå", "Íå ñîâïàäàþò åäèíèöû èçìåðåíèÿ!")
                End If 
                Call TCSapp.DeleteModuleByUserModuleName( NewNmk.UserModuleName )
             End If 
        End If
     End If 
   
     Call TCSapp.DeleteModuleByUserModuleName( OldNmk.UserModuleName )    

     Call TCSActiveModule.Refresh   

End Sub
Вы запускаете второй скрипт из окна, которое открыто первым скриптом?
Да
После окончания работы второго скрипта, система чистит переменные, в том числе и системные (TCSActiveModule, TCSapp и др.), в результате чего первый скрипт остается с пустыми переменными.

Оптимизируйте работу так, чтобы не вызывать руками скрипты из скриптов, например так - открываете окно с предложением выбрать необходимые позиции, а второй скрипт вызываете из первого программно.
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)