Re: Поиск в справочнике номенклатуры

Здравствуйте.
Мне необходимо осуществлять поиск в номенклатурном справочнике, по полю "NAME".
При таком коде всё виснет:

 
Set NMks = TCSApp.Nomenclatures(1052)
NMks.First
 Do While Not  NMks.Eof 
      If NMks.Locate("NAME","опора", 0 )  Then 
          NMkId  =  NMks.Properties("ID").DisplayText 
          count = count + 1            
      End If          
  Loop
  msgbox "найдено " & count

Ваш же, встроенный поиск (по ctrl + F на нужном поле) всё находит, быстро и без проблем, при этом ему всё равно заглавная буква или нет, Locate, в свою очередь case sensitivity.

Re: Поиск в справочнике номенклатуры

в отладчике из цикла не выходит...
Давайте я более конкретно обозначу задачу.
Необходим поиск по Наименованию и Обозначению, т.к. Обозначение бывает пустым, я хочу собрать массив id Наименований, а потом в нём искать Обозначения.
Похоже с Locate так делать нельзя.

Re: Поиск в справочнике номенклатуры

shibanov_a писал(а):
При таком коде всё виснет:

 
Set NMks = TCSApp.Nomenclatures(1052)
NMks.First
 Do While Not  NMks.Eof 
      If NMks.Locate("NAME","опора", 0 )  Then 
          NMkId  =  NMks.Properties("ID").DisplayText 
          count = count + 1            
      End If          
  Loop
  msgbox "найдено " & count

Программа не виснет, согласно условию "Do While Not  NMks.Eof " курсор выйдет из цикла как только оператор "NMks.Locate("NAME","опора", 0 )" спозиционируется на последней строчке грида.


shibanov_a писал(а):
Необходим поиск по Наименованию и Обозначению, т.к. Обозначение бывает пустым, я хочу собрать массив id Наименований, а потом в нём искать Обозначения.

Это я не понял, нужен поиск по Наименованию и Обозначению одновременно?. Или нужен поиск по Наименованию или Обозначению?


shibanov_a писал(а):
Ваш же, встроенный поиск (по ctrl + F на нужном поле) всё находит, быстро и без проблем, при этом ему всё равно заглавная буква или нет, Locate, в свою очередь case sensitivity.

Оператор Locate позиционирует курсор грида на ближайшей вниз строке, где имеется полное выполнение условия, т.е. в Вашем случае, где наименование = "опора". По части значения искать нельзя.

А что, собственно, ищем? Почему понадобилось так сложно - "по Наименованию и Обозначению"?

Re: Поиск в справочнике номенклатуры

условия изменились, вопрос не актуален, спасибо.

Re: Поиск в справочнике номенклатуры

Добрый день! Открою старинную тему.
Есть проблема в поиске номенклатуры по обозначению и присвоению переменной id. Макрос должен по обозначению найти id, а по id уже привязать документ к найденной номенклатуре.

Сделал так, но работает только на одной подветви дерева, на остальных нет:

Sub Privyazka(TCSActiveModule)

Dim Link_Ver, NMkId, notebezmtk, notemtk

If TCSApp.NmkClasses.RunModuleForSelect("Выберите класс", False) Then
Set NMks = TCSApp.Nomenclatures(TCSApp.NmkClasses.Properties("ID").AsInteger)


 For i=TCSActiveModule.SelectedRowsCount-1 to 0 Step -1
    If TCSActiveModule.GotoSelectedRow(i) Then


notemtk = TCSActiveModule.Properties("NOTE").Value
notebezmtk = replace(notemtk," МТК","")


If NMks.Locate("NOTE",notebezmtk, 0 ) Then
NMkId = NMks.Properties("ID").value
else
 msgbox "ID not found"
End If


Call TCSActiveModule.Edit
 Set Link_Ver = TCSActiveModule.Properties("BoundNomenclature").AsIDispatch
 If  Not Link_Ver Is Nothing Then
                Call Link_Ver.CreateNew

                Link_Ver.Properties("NMK_ATTACH_ID").Value = NMks

                Link_Ver.Properties("NMK_ID").Value = NMkId
                On Error Resume Next
                Call Link_Ver.SaveChanges
                Call Link_Ver.CancelChanges
           End If
Call TCSActiveModule.SaveChanges

End If
 set NMkId = nothing
set Link_Ver = nothing
set notemtk = nothing
set NMks = nothing

 Next
 End If
End Sub

Re: Поиск в справочнике номенклатуры

https://help.technologics.ru/7.9/TCSAPI … ote_13.htm
https://help.technologics.ru/7.9/TCSAPI … nt_13.htmp

  'Dim Nmk As ISingleNomenclature
  Set Nmk = theApp.SingleNmkFromNMkNote( "ØÄ.000" )
  Nmk.UserModuleName = Nmk.UniqueUserModuleName
  Call theApp.DeleteModuleByUserModuleName( Nmk.UserModuleName )
  'Call LogObject.ShowPropExplorer( Nmk )
  'Dim Docs As INomenclatureDocuments
  Set Docs = Nmk.p_NomenclatureDocuments.AsIDispatch
  Id = Docs.LinkNomenclatureToDocument( TCSActiveModule.p_ID.AsInteger ) 'Привязываем документ по идентфикатору
Спасибо сказали: vitaly5761