Имя: Пароль:
1C
 
Функция ПустоеЗначение()
0 genych
 
23.09.08
11:02
Идет проверка на пустое значение значение типа "Дата". Дата не заполнена ('  .  .  '), а функция возвращает "0". Почему так?
1 birkoFFFF
 
23.09.08
11:03
(0)ты лучше дай кусок кода, чем на пальцах объяснять
2 genych
 
23.09.08
11:08
...
ЗначениеПоляДБФ = ДБФ.ПолучитьЗначениеПоля(ИмяПоля);

Если ПустоеЗначение(ЗначениеПоляДБФ) = 1 Тогда
  ДБФ.УстановитьЗначениеПоля(ИмяПоля, ЗначениеПоля);
  ДБФ.Записать();
Иначе
  Сообщить("""" + ЗначениеПоляДБФ + """. Уже есть значение в поле. Номер записи " + СчСотрудников);
КонецЕсли;
...

В ДБФ значения даты пустые.
3 dk
 
23.09.08
11:10
ЗначениеПоляДБФ = Дата(ДБФ.ПолучитьЗначениеПоля(ИмяПоля));
4 без галстука
 
23.09.08
11:11
а поле ДБФ-а "ТвояДата" случаем не строковое ?
5 birkoFFFF
 
23.09.08
11:12
(2) Пустые или ('  .  .  ') ?
6 birkoFFFF
 
23.09.08
11:13
(4)(3)+1
7 Andy13
 
23.09.08
11:14
Приводить типы значений - хороший тон...
Строка у тебя непустая. Пробелы с точками...
8 genych
 
23.09.08
11:15
Добавил еще строку в модуль:

Сообщить(ТипЗначенияСтр(ЗначениеПоляДБФ));

Результат в окне сообщений:

Дата
"  .  .  ". Уже есть значение в поле. Номер записи 1
9 dk
 
23.09.08
11:22
(8) проверил (3)?
10 genych
 
23.09.08
11:27
Это Дата, никак не Строка. Дата формата '  .  .  ' должна возвращать "1" в функции ПустоеЗначение()?
11 dk
 
23.09.08
11:32
почувствуй разницу
ПустоеЗначение("  .  .  ") = 0
ПустоеЗначение('  .  .  ') = 1
12 genych
 
23.09.08
11:37
ЗначениеПоляДБФ = Дата(ДБФ.ПолучитьЗначениеПоля(ИмяПоля));
От этого ничего не изменилось.

Разницу я чувствую, но здесь вроде с этим никак не связано.
13 dk
 
23.09.08
11:39
дата в ДБФ <> Дата в 1С
14 genych
 
23.09.08
11:41
Но (3) же переводит дату ДБФ в дату 1С.
15 genych
 
23.09.08
11:51
Спасибо большое за помощь. Вот что помогло. :)
ЗначениеПоляДБФ = Дата("'" + ДБФ.ПолучитьЗначениеПоля(ИмяПоля) + "'");
16 genych
 
23.09.08
14:12
Я рано радовался.
ЗначениеПоляДБФ = Дата("'" + ДБФ.ПолучитьЗначениеПоля(ИмяПоля) + "'");
В этом случае всегда возвращается пустое значение.

На данный момент имеем:
1) ЗначениеПоляДБФ = ДБФ.ПолучитьЗначениеПоля(ИмяПоля)  имеет тип Дата
  ЗначениеПоляДБФ = Дата(ДБФ.ПолучитьЗначениеПоля(ИмяПоля))   железно тип Дата
2) ЗначениеПоляДБФ = '  .  .  '  значение пустое
3) ПустоеЗначение(ЗначениеПоляДБФ) = 0

Ничего не понимаю, может кто-нибудь подкинет еще идею.
17 без галстука
 
23.09.08
16:38
(16) прибавь любое число, посмотри на результат.
18 Diman_Kr
 
23.09.08
17:43
Дата(0) попробуй.
19 Дядя Васька
 
23.09.08
18:36
Тут как-то с подобным вопросом целый день бились, оказалось пишет в одной базе, а проверяет в другой :)
20 Cthulhu
 
23.09.08
22:43
Дата из X-base всегда не пустая...
проверяй на ДатаГод(..)=0
21 без галстука
 
