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

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

В данном случае рассмотрим поиск по реквизиту. Реквизит может браться любой кроме реквизитов с неограниченной длиной и типом ХранилещеЗначений.

Синтаксис:

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

Параметры:

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

ИмяРекизита — имя реквизита [строка].

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

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

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

Результат:

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

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

Если реквизит отсутствует в справочнике, то возвращается Неопределено.

Пример:

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

28.08.12 — 00:29

Доброго времени суток. Мне не обходимо найти единицу измерения по владельцу, но не могу понять что не так делаю.

вот код

ЕдИзм = Справочники.ЕдиницыИзмерения;            

НайденнаяСсылка = ЕдИзм.НайтиПоРеквизиту(«Владелец»,Номен);

пишет неверно указан реквизит, это предопределенный реквизит, по наименованию же может находить…

натолките на верный путь

  

Партнерская программа EFSOL Oblako

   GROOVY

3 — 28.08.12 — 00:34

СправочникМенеджер.<Имя справочника>.НайтиПоРеквизиту (CatalogManager.<Имя справочника>.FindByAttribute)

СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)

НайтиПоРеквизиту (FindByAttribute)

Синтаксис:

НайтиПоРеквизиту(<ИмяРеквизита>, <ЗначениеРеквизита>, <Родитель>, <Владелец>)

Параметры:

<ИмяРеквизита> (обязательный)

Тип: Строка.

Имя реквизита, как он задан в конфигураторе, по значению которого осуществляется поиск. Тип значения произвольный, кроме ХранилищеЗначения и строк произвольной длины.

<ЗначениеРеквизита> (обязательный)

Тип: Произвольный.

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

<Родитель> (необязательный)

Тип: СправочникСсылка.

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

<Владелец> (необязательный)

Тип: СправочникСсылка.

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

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

Тип: СправочникСсылка.

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

Описание:

Осуществляет поиск элемента по значению реквизита.

Доступность:

Сервер, толстый клиент, внешнее соединение.

Примечание:

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

Для реквизитов типа Строка поиск осуществляется по точному соответствию.

Пример:

СтрокаНаименования = «Доллары США»;

Валюты = Справочники.Валюты;

НайденнаяСсылка = Валюты.НайтиПоРеквизиту(«ПолноеНаименование»,

                                          СтрокаНаименования);

Если НайденнаяСсылка = Валюты.ПустаяСсылка() Тогда

   Сообщить(«Валюты «»» + СтрокаНаименования + «»» еще нет.»);

Иначе

   Сообщить(«Нашли такую.»);

КонецЕсли;

Вот в СП есть СЛОВО ВЛАДЕЛЕЦ… Намекает как бы…

   mistеr

4 — 28.08.12 — 02:10

(3) Что же указать в двух первых *обязательных* параметрах?..

Тут больше подойдет НайтиПоНаименованию(«», Ложь, , Владелец);

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

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

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

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

Пример:

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

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

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

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

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

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

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

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

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

Пример:

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

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

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

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

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

Пример:

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

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

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

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

Синтаксис

Метод НайтиПоРеквизиту() имеет следующий синтаксис:

число НайтиПоРеквизиту(ИмяРеквизита, Значение, Глобально)

А также альтернативный англоязычный синтаксис:

number FindByAttribute(ИмяРеквизита, Значение)

Параметры

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

Имя параметра Тип Описание
ИмяРеквизита Строка имя реквизита, как оно задано в конфигураторе
Значение Произвольный значение реквизита для поиска
Глобально Число признак глобального поиска

0 — поиск в пределах подчинения (для подчиненных справочников) или родителя (для иерархических справочников)
1 — поиск по всему справочнику
Жирным шрифтом выделены обязательные параметры

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

Число

1 — элемент справочника найден
0 — в противном случае

Описание

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

Внимание! Метод можно использовать только для реквизитов с установленным признаком Сортировка

Настройки реквизита для поиска по реквизиту в справочнике на 1с 7.7

Пример использования

Пример кода с использованием метода НайтиПоРеквизиту():

//поиск по реквизиту с использованием родителя
Справочник.ИспользоватьРодителя(ГруппаДляПоиска);
Если Справочник.НайтиПоРеквизиту("ИНН", ИНН, 0) = 1 Тогда
	Сообщить("Найден контрагент: " + Справочник.Наименование);
Иначе
	Сообщить("Упс! По ИНН " + ИНН + " контрагент не найден!");
КонецЕсли;

