Имя: Пароль:
1C
1С v8
Метод Найти() в коллекции Полей настройки
0 karpik666
 
27.08.14
07:23
Как определить доступен ли вложенный отбор в отчете? К примеру, если использовать:
лДоступныеПоля = лОтборПостроителя.ПолучитьДоступныеПоля();
лДоступныеПоля.Найти("Подразделение");

То Возвращается неопределено, когда действительно этого отбора нет, но мне нужно узнать про отбор такого вида "Контрагент.МенеджерыПокупателя", если писать в таком виде
лДоступныеПоля.Найти("Контрагент.МенеджерыПокупателя")
то возвращается неопределено всегда, есть он или нет.
Если смотреть по отладчику, то нужное мне поле вообще находится по пути "Контрагент.Поля.МенеджерыПокупателя".
Очень нужна помощь по данному вопросу.
1 1Сергей
 
27.08.14
07:39
лДоступныеПоля.Найти("Контрагент.Поля.МенеджерыПокупателя")


не?
2 karpik666
 
27.08.14
07:41
(1)Не, это был первый вариант, который я попробовал, также возвращает неопределено
3 karpik666
 
27.08.14
08:22
Кому интересно, добавил собственный велосипед в конфигурацию с блэк-джеком и ***, а именно функцию:
Если НЕ ПолеДоступноДляОтбора (лДоступныеПоля, "Контрагент.МенеджерыПокупателя") Тогда

Функция ПолеДоступноДляОтбора (лДоступныеПоля, Поле)
    Если ПустаяСтрока(СокрЛП(Поле)) Тогда
        Возврат Истина;        
    КонецЕсли;
    
    Если Найти(Поле, ".") <> 0 Тогда
        лПозицияТочки = Найти(Поле, ".");
        лПолеПоиска = Лев(Поле, лПозицияТочки - 1);
    Иначе
        лПозицияТочки = СтрДлина(Поле);
        лПолеПоиска = Поле;
    КонецЕсли;
        
    Если лДоступныеПоля.Найти(лПолеПоиска) <> Неопределено Тогда
        Возврат ПолеДоступноДляОтбора(лДоступныеПоля [лПолеПоиска].Поля , Прав(Поле,СтрДлина(Поле) - лПозицияТочки));  
    Иначе
        Возврат Ложь    
    КонецЕсли;     
    
КонецФункции

Обрабатывает любое количество вложений в отбор
Программист всегда исправляет последнюю ошибку.