На главную>Книги по 1С>Программисту
Бороться и искать найти и перепрятать  
Лирическое отступление о справочниках
Справочник изнутри
Свойства окна редактирования
Свойства реквизита справочника
Создание форм справочника
Непосредственное посредственное программирование

Бороться и искать найти и перепрятать
Перетряхивание справочника поэлементно
Подбор
Рождение нового социально близкого элемента
Поудаляем
Заключение


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

Здесь происходит очень простая вещь. В отчете нажимаем на педальку справа от поля и … (не угадали банка пива не вываливается) перед нами открывается во всей красе справочник автомобили, а именно их наименование. Щелкаем пару раз на имени и в строке сообщений выскакивает название типа кузова. На низком уровне происходит вот что: когда мы делаем двойной клик мышью на наименовании автомобиля переменной
ВыбАвто, которую мы записали в идентификатор поля, присваивается значение выбранного элемента справочника. Проверяем выбрано ли значение ВыбАвто.Выбран()=1 . Дальше по этому значению ищется соответствие в справочнике
СпрАвто.НайтиЭлемент(ВыбАвто); и сообщаем какой кузов имеет выбранная машина Сообщить(СпрАвто. ТипКузова) ; Справедливости ради нужно сказать, что искать еще можно по коду, по наименованию и по реквизиту.
СпрАвто=СоздатьОбъект("Справочник.Авто");
СпрАвто.НайтиПоКоду("2/1/1",);
СпрАвто.
НайтиПоРеквизиту("ТипКузова","Седан",1); СпрАвто.НайтиПоНаименованию("ВАЗ 2106")
Здесь, по-моему, требует некоторого пояснения
НайтиПоКоду. Такой смешной код (2/1/1) получился потому, что справочник многоуровневый: первая цифра это код группы "Легковые", вторая цифра - код группы "Заднеприводные", третья - код элемента "ВАЗ 21043".

Вынужденная справка

Выбран()
Синтаксис:
Выбран()
Назначение:
Возвращает флаг выбора элемента справочника: 1 - если элемент справочника выбран, 0 - если не выбран.

НайтиЭлемент(<?>)
Синтаксис:
НайтиЭлемент(<Элемент>)
Назначение:
Найти элемент справочника по значению.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Параметры:
<Элемент> - выражение со значением элемента справочника.
Замечание:
Метод выполняет поиск элемента справочника и позиционирует объект на этом элементе.
Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.

НайтиПоКоду(<?>,);
Синтаксис:
НайтиПоКоду(<Код>,<ФлагПоиска>)
Назначение:
Найти элемент справочника по коду.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Параметры:
<Код> - выражение со значением искомого кода,
<ФлагПоиска> - флаг поиска (необязателен):
0 - поиск во всем справочнике вне зависимости от родителя;
1 - поиск внутри установленного подчинения (родителя);
2 - поиск по полному коду через разделитель.
Значение по умолчанию:
0 - если код уникален во всем справочнике;
2 - если код уникален только в группе.
Замечание:
Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.

НайтиПоНаименованию(<?>,,);
Синтаксис:
НайтиПоНаименованию(<Наимен>,<Режим>,<Флаг>)
Назначение:
Найти элемент справочника по наименованию.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Параметры:
<Наименование> - строка с наименованием искомого элемента справочника,
<Режим> - необязательный параметр. Число: 1 - поиск внутри установленного подчинения (родителя); 0 - поиск во всем справочнике вне зависимости от родителя. Значение по умолчанию - 1.
<ФлагПоиска> - необязательный параметр. Число: 1 - найти точное соответствие наименования; 0 - найти наименование по первым символам. Значение по умолчанию - 0.
Замечание:
Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.

НайтиПоРеквизиту(<?>,,)
Синтаксис:
НайтиПоРеквизиту(<ИмяРек>,<Знач>,<ФлагГлоб>
Назначение:
Найти элемент справочника по значению реквизита.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Параметры:
<ИмяРек> - строка с наименованием реквизита;
<Знач> - значение реквизита для поиска;
<ФлагГлоб> - флаг поиска:
0 - поиск выполняется в пределах подчинения справочника,
1 - поиск выполняется по всему справочнику.
Замечание:
Метод можно использовать только для реквизитов с установленным признаком ''Сортировка''.
Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.