1с как найти по наименованию если есть

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

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

Синтаксис:

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

Параметры:

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

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

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

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

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

Результат:

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

Если существует несколько элементов, возвращается только 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С компании «Кодерлайн»

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

Как работает поиск по наименованию?

Я
   Kvant1C

18.05.15 – 09:13

Уважаемые коллеги, разъясните пожалуйста, что это такое недокументированное поведение функции или неправильное ее использование?

В коде есть такая строка:

Результат = Неопределено;

Результат = Справочники.Партнеры.НайтиПоНаименованию(“”);

После выполнения этой строки в переменной Результат “сидит первый элемент справочника”

Читаем СП:

Возвращаемое значение:

Тип: СправочникСсылка.<Имя справочника>; Неопределено.

Ссылка на найденный элемент справочника.

Если не существует ни одного элемента с требуемым наименованием, то будет возвращена пустая ссылка.

Если для справочника наименование не задано (длина = 0), то будет возвращено Неопределено.

Платформа 1С:Предприятие 8.3 (8.3.6.1977)

ЧЯНТД?

   Fragster

1 – 18.05.15 – 09:13

(0) прочитай СП целиком

   ДенисЧ

2 – 18.05.15 – 09:13

F tckb Результат = Справочники.Партнеры.НайтиПоНаименованию(“”, Истина); ?

   Kvant1C

3 – 18.05.15 – 09:15

(1) прочитал уже 5 раз

   Fragster

4 – 18.05.15 – 09:15

(3) не верю

   Kvant1C

5 – 18.05.15 – 09:16

(2) Да, так пустышка

   ДенисЧ

6 – 18.05.15 – 09:17

(5) И спосле этого ты утверждаешь, что прочитал весь СП?

   Defender aka LINN

7 – 18.05.15 – 09:17

(0) Читать не умеешь, вестимо. Какая длина наименования справочника “Номенклатура” в конфигураторе?

   Fragster

8 – 18.05.15 – 09:18

(7) ты тоже не умеешь..

   Cyberhawk

9 – 18.05.15 – 09:19

(0) “в переменной Результат “сидит первый элемент справочника””

Покажи на картинке

   Kvant1C

10 – 18.05.15 – 09:19

(6) Там написано

Поиск будет успешным, если строка поиска: в случае значения параметра Ложь – будет соответствовать левой части наименования; в случае значения параметра Истина – будет полностью совпадать с наименованием (за исключением “хвостовых” пробелов в наименовании).

Про то что будет найден первый элемент если значение параметра – ложь ничего не сказано

   Fragster

11 – 18.05.15 – 09:20

(10) целиком читай…

   ДенисЧ

12 – 18.05.15 – 09:20

(10) А что в твоём понимании “первый”?

   Lama12

13 – 18.05.15 – 09:22

(10) Так первый элемент и соответствует пустой строке в левой части. Разве нет?

   Fragster

14 – 18.05.15 – 09:22

(12) то, что скуль юзал индекс по наименованию и так уж получилось, что он отсортирован по наименованию. кстати, то, что он “первый” – недокументировано, потому что это не всегда так.

   Kvant1C

15 – 18.05.15 – 09:23

(12) Делаю запрос:

ВЫБРАТЬ

    Партнеры.Ссылка,

    Партнеры.Наименование

ИЗ

    Справочник.Партнеры КАК Партнеры

В первой строке тот элемент, который возвращает функция.

Проверял на нескольких справочниках

   Cyberhawk

16 – 18.05.15 – 09:24

(15) тебя смущает, что поиск по наименованию идентичен запросу к БД?

   Fragster

17 – 18.05.15 – 09:24

(15) тогда в (14) не индекс по наименованию, а кластерный индекс, который по ссылке. но сути это не меняет – это может быть и не так.

   Kvant1C

18 – 18.05.15 – 09:24

(11) Там больше ничего нет, там дальше про родителя и владельца и еще Примечание:

Если существует несколько элементов с указанным наименованием, то будет найден только один из них.

   Fragster

19 – 18.05.15 – 09:25

(18) все правильно. то, что будет найден один из них – никак не противоречит тому, что тебе возвращается один из них…

   Fragster

20 – 18.05.15 – 09:25

а вот то, что он “первый” не написано, так что на это полагаться не надо.

   Kvant1C

21 – 18.05.15 – 09:30

(16) Да нет, это как раз не смущает, просто ожидал, что функция вернет мне пустышку.

Ну теперь буду знать эту особенность 🙂

   fisher

22 – 18.05.15 – 09:31

(0) Насколько я понимаю, при поиске по неполному соответствию пустой строки – найдутся ВСЕ элементы справочника. Можно сказать, они все начинаются с пустой строки. Ну а возвращает первый попавшийся (без гарантий какой именно, т.к. без явного упорядочивания СУБД никакой определенный порядок не гарантирует).

   Fragster