24.09.08
11:59
(20) и чему это нечто не пустое равно ?
22 genych
 
24.09.08
12:19
(17) Вот небольшая статистика по прибавлению числа Х. В скобках диапазон Х.
ЗначениеПоляДБФ + (0-1) = '  .  .  '
ЗначениеПоляДБФ + (2-7) = '12.31.-71'
ЗначениеПоляДБФ + 8 = '13.31.-71'
ЗначениеПоляДБФ + (9-17) = '20.31.-71'
ЗначениеПоляДБФ + (18-27) = '21.31.-71'
ЗначениеПоляДБФ + (28-) = '22.31.-71'

(18) Это я уже пробовал (12)

(19) Это не этот случай :)

(20) ДатаГод(ЗначениеПоляДБФ) = 0
Ну как-то совсем не прикольно получается городить огород и вставлять условие типа:

Если ТипПоля = 3 Тогда //Дата
  Если ДатаГод(ЗначениеПоляДБФ) = 0 Тогда
     ...
  КонецЕсли;
Иначе
  Если ПустоеЗначение(ЗначениеПоляДБФ) = 1 Тогда
     ...
  КонецЕсли;
КонецЕсли;

Даже если незаполненная дата в X-Base считается не пустой в 1С, а в 1С выражение ПустоеЗначение('  .  .  ') = 1, то в чем разница, я чего-то не понимаю. %)
23 genych
 
24.09.08
12:20
(17) Вот небольшая статистика по прибавлению числа Х. В скобках диапазон Х.
ЗначениеПоляДБФ + (0-1) = '  .  .  '
ЗначениеПоляДБФ + (2-7) = '12.31.-71'
ЗначениеПоляДБФ + 8 = '13.31.-71'
ЗначениеПоляДБФ + (9-17) = '20.31.-71'
ЗначениеПоляДБФ + (18-27) = '21.31.-71'
ЗначениеПоляДБФ + (28-) = '22.31.-71'

(18) Это я уже пробовал (12)

(19) Это не этот случай :)

(20) ДатаГод(ЗначениеПоляДБФ) = 0
Ну как-то совсем не прикольно получается городить огород и вставлять условие типа:

Если ТипПоля = 3 Тогда //Дата
  Если ДатаГод(ЗначениеПоляДБФ) = 0 Тогда
     ...
  КонецЕсли;
Иначе
  Если ПустоеЗначение(ЗначениеПоляДБФ) = 1 Тогда
     ...
  КонецЕсли;
КонецЕсли;

Даже если незаполненная дата в X-Base считается не пустой в 1С, а в 1С выражение ПустоеЗначение('  .  .  ') = 1, то в чем разница, я чего-то не понимаю. %)
24 genych
 
24.09.08
12:20
(17) Вот небольшая статистика по прибавлению числа Х. В скобках диапазон Х.
ЗначениеПоляДБФ + (0-1) = '  .  .  '
ЗначениеПоляДБФ + (2-7) = '12.31.-71'
ЗначениеПоляДБФ + 8 = '13.31.-71'
ЗначениеПоляДБФ + (9-17) = '20.31.-71'
ЗначениеПоляДБФ + (18-27) = '21.31.-71'
ЗначениеПоляДБФ + (28-) = '22.31.-71'

(18) Это я уже пробовал (12)

(19) Это не этот случай :)

(20) ДатаГод(ЗначениеПоляДБФ) = 0
Ну как-то совсем не прикольно получается городить огород и вставлять условие типа:

Если ТипПоля = 3 Тогда //Дата
  Если ДатаГод(ЗначениеПоляДБФ) = 0 Тогда
     ...
  КонецЕсли;
Иначе
  Если ПустоеЗначение(ЗначениеПоляДБФ) = 1 Тогда
     ...
  КонецЕсли;
КонецЕсли;

Даже если незаполненная дата в X-Base считается не пустой в 1С, а в 1С выражение ПустоеЗначение('  .  .  ') = 1, то в чем разница, я чего-то не понимаю. %)
25 genych
 
