Как найти справочник по наименованию 1с

Содержание:

При реализации прикладных задач в программе 1С:Предприятие 8 у разработчика может возникнуть потребность использовать прикладные объекты ссылочного типа. У которых есть свойство «Наименование», но нет возможности с помощью встроенного языка 1С Предприятие обратиться «напрямую» к объекту базы данных 1С, как к предопределенному элементу справочника 1С т.к. они были созданы пользователем в информационной базе 1С 8.

Для решения таких задач можно воспользоваться методом «НайтиПоНаименованию», который присутствует у некоторых объектов конфигурации или с помощью объекта встроенного языка «Запрос».  

1.     Метод «НайтиПоНаименованию» в конфигурации «Справочник»

Иногда в компаниях реквизит «наименование» элемента справочника формируется пользователем в строго установленной последовательности. В наименовании элемента справочника может присутствовать какое-нибудь свойства товара.

У объекта конфигурации Справочник есть метод НайтиПоНаимнованию (Рис. 1).

Рисунок №1.

         Наименование – тип Строка. Текст, по которому нужно найти.

         Точное соответствие – тип булево. Истина – искать точное соответствие за исключением пробелов в конце наименования. Ложь – искать соответствие по левой части наименования.

         Родитель – тип Справочник. В пределах которого нужно найти элемент справочника 1С.

         Владелец – тип Справочник. В пределах которого нужно найти элемент справочника 1С.

Рисунок № 2.    

Для иллюстрации будет приведен пример в демонстрационной базе 1С Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.112.34).

Запустим информационную базу в режиме Конфигуратор в 1С. Создадим обработку. В форме обработки создадим команду, реквизит формы (Рис. 3) и опишем действие команды (Рис. 4). Сохраним созданную обработку, как внешнюю обработку.

Рисунок №3.

Рисунок № 4.

Теперь можно запустить работу системы 1С: Предприятия 8.3 в пользовательском режиме. Открыть внешнюю обработку ввести текст в реквизит «Текст поиска». Введем текст «Шоколад» и нажмем команду «Найти».


Рисунок № 5.

Система нашла в справочнике «Номенклатура» первый попавшийся элемент. Система искала соответствие по левой части наименования.  

2.     Объект встроенного языка «Запрос»

Получить объект базы данных 1С также можно с помощью объекта встроенного языка «Запрос». Запустим информационную базу в режиме Конфигуратор в 1С. Изменим код встроенного языка 1С Предприятие в модуле формы внешней обработки (Рис. 6).

Рисунок № 6.

Сохраним изменения и запустим информационную базу в пользовательском режиме 1С.


Рисунок № 7.

Откроем внешнюю обработку, заполним реквизит «Текст поиска» (Рис. 7). Нажимаем команду «Найти». В результате на экран система выведет сообщения с наименованиями из справочника Номенклатура у которых левая часть наименования начинается с текста «Шоколад».

Специалист 1С компании «Кодерлайн»

Быков Владимир

 +6 

   

Распечатать

Поиск элемента, найти элемент справочника

Код 1C v 8.2 УП

 &НаКлиенте
Процедура ПоКнопкеНайти(Команда)
// Вставить содержимое обработчика.

Сообщить(НайтиКонтрагента("000000001"));

КонецПроцедуры

&НаСервере
Функция НайтиКонтрагента(КодКонтрагента)

Перем КонрагентДляПоиска, СсылкаНайденногоКонрагента;
КонрагентДляПоиска = Справочники.Контрагенты;
СсылкаНайденногоКонрагента = КонрагентДляПоиска.НайтиПоКоду(КодКонтрагента);
Если СсылкаНайденногоКонрагента = КонрагентДляПоиска.ПустаяСсылка() Тогда
Возврат "Контрагент не найден";
Иначе
Возврат СсылкаНайденногоКонрагента.Наименование;
КонецЕсли;

КонецФункции;


Код 1C v 8.х

 // Ниже перечислены несколько способов поиска,если элемент найден, то он возвращается,
// иначе возвращается Неопределено
СпрСотр = Справочники.Сотрудники;
НайденныйСотр = СпрСотр.НайтиПоКоду(123);
НайденныйСотр = СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
НайденныйСотр СпрСотр.НайтиПоРеквизиту("Оклад", 5000);

//далее нужно проверить найденное значение так:
РезультатПоиска = Справочники.Номенклатура.НайтиПоКоду("00030");
Если РезультатПоиска.Пустая() Тогда
// Выполнить действия, предусмотренные в случае, когда элемент не найден.
КонецЕсли;
// или так:
НайденныйСотр = СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
Если НайденныйСотр = Неопределено Тогда
.....//элемент не найден
КонецЕсли;


Код 1C v 7.x

  СпрСотр = СоздатьОбъект("Справочник.Сотрудники");

СпрСотр.НайтиЭлемент(Сотрудник);
СпрСотр.НайтиПоКоду(123);
СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
СпрСотр.НайтиПоРеквизиту("Оклад", 5000);

//если элемент найден, он становится текущим и его можно прочитать так:
Если СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович")=1 Тогда
........НайденныйСотр = СпрСотр.ТекущийЭлемент();
КонецЕсли;

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

У справочников в 1С есть встроенные функции для поиска в них элементов, к ним относится НайтиПоКоду, НайтиПоНаименованию и НайтиПоРеквизиту;

В данном случае рассмотрим поиск по наименованию.

Синтаксис:

Справочники.<НазваниеСправочника>.НайтиПоНаименованию (<Значение>, <ПоискПоПолномуСоответсвию>, <Родитель>, <Владелец>)

Параметры:

НазваниеСправочника — наименование справочника, к примеру Сотрудники.

Значение— значение в реквизите Наименование.

ПоискПоПолномуСоответсвию — По умолчанию установлен в значении Ложь, т.е. ищется соответствие левой части (пример: ищем Алекс то найдем Алексей). Но если установить в истину то поиск будет вестись по полному значению, кроме пробелов в конце строки.  (необязательный)

Родитель — Ссылка на родителя. Поиск будет вестись только по тем элементам где указан данный родитель. (необязательный)

Владелец — Ссылка на элемент владельца справочника, указанного на закладке Владельцы. (необязательный)

Результат:

Если элемент не найден возвращается ПустаяСсылка, иначе ссылка на элемент.

Если существует несколько элементов, возвращается только 1.

Пример:

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

Поиск с учетом родителя:

Университет = Справочники.Университеты.НайтиПоНаименованию("МГИМО");
Преподователь = ТекСправочник.НайтиПоНаименованию("Иванов Иваон Иванович",,Университет);

Найти элемент справочника в 1С 8 можно тремя способами:

1) Поиск по коду

Если известен код элемента справочника, и необходимо получить ссылку на него, то можно воспользоваться методом НайтиПоКоду(<Код>, <ПоискПоПолномуКоду>, <Родитель>, <Владелец>) менеджера справочника. В простейшем случае необходимо передать данному методу код элемента справочника и в результате будет получена либо ссылка на элемент справочника, либо пустая ссылка, если элемент с таким кодом не найден. Следует заметить, что если в справочнике присутствует несколько элементов с указанным кодом, то будет возвращен тот, который найден первым.

Пример:

НайденныйЭлемент = Справочники.Номенклатура.НайтиПоКоду("00000011254");

Описание параметров метода НайтиПоКоду:

  • <Код> (обязательный). Тип: Число, Строка. Описание: искомый код, строка или число в зависимости от настроек справочника в конфигураторе.
  • <ПоискПоПолномуКоду> (необязательный). Тип: Булево. Описание: определяет режим поиска по полному коду, истина — искомый код следует задавать в виде строки, состоящей из последовательности кодов по уровням справочника, разделенных символом “/”. Значение по умолчанию: Ложь.
  • <Родитель> (необязательный). Тип: СправочникСсылка. Описание: родитель, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
  • <Владелец> (необязательный). Тип: СправочникСсылка. Описание: владелец, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.

2) Поиск по наименованию

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.

Связаться с нами можно по телефону +7 499 350 29 00.

Услуги и цены можно увидеть по ссылке.

Будем рады помочь Вам!

Если известно наименование элемента справочника и необходимо получить ссылку на него, то можно воспользоваться методом НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>, <Владелец>) менеджера справочника. В простейшем случае необходимо передать данному методу наименование элемента справочника и в результате будет получена либо ссылка на элемент справочника, либо пустая ссылка, если элемент с таким наименованием не найден. Следует заметить, что если в справочнике присутствует несколько элементов с указанным наименованием, то будет возвращен тот, который найден первым.

Пример:

НайденныйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию("Аппарат сварочный");

Описание параметров метода НайтиПоНаименованию:

  • <Наименование> (обязательный). Тип: Строка. Описание: строка, содержащая искомое наименование.
  • ТочноеСоответствие> (необязательный). Тип: Булево. Описание: определяет режим поиска по полному соответствию, поиск будет успешным, если строка поиска: в случае значения параметра Ложь — будет соответствовать левой части наименования, в случае значения параметра Истина — будет полностью совпадать с наименованием (за исключением “хвостовых” пробелов в наименовании). Значение по умолчанию: Ложь.
  • <Родитель> (необязательный). Тип: СправочникСсылка. Описание: родитель, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
  • <Владелец> (необязательный). Тип: СправочникСсылка. Описание: владелец, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.

