Имя: Пароль:
1C
 
Функция, возвращающая булево.
0 Барабашка серверная
 
07.04.08
22:50
Описал функцию:

Функция Проверка()
    Перем Результат;  
       Если
               Дата <> ДатаДок; // для примера
       Тогда
               Возврат Результат = Ложь;
       Иначе
               Возврат Результат = Истина;
       КонецЕсли;        
КонецФункции

При вызове в соседней процедуре получаю ошибку "Преобразование значения к типу Булево не может быть выполнено". Вызываю функцию так:
Если НЕ Проверка() Тогда

Какие-то простые грабли, но не могу понять какие.
1 zbv
 
07.04.08
22:53
Для примера:

Функция Проверка()

   Возврат Дата = ДатаДок;

КонецФункции
2 Барабашка серверная
 
07.04.08
22:58
Ха! Заработало, когда я переправил "Если НЕ..." на
Если Проверка() = Ложь Тогда
Хм.
(1) Ошибка не в самой функции, а в вызове.
3 zyto
 
07.04.08
23:11
Эт чего за строчка такая страшная???
Возврат Результат = Ложь;
Результат у тебя здесь = Неопределено
Вот он пытается Булево (Истина/Ложь) совместить с этим неопределно, вот ошибку и выдаёт.

Надо писать так:
Функция Проверка()  
       Если Дата <> ДатаДок Тогда
               Возврат Ложь;
       Иначе
               Возврат Истина;
       КонецЕсли;        
КонецФункции
А потом уже...
Если НЕ Проверка() Тогда
4 Jolly Roger
 
07.04.08
23:13
Точно барабашка...
5 TamerlanDE
 
07.04.08
23:14
(2) Проанализируем твою функцию:

Функция Проверка()
    Перем Результат;  

Переменная результат имеет значение Неопределено

       Если
               Дата <> ДатаДок; // для примера

";" -  косяк, но это неважно

        Тогда
               Возврат Результат = Ложь;
       Иначе
               Возврат Результат = Истина;
       КонецЕсли;        
КонецФункции

Сравнение типов Булево и Неопределено вернет Ложь, независимо от значения переменой типа Булево.
Получается, функция будет все время возвращать Ложь.
6 TamerlanDE
 
07.04.08
23:28
(4) Пускай барабашка, зато не дятел. )))
7 Барабашка серверная
 
08.04.08
00:01
(5) Я не понял, где сравнивается Неопределено и Булево?
8 1Cко
 
08.04.08
00:04
Вообщем так: (резюмирую)
Функция Проверка()
    Перем Результат;  
       Если
               Дата <> ДатаДок // для примера

       Тогда
               Возврат Ложь;
       Иначе
               Возврат Истина;
       КонецЕсли;        
КонецФункции
9 Asmody
 
модератор
08.04.08
00:05
(7) там, где ты не инициализируешь переменную
10 zcxvb
 
08.04.08
00:07
(7) Не сношай голову... :)
В (1), вариант намного более кошерный, в контексте 1С...
Вернет тебе, единичку или нолик. Что и есть, чертово "булево".
11 Wladimir_spb
 
08.04.08
00:09
(6) Только не надо торопиться с выводами)
(7) Какой тип у переменной Результат?
(8) А теперь посмотри (1)...
12 Барабашка серверная
 
08.04.08
00:22
Да не, я уже сделал. Заработало.
(10) Может и кошерный, но у меня там больше условий. Я дату вставил для примера, чтобы наглядней и короче было.
(11) Тип у переменной Результат = Неопределено, я это знаю. Да эта переменная и не нужна совсем. Я сначала написал код как в (3), но т.к. не понял где ошибка, грешил на синтаксис функции, а проблема была не в этом. Проверил отладчиком и понял в чем дело. Вопрос возник исключительно в силу того, что это моя первая функция в 1С.