//поиск по реквизиту по всему справочнику
Справочник = СоздатьОбъект("Справочник.Контрагенты");
Если Справочник.НайтиПоРеквизиту("ИНН", ИНН, 1) = 1 Тогда
	Сообщить("Найден контрагент: " + Справочник.Наименование);
Иначе
	Сообщить("Упс! По ИНН " + ИНН + " контрагент не найден!");
КонецЕсли;

//Результат
// Упс! По ИНН 110000000004 контрагент не найден!
// Найден контрагент: Гвоздика

Читайте также:

  1. Метод Справочник.НайтиПоКоду()
  2. Метод Справочник.НайтиПоНаименованию()
  3. Метод Справочник.НайтиЭлемент()

Поделиться страницей в соц.сетях

Функция позволяет найти ссылку на объект любого типа в конфигурации ERP2.0 (либо любой другой построенной на БСП).
Поиск может выполняться по реквизитам основной таблицы, значениям дополнительных реквизитов по табличной части «Дополнительные реквизиты», значениям доп. сведений (регистр сведений «ДополнительныеСведения»).

Используется объектная модель работы с запросом (СхемаЗапроса). Поддерживается в версиях платформы: 8.3.5 и выше.
Параметры:

Имя параметра Тип Описание
ИмяТаблицы Строка Имя таблицы, по которой осуществляется поиск. Пример: «Справочник.Номенклатура»
СтруктураРеквизитов Структура В качестве ключа передается имя реквизита основной таблицы, в качестве значения — значение реквизита
СоответствиеДопРеквизитов Соответствие В качестве ключа передается ссылка на доп. реквизит — элемент плана вида характеристик «ДополнительныеРеквизитыИСведения», в качестве значения — значение реквизита
СоответствиеДопСведений Соответствие В качестве ключа передается ссылка на доп. сведение — элемент плана вида характеристик «ДополнительныеРеквизитыИСведения», в качестве значения — значение доп. сведения

