Имя: Пароль:
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". И добавил сортировку по приоритетам, если вдруг "код УТ" окажется неуникальным. Например, помеченные на удаление должны иметь меньший приоритет.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn