Имя: Пароль:
1C
1С v8
Как получить из строки дату
0 TolikoSprosit
 
16.10.17
13:54
Есть строка "09 августа 2017 г.". Как получить из нее дату?
Возможно это?
1 Ёпрст
 
гуру
16.10.17
13:55
(0) Вам - нет
2 Волшебник
 
модератор
16.10.17
13:55
парсинг нужен
3 Numerus Mikhail
 
16.10.17
13:57
Возможно
4 Fish
 
гуру
16.10.17
13:57
(0) Возможно, а в чём проблема?
5 mehfk
 
16.10.17
13:58
(0) Если мояСтрока = "09 августа 2017 г." Тогда
мояДата = Дата(2017,08,09);
КонецЕсли;
6 Dotoshin
 
16.10.17
13:58
(4) Судя по вопросу проблема в том как это сделать вообще в принципе...
7 Dotoshin
 
16.10.17
14:00
(0) Поди-ка из экселя что-то загружаешь?
8 Numerus Mikhail
 
16.10.17
14:01
(5) Спасибо, то что нужно.
9 TolikoSprosit
 
16.10.17
14:43
(1) Что не так?
10 TolikoSprosit
 
16.10.17
14:43
(7) (6) Да
11 TolikoSprosit
 
16.10.17
14:44
(3) Как
12 TolikoSprosit
 
16.10.17
14:44
Вопрос в том, есть ли в 1с что-то вроде "Формат" наоборот?)
13 TolikoSprosit
 
16.10.17
14:45
ну или хотя бы месяц из строки в число не Если стр = "августа" тогда 8..
14 Numerus Mikhail
 
16.10.17
14:45
(11) Для начала определим, всегда ли дата в таком формате. Будет ли потом что-то типа "пятое 03 2017 года" или всегда по шаблону? Откуда загружаете? Может вам и не надо
15 TolikoSprosit
 
16.10.17
14:46
(14) Дата будет всегда в таком формате.
16 Numerus Mikhail
 
16.10.17
14:47
(13) Если СтрНайти(НРЕГ(Строка), "январ") Тогда 01
ИначеЕсли СтрНайти(НСТР(Строка), "феврал") Тогда 02
ИначеЕсли СтрНайти(НСТР(Строка), "март") Тогда 03

ну и так все 12 месяцев
17 Numerus Mikhail
 
16.10.17
14:48
(15) Если все-таки полная дата нужна, то разбиваешь на массив подстрок. Число у тебя цифрой, месяц как в (16) получаешь, год тоже цифрой. Легчайшая задача.
18 TolikoSprosit
 
16.10.17
14:50
(16) (17) Не самое элегантное решение, хочется что-то от команды Нуралиева)

Но если ничего не найдется, так и будет.
19 Aleksey
 
16.10.17
14:50
(16) проще список с месяцами строкой составить. И далее найти в списке и ты получишь нужный номер месяца
20 aka AMIGO
 
16.10.17
14:50
1. мояСтрока = "09 августа 2017 г.";
Если Найти(мояСтрока, "Янв") Тогда
   нужныймесяц=1;
...
ИначеЕсли Найти(мояСтрока..
...

2. СЗ= Новый "СписокЗначений" (или как там у вас в 8-ке)
СЗ.ДобавитьЗначение("янв");
...
СЗ.добавитьЗначение("авг");
... //и так 12 раз

Дальше - искать в СЗ, вернуть номер позиции
21 aka AMIGO
 
16.10.17
14:52
(18) Команда Нуралиева не предоставила решения твоей задачи.
22 Aleksey
 
16.10.17
15:00
НачДата = Дата(2017,01,01);
нужныймесяц=0;
Пока не Найти(Формат(НачДата,"D ДФ=MMММ"),мояСтрока) Цикл
  нужныймесяц=нужныймесяц+1;
  НачДата = ДобавитьМесяц(НачДата);
КонецЦикла;
23 Ёпрст
 
гуру
16.10.17
15:02
(22) Найти число возвращает
24 Ёпрст
 
гуру
16.10.17
15:05
ну и
Формат(Дата(2017,01,01),"ДФ=MMММ") = Январь
а не январЯ
25 TolikoSprosit
 
16.10.17
15:11
(23) Но "найти" отрботает)
26 Dotoshin
 
16.10.17
15:14
(10) А не проще сначала в экселе преобразовать дату в удобоваримый формат, а потом загружать из него?
27 TolikoSprosit
 
16.10.17
15:17
(26) Там не дата, а строка) была бы дата, проблем бы не было.
28 TolikoSprosit
 