Имя параметра Тип Описание
ИмяТаблицы Строка Имя таблицы, по которой осуществляется поиск. Пример: «Справочник.Номенклатура»
СтруктураРеквизитов Структура В качестве ключа передается имя реквизита основной таблицы, в качестве значения — значение реквизита
СоответствиеДопРеквизитов Соответствие В качестве ключа передается ссылка на доп. реквизит — элемент плана вида характеристик «ДополнительныеРеквизитыИСведения», в качестве значения — значение реквизита
СоответствиеДопСведений Соответствие В качестве ключа передается ссылка на доп. сведение — элемент плана вида характеристик «ДополнительныеРеквизитыИСведения», в качестве значения — значение доп. сведения
Функция СсылкаНаОбъектПоРеквизитам(ИмяТаблицы, СтруктураРеквизитов = Неопределено, СоответствиеДопРеквизитов = Неопределено, СоответствиеДопСведений = Неопределено)
 
    ИмяТаблицыВЗапросе = СтрЗаменить(ИмяТаблицы, ".", "");
 
    СхемаЗапроса = Новый СхемаЗапроса;
 
    ЗапросПакета    = СхемаЗапроса.ПакетЗапросов[0];
    ОператорВыбора    = ЗапросПакета.Операторы[0];
 
    Если СтруктураРеквизитов <> Неопределено Тогда
 
        ИсточникСправочник    = ОператорВыбора.Источники.Добавить(ИмяТаблицы, ИмяТаблицыВЗапросе);
 
        ОператорВыбора.ВыбираемыеПоля.Добавить(ИмяТаблицыВЗапросе + ".Ссылка");
 
        Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
            ОператорВыбора.Отбор.Добавить(ИмяТаблицыВЗапросе + "." + КлючИЗначение.Ключ + " = &" + КлючИЗначение.Ключ);
        КонецЦикла;
 
        Если СоответствиеДопРеквизитов <> Неопределено
            ИЛИ СоответствиеДопСведений <> Неопределено Тогда
 
            ЗапросПакета.ТаблицаДляПомещения = "ОсновнаяТаблица";
 
            ЗапросПакета    = СхемаЗапроса.ПакетЗапросов.Добавить(Тип("ЗапросВыбораСхемыЗапроса"));
            ОператорВыбора    = ЗапросПакета.Операторы[0];
 
        КонецЕсли;
 
    КонецЕсли;
 
    Если СоответствиеДопРеквизитов <> Неопределено Тогда
 
        Для Сч = 0 По СоответствиеДопРеквизитов.Количество()-1 Цикл
 
            ИсточникСправочник    = ОператорВыбора.Источники.Добавить(ИмяТаблицы + ".ДополнительныеРеквизиты", ИмяТаблицыВЗапросе + "ДополнительныеРеквизиты");
 
            ОператорВыбора.ВыбираемыеПоля.Добавить(ИмяТаблицыВЗапросе + "ДополнительныеРеквизиты.Ссылка");
 
            ОператорВыбора.Отбор.Добавить(ИмяТаблицыВЗапросе + "ДополнительныеРеквизиты.Свойство = &Свойство" + Формат(Сч+1, "ЧГ=0"));
            ОператорВыбора.Отбор.Добавить(ИмяТаблицыВЗапросе + "ДополнительныеРеквизиты.Значение = &Значение" + Формат(Сч+1, "ЧГ=0"));
 
            Если СтруктураРеквизитов <> Неопределено Тогда
 
                ИсточникОсновнаяТаблица = ОператорВыбора.Источники.Добавить("ОсновнаяТаблица", "ОсновнаяТаблица");
 
                Соединение = ИсточникОсновнаяТаблица.Соединения.Добавить(ИсточникСправочник);
                ИсточникОсновнаяТаблица.Соединения[0].ТипСоединения = ТипСоединенияСхемыЗапроса.Внутреннее;
 
            КонецЕсли;
 
            Если СоответствиеДопРеквизитов.Количество()> 1
                ИЛИ СоответствиеДопСведений <> Неопределено Тогда
 
                ЗапросПакета.ТаблицаДляПомещения = "ДопРеквизит" + Формат(Сч+1, "ЧГ=0");
 
                ЗапросПакета    = СхемаЗапроса.ПакетЗапросов.Добавить(Тип("ЗапросВыбораСхемыЗапроса"));
                ОператорВыбора    = ЗапросПакета.Операторы[0];
 
            КонецЕсли;
 
        КонецЦикла;
 
    КонецЕсли;
 
    Если СоответствиеДопСведений <> Неопределено Тогда
 
        Для Сч = 0 По СоответствиеДопСведений.Количество()-1 Цикл
 
            ИсточникРегистр    = ОператорВыбора.Источники.Добавить("РегистрСведений.ДополнительныеСведения", "ДополнительныеСведения");
 
            ОператорВыбора.ВыбираемыеПоля.Добавить("ДополнительныеСведения.Объект");
            ЗапросПакета.Колонки[0].Псевдоним = "Ссылка";
 
            ОператорВыбора.Отбор.Добавить("ДополнительныеСведения.Свойство = &Сведение" + Формат(Сч+1, "ЧГ=0"));
            ОператорВыбора.Отбор.Добавить("ДополнительныеСведения.Значение = &ЗначениеСведения" + Формат(Сч+1, "ЧГ=0"));
 
            Если СтруктураРеквизитов <> Неопределено Тогда
 
                ИсточникОсновнаяТаблица = ОператорВыбора.Источники.Добавить("ОсновнаяТаблица", "ОсновнаяТаблица");
 
                Соединение = ИсточникОсновнаяТаблица.Соединения.Добавить(ИсточникРегистр, "ОсновнаяТаблица.Ссылка = ДополнительныеСведения.Объект");
                ИсточникОсновнаяТаблица.Соединения[0].ТипСоединения = ТипСоединенияСхемыЗапроса.Внутреннее;
 
            КонецЕсли;
 
            Если СоответствиеДопСведений.Количество()> 1
                ИЛИ СоответствиеДопРеквизитов <> Неопределено Тогда
 
                ЗапросПакета.ТаблицаДляПомещения = "ДопСведение" + Формат(Сч+1, "ЧГ=0");
 
                ЗапросПакета    = СхемаЗапроса.ПакетЗапросов.Добавить(Тип("ЗапросВыбораСхемыЗапроса"));
                ОператорВыбора    = ЗапросПакета.Операторы[0];
 
            КонецЕсли;
 
        КонецЦикла;
 
    КонецЕсли;
 
    Если СоответствиеДопРеквизитов <> Неопределено
        И (СоответствиеДопРеквизитов.Количество() <> 1 ИЛИ СоответствиеДопСведений <> Неопределено) Тогда
 
        ИсточникВТ1 = ОператорВыбора.Источники.Добавить("ДопРеквизит1", "ДопРеквизит1");
 
        ОператорВыбора.ВыбираемыеПоля.Добавить("ДопРеквизит1.Ссылка");
 
        Для Сч = 1 По СоответствиеДопРеквизитов.Количество()-1 Цикл
 
            СчСтрока = Формат(Сч+1, "ЧГ=0");
 
            ИсточникВТ = ОператорВыбора.Источники.Добавить("ДопРеквизит" + СчСтрока, "ДопРеквизит" + СчСтрока);
            Соединение = ИсточникВТ1.Соединения.Добавить(ИсточникВТ, "ДопРеквизит1.Ссылка = ДопРеквизит" + СчСтрока + ".Ссылка");
            ИсточникВТ1.Соединения[ИсточникВТ1.Соединения.Количество()-1].ТипСоединения = ТипСоединенияСхемыЗапроса.Внутреннее;
 
        КонецЦикла;
 
    КонецЕсли;
 
    Если СоответствиеДопСведений <> Неопределено
        И (СоответствиеДопСведений.Количество()> 1 ИЛИ СоответствиеДопРеквизитов <> Неопределено) Тогда
 
        Если СоответствиеДопРеквизитов = Неопределено Тогда
 
            ИсточникВТ1 = ОператорВыбора.Источники.Добавить("ДопСведение1", "ДопСведение1");
 
            ОператорВыбора.ВыбираемыеПоля.Добавить("ДопСведение1.Ссылка");
 
            СтартовыйИндекс        = 1;
            ИмяПервойТаблицы    = "ДопСведение1";
 
        Иначе
 
            СтартовыйИндекс        = 0;
            ИмяПервойТаблицы    = "ДопРеквизит1";
 
        КонецЕсли;
 
        Для Сч = СтартовыйИндекс По СоответствиеДопСведений.Количество()-1 Цикл
 
            СчСтрока = Формат(Сч+1, "ЧГ=0");
 
            ИсточникВТ = ОператорВыбора.Источники.Добавить("ДопСведение" + СчСтрока, "ДопСведение" + СчСтрока);
            Соединение = ИсточникВТ1.Соединения.Добавить(ИсточникВТ, ИмяПервойТаблицы + ".Ссылка = ДопСведение" + СчСтрока + ".Ссылка");
            ИсточникВТ1.Соединения[ИсточникВТ1.Соединения.Количество()-1].ТипСоединения = ТипСоединенияСхемыЗапроса.Внутреннее;
 
        КонецЦикла;
 
    КонецЕсли;
 
    Запрос = Новый Запрос;
 
    Запрос.Текст = СхемаЗапроса.ПолучитьТекстЗапроса();
 
    Если СтруктураРеквизитов <> Неопределено Тогда
 
        Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
            Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение);
        КонецЦикла;
 
    КонецЕсли;
 
    Если СоответствиеДопРеквизитов <> Неопределено Тогда
 
        Сч = 1;
 
        Для Каждого КлючИЗначение Из СоответствиеДопРеквизитов Цикл
 
            СчСтрока = Формат(Сч, "ЧГ=0");
 
            Запрос.УстановитьПараметр("Свойство" + СчСтрока, КлючИЗначение.Ключ);
            Запрос.УстановитьПараметр("Значение" + СчСтрока, КлючИЗначение.Значение);
 
            Сч = Сч + 1;
 
        КонецЦикла;
 
    КонецЕсли;
 
    Если СоответствиеДопСведений <> Неопределено Тогда
 
        Сч = 1;
 
        Для Каждого КлючИЗначение Из СоответствиеДопСведений Цикл
 
            СчСтрока = Формат(Сч, "ЧГ=0");
 
            Запрос.УстановитьПараметр("Сведение" + СчСтрока, КлючИЗначение.Ключ);
            Запрос.УстановитьПараметр("ЗначениеСведения" + СчСтрока, КлючИЗначение.Значение);
 
            Сч = Сч + 1;
 
        КонецЦикла;
 
    КонецЕсли;
 
    РезультатЗапроса = Запрос.Выполнить();
 
    Если РезультатЗапроса.Пустой() Тогда
        Возврат Неопределено;
    КонецЕсли;
 
    Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий();
 
    Возврат Выборка.Ссылка;
 
