1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

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

Тема в разделе "Базы данных и администрирование", создана пользователем Дайнеко, 24 янв 2013.

  1. Дайнеко

    Дайнеко Well-Known Member

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

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

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

    unknown181538 НеГуру

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

    Дайнеко Well-Known Member

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

    puh14 Well-Known Member

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

    Код:
    Функция ПолучитьДатуИзСтроки(Стр)
    Д = Дата("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

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

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

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

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

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

    unknown181538 НеГуру

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

    alex689ru New Member

    Репутация:
    0
    Регистрация:
    27 июн 2008
    Сообщения:
    3
    Симпатии:
    0
    В 1С8.2 дата имеет внутренний формат дата+время.
    поэтому чтобы ввести дату в программе, надо указывать дату+время в формате "ГГГГММДДччммсс":
    Код:
    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

    Репутация:
    0
    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Придумал. Круто, наверное:
    Код:
    ДатаСтрока = "01.02.13";
    
    Функция ДатаПреобразование(ДатаСтрока)
    connector = Новый COMObject("v77.Application");
    connector.Connect("enterprise /dC:\Base")
    ДатаПравильная = connector.Дата(ДатаСтрока);
    Возврат ДатаПравильная;
    КонецФункции
     
  9. unknown181538

    unknown181538 НеГуру

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

    Darlock Well-Known Member

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

    -master- Well-Known Member

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

    unknown181538 НеГуру

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

    Дайнеко Well-Known Member

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

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