Имя: Пароль:
1C
1С v8
Проверка на тип
0 АСКЕТ
 
25.01.19
13:20
народ кто подскажет ? чет проверка на тип не срабатывает

Для каждого ЭлСп из СписокЗн Цикл     
Об =Метаданные.НайтиПоТипу(ТипЗнч(ЭлСп)) ;    
Сообщить(Об);    
  //ЭлСп.Пометка = Истина
    
        
        Сообщить(ЭлСп.Значение);
        
  РольДоступа =      Метаданные.Роли;
  
  


  //
     Для каждого Стр из РольДоступа Цикл
        
        
              
        
         Если   ПравоДоступа("Чтение",Об,Стр)Тогда
                      Сообщить(Стр);

                     Сообщить(  "Чтение");
                              КонецЕслИ;
1 mistеr
 
25.01.19
13:21
Не вижу проверки на тип.
2 zvial
 
25.01.19
13:22
ТипЗнч(ЭлСп) вернет ЭлементСпискаЗначений, если СписокЗн имеет тип "СписокЗначений"
3 АСКЕТ
 
25.01.19
13:25
и??  ЭлСп.Значение
4 АСКЕТ
 
25.01.19
13:32
Для каждого ЭлСп из СписокЗн Цикл     
Об =Метаданные.НайтиПоТипу(ТипЗнч(ЭлСп.Значение)) ;    
    
  //ЭлСп.Пометка = Истина
        Если ТипЗнч(ЭлСп.Значение) = Тип("СправочникСсылка.Организации") тогда
        
        Сообщить(ЭлСп.Значение);
        
  РольДоступа =      Метаданные.Роли;
  
  


  //
     Для каждого Стр из РольДоступа Цикл
        
        
              
        
         Если   ПравоДоступа("Чтение",Об,Стр)Тогда
                      Сообщить(Стр);

                     Сообщить(  "Чтение");
                              КонецЕслИ;
5 ZDenis
 
25.01.19
13:35
(4) Что надо то?
6 АСКЕТ
 
25.01.19
13:35
(5)

Проверка на тип не срабатывает  .в вопросе же пояснил
7 Numerus Mikhail
 
25.01.19
13:36
(6) Сообщить(ТипЗнч(ЭлСп.Значение))
8 АСКЕТ
 
25.01.19
13:38
условие проверки  на тип .не видит тип . нужный ему .
9 mistеr
 
25.01.19
13:41
(6) Та каком типе не срабатывает?
10 Numerus Mikhail
 
25.01.19
13:43
(8) что значит не видит?
Можно конкретнее говорить?
11 АСКЕТ
 
25.01.19
13:43
(9)  Если ТипЗнч(ЭлСп.Значение) = Тип("СправочникСсылка.Организации") тогда
12 Numerus Mikhail
 
25.01.19
13:44
(11) выполни в самом начале цикла то, что в (7). Результат сюда. Не верю я тебе.
13 АСКЕТ
 
25.01.19
13:44
(10)

ну допустим у меня есть некая кнопка после нажатия на которую  условие проверки  на тип не срабатывает
эл значения из списка не равен  типу спрссылка организации
14 zvial
 
25.01.19
13:45
(13) Потому что там не тип ссылки на справочник
15 zvial
 
25.01.19
13:46
А что там за тип, можно посмотреть в отладчике
16 ZDenis
 
25.01.19
13:48
(13) Что конкретно надо?
1) Надо чтобы ТипЗнч(ЭлСп.Значение) = Тип("СправочникСсылка.Организации")
или
2) ТипЗнч(ЭлСп.Значение) <> Тип("СправочникСсылка.Организации")

Откуда берется "СписокЗн"?
Что в него добавлено и как?
17 АСКЕТ
 
25.01.19
13:51
(15) (15)

сейчас спискузначения задам тип значения Любая ссылка и посмотрю что в итоге
18 АСКЕТ
 
25.01.19
14:14
ТипЗн(Справочник.Организации) = Тип("СправочникСсылка.Организации")  ну как то так.  разные типы ? или одинаковые
19 ZDenis
 
25.01.19
14:16
(18) Разнае
20 АСКЕТ
 
25.01.19
14:16
(16)
СписокЗн - в него выгружаю  функцией  список всех метаданных  . тип его произвольный
21 АСКЕТ
 
25.01.19
14:17
(19) от поэтому и не проходит условие на проверку
22 ZDenis
 
