Имя: Пароль:
1C
1С v8
Программно найти справочник по дополнительным реквизитам и сведениям
,
0 Qwerty18
 
14.04.20
00:22
Функция НайдемКонтрагента(КодКонтрагента)
            
    Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
    
    |    КонтрагентыДополнительныеРеквизиты.Ссылка КАК Контрагент
    |ИЗ
    |    Справочник.Контрагенты.ДополнительныеРеквизиты КАК КонтрагентыДополнительныеРеквизиты
    |ГДЕ
    |    КонтрагентыДополнительныеРеквизиты.Свойство = &Свойство
    |    И КонтрагентыДополнительныеРеквизиты.Ссылка = &Ссылка";

    Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("КодУт", Истина);
    Запрос.УстановитьПараметр("Ссылка",КодКонтрагента);

    Результат = Запрос.Выполнить().Выбрать();
    Пока Результат.Следующий() цикл
        БКонтрагент = Результат.Контрагент;
    КонецЦикла;
     Сообщить(БКонтрагент;);
    Возврат БКонтрагент;
    
КонецФункции
1 Qwerty18
 
14.04.20
00:23
Добрый день. Пытаюсь реализовать поиск в справочнике контрагенты по доп. реквизиту КодУт. Но возвращается пустое значение. Что неправильно ?
2 Cthulhu
 
14.04.20
00:26
ПланВидовХарактеристик не находится по этому наименованию?
3 аспид
 
14.04.20
00:34
>>   |    КонтрагентыДополнительныеРеквизиты.Свойство = &Свойство

Не задано свойство в параметрах запроса
4 Builder
 
14.04.20
00:34
Бред какой то написан.
В запросе выбирается ссылка, которая передается как параметр в запрос.
Уберите условие на ссылку и поправьте
Запрос.УстановитьПараметр("Свойство",КодКонтрагента);
5 RomanYS
 
14.04.20
00:37
(1) Неправильно делать условие на ссылку если ищешь по значению
6 Qwerty18
 
14.04.20
12:24
Спасибо всем. Заработало вот так, кому нибудь пригодится.

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

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| КонтрагентыДополнительныеРеквизиты.Ссылка КАК Контрагент
|ИЗ
| Справочник.Контрагенты.ДополнительныеРеквизиты КАК КонтрагентыДополнительныеРеквизиты
|ГДЕ
| КонтрагентыДополнительныеРеквизиты.Значение = &Значение
| И КонтрагентыДополнительныеРеквизиты.Свойство.Имя = &Имя";

Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("КодУТ", Истина);

Запрос.УстановитьПараметр("Имя", "КодУТ_7fa830250b37400a8c11df50f9bc7e62"); // Это ИМЯ реквизита (не Наименование которое просто = КодУТ, а Имя "для разработчиков")
Запрос.УстановитьПараметр("Значение",КодКонтрагента); // Это значение Вашего реквизита
Результат = Запрос.Выполнить().Выбрать();

Пока Результат.Следующий() цикл
ИскомыйКонтрагент = Результат.Контрагент;
КонецЦикла;
// Сообщить(ИскомыйКонтрагент);
Возврат ИскомыйКонтрагент;
7 RomanYS
 
14.04.20
12:30
(6) С учетом возврата одного контрагента, я бы заменил "ВЫБРАТЬ РАЗЛИЧНЫЕ" на "ВЫБРАТЬ Первые 1". И добавил сортировку по приоритетам, если вдруг "код УТ" окажется неуникальным. Например, помеченные на удаление должны иметь меньший приоритет.