16.10.17
15:17
Функция ПолучитьНомерМесяца(Строка)
    
    МассивМесяцев = Новый Массив;
    
    МассивМесяцев.Добавить("Январ");
    МассивМесяцев.Добавить("Феврал");
    МассивМесяцев.Добавить("Март");
    МассивМесяцев.Добавить("Апрел");
    МассивМесяцев.Добавить("Май");;
    МассивМесяцев.Добавить("Июн");
    МассивМесяцев.Добавить("Июл");
    МассивМесяцев.Добавить("Август");
    МассивМесяцев.Добавить("Сентябр");
    МассивМесяцев.Добавить("Октябр");
    МассивМесяцев.Добавить("Ноябр");
    МассивМесяцев.Добавить("Декабр");
    
    Для ё=1 ПО МассивМесяцев.Количество() Цикл
        Если Найти(Строка,МассивМесяцев[ё-1]) Тогда
            Возврат ё;        
        КонецЕсли;
    КонецЦикла;
    
КонецФункции
29 Dotoshin
 
16.10.17
15:19
30 Timon1405
 
16.10.17
15:19
(28) на "09 маЯ 2017 г." не сработает функция. и все-таки лучше использовать объект соответствие
31 TolikoSprosit
 
16.10.17
15:22
(30) "маЯ" не будет, если будет напишу Нрег.
Не понимаю зачем Соответствие?
32 TolikoSprosit
 
16.10.17
15:23
(29) Вы мне в пользовательском режиме что-то делать предлагаете?)
33 Numerus Mikhail
 
16.10.17
15:27
(31) имеется в виду что "май" и "мая" это разные слова.
34 TolikoSprosit
 
16.10.17
15:32
(33) Блин) Не подумал)
35 TolikoSprosit
 
16.10.17
15:35
Короче вроде это:

Функция ПолучитьДатуИзСтроки(Строка)
    
    МСтрока = СтрЗаменить(Строка," ",Символы.ПС);
    
    Возврат Дата(СтрПолучитьСтроку(МСтрока,3)
                +ПолучитьНомерМесяца(СтрПолучитьСтроку(МСтрока,2))
                +СтрПолучитьСтроку(МСтрока,1));
                
КонецФункции // ()

Функция ПолучитьНомерМесяца(Строка)
    
    МассивМесяцев = Новый Массив;
    
    МассивМесяцев.Добавить("Январ");
    МассивМесяцев.Добавить("Феврал");
    МассивМесяцев.Добавить("Март");
    МассивМесяцев.Добавить("Апрел");
    МассивМесяцев.Добавить("Ма");;
    МассивМесяцев.Добавить("Июн");
    МассивМесяцев.Добавить("Июл");
    МассивМесяцев.Добавить("Август");
    МассивМесяцев.Добавить("Сентябр");
    МассивМесяцев.Добавить("Октябр");
    МассивМесяцев.Добавить("Ноябр");
    МассивМесяцев.Добавить("Декабр");
    
    Для ё=1 ПО МассивМесяцев.Количество() Цикл
        Если Найти(Строка,МассивМесяцев[ё-1]) Тогда
            Возврат Формат(ё,"ЧЦ=2; ЧВН=");        
        КонецЕсли;
    КонецЦикла;
    
КонецФункции
36 Dotoshin
 
16.10.17
15:36
(32) Я предлагаю привести исходные данные к нужному формату, а как это сделать решайте сами.
37 lodger
 
16.10.17
15:46
никто не пробовал такую штуку шарашить?
https://www.techonthenet.com/excel/formulas/cdate.php
38 TolikoSprosit
 
16.10.17
15:52
(37) Макросы по COMу, уж лучше костылями)
39 Ёпрст
 
гуру
16.10.17
15:52
(36) ну-ну. Теперь МАй = МАрт
40 TolikoSprosit
 
16.10.17
15:55
(39) Нет, Март первый отработает)
41 Timon1405
 
16.10.17
15:55
ВходСтрокаМесяца="Августа";
СоответствиеМесяцев = Новый Соответствие;
СоответствиеМесяцев.Вставить("января","01");
СоответствиеМесяцев.Вставить("февраля","02");
СоответствиеМесяцев.Вставить("марта","03");
СоответствиеМесяцев.Вставить("апреля","04");
СоответствиеМесяцев.Вставить("мая","05");
СоответствиеМесяцев.Вставить("июня","06");
СоответствиеМесяцев.Вставить("июля","07");
СоответствиеМесяцев.Вставить("августа","08");
СоответствиеМесяцев.Вставить("сентября","09");
СоответствиеМесяцев.Вставить("октября","10");
СоответствиеМесяцев.Вставить("ноября","11");
СоответствиеМесяцев.Вставить("декабря","12");
НомерМесяца= СоответствиеМесяцев.Получить(нрег(ВходСтрокаМесяца));
42 TolikoSprosit
 
16.10.17
16:06
(41) Быстрее, да.
2 + 2 = 3.9999999999999999999999999999999...