25.01.19
14:17
+ 19 Я вообще не знаю что такое у тебя "Справочник.Организации"
23 АСКЕТ
 
25.01.19
14:19
(22) объект выгруженных метаданных в сп значений  .

ставлю пометку - истина  нажимаю кнопку проверить \
условие  не отрабатывает  теперь ясно по чему типы разные
24 dezss
 
25.01.19
14:26
(23) Тебе еще в (7) написали, как надо сделать, чтобы поверить.
25 АСКЕТ
 
25.01.19
14:29
(24) Да.что ты ?  а если в сравниваемых типах в втором нет такого типа ?   Справочник Ссылка есть  он не подходит

ТипЗнч(Об) = Тип("СправочникСсылка.Организации")
26 dezss
 
25.01.19
14:30
(25) Да твою ж...
Сделай просто Сообщить(ТипЗнч(ЭлСп.Значение))
И увидишь, что у тебя не так.
27 АСКЕТ
 
25.01.19
14:31
(26) делал уже не раз

Справочник.Организации   .
28 dezss
 
25.01.19
14:33
(27) Теперь Сообщить(ЭлСп.Значение)
29 АСКЕТ
 
25.01.19
14:34
(28) ну строковый  . а зачем мне его блин преобразовывать туда сюда  .что за бред
30 АСКЕТ
 
25.01.19
14:35
(28) зачем так делать ? запутывать людей .что за политика такая
31 singlych
 
25.01.19
14:40
Это ж объект метаданных, с чего бы ему быть равным ссылке. Юзай какое-нибудь .ПолноеИмя()
32 АСКЕТ
 
25.01.19
14:41
(31)
) ща попробуем
33 dezss
 
25.01.19
14:45
а...так там список метаданных...ну это сработает тогда...
конечно, их нельзя сравнивать...
(31) так полное имя и вернет Справочник.Организации
34 АСКЕТ
 
25.01.19
14:49
(33)

вывод такой .что чтобы выполнить задачу в три строки кода  надо сильно извернутся ,а й 1с ай молодца
нет бы универсальный вызов сделать .
функцию преобразования типов из строки в строку в общем модуле писать?
35 АСКЕТ
 
25.01.19
14:50
Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(<...>)) Тогда
  ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(<...>)) Тогда
  ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипЗнч(<...>)) Тогда
36 dezss
 
25.01.19
14:53
(34) А зачем тебе список значений с элементами-метаданными?
37 АСКЕТ
 
25.01.19
14:54
вот к примеру пишешь код  2 дня  потом взял и уперся в некое чудо . которое в корне меняет твою работу .
увеличивая ее сроки раза в 3 )    почему я не могу в 1с сравнить тип выгруженных объектов метаданных с типом из реквизита обработки - ссылка на справочник
38 АСКЕТ
 
25.01.19
14:54
(36) ну допустим проверить роли .права доступа на любой объект конфигурации
39 АСКЕТ
 
25.01.19
15:04
можно сделать так по индуски

прописать все объекты метаданных . а их там туева хуча . програмно и у каждого сделать проверку

если это спр .организация тогда проверяем роли и права

по другому  пока не вижу как тут сделать что то)
40 mistеr
 
25.01.19
15:10
Ты бы конечную цель озвучил...
41 dezss
 
25.01.19
15:10
(37) Потому что ты не понял сразу того, что они отличаются?
42 dezss
 
25.01.19
15:11
Тебе, скорей всего, надо идти от противного
Что-то вроде...
<ТвояСсылка>.Метаданные() = ЭлСп.Значение
43 dezss
 
25.01.19
15:11
(37) В реквизите обработки у тебя что?
44 АСКЕТ
 
25.01.19
15:16
(43) сделал списком  
да сделай полем один хрен ссылочный тип  не объект метаданных)
45 АСКЕТ
 
25.01.19
15:17
(42) думал в эту сторону щас проверим
46 dezss
 
25.01.19
15:20
(44) тип элемента списка какой?
47 dezss
 
25.01.19
15:20
(46) + если любая ссылка, то (42)
48 АСКЕТ
 
25.01.19
15:24
(46) Строка
49 АСКЕТ
 
25.01.19
15:25
(47) я раньше и не думал.что  в списке  любой тип строковым становиться
50 dezss
 
25.01.19
15:32
(49) э...ты что-то путаешь
51 АСКЕТ
 
25.01.19
15:34
сам мне писал Теперь Сообщить(ЭлСп.Значение)

