Имя: Пароль:
1C
 
Как записать логическое значение в dbf файл
0 Ясный перец
 
27.02.11
15:10
Создаю средствами 1С dbf-файл.
Одно из полей имеет логический тип.
Не могу понять, как правильно присвоить логическое значение (.T. или .F.) полю dbf-файла.
Помогите советом, плиз. Срочно нужно.
1 DGorgoN
 
27.02.11
15:11
True = истина
False = Ложь
2 Ясный перец
 
27.02.11
15:17
Спасибо, это понятно.
В языке 1С 77 разве есть значения булева типа?
По-моему нет.

Уточню:
в структуру базы добавляю поле
ДБФМн.ДобавитьПоле("Ext","L",,);

Хочу присвоить значение True, например.
Как это написать?
ДБФМн.Ext = ????
3 G-Re
 
27.02.11
15:22
(2) Logical не поддерживается XBase.
Записывай или 1 - 0 или -1 - 0 или еще как-нибудь в стандартные типы (Число, символ) данных.
4 miki
 
27.02.11
15:23
>>В языке 1С 77 разве есть значения булева типа?
По-моему нет.

Вы заблуждаетесь, либо путаете с memo/blob
5 Ясный перец
 
27.02.11
15:23
Люди, подскажите, плиз
Срочно нужно
(я уже поиски и ЖКК мусолю параллельно - нет ответа) :(
6 aka AMIGO
 
27.02.11
15:25
(2) ну, разве что 1 и 0 для обозначения состояния флажка - элемента диалога - остальное рукотворное.. Например, в одной из прог (самопальных, если чо..) есть перечисление "Булево" и два значения - Да и Нет
можно модифицировать, если хочется, и применять, если понадобится.
конфа - давнииишняя, изначально была "Торговля", так и осталась..
в других 7-рочных не встречал.
достаточно функций ВЯ..

ЗЫ, всё ИМХО!
7 Ясный перец
 
27.02.11
15:25
(4) Да, 1С не поддерживает создание полей memo.
Но не о них речь. И даже не о том заблуждаюсь я или нет.
Просто подскажите как записать:

ДБФМн.Ext = ????

(здесь ДБФМн - объект xBase)
8 Ясный перец
 
27.02.11
15:27
(6) Спасибо. Про Перечисление Булево тоже наслышан (и даже щупал), но это немного не та тема.
9 G-Re
 
27.02.11
15:31
(7) Да так и написать, например
Если Нечто Тогда
ДБФМн.Ext = 1;
Иначе
ДБФМн.Ext = 0;

Или

ДБФМн.Ext =?(Условие,1,0);

Да как хочешь.
10 Ясный перец
 
27.02.11
15:33
(9) Спасибо. Сейчас попробую...
11 Ясный перец
 
27.02.11
15:35
Спасибо всем поучаствовавшим.
И особенно G-Re. Ваш совет помог.

Извините меня за тупость - это временно :)
12 G-Re
 
27.02.11
15:40
(11) Это не тупость, это просто временное помутнение разума. Тупости даже в  вопросах не наблюдалось. Успехов!
13 miki
 
27.02.11
15:42
(11)Ты же, надеюсь, 0/1 в Logical записал?
Или ты про совет из (3)?
14 Ясный перец
 
27.02.11
15:47
(13) Дабы не оставлять вас в сомнениях поясню: воспользовался советом из (9)
15 Torquader
 
27.02.11
16:36
(14) Вообще-то, со стороны 1С значение Logical, которое в ADO есть True в 1С будет -1, а False - будет 0.
16 VasilyKushnir
 
27.02.11
18:50
После (1) ветку смело можно было закрывать.
True = истина
False = Ложь
True = 1
False = 0 (или все что угодно, кроме 1)
17 Torquader
 
27.02.11
19:02
(16) На самом деле "умная" ADO, например, считает, что FALSE=0, а всё, что не ноль - это TRUE!
18 VasilyKushnir
 
27.02.11
19:05
(17) Можно и так, только надо по диагонали хотя бы АДО просмотреть :-)))
19 miki
 
27.02.11
19:05
(16)False - _только_ 0. Всё остальное - True.
20 Cthulhu
 
27.02.11
19:15
(19): ну зависит от.. в общем случае -1 - всегда true.
21 Torquader
 
27.02.11
20:18
(20) В общем случае, всё зависит от реализации, но обычно, если используется логическое поле, то выполняется сравнение (не 0), то есть 0 всегда будет False.
Что касается -1, то если используется арифметическое дополнение, то при преобразовании бита в байт (признак знака обычно включён), мы получаем -1 (то есть все установленные единицы).
Что касается самого DBF-файла, то там логический тип мало чем отличается от типа CHAR(1), то есть за исключением проверки на два возможных значения.
Не удивлюсь, что символ получается как
"FT"[LogicalValue&1]
то есть наиболее быстрая операция.
Ошибка? Это не ошибка, это системная функция.