[РЕШЕНО] Не работает НайтиПоРеквизиту() 1С 7.7 если реквизит имеет тип Справочник

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем CTEFAH, 14 янв 2017.

  1. TopicStarter Overlay
    CTEFAH
    Offline

    CTEFAH

    Регистрация:
    14 янв 2017
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Добрый день!
    Подскажите в чем загвоздка??? Чет совсем отупел :-(
    Не работает НайтиПоРеквизиту() 1С 7.7, если реквизит имеет тип Справочник.

    Процедура Сформировать()
    Сот = СоздатьОбъект("Справочник.Сотрудники");
    ВвестиСтроку(Долж,"Ввести должность", 25);
    Сот.НайтиПоРеквизиту("должность", СокрЛП(Долж), 1);
    Предупреждение(Сот.Наименование);
    КонецПроцедуры

    не находит ничего(((

    реквизит "должность" справочника Сотрудники имеет тип Справочник.Должности.
    Галка Сортировка включена. Справочник Сотрудников введен и ввожу существующую должность.
  2. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    4.003
    Симпатии:
    465
    Баллы:
    104
    а так? :)

    Код:
    Процедура Сформировать()
    Сот = СоздатьОбъект("Справочник.Сотрудники");
    ВвестиСтроку(Долж,"Ввести должность", 25);
    Сот.НайтиПоРеквизиту("должность", СокрЛП(Долж), 1);
    Предупреждение(Сот..ТекущийЭлемент());
    КонецПроцедуры

    вот кусок кода из ТиС
    Код:
            СпрЕд = СоздатьОбъект("Справочник.Единицы");
            СпрЕд.ИспользоватьВладельца(Объект.Владелец);
            Если СпрЕд.НайтиПоРеквизиту("ОКЕИ", Единица, 0) = 1 Тогда;
                Объект.Единица = СпрЕд.ТекущийЭлемент();
            Иначе
                Сообщить("Неверно задана единица цены","!");
            КонецЕсли;
    
  3. TopicStarter Overlay
    CTEFAH
    Offline

    CTEFAH

    Регистрация:
    14 янв 2017
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    При ТекущийЭлемент() выдает код первого пустого элемента спр.Сотрудники, т.е. первому элементу справочника с пустым реквизитом "должность" (несмотря, что я ввожу существующую должность ВвестиСтроку(Долж,"Ввести должность", 25); , или ввожу что попало);) Т.е. что имеем:

    Процедура Сформировать()
    Сот = СоздатьОбъект("Справочник.Сотрудники");
    ВвестиСтроку(Долж,"Ввести должность", 25);
    Сот.НайтиПоРеквизиту("должность", СокрЛП(Долж), 1);
    Предупреждение(Сот.ТекущийЭлемент());
    КонецПроцедуры

    (поясню, есть два справочника Сотрудники и Должности. Все просто. В Сотрудники есть реквизит "должность", тип которого Справочник.Должности. Вот код с НайтиПоРеквизиту не работает)

    Вложения:

    Последнее редактирование: 14 янв 2017
  4. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.556
    Симпатии:
    59
    Баллы:
    54
    ты действительно считаешь, что введенная тобой строка будет использоваться для поиска в реквизите типа справочник?
  5. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    4.003
    Симпатии:
    465
    Баллы:
    104
  6. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    1.281
    Симпатии:
    98
    Баллы:
    54
    Должность имеет тип Справочник.Должность, а не строка. Поэтому и не ищет. Нужно либо выбирать должность из справочника, либо сначало искать элемент справочника должность, а потом уже Сотрудника по этой должности.
    --- Объединение сообщений, 14 янв 2017 ---
    Код:
    Процедура Сформировать()
    Сот = СоздатьОбъект("Справочник.Сотрудники");
    СпрДолжность = СоздатьОбъект("Справочник.Должности");
    ВвестиСтроку(Долж,"Ввести должность", 25);
    СпрДолжности.НайтиПоНаименованию(Долж);
    ТекДолжность = СпрДолжность.ТекущийЭлемент();
    Сот.НайтиПоРеквизиту("Должность", ТекДолжность, 1);
    Предупреждение(Сот.ТекущийЭлемент());
    КонецПроцедуры
    Вот так будет искать, к сожалению семерки нет под рукой, может где то упущение сделал, но суть такова.
    Последнее редактирование: 14 янв 2017
  7. TopicStarter Overlay
    CTEFAH
    Offline

    CTEFAH

    Регистрация:
    14 янв 2017
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Всем привет!
    Вчера не дождался, но задачку решил. Зашел оповестить, а тут так же решение от TerANik! Спасибо. Все верно. Несоответствие типов. Мой вариант:

    Процедура Сформировать()
    Сот = СоздатьОбъект("Справочник.Сотрудники");
    Дол = СоздатьОбъект("Справочник.Должности");
    ВвестиСтроку(Долж,"Ввести должность", 25);
    Дол.НайтиПоНаименованию(Долж, 1);
    Если Сот.НайтиПоРеквизиту("должность", Дол.ТекущийЭлемент(), 1) = 1 Тогда
    Предупреждение(Сот.Имя);
    КонецЕсли;
    КонецПроцедуры

    Всем огромадное спасибо!!!
    Последнее редактирование: 15 янв 2017
Похожие темы
  1. popoff17
    Ответов:
    2
    Просмотров:
    913
  2. Samouchka
    Ответов:
    10
    Просмотров:
    4.201
  3. sasha300
    Ответов:
    5
    Просмотров:
    1.430
  4. К_Е
    Ответов:
    4
    Просмотров:
    512
  5. Николаич87
    Ответов:
    2
    Просмотров:
    1.143
Загрузка...