Имя: Пароль:
1C
1С v8
Перевести Из сроки типа "31.10.12" в Дату
,
0 palpetrovich
 
31.10.12
17:54
Ничего умнее в голову не приходит как:
ДатаИзСтроки = Дата(Лев(СтрокаДата,6) + "20" + Прав(СтрокаДата,2) + " 0:00:00");

Есть другие варианты или не парится?
1 zak555
 
31.10.12
17:55
Дата (2012, 10, 31)
2 drcrasher
 
31.10.12
17:55
распилить на день-месяц-год и собрать Дата(год, месяц, день) не?
3 palpetrovich
 
31.10.12
17:58
(1)(2) а чем это лучше чем (0)?
4 hhhh
 
31.10.12
18:02
(3) ну, разбор строки, а в (1)(2) уже разобрано.
5 acsent
 
31.10.12
18:04
Дата(Стр + " 00:00:00")
6 palpetrovich
 
31.10.12
18:06
(4) все-равно предварительно разбирать, то-ли самостоятельно, то-ли глобальной процедурой
(5) получится 31.10.0012
7 zak555
 
31.10.12
18:07
в (0) не будет даты
8 palpetrovich
 
31.10.12
18:11
() забьем?
9 palpetrovich
 
31.10.12
18:11
(8) -> (7)
10 zak555
 
31.10.12
18:12
(8) кого забивать ?
11 Fragster
 
гуру
31.10.12
18:13
RegExp = Новый COMОбъект("VBScript.RegExp"); // Объект для использования регулярных выражений
RegExp.IgnoreCase = Истина; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Истина; //Многострочный режим

RegExp.Pattern = "(\d{2})\.(\d{2})\.(\d{2})";
Matches = RegExp.Execute(Текст);
Match = Matches.Item(0);
Submatches = Match.Submatches;
Дата("20"+Submatches.Item(3)+Submatches.Item(2)+Submatches.Item(1))
12 Chin
 
31.10.12
18:15
(10) Он не врет... Я сам в шоке...
Помниться раньше (очень давно) выделял год, месяц, день и только так получалась дата, а сейчас только нули приписать, да год в 4-х символьном виде представить и все... До сегодняшнего дня оставался верен этому заблуждению, а теперь вот это: Дата("31.10.2012" + " 0:00:00") реально работает!!! :)
13 palpetrovich
 
31.10.12
18:19
(11) круто :)
спасибо всем
14 Chin
 
31.10.12
18:25
(13) (11) Конечно круто конечно, но все-таки твой вариант наверное попроще будет... :)
15 Fragster
 
гуру
31.10.12
18:29
(14) ну, это кусок кода, который из представления вырезает номер, из него по префиксу "вид операции", дату, а потом делает запрос и получает ссылку, чтобы из "эксельки" или там из отчета какого список документов скопировать и импортнуть в 1с было просто
16 zak555
 
31.10.12
19:17
Массив = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаДата, ".");
ДатаИзСтроки = Дата("20" + Массив[2], Массив[1]? Массив[0]);
17 zak555
 
31.10.12
19:17
вернее так

Массив = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаДата, ".");
ДатаИзСтроки = Дата("20" + Массив[2], Массив[1], Массив[0]);
18 Преднаименование
 
31.10.12
19:29
Функция ПреобразованиеДаты(ДатаСтр0, Колонка, Ош,КрОш)
   Если не ЗначениеЗаполнено(ДатаСтр0) Тогда
       Сообщить("В строке" + Строка +" столбце "+Колонка+" не задано значение", ?(Ош,?(КрОш,СтатусСообщения.ОченьВажное,СтатусСообщения.Внимание),СтатусСообщения.Обычное));
       ЕСли  Ош Тогда
           ЕстьОшибки=Истина;
       КонецЕсли;
       ЕСли  КрОш Тогда
           ЕстьКритическиеОшибки=Истина;
       КонецЕсли;
       
       Возврат Дата(0001,1,1,0,0,0);
   КонецЕсли;
   
   
   ОшбкаДатыввода=Ложь;
   
   ДатаСтр=ДатаСтр0;
   День_Стр=элВыделитьСловоТочка(ДатаСтр);
   Месяц_Стр=элВыделитьСловоТочка(ДатаСтр);
   Год_Стр=элВыделитьСловоТочка(ДатаСтр);
   
   Если СтрДлина(Год_Стр)>4 Тогда
       Если ((КодСимвола(Год_Стр,3)>=48)) и  ((КодСимвола(Год_Стр,3)<=57)) тогда
           Год_Стр = Лев(Год_Стр,4);
       Иначе
           Год_Стр = Лев(Год_Стр,2);
       Конецесли;
   КонецЕсли;
   
   Попытка
       День_Числ=Число(День_Стр);
       Месяц_Числ=Число(Месяц_Стр);
       Год_Числ=Число(Год_Стр);
       Если Год_Числ<100 Тогда
           Если Год_Числ<15 Тогда
               Год_Числ=Год_Числ+2000;
           Иначе
               Год_Числ=Год_Числ+1900;
           КонецЕсли;
       КонецЕсли;
       ДатаВвода=Дата(Год_Числ,Месяц_Числ,День_Числ,0,0,0);
   Исключение
       ОшбкаДатыввода=Истина;
   КонецПопытки;
   
   Если ОшбкаДатыввода Тогда
       ЕСли  Ош Тогда
           ЕстьОшибки=Истина;
       КонецЕсли;
       ЕСли  КрОш Тогда
           ЕстьКритическиеОшибки=Истина;
       КонецЕсли;
       
       ДатаВвода=Дата(0001,1,1,0,0,0);
       Сообщить("В строке" + Строка +" столбце "+Колонка+" не удалось преобразовать значение "+ДатаСтр+ " в дату  ", ?(Ош,?(КрОш,СтатусСообщения.ОченьВажное,СтатусСообщения.Внимание),СтатусСообщения.Обычное));
   КонецЕсли;
   
   Возврат ДатаВвода;
КонецФункции
19 Преднаименование
 
31.10.12
19:30
+(18)
Функция элВыделитьСлово(ИсходнаяСтрока)
   
   Буфер = СокрЛ(ИсходнаяСтрока);
   ПозицияПослПробела = Найти(Буфер, " ");
   
   Если ПозицияПослПробела = 0 Тогда
       ИсходнаяСтрока = "";
       Возврат Буфер;
   КонецЕсли;
   
   ВыделенноеСлово = СокрЛП(Лев(Буфер, ПозицияПослПробела));
   ИсходнаяСтрока = Сред(ИсходнаяСтрока, ПозицияПослПробела + 1);
   
   Возврат ВыделенноеСлово;
   
КонецФункции

Функция элВыделитьСловоТочка(ИсходнаяСтрока)
   
   Буфер = СокрЛ(ИсходнаяСтрока);
   ПозицияПослПробела = Найти(Буфер, ".");
   
   Если ПозицияПослПробела <2 Тогда
       ИсходнаяСтрока = "";
       Возврат Буфер;
   КонецЕсли;
   
   ВыделенноеСлово = СокрЛП(Лев(Буфер, ПозицияПослПробела-1));
   ИсходнаяСтрока = Сред(ИсходнаяСтрока, ПозицияПослПробела + 1);
   
   Возврат ВыделенноеСлово;
   
КонецФункции
20 zak555
 
31.10.12
19:31
(18) что это ?
21 Serg_1960
 
31.10.12
19:32
Это вечернее обострение
22 Преднаименование
 
31.10.12
19:32
(20) Функция, делает из строки дату
23 zak555
 
31.10.12
19:33
(22) смотри в (17)
24 Serg_1960
 
31.10.12
19:34
Тут разговор на тему 22см - кто лаконичнее алгоритм предложит
25 Преднаименование
 
31.10.12
19:36
(23) Это только для двухзначных годов 21 века.

То что дата может быть в прошлом веке не учтено.
В заголовке год четырехзначный.
26 zak555
 
31.10.12
19:37
(25) тогда убрать "20" +
27 Serg_1960
 
31.10.12
19:38
(офф) Самое смешное то, что я помню точно - использовал Дата() для строк, где год указан двумя цифрами... вот только не помню как :)
28 Serg_1960
 
31.10.12
19:42
Тьфу, вспомнил - кажется так:

ДобавитьМесяц(Дата("31.10.12" + " 00:00:00"),2000*12)
29 zak555
 
31.10.12
19:42
(28) см. в (12)
30 Serg_1960
 
31.10.12
19:50
(29) не в тему. Там речь об строке, в которой год - четыре(!) цифры.
31 zladenuw
 
31.10.12
19:56
ех. было бы прикольно.
Но так не работает и не будет работать
ВЫБРАТЬ
   ДатаВремя(ВложенныйЗапрос.Год,ВложенныйЗапрос.Месяц,ВложенныйЗапрос.День)
ИЗ
   (ВЫБРАТЬ
       "20" + ПОДСТРОКА(&x, 7, 2) КАК Год,
       ПОДСТРОКА(&x, 4, 2) КАК Месяц,
       ПОДСТРОКА(&x, 1, 2) КАК День) КАК ВложенныйЗапрос
32 zak555
 
31.10.12
20:06
(28) так надо было сразу писать

Дата("31.10.2012" + " 00:00:00")
33 Chin
 
01.11.12
13:32
(32) Ну у автора на входе код двузначный - что тут поделать?
(28) Интересно было бы проверить по времени, что быстрее отработает (0) или (28), смущает наличие "ДобавитьМесяц".
34 lion11
 
01.11.12
14:07
(34) В (28) гораздо быстрее.
35 Fragster
 
гуру
01.11.12
14:14
(31) не работает
36 takefive
 
01.11.12
14:26
Дата(СтрЗаменить(Дата("31.10.12" + " 00:00:00"),".00",".20"))
37 НЕА123
 
01.11.12
14:42
РазбитаяДата = СтрЗаменить(СтрокаДата,".", Символы.ПС);
ДатаИзСтроки  = Дата(2000+ПОлучитьСтроку(РазбитаяДата,3),
ПОлучитьСтроку(РазбитаяДата,2),
ПОлучитьСтроку(РазбитаяДата,1))
38 НЕА123
 
01.11.12
14:43
*
ПОлучитьСтроку = СтрПолучитьСтроку
39 palpetrovich
 
01.11.12
15:05
(34) откуда "гораздо быстрее"?
спецом проверил, все результаты примерно одинаковы, сделал замеры 3-х вариантов по 3 раза  (0.000114...0.000162)

Процедура КнопкаВыполнитьНажатие(Кнопка)
   ДатаИзСтроки = Дата(Лев("31.10.12",6) + "20" + Прав("31.10.12",2) + " 0:00:00");
КонецПроцедуры

Процедура ОсновныеДействияФормыВыполнить2(Кнопка)
   ДатаИзСтроки = ДобавитьМесяц(Дата("31.10.12" + " 00:00:00"),2000*12);
КонецПроцедуры

Процедура ОсновныеДействияФормыВыполнить3(Кнопка)
   РазбитаяДата = СтрЗаменить("31.10.12",".", Символы.ПС);
   ДатаИзСтроки  = Дата(2000+СтрПолучитьСтроку(РазбитаяДата,1),СтрПолучитьСтроку(РазбитаяДата,2),СтрПолучитьСтроку(РазбитаяДата,3));
КонецПроцедуры
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.