Имя: Пароль:
1C
1С v8
Перевести строку в дату
0 Savfur
 
09.06.16
11:56
Написал вот такой код, то есть из реквизита Объект.Дата, он берет вот такое значение 31/05/2016 22:22:22, дальше я его пытаюсь перевести, а он пишет ошибку что перевод в дату невозможен, в чем проблема? Может надо сделать парсинг строки, тогда как его сделать?
СДата = Объект.Дата;
СДата = СтрЗаменить(СДата,"/","");
СДата = СтрЗаменить(Сдата,":","");
НДата = Дата(СДата);
1 GROOVY
 
09.06.16
11:57
А, "ОБЪЕКТ.ДАТА" какой тип значения имеет?
2 Savfur
 
09.06.16
11:57
строка
3 GROOVY
 
09.06.16
11:57
И куда ты его "переводишь"?
4 GROOVY
 
09.06.16
11:58
Почему строка? А "Объект" - это что?
5 Savfur
 
09.06.16
11:58
ну я имел ввиду перевожу из типа строки в тип даты
6 В тылу врага
 
09.06.16
11:58
а откуда оно вообще взялось?
7 Timon1405
 
09.06.16
11:58
в 1с это невозможно, расходимся
8 Ёпрст
 
гуру
09.06.16
11:58
(0)

//СДата = Объект.Дата;

//СДата = СтрЗаменить(СДата,"/","");
//СДата = СтрЗаменить(Сдата,":","");
НДата = Дата(СтрЗаменить(Объект.Дата,"/","."));
9 Savfur
 
09.06.16
11:59
ну объект.дата, я так в коде обращаюсь к поле где вписана эта дата
10 GROOVY
 
09.06.16
11:59
Объект - это что?
11 GROOVY
 
09.06.16
12:01
Напиши
а= Объект.Дата + 1;

Ругается при выполнении?
12 Tarlich
 
09.06.16
12:01
(0)возьми  в тип решениях
13 Savfur
 
09.06.16
12:01
Ёпрст, спасибо, получилось
14 Savfur
 
09.06.16
12:02
не знаю почему в одну строчку так получилось, но оно получилось
15 Ёпрст
 
гуру
09.06.16
12:02
(13) такие вещи проверяются за пару секунд в Табло, если че..
16 Tarlich
 
09.06.16
12:04
Функция ПолучитьДатуИзСтроки(Стр)
    Д = Дата("00010101000000");
    Если ПустаяСтрока(Стр) Тогда
        Возврат Д;
    КонецЕсли;

    Если Найти(Стр,".")>0 Тогда

        Если Найти(Стр,":")>0 И Найти(Стр," ")>0 Тогда
            М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр," ");
            Возврат ПолучитьДатуИзСтроки(М[0]);
        КонецЕсли;
        М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,".");
    ИначеЕсли Найти(Стр,"/")>0 Тогда
        М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,"/");
    ИначеЕсли Найти(Стр,",")>0 Тогда
        М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,",");
    ИначеЕсли Найти(Стр,"-")>0 Тогда
        М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,"-");
    КонецЕсли;

    Попытка
        Если М.Количество()=3 Тогда //"01.02.13" или "01.02.2013"
            Год = ?(СтрДлина(М[2])=2,2000+М[2],М[2]);
            Д = Дата(Год,М[1],М[0]);
        ИначеЕсли М.Количество()=2 Тогда //"02.13" или "02.2013";
            Год = ?(СтрДлина(М[1])=2,2000+М[1],М[1]);
            Д = Дата(Год,М[0],1);
        КонецЕсли;
    Исключение
    КонецПопытки;

    Возврат Д;
КонецФункции
17 RomanYS
 
09.06.16
12:04
(11) а каком случае будет ругаться?
строка - не будет,
дата - не будет,
число тем более))
18 aleks_default
 
09.06.16
12:06
(7) что невозможно?
вычисли в отладке  Дата("31.05.2016 0:00:00")
19 lodger
 
09.06.16
12:08
(17) ссылка.
20 RomanYS
 
09.06.16
12:12
(19) это понятно; не понятно, что хотел проверить Павел таким специфическим образом. Я как и он подозреваю, что у ТС изначально тип дата, но он не колется, что же такое объект.
21 GROOVY
 
09.06.16
12:16
(20)Да у него точно это данные формы с реквизитом документ.
22 RomanYS
 
09.06.16
12:52
(21) тогда странно, что у него (8) работает. Если локальный формат с "/", тогда бы не работало.