Имя: Пароль:
1C
1С v8
Строка в дату
0 Юзер123
 
naïve
29.06.15
09:53
Доброго времени.

Подскажите как строку 25 мая  преобразовать в дату.

Данные читаются из Эксель файла.

И если преобразовать не получается то выдает ошибку и файл остается открыт. как это можно обойти чере "Попытка" ?

спасибо
1 Ненавижу 1С
 
гуру
29.06.15
09:54
25 мая 2015 года или 25 мая 1917 года?
2 zak555
 
29.06.15
09:55
Если Найти(ВРЕГ(Стр), "МАЯ") > 0 Тогда
   Месяц = 5;
КонецЕСли;
3 1Сергей
 
29.06.15
09:56
(2) +

Если Найти(ВРЕГ(Стр), "25 МАЯ") > 0 Тогда
   День = 25;
   Месяц = 5;
КонецЕСли;
4 samozvanec
 
29.06.15
09:57
(0) там прям строка, ты валуё смотришь?
5 МаксимМП23
 
29.06.15
09:57
(0) Я бы лучше предварительно подготовил экселевский файл, чтобы дата там была в удобном формате. Благо это не сложно.
6 newbling
 
29.06.15
09:57
(2) лучший вариант. Перебираешь 12 вариантов и всё. А год и дата просто берётся через лев() и прав()
7 samozvanec
 
29.06.15
09:58
+(4) экселька же сама умеет, формулой там колонку сделай, и с нее читай
8 Юзер123
 
naïve
29.06.15
10:02
(4) да.  

Экчель кривой. Я понимаю что надо в норм формат привести колонку в Экселе.   Но что бы у юзера было меньше проблем с закрытием файла через диспетчер задач надо или по ошибке эксель закрывать или даты шаманить.
9 samozvanec
 
29.06.15
10:07
(8) а что не так с попыткой? в исключении формируй протокол несоответствия форматы загрузки, потом ексель закрывай и тыкай юзера носом
10 Ildarovich
 
29.06.15
10:07
Вот в этой статье в разделе 13 приведена функция для преобразования строки в дату по форматной строке, которая умеет работать с датами, где месяц записан прописью (ММММ). Функция имеет вид

Функция СтрокаВДату(Знач ФорматДаты, Знач Дано, Ошибка = Ложь) Экспорт
    Попытка
        ё = Формат('00010101', "ДФ=" + ФорматДаты) // - необязательная проверка первого правильности параметра
    Исключение
        Ошибка = Истина;
        Возврат '00010101'
    КонецПопытки;
    Ч = Новый Соответствие;
    Для ё = 1 По СтрДлина(ФорматДаты) + 7 Цикл
        Ч[Сред(ФорматДаты + "dMyHhms", ё, 1)] = 0    // - инициализация частей даты
    КонецЦикла;
    Для ё = 1 По 12 Цикл
        Дано = СтрЗаменить(Дано, Формат(Дата(1, ё, 1), "ДФ=MMММ"), Формат(ё, "ЧЦ=4; ЧВН=")); // - замена названий месяцев числами
        Дано = СтрЗаменить(Дано, Формат(Дата(1, ё, 1), "ДФ=MMМ" ), Формат(ё, "ЧЦ=3; ЧВН="))
    КонецЦикла;
    Для ё = 1 По СтрДлина(ФорматДаты) Цикл
        Ч[Сред(ФорматДаты, ё, 1)] = 10 * Ч[Сред(ФорматДаты, ё, 1)] + Найти("123456789", Сред(Дано, ё, 1)); // - накопление частей даты
        Ошибка = Ошибка ИЛИ Найти("dMyHhms", Сред(ФорматДаты, ё, 1)) И НЕ Найти("0123456789", Сред(Дано, ё, 1)) // - необязательная проверка на цифры
    КонецЦикла;
    Ч["y"] = Ч["y"] + ?(Ч["y"] < 50, 2000, ?(Ч["y"] < 100, 1900, 0)); // - дополнение двух цифр года до четырех
    Попытка
        Возврат Дата(Ч["y"], Ч["M"], Ч["d"], Ч["H"] + Ч["h"], Ч["m"], Ч["s"])
    Исключение
        Ошибка = Истина;
        Возврат '00010101'
    КонецПопытки
КонецФункции
11 samozvanec
 
29.06.15
10:07
(9) формату*
12 Ildarovich
 
29.06.15
10:09
+(10) вот в этой статье http://catalog.mista.ru/public/306536/ в разделе 13
13 Юзер123
 
naïve
29.06.15
10:09
короче. Сделал через попытку до цикла по экселю. если ошибка -  пропускает продолжает.  Ковырять корявый файл не буду.  спс всем за ответы.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший