• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы Дайнеко
  • Дата начала
Д

Дайнеко

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

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

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

unknown181538

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

Дайнеко

Поделитесь, кто-нибудь. А я выложу для преобразования строки в цифру.
 
P

puh14

Была такая функция,брал отсюда

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

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

Дайнеко

Спасибо, спасибо....
М-да.

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

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

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

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

unknown181538

"И, как бы это не обидно для автора выразиться, изяШЧества не хватает."
Предложите свой вариант - сравним)
 
A

alex689ru

В 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);					//  (и определяют последнюю адресуемую точку на оси времени заданного дня)
 
Д

Дайнеко

Придумал. Круто, наверное:
Код:
ДатаСтрока = "01.02.13";

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

Darlock

Ну я попробую внести лепту... не "V77.Application", а "V77.Enterprise"... если верить манам, то этот объект не придирается к виду ключа, лавное, что ключ есть и все.
 
M

-master-

Я смотрю на эту ветку и плакать хоцца, у 1с нет таких понятий как-то конвертирование, форматирование, глобализация в конце концов?
Это что за недосистема, если в ней таких основополагающих вещей нет? ужаснах...
 
U

unknown181538

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

Дайнеко

Я смотрю на эту ветку и плакать хоцца, ...

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

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

Возврат Результат;
КонецФункции
Это меня удовлетворило и остановило от технологи ручного ковыряния.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!