7.7 НайтиПоРеквизиту() не работает для элемента справочника

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

  1. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Всем здравствуйте! Пишу ОбработкуВнешнегоСобытия, где в таблицу значений надо добавить строку с найденным товаром в справочнике "Номенклатура". А если товара с таким штрих-кодом нет в номенклатуре, то сообщить "Товар не найден". Вот код:
    Код:
    Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Результат)  
    //////
    Перем Кол;
    
    Если Источник="BarCodeScaner" Тогда
    оТов = СоздатьОбъект("Справочник.Номенклатура");
    оТов.ВыбратьЭлементы();
    Если оТов.НайтиПоРеквизиту("Шкод",Результат,1)=1 Тогда
    Выб1=оТов.ТекущийЭлемент();
    //1 блок: добавляем выбор в ТЗ
    ПолучитьСтрокуПоНомеру(0);
    Ном=ТЗ.КоличествоСтрок()+1;
    Кол=1;
    ТЗ.НоваяСтрока();
    ТЗ.НомерСтр=Ном;
    ТЗ.НомерСтроки=Ном;
    ТЗ.Товар =Выб1;
    ТЗ.КодТов = Выб1.Код;							 
    ТЗ.Штрих=Выб1.Шкод;
    ТЗ.Колич=Кол;
    АктивизироватьСтроку();
    КонецЕсли;
    Иначе Сообщить ("Товар "+ШКОД+" не найден. Если у товара есть код, то сделайте подбор по каталогу. Если нет, то добавьте в номенклатуру и повторите ввод.");
    Сканер.DataEventEnabled = 1; 
    КонецЕсли;				 
    КонецПроцедуры
    Этим кодом у меня в табличную часть ТЗ добавляется одна строка. Дальше код судя по всему тормозит на строчке
    Код:
    Если оТов.НайтиПоРеквизиту("Шкод",Результат,1)=1 Тогда
    т.е. не определяет найден ли товар в номенклатуре или нет. Если убрать условие и добавлять все товары подряд, то код работает, добавляя строки с пустыми товарами если их нет. Вот второй (рабочий) код:
    Код:
    ОбработкаВнешнегоСобытия(Источник,Событие,Результат) 
    //////
    Перем Кол;
    Если Источник="BarCodeScaner" Тогда
    оТов = СоздатьОбъект("Справочник.Номенклатура");
    оТов.ВыбратьЭлементы();
    оТов.НайтиПоРеквизиту("Шкод",Результат,1);
    Выб1=оТов.ТекущийЭлемент();
    //1 блок: добавляем выбор в ТЗ
    ПолучитьСтрокуПоНомеру(0);
    Ном=ТЗ.КоличествоСтрок()+1;
    Кол=1;
    ТЗ.НоваяСтрока();
    ТЗ.НомерСтр=Ном;
    ТЗ.НомерСтроки=Ном;
    ТЗ.Товар =Выб1;
    ТЗ.КодТов = Выб1.Код;							
    ТЗ.Штрих=Выб1.Шкод;
    ТЗ.Колич=Кол;
    АктивизироватьСтроку();
    Сканер.DataEventEnabled = 1;
    КонецЕсли;				
    КонецПроцедуры
    . В чём же дело? Почему не работает условие в первом коде, где ошибка? Может быть у меня глаз замылился на этом коде. Подскажите, пожалуйста!
  2. Herby
    Offline

    Herby Опытный в 1С

    Регистрация:
    21 фев 2013
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    У реквизита "Шкод" в метаданных установлен признак "Сортировка"?
  3. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Ну а как вы думаете? Если бы нет, то и второй код не работал. Конечно, есть признак "Сортировка" у реквизита "Шкод".
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Теоретически второй код не должен работать если метод вернул 0. Вы уверены что в ТЗ добавляются нужные позиции?
  5. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    В этом я уверен: по штрих-коду товар в ТЗ совпадает с отсканированным
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Магия 5го уровня.
    Если находит - вернет единицу
  7. GlukAl
    Offline

    GlukAl Опытный в 1С

    Регистрация:
    4 окт 2012
    Сообщения:
    187
    Симпатии:
    7
    Баллы:
    29
    Попробуй поменять строки КонецЕсли и Иначе Сообщить
    Код:
    АктивизироватьСтроку();
    Иначе Сообщить ("Товар "+ШКОД+" не найден. Если у товара есть код, то сделайте подбор по каталогу.
    |Если нет, то добавьте в номенклатуру и повторите ввод.");
    КонецЕсли;
    Сканер.DataEventEnabled = 1;
    КонецЕсли;
    КонецПроцедуры
    
    
  8. Herby
    Offline

    Herby Опытный в 1С

    Регистрация:
    21 фев 2013
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    а зачем открытие выборки делаете?

    Код:
    оТов.ВыбратьЭлементы();
  9. Herby
    Offline

    Herby Опытный в 1С

    Регистрация:
    21 фев 2013
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26

    второй код работает совсем по другим причинам и он не дает гарантий что у вас установлен признак "сортировка". А я не телепат, поэтому и спросил у вас.
  10. Herby
    Offline

    Herby Опытный в 1С

    Регистрация:
    21 фев 2013
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    открывайте отладчик и смотрите какое значение в параметре "Результат" и сравните его со значением в справочнике.

    Если шкод - строковый реквизит, то возможно из-за пробелов не находит.
  11. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    [sub]Глюка прав оказался! Спасибо тебе, сразу помог!!! :icon_smilemin: [/sub]

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