Имя: Пароль:
1C
1С v8
Как надо написать условие?
0 Niel
 
08.10.21
23:23
Доброго времени суток. Пожалуйста, помогите. Как надо написать условие? У меня есть строковая переменная (допустим Текст). В нее попадают разные значения всегда это либо "АБВГДЕЁЖ" либо "20211008", то есть либо только буквы либо цифры, из которых можно сделать дату. Мне надо написать, ЕСЛИ ТЕКСТ-ЭТО ДАТА, то ДЕЙСТВИЕ1 ИНАЧЕ ДЕЙСТВИЕ2. Что надо написать после если? Как и где надо преобразовывать в дату, так чтобы не вылетала ошибка, что "Преобразование значения к типу Дата не может быть выполнено"?
1 Волшебник
 
модератор
08.10.21
23:26
Попытка...Исключение
2 Ненавижу 1С
 
гуру
08.10.21
23:26
Распарсить текст в дату по группам цифр. Если удалось - это дата
3 Niel
 
08.10.21
23:33
спасибо
4 acht
 
08.10.21
23:34
(1) Все бы вам пытаться и исключаться...

Сравнение с "00010101" и ОписаниеТипов.ПривестиТип

https://its.1c.ru/db/v8std/content/499/hdoc пункт 3.8
5 Niel
 
08.10.21
23:44
(4) спасибо большое! очень познавательно.
6 Garykom
 
гуру
08.10.21
23:57
(4) что будет в Значение после кода ниже?

ОписаниеТипа = Новый ОписаниеТипов("Число");
Значение = ОписаниеТипа.ПривестиЗначение("АБВГДЕЁЖ");
7 acht
 
09.10.21
00:10
(6) 0
8 Garykom
 
гуру
09.10.21
00:18
(7) и после

ОписаниеТипа = Новый ОписаниеТипов("Число");
Значение = ОписаниеТипа.ПривестиЗначение("0");

тоже 0?

как минимум неудобно и нужна доп.проверка
логично было бы Неопределено возвращать
9 Garykom
 
гуру
09.10.21
00:19
(8)+ и надо сравнить по скорости с Попытка...Исключение на большом объеме что лучше
10 серый КТУЛХУ
 
09.10.21
00:30
для числа - доп.поверка на равенство строчного представления исходному значению.
правило зеркальной проверки корректности преобразования типов.
11 Garykom
 
гуру
09.10.21
00:36
(10) о и тут прикол с числами, неразрывными пробелами и Формат() да?
12 acht
 
09.10.21
00:53
(11) Нет.
Уже давно "строковое представление анализируется как с учетом региональных установок информационной базы, так и без их учета."

    ЧислоСтрокой = Строка(1024);
    Сообщить(СтрДлина(ЧислоСтрокой));

    Описание = Новый ОписаниеТипов("Число");
    Число = Описание.ПривестиЗначение(ЧислоСтрокой);
    Сообщить(XMLСтрока(Число));

Выводит:
5
1024
13 acht
 
09.10.21
00:55
(9) При успешном преобразовании - одинаково. При промахе - исключение медленнее
14 acht
 
09.10.21
00:56
Я удивлен, что на GO это не так.
15 Garykom
 
гуру
09.10.21
00:57
(12) я про "доп.поверка на равенство строчного представления исходному значению"

и будет прикол что XMLСтрока(Число)<>"1024"
16 Garykom
 
гуру
09.10.21
00:57
(15) тьфу Строка(Число)<>"1024"
17 Garykom
 
гуру
09.10.21
00:59
а юзать XMLСтрока вместо Формат идея да
18 acht
 
09.10.21
01:03
(15) На самом деле надо проверить ровно одно значение. Нулевое. Причем перед применением описания типов.

Ты, конечно, можешь впасть еще в рассуждения про "+0", "-0", "0.0" и.т.п
19 Garykom
 
гуру
09.10.21
01:06
(18) нене в 1С этого нет в отличие от Java
20 Garykom
 
гуру
09.10.21
01:08
я просто удивился нелогичности функции ПривестиЗначение
как в случае составного тоже какой то изврат
21 Aleksey
 
09.10.21
01:12
(11) или когда на входе что то типа 1,275.00 - с точки зрения человека это число 1275, с точки зрения машины это 1
22 Garykom
 
гуру
09.10.21
01:18
(21) а вот это к чему я пытался плавно подвести
что надо свой правильный парсер писать
ибо готового в котором можно указать некий шаблон нету же?
23 skafandr
 
09.10.21
08:31
Извините что вмешиваюсь в высокотехнологичные споры, но
если ТЗ в (0) сформулировано точно, то достаточно
Если Лев(Текст,1) ="2" Тогда
24 Niel
 
09.10.21
09:59
всем огромное спасибо
25 GANR
 
09.10.21
11:21
СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке