7.7 проблема поиск по справочнику

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Titov, 27 июн 2008.

  1. TopicStarter Overlay
    Titov
    Offline

    Titov Опытный в 1С

    Регистрация:
    13 апр 2008
    Сообщения:
    177
    Симпатии:
    1
    Баллы:
    26
    Помогите, пожалуйста!
    Ситуация такая: есть справочник номенклатура в нем несколько групп, код элемента уникален только в своей группе.
    Мне нужно найти элемент по коду, но при этом чтобы искал в определенной группе, так как элементов с одним кодом несколько (они просто по разным группам распиханы).

    Делаю так:
    Код:
    ТекНом = СоздатьОбъект("Справочник.Номенклатура");
    ТекНом.ИспользоватьРодителя("00000004");//чтобы поиск был по этой группе
    
    //далее пробовал так:
    // Если ТекНом.НайтиПоКоду(ТекКод.Значение, 1) = 0 тогда
    // Сообщить (" ЭЛЕМЕНТ НЕ НАЙДЕН ");//все время идет сюда
    //хотя элемент точно есть в этой группе 0000004
    
    
    Вроде читал что ИспользоватьРодителя подходит для функции
    НайтиЭлемент, но как ее использовать не пойму, помогите плиз, как это сделать на моем примере? :unsure:
    Буду признателен)))
  2. Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Сначала нужно в справочнике найти элемент родитель, прежде чем его использовать.
    Код:
    ТекНом = СоздатьОбъект("Справочник.Номенклатура");
    Элемент = ТекНом.НайтиПоКоду("коднужнойгруппы");
    ТекНом.ИспользоватьРодителя(Элемент);//чтобы поиск был по этой группе
    
    Ну или что то вроде того.
  3. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    в ИпользоватьРодителя надо не код пихать, а элемент... т.е. сначала по коду исчи группу, а потом пихай ее в ИспользоватьРодителя...
  4. TopicStarter Overlay
    Titov
    Offline

    Titov Опытный в 1С

    Регистрация:
    13 апр 2008
    Сообщения:
    177
    Симпатии:
    1
    Баллы:
    26
    Сделал так не находит(((
    Код:
    ТекНом = СоздатьОбъект("Справочник.Номенклатура");
    Элемент = ТекНом.НайтиПоКоду("00000004");
    ТекНом.ИспользоватьРодителя(Элемент);//чтобы поиск был по этой группе
    
    Если ТекНом.НайтиПоКоду(ТекКод.Значение, 1) = 0 тогда
    Сообщить ("нет НАШЛИ!");//все время тут
    Иначе
    Сообщить ("все ОК ");                             
    КонецЕсли;   
    
    
    
  5. Stado_adama
    Offline

    Stado_adama Модераторы Модератор

    Регистрация:
    27 ноя 2007
    Сообщения:
    1.086
    Симпатии:
    0
    Баллы:
    26
    а может тебе сделать проще? найти всю номенклатуру и глянуть принадлежит ли каждая номенклатура нужной группе? отсюда ты и получишь нужную... или вообще сделай уникальность кодов во всем справочнике и не парься...
  6. TopicStarter Overlay
    Titov
    Offline

    Titov Опытный в 1С

    Регистрация:
    13 апр 2008
    Сообщения:
    177
    Симпатии:
    1
    Баллы:
    26
    проблема, в том что я считываю код номенлатуры из файла (там коды все из одной группы), и записываю в другой справочник, а она блин записывается как другая номенклатура (то есть из другой группы но с этим же кодом).
    А уникальность, стоит, но она была кем то нарушена...
    База не моя, а фирмы (я тут недавно). Видимо кто отключил уникальность проставил, коды и включил ее.

    Пробовал условие ставить так:
    Код:
    Если ТекНом.ВыбратьЭлементыПоРеквизиту("Код",ТекКод.Значение,1,0) = 0 тогда
    ...
    
    
    Вообще прога вылетает((
  7. Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    Сдается мне, что не хватает открытия выборки элементов
    ТекНом.ВыбратьЭлементы();

    Ещё не понятно зачем так: ТекКод.Значение?
  8. TopicStarter Overlay
    Titov
    Offline

    Titov Опытный в 1С

    Регистрация:
    13 апр 2008
    Сообщения:
    177
    Симпатии:
    1
    Баллы:
    26
    ТекКод.Значение - это значение кода которое мы ищем (его считывали из файла)

    Код:
    ТекНом = СоздатьОбъект("Справочник.Номенклатура");
    Элемент = ТекНом.НайтиПоКоду("00000004");
    ТекНом.ИспользоватьРодителя(Элемент);//чтобы поиск был по этой группе    
    
    Если (ТекНом.ВыбратьЭлементы() = 0) Тогда
    Сообщить("Нет элементов");
    Иначе 
    Сообщить ("Че то есть");     
    
    Пока ТекНом.ПолучитьЭлемент() = 1 Цикл 
    Стр1 = "нашли элемент="+ТекНом.Наименование+" "+ТекНом.Код;  
    Данные2.ДобавитьСтроку(Стр1);//в файл записываем элемент который нашли
    КонецЦикла;      
    
    КонецЕсли;
    
    
    В итоге в файл записываются все элементы справочника, то есть даже из других групп (хотя должны только из 000004.)
    Не могу понять в чем дело...
  9. Wronk
    Offline

    Wronk

    Регистрация:
    29 июн 2008
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    ну ты можешь просто для каждого найденного по коду элемента сделать условие проверки группы и не париться ) будет чуть подольше, зато действенно -)
  10. Steel Rain
    Offline

    Steel Rain Опытный в 1С

    Регистрация:
    29 сен 2006
    Сообщения:
    408
    Симпатии:
    2
    Баллы:
    29
    А группу по коду точно находит? Посмотрите в отладчике. Или добавьте
    Код:
    Сообщить(ТекНом.ТекущийЭлемент());
    
  11. TopicStarter Overlay
    Titov
    Offline

    Titov Опытный в 1С

    Регистрация:
    13 апр 2008
    Сообщения:
    177
    Симпатии:
    1
    Баллы:
    26
    Всем спасибо за помощь! Обошел немного эту проблему, и сделал по другому)
    Тему можно закрыть :unsure:

Поделиться этой страницей