Имя: Пароль:
1C
1С v8
преобразование даты
, ,
0 Маленький Вопросик
 
19.06.15
11:33
Народ, подскажите краткую функцию по преобразованию даты 19.06.15 (строка) в 19.06.2015 (дата), по-умолчанию, преобразует в 19.06.0015??
1 Jokero
 
19.06.15
11:43
добавь потом к дате 2000 лет )))
2 vicof
 
19.06.15
11:43
Сдвиг дат в СКЛ надо использовать
3 Маленький Вопросик
 
19.06.15
11:45
(1) шутка? я тоже об этом думаю
4 Aprobator
 
19.06.15
11:47
не храните дату в строке и будет вам счастье. Строку из даты можно всегда получить. Обратно, чуток посложнее.
5 Aceforg
 
19.06.15
11:51
(3) Не забудь учесть года прошлого столетия. А то получится 2080 года рождения.
6 Nykos
 
19.06.15
11:55
ПолучаемаяДата = Дата(Прав((Лев(СтрокаДата,10)),4) + Сред((Лев(СтрокаДата,10)),4,2) + Лев((Лев(СтрокаДата,10)),2));

xD
7 Aceforg
 
19.06.15
12:02
(6) Попробуй 32.13.15 или 1.1.15
8 vitaliklibra
 
19.06.15
12:15
(0) Попробуйте так:

ПолучаемаяДата = ДобавитьМесяц(Дата(СтрокаДата), 12*2000)
9 vhl
 
19.06.15
12:20
(0) >по-умолчанию, преобразует в 19.06.0015
по какому умолчанию? кто преобразует? какая комманда?

(4) обратно тоже легко.
10 vhl
 
19.06.15
12:25
Функция ДатаИзСтроки(Источник)
    
    //DD.MM.YY hh:mm:ss
    //DD.MM.YYYY hh:mm:ss
        
    Если ТипЗнч(Источник) = Тип("Дата") Тогда
        Возврат Источник;
    КонецЕсли;
    
    Буфер = Источник;
    
    ПозицияТочки = Найти(Буфер, ".");
    
    Если ПозицияТочки = 0 Тогда
        Возврат "Неверный формат строки с датой";
    КонецЕсли;
    
    ЧислоДаты = Лев(Буфер, ПозицияТочки - 1);
    Буфер = Сред(Буфер, ПозицияТочки + 1);
    
    ПозицияТочки = Найти(Буфер, ".");
    
    Если ПозицияТочки = 0 Тогда
        Возврат "Неверный формат строки с датой";
    КонецЕсли;
    
    МесяцДаты = Лев(Буфер, ПозицияТочки - 1);
    
    Буфер = Сред(Буфер, ПозицияТочки + 1);
    
    ПозицияТочки = Найти(Буфер, " ");
    Если ПозицияТочки = 0 Тогда
        ГодДаты = Буфер;
        ЧасДаты = 0;
        МинДаты = 0;
        СекДаты = 0;
    Иначе
        ГодДаты = Лев(Буфер, ПозицияТочки - 1);
        Буфер = Сред(Буфер, ПозицияТочки + 1);
        
        ПозицияТочки = Найти(Буфер, ":");
        ЧасДаты = Лев(Буфер, ПозицияТочки - 1);
        Буфер = Сред(Буфер, ПозицияТочки + 1);
        
        ПозицияТочки = Найти(Буфер, ":");
        МинДаты = Лев(Буфер, ПозицияТочки - 1);
        Буфер = Сред(Буфер, ПозицияТочки + 1);
        
        СекДаты = Сред(Буфер,1);
    КонецЕсли;
    
    Попытка
        Приемник = Дата(?(СтрДлина(ГодДаты) > 2, ГодДаты, Число(?(Число(Лев(ГодДаты, 1)) < 2, "20", "19") + ГодДаты)), Число(МесяцДаты), Число(ЧислоДаты),Число(ЧасДаты),Число(МинДаты),число(СекДаты));
    Исключение
        Возврат "Не удалось преобразовать строку в дату";
    КонецПопытки;
    
    Возврат Приемник;
    
