Имя: Пароль:
1C
1С v8
Помогите с условием
0 malder
 
15.01.12
19:04
Процедура ПолучитьСвойстваДокумента()
   
   Запрос = Новый Запрос();
   ТекстЗапроса = "ВЫБРАТЬ
   |    СвойстваОбъектов.Наименование КАК НаименованиеСвойства,
   |    ВложенныйЗапрос.Объект,
   |    ВложенныйЗапрос.Свойство,
   |    ВложенныйЗапрос.Значение
   |ИЗ
   |    ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов
   |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   |            ЗначенияСвойствОбъектов.Объект КАК Объект,
   |            ЗначенияСвойствОбъектов.Свойство КАК Свойство,
   |            ЗначенияСвойствОбъектов.Значение КАК Значение
   |        ИЗ
   |            РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
   |        ГДЕ
   |            ЗначенияСвойствОбъектов.Объект = &Объект) КАК ВложенныйЗапрос
   |        ПО СвойстваОбъектов.Ссылка = ВложенныйЗапрос.Свойство
   |ГДЕ
   |    СвойстваОбъектов.НазначениеСвойства = ЗНАЧЕНИЕ(ПланВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Документы)";
   
   Запрос.Текст = ТекстЗапроса;
   Запрос.УстановитьПараметр("Объект", Документ);
   
   ЗначенияСвойств = Запрос.Выполнить().Выгрузить();
   
   Для Каждого мРеквизит ИЗ Метаданные().Реквизиты Цикл
           
       ИмяСвойства = мРеквизит.Имя;
       
       Если мРеквизит.Имя = "Документ" Или мРеквизит.Имя = "СсылкаНаОбъект" Тогда
           Продолжить;
       КонецЕсли;
   
       НайденнаяСтрока = ЗначенияСвойств.Найти(ИмяСвойства, "НаименованиеСвойства");
       Если НайденнаяСтрока = Неопределено Тогда
           Сообщить("Не найдено свойство документа " + ИмяСвойства);
           УстановитьСвойство(ИмяСвойства);
       Иначе
           Если ЗначениеЗаполнено(Документ) Тогда
               //Если ИмяСвойства = "ттнНомерТТН" И ЗначениеЗаполнено(ЭтотОбъект[мРеквизит.Имя]) Тогда
               //    Продолжить;
               //КонецЕсли;
               ЭтотОбъект[мРеквизит.Имя] = НайденнаяСтрока.Значение;
               Если НЕ РольДоступна("ПолныеПрава") Тогда
                   ЭлементыФормы[мРеквизит.Имя].Доступность = НЕ НайденнаяСтрока.Значение;
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;                                                        
       
   КонецЦикла;
   
КонецПроцедуры

Если у пользователя неполные права то ошибку пишет

{Форма.Форма.Форма(80)}: Преобразование значения к типу Булево не может быть выполнено
                   ЭлементыФормы[мРеквизит.Имя].Доступность = НЕ НайденнаяСтрока.Значение;

Если полные то нормально печаеться, помогите пожалуйста разобраться в чем пробелемма!
1 Rie
 
15.01.12
19:07
(0) У тебя там левое соединение.
Поэтому Значение может быть и NULL, а не только Булево.
2 malder
 
15.01.12
19:08
Так и есть NULL получаю значение !
3 malder
 
15.01.12
19:10
Так а условие как правильно поставить?

           Если ЗначениеЗаполнено(Документ) Тогда
               //Если ИмяСвойства = "ттнНомерТТН" И ЗначениеЗаполнено(ЭтотОбъект[мРеквизит.Имя]) Тогда
               //    Продолжить;
               //КонецЕсли;
               ЭтотОбъект[мРеквизит.Имя] = НайденнаяСтрока.Значение;
               Если НЕ РольДоступна("ПолныеПрава") Тогда
                   ЭлементыФормы[мРеквизит.Имя].Доступность = НЕ НайденнаяСтрока.Значение;
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
4 malder
 
15.01.12
21:00
Вот условие втулил

Если НайденнаяСтрока.Значение = NULL Тогда
           НайденнаяСтрока.Значение = Ложь;
       КонецЕсли;
5 malder
 
15.01.12
21:01
Получилось


   ИмяСвойства = мРеквизит.Имя;
       
       НайденнаяСтрока = ЗначенияСвойств.Найти(ИмяСвойства, "НаименованиеСвойства");
       Если НайденнаяСтрока.Значение = NULL Тогда
           НайденнаяСтрока.Значение = Ложь;
       КонецЕсли;
       
       Если НайденнаяСтрока = Неопределено Тогда
           Сообщить("Не найдено свойство документа " + ИмяСвойства);
           УстановитьСвойство(ИмяСвойства);
       Иначе
           Если ЗначениеЗаполнено(Документ) Тогда
               //Если ИмяСвойства = "ттнНомерТТН" И ЗначениеЗаполнено(ЭтотОбъект[мРеквизит.Имя]) Тогда
               //    Продолжить;
               //КонецЕсли;
               ЭтотОбъект[мРеквизит.Имя] = НайденнаяСтрока.Значение;
               Если НЕ РольДоступна("ПолныеПрава") Тогда
                   ЭлементыФормы[мРеквизит.Имя].Доступность = НЕ НайденнаяСтрока.Значение;
               КонецЕсли;
           КонецЕсли;
6 Rie
 
15.01.12
21:03
(3) В самом запросе напиши
ВЫБРАТЬ
...
ЕСТЬNULL(ВложенныйЗапрос.Значение,ЛОЖЬ)