Создан подчиненный справочник (КодыКонтрагентов, реквизиты: КодТовара, Контрагент) подчинен справочнику (ТМЦ).
Пример - в справочнике ТМЦ товар Мыло, на етот товар в справочнике КодыКонтрагентов записи (фирма 1 - код 00001, фирма2 - код 22212, фирма3 - код 23232)
Необходимо - Найти код указаного контрагента и вернуть название Товара ТМЦ(владелец)
Листинг функции поиска в подчиненном справочнике.
Функция ПоискПоКоду(кодПоиска, Контрагент)
нет=0;
спрКодКонтр=СоздатьОбъект("Справочник.КодыКонтрагентов");
спрКодКонтр.ВыбратьЭлементы(0);
Пока спрКодКонтр.ПолучитьЭлемент()=1 Цикл
КодИзСпр=СокрЛП(Строка(СпрКодКонтр.КодТовара));
КонтрИзСпр=спрКодКонтр.Контрагент;
Пометка=спрКодКонтр.ПометкаУдаления();
Если (КодИзСпр=кодПоиска) И (КонтрИзСпр=Контрагент) И (Пометка=0) Тогда
Возврат спрКодКонтр.Владелец;
Прервать;
Иначе
нет=1;
КонецЕсли;
КонецЦикла;
Если нет=1 Тогда
Возврат "";
КонецЕсли;
КонецФункции
Использование НайтиПоРеквизиту или НайтиПоНаименованию исключаю, так как в случае 2х одинаковых кодов поиск остановится на первом елементе (например у фирмы1 на код 00001 - мыло, у фирмы2 на коде 00001-рубашки)
Суть седующая: если в справочнике есть хотябы одна запись все работает отлично(записанные коды находит - если кодов нет сообщает).
Если справочник пуст результат -сообщает что все коды присутствуют.
Какбы вариант добавить 1 запись вроде (БлаБла, Абракадабра) и все работает никаких претензий, но все же для себя хотелось бы разобраться почему Фирма1="" и код 00001=""(Пустой справочник)
Как узнать что в справочнике (есть/нет) записи. Или может что-нибуть посоветуете.
Вот что получилось - Как один из вариантов - пересчет елементов при вызове запроса
Функция ПоискПоКоду(кодПоиска, Контрагент)
//*************
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|ТекущийЭлемент = Справочник.КодыКонтрагентов.ТекущийЭлемент;
|Функция Счетчик = Счётчик();
|"
;
Запрос.Выполнить(ТекстЗапроса);
Если Запрос.Счетчик=0 Тогда
Возврат "";
КонецЕсли;
//*************
нет=0;
спрКодКонтр=СоздатьОбъект("Справочник.КодыКонтрагентов");
спрКодКонтр.ВыбратьЭлементы(0);
Пока спрКодКонтр.ПолучитьЭлемент()=1 Цикл
КодИзСпр=СокрЛП(Строка(СпрКодКонтр.КодТовара));
КонтрИзСпр=спрКодКонтр.Контрагент;
Пометка=спрКодКонтр.ПометкаУдаления();
Если (КодИзСпр=кодПоиска) И (КонтрИзСпр=выбКонтрагент) И (Пометка=0) Тогда
Возврат спрКодКонтр.Владелец;
Прервать;
Иначе
нет=1;
КонецЕсли;
КонецЦикла;
Если нет=1 Тогда
Возврат "";
КонецЕсли;
КонецФункции
Может кому пригодится