Имя: Пароль:
1C
1С v8
Как из строки "Март 2012" получить Дату?
0 ProgaN
 
05.04.12
07:00
Как строку "Март 2012" привести к типу Дата с минимальным количеством строк кода (наиболее оптимально)?
1 Рэйв
 
05.04.12
07:06
Дат=Дата(Число(Прав("Март 2012",4)),1,1,0,0,0);
2 Рэйв
 
05.04.12
07:07
вернее
Дат=Дата(Число(Прав("Март 2012",4)),3,1,0,0,0)
3 Cube
 
05.04.12
07:08
(0) 1). Отрезаешь последние 4 символа.
2). Удаляешь пробелы в начале и конце.
3). Сравниваешь полученную строку со строками "Январь", "Февраль" и т.д., получаешь номер месяца.
4). А потом СП:
Синтаксис:

Дата(<Год>, <Месяц>, <День>, <Час>, <Минута>, <Секунда>)
Параметры:

<Год> (обязательный)

Тип: Число.
Год даты.
<Месяц> (обязательный)

Тип: Число.
Месяц даты.
<День> (обязательный)

Тип: Число.
День даты.
<Час> (необязательный)

Тип: Число.
Час даты.
<Минута> (необязательный)

Тип: Число.
Минута даты.
<Секунда> (необязательный)

Тип: Число.
Секунда даты.
4 Chai Nic
 
05.04.12
07:09
---
Если Строка="Март 2012" тогда
  ЗначениеДата=Дата(2012,3,1)
КонецЕсли
---
Задача выполнена :)
5 Cube
 
05.04.12
07:09
(4) Зачет!))
6 ptrtss
 
05.04.12
07:13
Во, я тоже написал вариант


Месяцы = Новый Соответствие;
Для н = 1 по 12 Цикл
   Месяцы[Формат(Дата(1, н, 1), "ДФ=ММММ")] = н;
КонецЦикла;
Дата(Сред(Строка, Найти(Строка, " ") + 1), Месяцы[Лев(Строка, Найти(Строка, " ") - 1)], 1);
7 МастерВопросов
 
05.04.12
07:13
в типовых же есть уже написанная фунция ПолучитьДатуИзСтроки() как то так...
8 ProgaN
 
05.04.12
07:16
Не воспринимайте условия задачи буквально. )))
Конечно, "март 2012" - это пример. То есть в строке месяц и год строкой через пробел.
9 ProgaN
 
05.04.12
07:18
(7) Не подходит
// Возвращает дату из строки в формате ЧЧ.ММ.ГГГГ
//
Функция ПолучитьДатуИзСтроки(Строка) Экспорт
   
   Возврат Дата(Сред(Строка, 7, 4)+Сред(Строка, 4, 2)+Лев(Строка, 2));
   
КонецФункции
10 МастерВопросов
 