КонецФункции
11 Рэйв
 
19.06.15
12:27
Функция ДатаИзСтрокиВн(СтрокаДата)  Экспорт
    СтрокаДатаДо     =СтрокаДата;
    СтрокаДата        =ПроверитьТолькоЦифрыВн(СтрокаДата);
    
    Если   СтрДлина(СтрокаДата)=6 Тогда
        ДатаИмпорт=СокрЛП(СтрокаДата);
        Год=Прав(ДатаИмпорт,2);
        Если Число(Лев(Год,1))>5 Тогда
            Год="19"+Год;
        Иначе
            Год="20"+Год;
        КонецЕсли;      
        Месяц    =Сред(ДатаИмпорт,3,2);
        День    =Лев(ДатаИмпорт,2);
        Попытка
            Дата80=Дата(Год+Месяц+День);
        Исключение
            Сообщить("Ошибка конвертации даты: '"+ДатаИмпорт+"' -> '"+Год+"."+Месяц+"."+"'");
            Возврат Дата(0);

        Конецпопытки;      
        Возврат Дата80;
        
    ИначеЕсли СтрДлина(СтрокаДата)=8  Тогда
        ДатаИмпорт=СокрЛП(СтрокаДата);
        Год=Прав(ДатаИмпорт,4);
        Месяц    =Сред(ДатаИмпорт,3,2);
        День    =Лев(ДатаИмпорт,2);
        Попытка
            Дата80=Дата(Год+Месяц+День);
        Исключение
            Сообщить("Ошибка конвертации даты: '"+ДатаИмпорт+"' -> '"+Год+"."+Месяц+"."+"'");
            Возврат Дата(0);
        Конецпопытки;      
        Возврат Дата80;
    Иначе    
        Сообщить("Неверный формат переданной строки.  Полученый параметр: '"+СтрокаДатаДо+"'.  Обработанный параметр: "+СтрокаДата);
        Возврат Дата(0);
    КонецЕсли;    
    
    
КонецФункции
12 pin4er
 
19.06.15
12:27
хм... а так не проще?

вот сделай вешнюю обработку и проверяй
1 реквизит "СтрДата" - строка
2 реквизит "НоваяДата" - Дата (ну или датаИвремя)
форма по умолчанию, на выполнить повесь


Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)
    ПолучитьДатуИзСтроки(СтрДата);
КонецПроцедуры

Функция ПолучитьДатуИзСтроки(СтрДата)      
    НоваяДата = Дата("00010101");//или Дата("00010101000000")
    Если ПустаяСтрока(СтрДата) Тогда
        Возврат НоваяДата;
    КонецЕсли;      
    Если Найти(СтрДата,".") > 0 Тогда          
        Если Найти(СтрДата,":") > 0 И Найти(СтрДата," ") > 0 Тогда
            М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрДата," ");
            Возврат ПолучитьДатуИзСтроки(М[0]);
        КонецЕсли;           
        М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрДата,".");         
    ИначеЕсли Найти(СтрДата,"/")>0 Тогда            
        М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрДата,"/");          
    ИначеЕсли Найти(СтрДата,",")>0 Тогда            
        М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрДата,",");        
    ИначеЕсли Найти(СтрДата,"-")>0 Тогда           
        М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрДата,"-");        
    КонецЕсли;      
    Попытка          
        Если М.Количество() = 3 Тогда
            Год = ?(СтрДлина(М[2]) = 2,2000 + М[2],М[2]);
            НоваяДата = Дата(Год,М[1],М[0]);
        ИначеЕсли М.Количество() = 2 Тогда
            Год = ?(СтрДлина(М[1]) = 2,2000 + М[1],М[1]);
            НоваяДата = Дата(Год,М[0],1);
        КонецЕсли;         
    Исключение
    КонецПопытки;     
КонецФункции
13 Рэйв
 
19.06.15
12:27
+

Функция ПроверитьТолькоЦифрыВн(Пар,Режим="Очистка") Экспорт
    Ответ="";
    Для Н=1 По СтрДлина(Пар) Цикл
        Сим=Сред(Пар,н,1);
        Если НЕ(Найти("0123456789", Сим)) Тогда
            Если Режим="Проверка" Тогда
                Возврат Ложь;
            Иначе
                Продолжить;
            КонецЕсли;
        Иначе
            Ответ=Ответ+Сим;
            
        КонецЕсли;    
    КонецЦикла;    
    Если Режим="Проверка" Тогда
        Возврат Истина;
    Иначе
        Возврат Ответ;
    КонецЕсли;    
КонецФункции
14 Маленький Вопросик
 
19.06.15
12:32
вот код! что вы нагородили тут!

дата 19.06.15

ДатаДокМассив   = СтрЗаменить(ДатаДок, ".", Символы.ПС);
            
            ДеньДок         = СтрПолучитьСтроку(ДатаДокМассив,1);
            МесДок             = СтрПолучитьСтроку(ДатаДокМассив,2);
            ГодДок             = Число(СтрПолучитьСтроку(ДатаДокМассив,3));
            
            Если ГодДок<2000 Тогда
                ГодДок = "20"+СтрПолучитьСтроку(ДатаДокМассив,3);
            КонецЕсли;    
            
            ДатаДок1 = ДеньДок+"."+МесДок+"."+ГодДок+ " 0:00:00";
            ДатаДок            = ДатаДок1;
15 pin4er
 
19.06.15
12:33
(14) возми поставь в мой кусок
он тебе вернет 19.06.2015
16 pin4er
 
19.06.15
12:35
(15) можешь и вместо . поставить /,-
и тоже ок будет
17 pin4er
 
19.06.15
12:36
(14) откуда ты знаешь что юзер вместо "." не поставит "," ?
18 pin4er
 
19.06.15
12:38
ОбщийМодуль, общегоНазначения

// Функция "расщепляет" строку на подстроки, используя заданный
//        разделитель. Разделитель может иметь любую длину.
//        Если в качестве разделителя задан пробел, рядом стоящие пробелы
//        считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
//        игнорируются.
//        Например,
//        РазложитьСтрокуВМассивПодстрок(",строка 1,,,строка 2", ",") возвратит массив значений из пяти элементов,
//        три из которых - пустые строки, а
//        РазложитьСтрокуВМассивПодстрок(" строка1   строка 2", " ") возвратит массив значений из двух элементов
//
//    Параметры:
//        Стр -             строка, которую необходимо разложить на подстроки.
//                        Параметр передается по значению.
//        Разделитель -     строка-разделитель, по умолчанию - запятая.
//
//
//    Возвращаемое значение:
//        массив значений, элементы которого - подстроки
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
    
    МассивСтрок = Новый Массив();
    Если Разделитель = " " Тогда
        Стр = СокрЛП(Стр);
        Пока Истина Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = СокрЛ(Сред(Стр,Поз));
        КонецЦикла;
    Иначе
        ДлинаРазделителя = СтрДлина(Разделитель);
        Пока Истина Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = Сред(Стр,Поз+ДлинаРазделителя);
        КонецЦикла;
    КонецЕсли;
    
КонецФункции
19 beaver1971
 
19.06.15
12:39
Добавлю свои пять копеек ))))
    СтраннаяДата = "19.06.15";
    Reg = Новый COMОбъект("VBScript.RegExp");
    Reg.Pattern = "(\d+).(\d+).(\d+)";
    ПравильнаяДата = Дата(Reg.Replace(СтраннаяДата, "20$3$2$1"));
    Сообщить(ПравильнаяДата);
20 pin4er
 
19.06.15
12:40
(19) палец вверх))
21 Nykos
 
19.06.15
13:10
(7) да ладно)
22 Aprobator
 
19.06.15
17:56
Странно, что XML преобразования никто не привёл ещё )))
Ошибка? Это не ошибка, это системная функция.