24.09.08
12:23
(17) Вот небольшая статистика по прибавлению числа Х. В скобках диапазон Х.
ЗначениеПоляДБФ + (0-1) = '  .  .  '
ЗначениеПоляДБФ + (2-7) = '12.31.-71'
ЗначениеПоляДБФ + 8 = '13.31.-71'
ЗначениеПоляДБФ + (9-17) = '20.31.-71'
ЗначениеПоляДБФ + (18-27) = '21.31.-71'
ЗначениеПоляДБФ + (28-) = '22.31.-71'

(18) Это я уже пробовал (12)

(19) Это не этот случай :)

(20) ДатаГод(ЗначениеПоляДБФ) = 0
Ну как-то совсем не прикольно получается городить огород и вставлять условие типа:

Если ТипПоля = 3 Тогда //Дата
  Если ДатаГод(ЗначениеПоляДБФ) = 0 Тогда
     ...
  КонецЕсли;
Иначе
  Если ПустоеЗначение(ЗначениеПоляДБФ) = 1 Тогда
     ...
  КонецЕсли;
КонецЕсли;

Даже если незаполненная дата в X-Base считается не пустой в 1С, а в 1С выражение ПустоеЗначение('  .  .  ') = 1, то в чем разница, я чего-то не понимаю. %)
26 genych
 
24.09.08
12:23
(17) Вот небольшая статистика по прибавлению числа Х. В скобках диапазон Х.
ЗначениеПоляДБФ + (0-1) = '  .  .  '
ЗначениеПоляДБФ + (2-7) = '12.31.-71'
ЗначениеПоляДБФ + 8 = '13.31.-71'
ЗначениеПоляДБФ + (9-17) = '20.31.-71'
ЗначениеПоляДБФ + (18-27) = '21.31.-71'
ЗначениеПоляДБФ + (28-) = '22.31.-71'

(18) Это я уже пробовал (12)

(19) Это не этот случай :)

(20) ДатаГод(ЗначениеПоляДБФ) = 0
Ну как-то совсем не прикольно получается городить огород и вставлять условие типа:

Если ТипПоля = 3 Тогда //Дата
  Если ДатаГод(ЗначениеПоляДБФ) = 0 Тогда
     ...
  КонецЕсли;
Иначе
  Если ПустоеЗначение(ЗначениеПоляДБФ) = 1 Тогда
     ...
  КонецЕсли;
КонецЕсли;

Даже если незаполненная дата в X-Base считается не пустой в 1С, а в 1С выражение ПустоеЗначение('  .  .  ') = 1, то в чем разница, я чего-то не понимаю. %)
27 genych
 
24.09.08
12:23
(17) Вот небольшая статистика по прибавлению числа Х. В скобках диапазон Х.
ЗначениеПоляДБФ + (0-1) = '  .  .  '
ЗначениеПоляДБФ + (2-7) = '12.31.-71'
ЗначениеПоляДБФ + 8 = '13.31.-71'
ЗначениеПоляДБФ + (9-17) = '20.31.-71'
ЗначениеПоляДБФ + (18-27) = '21.31.-71'
ЗначениеПоляДБФ + (28-) = '22.31.-71'

(18) Это я уже пробовал (12)

(19) Это не этот случай :)

(20) ДатаГод(ЗначениеПоляДБФ) = 0
Ну как-то совсем не прикольно получается городить огород и вставлять условие типа:

Если ТипПоля = 3 Тогда //Дата
  Если ДатаГод(ЗначениеПоляДБФ) = 0 Тогда
     ...
  КонецЕсли;
Иначе
  Если ПустоеЗначение(ЗначениеПоляДБФ) = 1 Тогда
     ...
  КонецЕсли;
КонецЕсли;

Даже если незаполненная дата в X-Base считается не пустой в 1С, а в 1С выражение ПустоеЗначение('  .  .  ') = 1, то в чем разница, я чего-то не понимаю. %)
28 1Сергей
 
24.09.08
12:25
(22-27) Да мы с первого раза поняли, хватит уже
29 genych
 
24.09.08
12:54
(17) Вот небольшая статистика по прибавлению числа Х. В скобках диапазон Х.
ЗначениеПоляДБФ + (0-1) = '  .  .  '
ЗначениеПоляДБФ + (2-7) = '12.31.-71'
ЗначениеПоляДБФ + 8 = '13.31.-71'
ЗначениеПоляДБФ + (9-17) = '20.31.-71'
ЗначениеПоляДБФ + (18-27) = '21.31.-71'
ЗначениеПоляДБФ + (28-) = '22.31.-71'