05.04.12
07:19
(7)
// Предназначена для реализации "произвольного" ввода даты-месяца
// подбирает по переданному тексту строку-представление даты или список таких строк
// в переданный параметр ДатаПоТексту возвращает подобранную по тексту дату
Функция ДатаКакМесяцПодобратьДатуПоТексту(Текст, ДатаПоТексту = НеОпределено) ЭКспорт
   СписокВозврата = Новый СписокЗначений;
   ТекущийГод = Год(ТекущаяДата());
   
   Если ПустаяСтрока(Текст) Тогда
       Возврат СписокВозврата;
   КонецЕсли;
   Если Найти(Текст, ".") <> 0 Тогда
       Подстроки = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Текст, ".");
   ИначеЕсли Найти(Текст, ",") <> 0 Тогда
       Подстроки = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Текст, ",");
   ИначеЕсли Найти(Текст, "-") <> 0 Тогда
       Подстроки = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Текст, "-");
   ИначеЕсли Найти(Текст, "/") <> 0 Тогда
       Подстроки = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Текст, "/");
   ИначеЕсли Найти(Текст, "\") <> 0 Тогда
       Подстроки = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Текст, "\");
   Иначе
       Подстроки = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Текст, " ");
   КонецЕсли;
   Если Подстроки.Количество() = 1 Тогда
       // единственное слово - пытаемся получить месяц
       Если ОбщегоНазначения.ТолькоЦифрыВСтроке(Текст) Тогда
           МесяцЧислом = Число(Текст);
           Если МесяцЧислом >= 1 и МесяцЧислом <=12 Тогда
               ДатаПоТексту = Дата(ТекущийГод, МесяцЧислом, 1);
               Если СтрДлина(Текст) = 1 Тогда
                   СписокВозврата.Добавить(Формат(ДатаПоТексту, "ДФ='М/гг'"));
               Иначе
                   СписокВозврата.Добавить(Формат(ДатаПоТексту, "ДФ='ММ/гг'"));
               КонецЕсли;
           Иначе
               Возврат СписокВозврата;
           КонецЕсли;                
       Иначе
           СписокМесяцев = СписокМесяцевПоСтроке(Текст);
           Для Каждого Месяц Из СписокМесяцев Цикл
               ДатаПоТексту = Дата(ТекущийГод, Месяц, 1);
               СписокВозврата.Добавить(Формат(ДатаПоТексту, "ДФ='ММММ гг'"));
           КонецЦикла;
       КонецЕсли;
   ИначеЕсли Подстроки.Количество() = 2 Тогда
       // два слова - первое считаем месяцем, второе - годом
       Если ОбщегоНазначения.ТолькоЦифрыВСтроке(Подстроки[1]) Тогда
           Если ПустаяСтрока(Подстроки[1]) Тогда
               ГодЧислом = 0;
               Подстроки[1] = "0";
               ТекстВозврата = Текст + "0";
           Иначе
               ГодЧислом = Число(Подстроки[1]);
               ТекстВозврата = "";
           КонецЕсли;
           Если ГодЧислом > 3000 Тогда
               Возврат СписокВозврата;
           КонецЕсли;
           Если СтрДлина(Подстроки[1]) <= 1 Тогда
               ГодЧислом = Число(Лев(Формат(ТекущийГод, "ЧГ="), 3) + Подстроки[1]);
               СтрокаФорматированияГода = "г";
           ИначеЕсли СтрДлина(Подстроки[1]) = 2 Тогда
               ГодЧислом = Число(Лев(Формат(ТекущийГод, "ЧГ="), 2) + Подстроки[1]);
               СтрокаФорматированияГода = "гг";
           ИначеЕсли СтрДлина(Подстроки[1]) = 3 Тогда
               ГодЧислом = Число(Лев(Формат(ТекущийГод, "ЧГ="), 1) + Подстроки[1]);
               СтрокаФорматированияГода = "гггг";
           КонецЕсли;                    
       Иначе
           // второе слово может быть только годом
           Возврат СписокВозврата;
       КонецЕсли;                
       Если ОбщегоНазначения.ТолькоЦифрыВСтроке(Подстроки[0]) Тогда
           МесяцЧислом = Число(Подстроки[0]);
           Если МесяцЧислом >= 1 и МесяцЧислом <= 12 Тогда
               // если "правильный" месяц и год
               ДатаПоТексту = Дата(ГодЧислом, МесяцЧислом, 1);
               СписокВозврата.Добавить(ТекстВозврата);
           Иначе
               Возврат СписокВозврата;
           КонецЕсли;                
       Иначе
           СписокМесяцев = СписокМесяцевПоСтроке(Подстроки[0]);
           Если СписокМесяцев.Количество() = 1 Тогда
               ДатаПоТексту = Дата(ГодЧислом, СписокМесяцев[0], 1);
               СписокВозврата.Добавить("");
           Иначе
               Для Каждого Месяц Из СписокМесяцев Цикл
                   ДатаПоТексту = Дата(ГодЧислом, Месяц, 1);
                   СписокВозврата.Добавить(Формат(Дата(ГодЧислом, Месяц, 1), "ДФ='ММММ гг'"));
               КонецЦикла;
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   Возврат СписокВозврата;
КонецФункции
11 ProgaN
 
05.04.12
07:40
все спасибо!
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.