3) Поиск по произвольному реквизиту

Если известно значение какого либо реквизита справочника и необходимо получить ссылку на него, то можно воспользоваться методом НайтиПоРеквизита(<ИмяРеквизита>, <ЗначениеРеквизита>, <Родитель>, <Владелец>) менеджера справочника. В простейшем случае необходимо передать данному методу имя реквизита, его значение и в результате будет получена либо ссылка на элемент справочника, либо пустая ссылка, если элемент с таким значением указанного реквизита не найден. Следует заметить, что если в справочнике присутствует несколько элементов с таким значением указанного реквизита, то будет возвращен тот, который найден первым.

Пример:

НайденныйЭлемент = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул","А-255");

Описание параметров метода НайтиПоРеквизит:

  • <ИмяРеквизита> (обязательный). Тип: Строка. Описание: имя реквизита, как он задан в конфигураторе, по значению которого осуществляется поиск. Тип значения: произвольный, кроме ХранилищеЗначения и строк произвольной длины.
  • <ЗначениеРеквизита> (обязательный). Тип: Произвольный. Описание: значение реквизита, по которому должен выполняться поиск.
  • <Родитель> (необязательный). Тип: СправочникСсылка. Описание: родитель, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.
  • <Владелец> (необязательный). Тип: СправочникСсылка. Описание: владелец, в пределах которого нужно выполнять поиск, если не указан, то поиск будет проводиться во всем справочнике.

Получить справочник по Наименованию

Я
   Tumakota

14.07.15 – 10:57

Всем доброго времени суток, как можно получить справочник имея его наименованиею!

к примеру у меня есть наименование самого объекта справочника, поле строка “Номенклатура”

СправочникМенеджер я получаю без проблем, а как получить справочник объект зная его имя. Писать условие типо Если Строка = Номенклатура тогда

Справочники.Номенклатура и т.д.

Так в этом поле строка может быть любой справочник или документ

   Dmitrii

1 – 14.07.15 – 10:58

Спровочники[ПеременнаяСИменемСправочника]

   Dmitrii

2 – 14.07.15 – 10:59

(0) > СправочникМенеджер я получаю без проблем

Че то я не понял. А в чем тогда проблема? Что тебе нужно?

   Альбатрос

3 – 14.07.15 – 11:00

(2) метаданные он имеет ввиду

   Dmitrii

4 – 14.07.15 – 11:03

(3) Думаешь?…

Тогда

Метаданные.Справочники[ПеременнаяСИменемСправочника]

   Euguln

5 – 14.07.15 – 11:04

(4) + Метаданные.Справочники.Найти(ПеременнаяСИменемСправочника)<>Неопределено

   Tumakota

6 – 14.07.15 – 11:11

(5) Не метаданные это конечно хорошо

Справочники.Номенклатура.НайтиПоНаименованию(“Товар”).ПолучитьОбъект();

мне нужно вот такое, только вот часть где Номенклатура, заранее не кто не знает, есть поле в котором пишется какой справочник получать

   Euguln

7 – 14.07.15 – 11:12

(6) см (1)

   Альбатрос

8 – 14.07.15 – 11:13

надо уровень вангования подкачать…

   ale-sarin

9 – 14.07.15 – 11:13

Справочники[ПеременнаяСИменемСправочника].НайтиПоНаименованию(“Товар”)

Сразу в (1) сказали.

   Tumakota

10 – 14.07.15 – 11:14

Спровочники[ПеременнаяСИменемСправочника] это Менеджер Справочника, а мне нужен объект справочника

   Pixar0000

11 – 14.07.15 – 11:14

Строка = “Номенклатура”;

НашСправочник = Метаданные.Справочники[Строка];

НашСправочник.НайтиПоНаименованию(“Товарчик”)

или

Справочники[Строка].НайтиПоНаименованию(“Товар”).ПолучитьОбъект()

   ВРедная

12 – 14.07.15 – 11:25

(10) ты прикалываешься?

какой из десяти тысяч элементов справочника номенклатура тебе нужен как объект?

   Альбатрос

13 – 14.07.15 – 11:27

(10) хорош тормозить, тебе уже несколько раз описали, как тебе нужно сделать

   Pixar0000

14 – 14.07.15 – 11:32

Для работы со справочником из какого-либо модуля требуется сначала создать ссылку на этот справочник.

СпрСотрудники = Справочники.Сотрудники; // или 2 вариант

СпрДолжности = Справочники[“Должности”];

  

D_E_S_131

15 – 14.07.15 – 11:35

Добавить комментарий