КонецФункции

Слушатель курса Разработка и оптимизация запросов в 1С:Предприятие 8.3 столкнулся с трудностями при обращении к конкретному объекту непосредственно в запросе. С аналогичной задачей может столкнуться каждый, поэтому мы решили опубликовать вопрос слушателя и ответ тренера из Мастер-группы курса.

Вопрос

В самом начале курса было показано, как найти объект на встроенном языке, например, НайтиПоНаименованию или НайтиПоКоду и передать его в запрос через параметр. А можно ли обратиться к объекту прямо в запросе, не используя параметр. Например, найти номенклатуру, зная её точное название  или артикул?

Ответ тренера

Искать по произвольному реквизиту в запросе тоже можно, сравнивая значение этого реквизита с примитивными типами. Разумеется, значение реквизита так же должно иметь примитивный тип.

Выборка номенклатуры по конкретному значению артикула:

ВЫБРАТЬ
    Номенклатура.Ссылка
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Артикул = "Арт1234"

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

То есть, чтобы выбрать номенклатуру с единицей измерения “штука”, нельзя написать

Номенклатура.ЕдиницаИзмерения = "Шт" 

Правильным будет следующее условие:

Номенклатура.ЕдиницаИзмерения.Наименование = "Шт".

P.S.

Понимать, как работают запросы и уметь их строить — обязательный навык для всех, кто дорабатывает и внедряет 1С.

