Преобразование В Дату

Тема в разделе "1C и всё что с ней связано", создана пользователем Дайнеко, 24 янв 2013.

  1. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    С удивлением обнаружил проблему. Надо строку преобразовать в Дату.
    А ф-ия Дата("23.01.2013") выдала целое ругалово и ошибку выполнения "Не могу, мол".
    Ладно бы просто дала пустую строку. Почитал описание ф-ии - погрустнел.

    Что делать? Лепить вручную аналог и по-буковкам разбирать строку?

    Кстати, ф-ия Число() такая-же вредная - болезненно относится в нецифровым символам.
    Семерочные были более покладистые.
     
  2. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    "Лепить вручную аналог и по-буковкам разбирать строку?"
    угу...
     
  3. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Поделитесь, кто-нибудь. А я выложу для преобразования строки в цифру.
     
  4. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Была такая функция,брал отсюда http://infostart.ru/public/92455/

    Код ( (Unknown Language)):
    Функция ПолучитьДатуИзСтроки(Стр)
    Д = Дата("00010101000000");
    Если ПустаяСтрока(Стр) Тогда
    Возврат Д;
    КонецЕсли;

    Если Найти(Стр,".")>0 Тогда

    Если Найти(Стр,":")>0 И Найти(Стр," ")>0 Тогда
    М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр," ");
    Возврат ПолучитьДатуИзСтроки(М[0]);
    КонецЕсли;
    М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,".");
    ИначеЕсли Найти(Стр,"/")>0 Тогда
    М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,"/");
    ИначеЕсли Найти(Стр,",")>0 Тогда
    М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,",");
    ИначеЕсли Найти(Стр,"-")>0 Тогда
    М = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,"-");
    КонецЕсли;

    Попытка
    Если М.Количество()=3 Тогда //"01.02.13" или "01.02.2013"
    Год = ?(СтрДлина(М[2])=2,2000+М[2],М[2]);
    Д = Дата(Год,М[1],М[0]);
    ИначеЕсли М.Количество()=2 Тогда //"02.13" или "02.2013";
    Год = ?(СтрДлина(М[1])=2,2000+М[1],М[1]);
    Д = Дата(Год,М[0],1);
    КонецЕсли;
    Исключение
    КонецПопытки;

    Возврат Д;
    КонецФункции
     
  5. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Спасибо, спасибо....
    М-да.

    Однако, все равно спасибо.
    РазложитьСтрокуВМассивПодстрок() - я такой аналог тоже сделал/
    А вот ПолучитьДатуИзСтроки() - пикантно. Это вместо родной Дата()?

    И, как бы это не обидно для автора выразиться, изяШЧества не хватает.

    И тем не мене, спасибо,
    Есть от чего толкнуть.

    Главный результат: я уверился, то надо делать самому.
     
  6. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    "И, как бы это не обидно для автора выразиться, изяШЧества не хватает."
    Предложите свой вариант - сравним)
     
  7. alex689ru

    alex689ru New Member

    Регистрация:
    27 июн 2008
    Сообщения:
    3
    Симпатии:
    0
    В 1С8.2 дата имеет внутренний формат дата+время.
    поэтому чтобы ввести дату в программе, надо указывать дату+время в формате "ГГГГММДДччммсс":
    Код ( (Unknown Language)):
    date1=Дата("20130123000000);     // для 23.01.2013
    date2=Дата("20130123142540);     // для 23.01.2013 14:25:40

    d1=НачалоДня(date1);                 // d1=d2 и равны 23.01.2013 00:00:00
    d2=НачалоДня(date2);                 //  (и определяют первую адресуемую точку на оси времени заданного дня)

    d3=КонецДня(date1);                 // d3=d4 и равны 23.01.2013 23:59:59
    d4=КонецДня(date1);                 //  (и определяют последнюю адресуемую точку на оси времени заданного дня)
     
  8. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Придумал. Круто, наверное:
    Код ( (Unknown Language)):
    ДатаСтрока = "01.02.13";

    Функция ДатаПреобразование(ДатаСтрока)
    connector = Новый COMObject("v77.Application");
    connector.Connect("enterprise /dC:\Base")
    ДатаПравильная = connector.Дата(ДатаСтрока);
    Возврат ДатаПравильная;
    КонецФункции
     
  9. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Хаха)) Да, это круто)
     
  10. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Ну я попробую внести лепту... не "V77.Application", а "V77.Enterprise"... если верить манам, то этот объект не придирается к виду ключа, лавное, что ключ есть и все.
     
  11. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    19
    Я смотрю на эту ветку и плакать хоцца, у 1с нет таких понятий как-то конвертирование, форматирование, глобализация в конце концов?
    Это что за недосистема, если в ней таких основополагающих вещей нет? ужаснах...
     
  12. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    "Я смотрю на эту ветку и плакать хоцца, у 1с нет таких понятий как-то конвертирование, форматирование, глобализация в конце концов?
    Это что за недосистема, если в ней таких основополагающих вещей нет? ужаснах..."
    В целом-то есть. Но вот строку в дату нельзя.
     
  13. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Да не стоит так рыдать. Исследование вопроса показало, что 1С умеет преобразовывать, только немного "своеобразно": требует в исходной строке времени.
    Код ( (Unknown Language)):
    Функция ДатаИзСтроки(ДатаСтрока) Экспорт
    Перем Результат;

    Результат = '00010101';
    Попытка
    Результат = Дата(СокрЛП(ДатаСтрока)+ " 00:00:00");
    Исключение
    КонецПопытки;

    Возврат Результат;
    КонецФункции
    Это меня удовлетворило и остановило от технологи ручного ковыряния.
     
Загрузка...
Похожие Темы - Преобразование Дату
  1. WolfEater
    Ответов:
    0
    Просмотров:
    787
  2. jager
    Ответов:
    1
    Просмотров:
    1.297
  3. PahaStar
    Ответов:
    0
    Просмотров:
    985
  4. PahaStar
    Ответов:
    0
    Просмотров:
    845
  5. ask40
    Ответов:
    0
    Просмотров:
    966

Поделиться этой страницей