(18) Это я уже пробовал (12)

(19) Это не этот случай :)

(20) ДатаГод(ЗначениеПоляДБФ) = 0
Ну как-то совсем не прикольно получается городить огород и вставлять условие типа:

Если ТипПоля = 3 Тогда //Дата
  Если ДатаГод(ЗначениеПоляДБФ) = 0 Тогда
     ...
  КонецЕсли;
Иначе
  Если ПустоеЗначение(ЗначениеПоляДБФ) = 1 Тогда
     ...
  КонецЕсли;
КонецЕсли;

Даже если незаполненная дата в X-Base считается не пустой в 1С, а в 1С выражение ПустоеЗначение('  .  .  ') = 1, то в чем разница, я чего-то не понимаю. %)
30 genych
 
26.09.08
15:47
(28) Сорри. Писалось, типо сервер перегружен, попробуйте позже. А в итоге все попытки отправить мессагу сработали. Странно.
31 без галстука
 
26.09.08
18:05
(28) он думает, что здесь горяяяяЯччччччииееееее прибалииииИйскиееееее паааАрнииии :-)
(22) интересно.
(23) очень интересно!
....
(29) хм, такое еще не встречалось... :-)
ты бы отформатировал ГГГГММДД что ли. Хотя 31-й месяц - это что-то.
А что возвращает Число(ЗначениеПоляДБФ) ?
32 без галстука
 
08.10.08
13:31
ап. типа за автора. интересен результат
33 genych
 
09.10.08
11:15
А вот и результаты.

Формат(ЗначениеПоляДБФ, "ДДММГГГГ") = '  .  .  '

Результат = Формат(ЗначениеПоляДБФ + а, ФорматнаяСтрока)
ФорматнаяСтрока1 = "ДДММГГГГ";
ФорматнаяСтрока2 = "ДДММММГГГГ";

а = 0-1     Результат1 = '  .  .  '    Результат2 = '  .  .  '  
а = 2-7     Результат1 = '12.31.-471'  Результат2 = '12 Ф†жs -471 г.'
а = 8       Результат1 = '13.31.-471'  Результат2 = '13 Ф†жs -471 г.'
а = 9-17    Результат1 = '20.31.-471'  Результат2 = '20 Ф†жs -471 г.'

Вот так у нас 31 месяц называется :)
Преобразование обычных чисел в даты как раз и приводит к таким результатам.

Вот результаты преобразования в число.
Число(ЗначениеПоляДБФ) = -1             //Это без прибавлений
ДатаЧислом = Число(ЗначениеПоляДБФ + а) //С прибавлениями
а = 0, ДатаЧислом = -1
а = 1, ДатаЧислом = 0
а = 2, ДатаЧислом = 1
а = 3, ДатаЧислом = 2
ну и т.д.

Похоже получается, что ЗначениеПоляДБФ на самом деле является числом "-1", отсюда и (0), хотя (8).
Непонятно, почему так.
34 без галстука
 
09.10.08
18:23
(33)
формат(Дата(11), "дддммммгггг") = "20 ФЦЮs -471 г."
формат(Дата(101), "дддммммгггг") = "30     -471 г."
Формат(Дата(1001), "дддммммгггг") = "82 Декабрь -471 г."
формат(Дата(10001), "дддммммгггг") = "41  -468 г."
формат(Дата(100001), "дддммммгггг") = "91  -443 г."
формат(Дата(1000001), "дддммммгггг") = "2  -197 г."
формат(Дата(10000001), "дддммммгггг") = "22  2266 г."

получается, что твоё ЗначениеПоляДБФ - чисто числовое значение к типу "Дата" никакого отношения не имеющее.
35 genych
 
10.10.08
15:32
Да, получается, что значение на самом деле числовое, причем имеет конкретное значение = -1. Но вот вопрос почему оно числовое, если ТипЗначенияСтр() дает результат "Дата" и оно вообще не заполнено. Глюк 1С? Получается ПустоеЗначение() работает некорректно в этой ситуации и нужно вводить дополнительную проверку.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший