Имя: Пароль:
1C
1С v8
Переворачивание строки
0 Oz11
 
19.08.11
17:11
Ситуация такова. Есть строка вида "15.05.09" необходимо преобразовать ее в дату, тоесть проблема сводиться к переворачиванию строки и добавлению в ее начало строки "20". Подскажите, как перевернуть строку.
1 lubja
 
19.08.11
17:13
пройтись по строке: до первой точки - число, до второй  минус первая - месяц, а остальное - год
2 unregistered
 
19.08.11
17:16
Год = 2000 + Число(Прав(Строчка, 2));
Месяц = Число(Сред(Строчка, 3, 2));
День = Число(Лев(Строчка, 2));
МояДата = Дата(Год, Месяц, День);
3 zbv
 
19.08.11
17:16
у функции дата есть еще такой синтаксис
Дата(<Год>, <Месяц>, <День>, <Час>, <Минута>, <Секунда>)

чтобы выделить числа поотдельности, тебе помогут:
Найти, Лев, Сред.
4 andrewks
 
19.08.11
17:17
Дата(Лев(5,С)+"20"+Сред(7,С))
5 andrewks
 
19.08.11
17:18
ну, т.е
Дата(Лев(С,5)+"20"+Сред(С,7))

:)
6 unregistered
 
19.08.11
17:21
(4) (5) Тогда уж:

Дата("20"+Прав(С,2)+Сред(С,4,2)+Лев(С,2))
7 andrewks
 
19.08.11
17:22
(6) не-не. просто пятница :)
так надо:

Дата(Лев(С,5)+".20"+Сред(С,7))
8 Oz11
 
19.08.11
17:22
Блин, не поверите, только закончил писать эту тему, как в голову пришло решение, точно такое же как в первом ответе. всем спасибо.
9 vmv
 
19.08.11
17:35
в типовых есть функция

м = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок("15.05.09", ".")
м[0] = ОбщегоНазначения.ПреобразоватьВЧисло(м[0]);
м[1] = ОбщегоНазначения.ПреобразоватьВЧисло(м[1]);
м[2] = ОбщегоНазначения.ПреобразоватьВЧисло(м[2]);

ПолученнаяДата =
Дата((2000+м[2]), м[1], м[0]);

понятно и без геммороя, проверки еще добавить на корректность данных строки.

На производительность плевать при разовых операциях.
10 vmv
 
19.08.11
17:38
тьотки любят писать 1.09.09 и все лев(), сред() летят в трубу
11 Sereja
 
19.08.11
17:38
= Формат(Дата("15.05.09"),"ФорматнаяСтрокаКонструктора") ?
Не ?
12 Sereja
 
19.08.11
17:39
(10) зато прав() прокатывает
13 vmv
 
19.08.11
17:41
12. ты не видел что могут наваять тьотки в экселе, где датой забьют, где строкой в одной колонке, а вариант 1.9.09 тожа прокатывает через Прав()?

на фига парить репу над логикой тьоток если можно эту их "логику" вздуть)
14 zbv
 
19.08.11
17:59
(13) ну тогда еще надо учесть, что вместо "." частенько используют ","
15 vmv
 
19.08.11
18:34
(14)

МойМодуль.РазложитьСтрокуВМассивПодстрокМоя("15.05.09", ".,-/");

Дописать процедуру с проверкой на вхождение разделителя в строку разделетелей - одна строка кода, не скажу какая.

Я считаю, что мое решение наиболее логично и "отказоустойчиво")
16 kuromanlich
 
19.08.11
18:59
(0) однако...
17 Kaushly
 
19.08.11
20:44
ДобавитьМесяц(Дата("15.05.09" + " 00:00:00"), 2000 * 12)
18 IamAlexy
 
19.08.11
21:35
(13) ну так если ты подстилка то сам прежде чем загружать исправишь все в екселе.. а затем же будешь грузить.. ибо в дате 5.7.9 ты хрен поймешь что там твои тьйотки имели ввиду...

может они на западный манер месяц положили в первое число..

нормальный специалист утвердит раз и на всегда формат загружаемых данных и не будет этой х.ней маятся..