Имя: Пароль:
1C
1C 7.7
v7: Поиск элемента в многоуровневом справочнике
,
0 Аньго Феликс Железны
 
15.03.18
10:28
Вопрос глупый, но я только личинка программиста ))
Есть справочник с 3 уровнями. Серии кодов  в пределах подчинения. Нужно программно найти элемент по коду. Как это сделать? Проверяла на другом справочнике, где серии кодов стоят во всем справочнике, ищет без проблем.
1 Масянька
 
15.03.18
10:39
(0) НайтиПоКоду(<?>,);
FindByCode(<?>,);
Синтаксис:
НайтиПоКоду(<Код>,<ФлагПоиска>)
Назначение:
Найти элемент справочника по коду.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Параметры:
<Код> - выражение со значением искомого кода,
<ФлагПоиска> - флаг поиска (необязателен):
  0 - поиск во всем справочнике вне зависимости от родителя;
  1 - поиск внутри установленного подчинения (родителя);
  2 - поиск по полному коду через разделитель.
Значение по умолчанию:
  0 - если код уникален во всем справочнике;
  2 - если код уникален только в группе.
Замечание:
Метод  можно использовать только для объектов, созданных функцией СоздатьОбъект.
Полезно читать СП...
2 Злопчинский
 
15.03.18
10:45
Сначала сделай Спр.ИспользоватьРодителя(тутГруппаВкоторойХочешьИскать), далее - см.п.1
3 Аньго Феликс Железны
 
15.03.18
10:48
(1) Читала. В том и дело, что НайтиПоКоду() не срабатывает в данном случае.
4 Аньго Феликс Железны
 
15.03.18
10:49
(2) Спасибо, сейчас попробую. Просто пункт 1 не работает, вместо текущего элемента - неизвестный объект.
5 Масянька
 
15.03.18
10:50
(3) Структура справочника? Проще - что есть "Серии кодов"?
6 hhhh
 
15.03.18
10:53
(3) чтобы работало, надо сделать "серии кодов стоят во всем справочнике"
7 Аньго Феликс Железны
 
15.03.18
10:54
(6) Я не могу трогать сам справочник, низя
8 Злопчинский
 
15.03.18
10:57
(4) все работает. неизвестного объекта не может быть. при неудачном посике ты получаешь "неспозиционированную выборку, то есть тебе возвращается пустой элемент данного типа
9 vova1122
 
15.03.18
11:13
(0) Код поиска в студию.
10 Аньго Феликс Железны
 
15.03.18
11:19
Вот так получилось

СПР1=СоздатьОбъект("Справочник.ЦеныДляСубАбонентов");
  СПР1.ИспользоватьДату(ДатаДок);
  Если СПР1.НайтиПоКоду("00000000053")=1 Тогда
  Группа=СПР1.ТекущийЭлемент();
  Если Группа.ЭтоГруппа()=1 Тогда
  Спр1.ИспользоватьРодителя(Группа);
  Если СПР1.НайтиПоКоду("00000000093",1)=1 Тогда
  Тек=СПР1.ТекущийЭлемент();
  Сообщить(Тек.ЕдИзмер);
  КонецЕсли;
  КонецЕсли;
  КонецЕсли;
Нормально сообщает Тек.ЕдИмер, Тек.Наименование. А вот Цену почему-то не может, вместо нее выводит неизвестный объект. Цена в справочнике есть. По наименованию этот элемент находится и его цена тоже.
11 vova1122
 
15.03.18
11:25
потому что для группі и для єлемента используется одна переменная "Спр1". Создай еще такой же обект СПР2. И для не го установи СПР2.ИспользоватьДату(ДатаДок); Ну дальше по коду перепиши для СПР2
12 vova1122
 
15.03.18
11:36
Стоп. "НеизвестныйОбект" сообщается для переодических реквизитов. Цена у тебя переодический реквизит. Поэтому или в коде нужно создать переодический обект. или в печатном макете прописать СПР2.Цена.Получить(ДатаДок)
13 Аньго Феликс Железны
 
15.03.18
12:04
(12) Ура! Заработало! Огромное человеческое спасибо!
14 Злопчинский
 
15.03.18
16:40
(11) абсолютно пофиг. вполне достаточно одной переменной.
Основная теорема систематики: Новые системы плодят новые проблемы.