После курса Вы сможете:

  • Строить сложные запросы с несколькими источниками данных
  • Уверенно задействовать вложенные запросы и временные таблицы
  • Использовать встроенный язык для обработки результатов запроса
  • Учитывать особенности соединений и объединений нескольких таблиц.
  • Разрабатывать запросы на уровне задач Аттестации 1С:Специалист по платформе.

Методы 1С СписокЗначений.НайтиПоЗначению(Значение) и 1С СписокЗначений.НайтиПоИдентификатору(Значение) возвращает элемент («ячейку») списка значений, у которого значение (или идентификатор) с нужным значением.

Обратите внимание – идентификатор это не то же самое, что и индекс. Индекс – это порядковый номер (число), которым пронумерованы все ячейки с начала и до конца списка значений. Идентификатор — это уникальный номер (число), который имеет каждая ячейка.

Поиск по идентификатору используется в тонком клиенте, при работе со списком значений на сервере. Имея идентификатор элемента списка значений, который расположен на форме (Элементы.ИмяСпискаЗначенийНаФорме.ТекущаяСтрока), Вы можете найти элемент в списке значений, вне зависимости от его текущего индекса и значения.

Поиска по «представлению» значения – в списке значений нет.

В отличие от поиска в массиве, который возвращает индекс найденного элемента или -1, если не найдено, поиск в списке значений возвращает сам элемент списка или НЕОПРЕДЕЛЕНО, если не найдено.

Пример поиска по значению с помощью 1С СписокЗначений.НайтиПоЗначению:
спРазрешенныхСтатусов = Новый СписокЗначений();

//добавляем в пустой список значений – все значения перечисления
//добавляем их «строковые пользовательские наименования» – которые при добавлении значений в конфигураторе записываются в свойствах значения перечисления в свойство «Синоним»
//Перечисления.СтатусыДокументов – это путь к нашему перечислению
//.ПустаяСсылка() – позволяет вызывать методы этого перечисления
//.Метаданные() – метод, который возвращает метаданные в том виде, как они заданы в конфигураторе и позволяет считывать свойства, заданные в метаданных
//.ЗначенияПеречисления – список значений у перечисления, заданные в конфигураторе, каждое значение, полученное через .Метаданные() содержит кроме значения свойства значения, заданные в конфигураторе

Для каждого Знч из Перечисления.СтатусыДокументов.ПустаяСсылка().Метаданные().ЗначенияПеречисления Цикл
     спРазрешенныхСтатусов.Добавить(Знч.Синоним);
КонецЦикла;

Если спРазрешенныхСтатусов.НайтиПоЗначению(СтатусДокументаСтрокой) = Неопределено Тогда //Если поиск вернул Неопределено, то элемент с таким значением не найден

     Сообщить("Ошибка: статус документа '" + СтатусДокументаСтрокой + "' не найден");

КонецЕсли;

Пример поиска по индексу с помощью 1С СписокЗначений.НайтиПоИдентификатору:

Проголосовать за этот пост:

Загрузка…

Posted in Язык 1С

Понравилась статья? Поделить с друзьями:
  • Показания счетчика крымская водная компания
  • Пикает компьютер во время работы в колонках
  • Оценочная компания центр экспертизы столица
  • Покончив с этой работой в шестнадцать часов
  • Оцифровка бизнеса таблица скачать бесплатно