23 – 18.05.15 – 09:34

Сообщить(Лев(“Как же работает поиск по наименованию”,0) = “”);

   fisher

24 – 18.05.15 – 09:37

На этой фишке (отсутствие неявного упорядочивания в SQL) еще в 7.7 палились. Ибо в DBF неявное упорядочивание было, как и в файловом движке 8-ки. И при переходе на клиент-сервер алгоритмы на это завязанные – “ломались”. Сам недавно погорел, хотя прекрасно про эту фишку знал. Отладил пакетную печать на файловой и не обратил внимание, что забыл по ссылке упорядочить один запрос. А там последовательный обход двух связанных выборок. В итоге на файловой – всё ок, а в клиент-серверной бессистемно “пропускались” некоторые печатные формы. Чуть голову не сломал. Так и не вкурил, пока сервер в режим отладки не перевёл.

   Kvant1C

25 – 18.05.15 – 09:41

(19) Элемента с пустым наименованием не существует…

   fisher

26 – 18.05.15 – 09:42

(25) Зато наименования ВСЕХ элементов НАЧИНАЮТСЯ с пустой строки.

   Славен

27 – 18.05.15 – 09:44

(25) до кучи иди учи простейшие типы, тебе нужна Строка.

   fisher

28 – 18.05.15 – 09:45

(27) Причем здесь типы сами по себе? Речь о правилах поиска.

   Serg_1960

29 – 18.05.15 – 09:45

Имхо, сравнение строк различной длины, не только для 1С “проблематично”, но и при разработке других алгоритмических языков стаяло. Ибо не в математике “проблематично”, а в логике И то, как она “решается” в том или ином языке, становится видно на строке “нулевой” длины.

   Serg_1960

30 – 18.05.15 – 09:47

А по поводу “Если для справочника наименование не задано…” – это к метаданным 1С. У документов есть дата и номер, а у справочников есть код и наименование… даже если их нет 🙂

   Drac0

31 – 18.05.15 – 09:48

(21) Это не особенность, это вполне документированное поведение функции в зависимости от параметра. А вот не уметь понимать прочитанное – особенность, да.

   Kvant1C

32 – 18.05.15 – 09:52

(31) Ну так написанное можно по разному трактовать…

   Serg_1960

33 – 18.05.15 – 09:55

(31) Насчёт “А вот не уметь понимать прочитанное” можно ещё поспорить. “А вот не уметь объяснить написанное” – это я бы к к разработчикам предъявил. Язык написали, а объяснения к нему… другие, видать, писали. Не на столько умные 🙂 Иногда в СП так “объяснят”, что крышу срывает в попытке осознать прочитанное.

   fisher

34 – 18.05.15 – 09:56

Вот приколупались к человеку. То, что по пустой строке будут найдены все элементы – зависит от конкретной реализации поиска и нифига неочевидно на первый вгляд. Ну, кроме опытнейших разработчиков, собравшихся в этой ветке, конечно же.

   Serg_1960

35 – 18.05.15 – 10:06

(34) Ценю Ваш юмор и сарказм… но по сути – всё верно, “… не всё так однозначно.”(цы)

   Kvant1C

36 – 18.05.15 – 10:09

(34) (35) Спасибо за поддержку!

ДенисЧ Огромное спасибо!

   МаксимМП23

37 – 18.05.15 – 10:13

(15) ВЫБРАТЬ ПЕРВЫЕ 1 же…

   Smallrat

38 – 18.05.15 – 10:19

Там еще дальше параметр на точное соответствие – по умолчанию “Ложь”

   Smallrat

39 – 18.05.15 – 10:20

Поставить в “Истина” и уже ничего не найдется

   ДенисЧ

40 – 18.05.15 – 10:23

(38) (39) Ему это объяснили уже в самом начале

   Smallrat

41 – 18.05.15 – 10:29

(40) чукча писатель)

   Гёдза

42 – 18.05.15 – 10:58

(0) твой код эквивалентен

Наименование ПОДОБНО “” + %

то бишь все элементы

   Лефмихалыч

43 – 18.05.15 – 10:59

(24) что значит “неявное упорядочивание”?

   fisher

44 – 18.05.15 – 11:30

(43) Наличие некоторого порядка при отсутствии явных указаний на конкретный порядок.

   Лефмихалыч

45 – 18.05.15 – 12:46

(44) значит в (24) брехня. Все таблицы БД 1С в sql всегда и строго упорядочены по кластерному индексу

   fisher

46 – 18.05.15 – 13:06

(45) Резкий ты мой 🙂 Это же не гарантирует, что результат сложного запроса будет отсортирован по кластерному индексу первой таблицы, в нём описанному.

   fisher

