Re: Ошибка в режиме остатки

У нас номенклатура построена по следующей иерархии: есть классификатор "Двигатели", в нем - "120". Когда я захожу в классификатор "Двигатели" в остатках, номенклатура видна, даже та, что находится в классификаторе "120". Но! когда я захожу в "120" появляется пустое окно, которое так и остается, даже если я выйду в классификатор "Двигатели".
При обновлении в "Двигатели" номенклатура появляется, в "120" - нет.
Почему?
P.S. Надеюсь моя бредятина вам будет понятна. Очень торопился когда писал.

Re: Ошибка в режиме остатки

Непонятно.

Почему пост в разделе TechnologiCS-API или речь идет о Вашем скрипте? Если так, то создайте тестовый скрип, в который вынесите код, иллюстрирующий проблему. Выложите текст тестового скрипта на форуме с описанием того, что от скрипта требуется и что он делает на самом деле.

Re: Ошибка в режиме остатки

На самом деле я не знаю чья это проблема. Возможно вы правы, надо было в другую тему закинуть.
Но даже средствами TCSAPI вылетает ошибка:
Cannot Perform this operation on a closed dataset
при вызове метода locate в выбранном узле "Двигатели" -> "120".
Хотя на других машинах работает. В чем тут может быть причина?

Re: Ошибка в режиме остатки

Код скрипта дайте

Re: Ошибка в режиме остатки

Sub FormMacro_FindSerial(BalanceModule)
   Dim sSerial 'строка серийного номера
   Dim sQuote2 : sQuote2=Chr(34)

   sSerial = TCSapp.InputBox("Поиск индивидуального номера", _
      "Введите индивидуальный номер", sEmpty)
   If Len(sSerial) Then
      Dim idNmk
       
      Call BalanceModule.Filter.ClearFilter
      Call BalanceModule.Filter.ApplyFilter
       
      idNmk = RS_General_Lib.FindSingleNomenclaturesByNumberString(sSerial)
      If idNmk Then
         Dim idClassNmk, idClassCurr 'Ссылка на базовый класс и текущий
         Dim objNmk, objCurr
         Dim cClass 'классы номенклатуры       
         Dim sNote, sName
         Dim i

         Set objNmk = TCSApp.SingleNmkFromId(idNmk)
         objNmk.UserModuleName = objNmk.UniqueUserModuleName
         Set objCurr = TCSApp.SingleNmkFromId(BalanceModule.Properties("ID").AsInteger)
         objCurr.UserModuleName = objCurr.UniqueUserModuleName
         idClassNmk = objNmk.Properties("NMK_CLASSIF_TYPE_REF").AsInteger
         idClassCurr = objCurr.Properties("NMK_CLASSIF_TYPE_REF").AsInteger         
         If idClassNmk = idClassCurr Then
            BalanceModule.DbTree.DbNodeByNodeId(objNmk.Properties("NODE_ID").AsInteger).Selected = True 'Здесь еще работает
            i = BalanceModule.Locate("ID", idNmk, 0) 'Вылетает ошибка
             
'            Set cClass = BalanceModule.ChildModules.ModuleByName("NmkSerialNumRest").AsIDispatch
'            i = BalanceModule.ActionList.ActionByName("ShowDataChildAction").Execute
             
            'SendCase "%4"
             
         Else
            Set cClass = TCSApp.NmkClasses
            cClass.UserModuleName = cClass.UniqueUserModuleName
            i = cClass.Locate("ID", idClassNmk, 0)
            sNote = RS_General_Lib.GetNoteName1(idNmk, -1, RS_General_Lib.nnsNote)
            sName = RS_General_Lib.GetNoteName1(idNmk, -1, RS_General_Lib.nnsName)
            Call TCSapp.ShowDetailedMessage("Номенклатура найдена", _
               "Найдено" & vbCrLf & sNote & sSpace & sName & vbCrLf & _
               "в справочнике " & _
               sQuote2 & cClass.Properties("NAME").DisplayText & sQuote2, _
               "Закройте сообщение и перейдите в указанный класс")
            'Call TCSApp.DeleteModuleByUserModuleName(cClass.UserModuleName) 
            With BalanceModule
               Call .Filter.ClearFilter
               Call .Filter.NewFilterItem(.Properties("NOTE"), RS_General_Lib.fkEQ, sNote)
               Call .Filter.NewFilterItem(.Properties("NAME"), RS_General_Lib.fkEQ, sName)
               Call .Filter.ApplyFilter
            End With                                                     
            Call TCSApp.DeleteModuleByUserModuleName(cClass.UserModuleName)
         End if
         Call TCSApp.DeleteModuleByUserModuleName(objNmk.UserModuleName)
         Call TCSApp.DeleteModuleByUserModuleName(objCurr.UserModuleName)
      End If 'idNmk
   End If 'Len(sSerial)
End Sub

Re: Ошибка в режиме остатки

Я не смог повторить ошибку

Станислав писал(а):
Но даже средствами TCSAPI вылетает ошибка:
Cannot Perform this operation on a closed dataset


Вожможно проблема в функции

RS_General_Lib.FindSingleNomenclaturesByNumberString(sSerial)

Re: Ошибка в режиме остатки

В функции не может быть проблемы, ведь руками тоже самое происходит (окно-то пустое)

Re: Ошибка в режиме остатки

Возвращаемся снова к этой теме. Эта ошибка стала слишком часто повторяться

Re: Ошибка в режиме остатки

Попробуйте нажать кнопку

Re: Ошибка в режиме остатки

Сделал, вот результат:

Re: Ошибка в режиме остатки

Где ответы?

Re: Ошибка в режиме остатки

Какие условия фильтра у вас установлены?

Отключите фильтр. Отключите сортировку. Выполните пересчет остатков.

Re: Ошибка в режиме остатки

Фильтр - пустой!!!
P.S. Заметил еще один факт: Если в пустом окне включить фильтр по известному обозначению в данном классификаторе, то номенклатура повится.
P.P.S. Причем тут пересчет остатков?

Re: Ошибка в режиме остатки

Станислав писал(а):
Фильтр - пустой!!!

Re: Ошибка в режиме остатки

Станислав писал(а):
Причем тут пересчет остатков?

Это механизм обновления информации данного режима.

Re: Ошибка в режиме остатки

Сергей Девятериков писал(а):

Станислав писал(а):
Причем тут пересчет остатков?

Это механизм обновления информации данного режима.

Слишком уж долго работает этот механизм.... Попробую его проверить.
На счет фильтра - я могу точно также прислать скрины и без его участия. Просто я над ним тоже экспериментировал, поэтому он оказался в кадре (во втором рисунке его уже нет). От фильтра ничего не зависит. Тут какая-то другая ошибка (может таймаут запроса вышел, поэтому Closed DataSet вылетает). Необходимы решения! Слишком часто такая штука происходит.
P.S. Не хотел говорить (ибо опасаюсь того, что вы сразу начнете винить именно эту причину, чтобы отделаться), но тем не менее скажу на всякий случай. Эта ошибка происходит пока только на одном компьютере - сервере, где клиенты работают в ТЕРМИНАЛЬНОМ режиме (человек порядка 10-и одновременно). Почему опасаюсь - да потому, что вы не раз отделывались ответом - "Работа в терминальном режиме имеет свои особенности". Мне нужна конкретно причина и способ ее устранения!

Re: Ошибка в режиме остатки

Для чего вы используете терминальный режим?

Re: Ошибка в режиме остатки

За P.S. - большое спасибо. 8 постов держались очень твердо.

P.S. Не хотел говорить (ибо опасаюсь того, что Вы сразу начнете винить меня в излишней лени, простоте подхода и желании побыстрее отделаться), но, тем не менее, скажу на всякий случай простой способ устранения: не используйте работу с TechnologiCS через терминальный режим, т.к. помочь Вам устранить эту проблему мы не можем.

Re: Ошибка в режиме остатки

Увы, но без терминального режима нам не обойтись, поэтому тема остается открытой, т.к. Ваш ответ - не объясняет ничего!
P.S. Зря я написал про P.S. в предыдущей теме, теперь наверное, вы и не будете пытаться как-то помочь, т.к. для вас, наверное, лишь бы дать какой-то ответ, вместо того, чтобы досконально разобраться в этой проблеме и дать четкий ответ, от чего это происходит. Я даже и не прошу вас устарнить проблему, я просто хочу объяснения.
P.P.S. Мы используем терминальный режим, т.к. у нас два домена, которые находятся далеко друг от друга и канал связи постоянно забит, да еще и медленный. Чтобы не ждать клиенту ТКС ответ от сервера на запросы, приходится подключаться пользователям отдаленного домена терминально.

Re: Ошибка в режиме остатки

Тогда хотя бы попробуйте объяснить, для чего вы используете терминальный режим?

Re: Ошибка в режиме остатки

Объяснил выше. Просто не успел подправить)))

Re: Ошибка в режиме остатки

Терминальный режим еще позволяет устранить сбои в сети, т.к. в этом случае потеряется лишь связь, а не прервется транзакция

Re: Ошибка в режиме остатки

Объяснил?

Re: Ошибка в режиме остатки

Транзакция и так не прервется, операции с данными производятся на сервере, а не на клиентской машине. Это не причина!

Re: Ошибка в режиме остатки

Вы не правы: если я запущу макрос (который в моем понимании есть БОЛЬШАЯ транзакция), то при сбое песередине сервер действительно завершит последнюю транзакцию (МАЛЕНЬКУЮ), но не весь макрос!!!