строку возвращает .
52 АСКЕТ
 
25.01.19
15:35
(50) что я где попутал?
53 АСКЕТ
 
25.01.19
15:44
1с это жесть .зажигает кремнии
54 dezss
 
25.01.19
15:51
(51) это строку с именем, а Сообщить(ТипЗнч(ЭлСп.Значение)) строку с типом)
55 dezss
 
25.01.19
15:52
(52) какой у тебя проставлен тип для элементов списка значений?
56 АСКЕТ
 
25.01.19
15:56
Произвольный
57 АСКЕТ
 
25.01.19
15:58
(54) да эт я просто скопировал . спеша
58 dezss
 
25.01.19
15:58
(56) хм...лучше, ИМХО, любую ссылку поставь, либо доп. проверку.

если выбираешь только ссылки для проверки, то (42)
59 АСКЕТ
 
25.01.19
16:02
(58) тогда список пустой загрузиться
60 dezss
 
25.01.19
16:17
(59) Так...давай тогда с начала.
Что ты с чем сравнивать собираешься?
У тебя в твоем списке значений что хранится, объекты метаданных?
Если да, то тебе надо делать проверку делать так
ЭлСп.Значение = Справочники.Организации.ПустаяСсылка().Метаданные()
61 АСКЕТ
 
25.01.19
16:24
Если ТипЗнч(ЭлСп.Значение) = Тип(Справочники.Организации.ПустаяСсылка().Метаданные())
тогда (60)

не не так  тип не определен организации
62 АСКЕТ
 
25.01.19
16:28
(60) в список значений выгружен  список объектов метаданных  и у него тип строка . при чем у всех объектов
63 dezss
 
25.01.19
16:28
(61) нафига так?
Я не так писал, а так:
Если ЭлСп.Значение = Справочники.Организации.ПустаяСсылка().Метаданные()
тогда
64 dezss
 
25.01.19
16:29
(62) (26) и (27) посмотри...
ты другое там писал
65 АСКЕТ
 
25.01.19
16:30
(63) я 2 раза проверил с и без
66 dezss
 
25.01.19
16:30
блин...
выполни это:

Сообщить(ТипЗнч(ЭлСп.Значение));
Сообщить(ТипЗнч(Справочники.Организации.ПустаяСсылка().Метаданные()));

результат сюда
67 dezss
 
25.01.19
16:31
И покажи код заполнения твоего списка значений
68 АСКЕТ
 
25.01.19
16:32
(67)    мТип = Тип("ОбъектМетаданных");
    
    мТЗ = ПолучитьСтруктуруХраненияБазыДанных();
    Для Каждого эл из мТЗ Цикл
        Если эл.Метаданные = "" Тогда
            Продолжить;
        КонецЕсли;
        
        Попытка
            Если ТипЗнч(Метаданные.НайтиПоПолномуИмени(эл.Метаданные)) = мТип Тогда
                
                                          
          СписокЗн.Добавить(эл.Метаданные);
          
          
                     
                
                
            КонецЕсли;
        Исключение
        КонецПопытки;
    КонецЦикла;
69 dezss
 
25.01.19
16:35
(68) Вот жеж блин...надо было первым делом это спросить...
в СП даже есть

Метаданные(Metadata) – полное имя объекта метаданных;
ИМЯ!!! Т.е. не объект, а строка!!!
70 АСКЕТ
 
25.01.19
16:37
(69) так сразу и узнали из сообщить .что это строка.
дело в другом. как теперь строку преобразовать в ссылочный тип
71 dezss
 
25.01.19
16:40
(70) Метаданные.НайтиПоПолномуИмени()
72 АСКЕТ
 
25.01.19
16:45
минуту
73 АСКЕТ
 
25.01.19
17:04
(71) Об= ЭлСп.Значение;
//Об =Метаданные.НайтиПоТипу(ТипЗнч(ЭлСп.Значение)) ;    



//Об.Метаданные().Имя = ЭлСп.Значение;
    Пр= Метаданные.НайтиПоПолномуИмени("Справочник.Организации") ;
    
        Если (Об) = Пр
тогда
        
             
  РольДоступа =      Метаданные.Роли;
74 АСКЕТ
 
25.01.19
17:06
выходит так  справочник.орг =  организация;
75 АСКЕТ
 
25.01.19
17:07
выходит так  справочник.орг =  организации;
76 АСКЕТ
 
25.01.19
17:07
все в баню. пятница