47 – 18.05.15 – 13:14

Это не говоря уже о том, что насколько я понимаю, в postgresql нет прямого аналога кластерных индексов mssql

   Kvant1C

48 – 18.05.15 – 13:23

(47) Кстати да, у нас postgresql

  

Kvant1C

49 – 18.05.15 – 13:33

Вот что нашел на счет упорядочивания в запросах:

>>Если в запросе не указано упорядочивание, то сортировка происходит по внутреннему идентификатору записи в таблице, по сути никак.

http://zapros-1c-8.ru/9-yazik-zaprosov-1c-8/8-order

 +6 

   

Распечатать

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

Код 1C v 8.2 УП

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

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

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

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

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

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


Код 1C v 8.х

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

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


Код 1C v 7.x

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

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

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

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

Поиск товара по наименованию в версии 3.0 отличается от поиска в предыдущих версиях.

Рассмотрим поиск в справочниках и журналах документов.

Для поиска по наименованию необходимо установить курсор в колонку Наименование. Затем воспользоваться кнопкой ЕщеРасширенный поиск

найти товар по наименованию (1).png

Для быстрого перехода можно воспользоваться комбинацией Alt+F с клавиатуры.

В открывшемся окне поиска указываем Что искать и Как искать

найти товар по наименованию (2).png

Нажимаем кнопку Найти и программа выбирает элементы по заданным параметрам

найти товар по наименованию (3).png

В версии 2.5 поиск устанавливал курсор на первый элемент списка, удовлетворяющий условиям поиска. В версии 3.0 поиск отбирает и выводит все элементы, удовлетворяющие условиям поиска.

Аналогичным способом осуществляется поиск элементов в журналах документов. Для поиска устанавливаем курсор в колонку, по которой будем искать и задаем параметры отбора по кнопке ЕщеРасширенный поиск (Alt+F).

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

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

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

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

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

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

Результат:

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

Удобный поиск товаров

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

Поиск товара по части наименования в 1С

Расширение добавляет возможность поиска товаров по части наименования. При этом можно вводить кусок не только из начала названия, но и из середины или конца.

поиск номенклатуры по части наименования или артикула

Удобный поиск по штрихкоду в 1С

Теперь для поиска по штрихкоду необязательно вводить его целиком с самого начала, достаточно ввести несколько значимых цифр.

поиск номенклатуры по штрихкоду

Поиск товаров по дополнительному реквизиту в 1С

Нередко в дополнительных реквизитах номенклатуры содержится какой-либо уникальный идентификатор товара (например, код на сайте). В таком случае пользователям иногда удобнее искать товары по значению этого реквизита.

В таком случае в настройках расширения выберем нужный дополнительный реквизит для поиска.

раздел НСИ и администрированиевыбор дополнительного реквизита для поиска товараподбор товаров по дополнительному реквизиту

Для корректной работы расширения необходимо отключить безопасный режим .

отключение безопасного режима

Смотреть комментарии (4)

почему то не работает поиск по доп реквизиту. При попытке выбрать доп реквизит в разделе Администрирование открывается пустое окно с неактивными кнопками создать и выбрать

Дмитрий Медведков, 2021-05-30

По всей видимости, у вас вообще отключен функционал доп. реквизитов в базе.

Это работает только через подбор или будет работать и в прайсе или в номеклатуре?

Дмитрий Медведков, 2021-12-02

Если в номенклатурном справочнике или прайсе вы аналогичным образом будете подбирать номенклатуру, то будет работать и там.

Для добавления комментариев необходимо авторизоваться на сайте.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

  • Бухгалтерия предприятия 3.0
  • Управление торговлей 11.4, 11.5
  • Управление торговлей 3 (KZ) *
  • Управление торговлей 3 (BY) **
  • Комплексная автоматизация 2.4 (BY) **
  • Управление предприятием ERP 2.4, 2.5
  • Комплексная автоматизация 2.4, 2.5
  • Розница 2.2, 2.3
  • Управление нашей фирмой 1.6
  • Бухгалтерия для Казахстана 3.0

Наверняка, у вас есть много вопросов относительно оплаты (как оплатить, как получить разработку, не возникнут ли проблемы и т.п.).

Ответы на самые распространенные вопросы, относящиеся к процессу покупки моих разработок, приведены на странице заказа. Для перехода к ней нажмите Перейти к оплате .

Там же вы найдете мои контакты, на случай если останутся вопросы.

Для скачивания этой разработки необходимо зарегистрироваться на сайте, потом авторизоваться и приобрести годовую подписку (стоит 1500 руб, оплачивается единоразово). Она даст вам доступ более чем к 200 разработкам на сайте.

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