Здравствуйте, друзья. Недавно столкнулся с ошибкой.
Конфигурация 1с Предприятие самописная.
При заполнении табличной части вылезает ошибка "Преобразование значения к типу Булево не может выполнено".

```1c
    {Документ.ТабельУчетаРабочегоВремени.Форма.ФормаДокумента.Форма(86)}: Преобразование значения к типу Булево не может быть выполнено
    ИначеЕсли Элементы.Табель.ПодчиненныеЭлементы.Найти("ТабельДень"+?(Лев(Строка(Стр.Дата),1)= "0",Сред(Строка(Стр.Дата),2,1),Лев(Строка(Стр.Дата),2))) Тогда
```

Что посоветуете? Заранее спасибо
---
```1c
    ИначеЕсли Элементы.Табель.ПодчиненныеЭлементы.Найти("ТабельДень"+?(Лев(Строка(Стр.Дата),1)= "0",Сред(Строка(Стр.Дата),2,1),Лев(Строка(Стр.Дата),2))) <> Неопределено Тогда
```
---
```1c
    ИначеЕсли Элементы.Табель.ПодчиненныеЭлементы.Найти("ТабельДень"+?(Лев(Строка(Стр.Дата),1)= "0",Сред(Строка(Стр.Дата),2,1),Лев(Строка(Стр.Дата),2))) <> Неопределено Тогда
```
---
Так вам Элементы.Табель.ПодчиненныеЭлементы.Найти() разве вернет Истина или Ложь?
---
Элементы.Табель.ПодчиненныеЭлементы.Найти("ТабельДень"+?(Лев(Строка(Стр.Дата),1)= "0",Сред(Строка(Стр.Дата),2,1),Лев(Строка(Стр.Дата),2)))
не равно истина или ложь.
Лучше, конечно, в отладчке посмотреть чему равно это значение, но если не очень хочется, то можно сделать так
ИначеЕсли Элементы.Табель.ПодчиненныеЭлементы.Найти("ТабельДень"+?(Лев(Строка(Стр.Дата),1)= "0",Сред(Строка(Стр.Дата),2,1),Лев(Строка(Стр.Дата),2))) = ИСТИНА Тогда
---
а там и в отладчике нечего смотреть - будет возвращен подчиненный элемент по имени которого идет поиск, либо "неопределено", если искомый элемент не найден. Сответственно ни первый ни второй вариант не имеют булевого типа и преобразованы к нему не могут, о чем и говорит система.

То что вы посоветовали будет всегда возвращать ложь, поскольку ни "подчиненный элемент" ни "неопределено" не равно истине и условие никогда не выполнится
---
ну тогда написать <> НЕОПРЕДЕЛЕНО
---
преобразованы к нему не могутмогут, только 1С единственная не может неявно преобразовывать в примитивные типы.
---
вот прямо единственная?
Для примера. Код на C#:

```1c
    public class Foo
    {
    public string Name {get; set;}

    }
    public class Program
    {
    public static void Main()
    {
    Foo foo;
    if(foo){Console.WriteLine("Null");}
    foo = new Foo();
    if(foo){Console.WriteLine("Not Null");}
    }
    }
```

выдает ошибки на оба if:
Cannot implicitly convert type 'Foo' to 'bool'
---
там есть приведение и проверка на переполнение сужающих преобразований. Это если типы ну уж совсем не совместимы, и нужно объяснять компилятору, как одно перевести в другое.
А на уровне платформы сделать преобразование "Значение заполнено/ссылка существует" в Булево - это только в 1С не сделано.
И да, строка - это не Булево, в этом ваш пример "невозможности преобразования" тоже не совсем корректен.
Или объясните, какой из вариантов "строка пустая" и "строка заполнена" - однозначно преобразуется в TRUE. Или нужно считать как TRUE существование самой переменной как тип "Строка"?
---
этот набор букв сложно комментировать. Да и смысла нет.
А на уровне платформы сделать преобразование "Значение заполнено/ссылка существует" в Булево - это только в 1С не сделано.
И да, строка - это не Булево, в этом ваш пример "невозможности преобразования" тоже не совсем корректен.
Взрыв мозга. Где там нашли попытку приведения "строки" к типу Булево? Там как раз первая часть больше подходит.
Если не понимаете конструкции языка C#, то так и скажите.
---
Просто никогда не было такой ошибки за 2 года) и тут бац)
---
Видимо до этого условия первый раз дошло или до этого просто никто не говорил.
---
Значит кто-то что-то изменил в форме
---
Доступ только у меня к конфигурированию)
---
Можешь написать так:
ИначеЕсли ЗначениеЗаполнено(Элементы.Табель.ПодчиненныеЭлементы.Найти("ТабельДень"+?(Лев(Строка(Стр.Дата),1)= "0",Сред(Строка(Стр.Дата),2,1),Лев(Строка(Стр.Дата),2)))) Тогда
---
наверное лучше сделать так
ИначеЕсли не Элементы.Табель.ПодчиненныеЭлементы.Найти("ТабельДень"+?(Лев(Строка(Стр.Дата),1)= "0",Сред(Строка(Стр.Дата),2,1),Лев(Строка(Стр.Дата),2))) = НЕОПРЕДЕЛЕНО Тогда
---
Чем эта Запись лучше (1) или (4)
?
---
Заполнение табеля останавливается у меня из-за этой ошибки..из 100 сотрудников, прогружается только первая половина отдела.
---
Специфичный сотрудник попался.
---
А при чем туту сотрудник...если говорю, что после перезагрузки сервака, заработало заполнение.
---
скорее всего проблема с кэшем была.
---
Спасибо!)
---
Друзья, решилась проблема с помощью с помощью перезагрузки сервера... Мистика...
---
а указанное место будет вызывать ошибку. Проверь в отладке. Лучше переписать.
---
Никогда не пишите в конструкции Если Тогда весь код внутри конструкции, это жесть! Разбейте его на составляющие, и делайте проверку полученных значений переменных, в таком коде черт ногу сломит )))