Имя: Пароль:
1C
1С v8
Поиск года в строке
0 NikolayNiko
 
23.10.17
14:08
НЕ могу найти алгоритм. Подскажите пожалуйста, как сделать.
Пример: "2 квартал 2015 г." или "2013-2014".
1 Лефмихалыч
 
23.10.17
14:11
vbscript.regexp

\d\d\d\d
2 Лефмихалыч
 
23.10.17
14:11
или \d{4,4}
3 NikolayNiko
 
23.10.17
14:15
(2) Не cилен в VB, к сожалению. Можно как-то ближе к 1с?
4 Масянька
 
23.10.17
14:16
(3) Откуда берется "2 квартал 2015 г." или "2013-2014"?
5 vfire1000
 
23.10.17
14:17
(3) RegExp = Новый COMОбъект("VBScript.RegExp");
6 1dvd
 
23.10.17
14:17
(3) ПОДОБНО
7 Lexey_
 
23.10.17
14:18
(3) Лев(), Прав(), Сред()
8 NikolayNiko
 
23.10.17
14:18
(4) Строка, забивается в ручную. Реквизит ТЧ документа
9 Масянька
 
23.10.17
14:19
(8) Не понял... Это ручками забивают "2 квартал 2015 г."?
10 NikolayNiko
 
23.10.17
14:21
(9) да
11 igork1966
 
23.10.17
14:21
(8) Сделал бы ты там ввод стандартного периода периода, а хранил как две даты
12 Лефмихалыч
 
23.10.17
14:21
(3) можно

    RegExp = Новый COMОбъект("VBScript.RegExp");
    RegExp.IgnoreCase = истина;
    RegExp.Global = истина;
    RegExp.MultiLine = Истина;    
    RegExp.Pattern = "\d{4,4}";

    Matches= RegExp.Execute("Пример: 2 квартал 2015 г. или 2013-2014");

    Для Сч = 0 по Matches.Count()-1 Цикл
        Match = Matches.Item(Сч);
        Сообщить("""" + Match.Value+ """");
    КонецЦикла;
13 Масянька
 
23.10.17
14:21
(10) А если забьют "2 кв. 15 г." - чего делать будешь?
14 NikolayNiko
 
23.10.17
14:22
(7) Не догадываюсь как это можно использовать в данном случае
15 NikolayNiko
 
23.10.17
14:23
(13) такого не должно быть. Если встретиться - исправлять в ручную
16 Масянька
 
23.10.17
14:24
(15) Зашибись...
Рекомендую внимательно прочитать (11).
17 NikolayNiko
 
23.10.17
14:24
(12) что-то новенькое
18 NikolayNiko
 
23.10.17
14:26
(16) Что есть - то есть. Моя задача получить год в формате ГГГГ.
19 Лефмихалыч
 
23.10.17
14:26
(16) +100500

и еще по рукам себя линейкой шлёпнуть рекомендую и больше так (8) не делать
20 igork1966
 
23.10.17
14:26
(15) Никогда не говори никогда. Рано или поздно это дело забудут и пользователь введет как ему захочется. B c претензией к прогу.
Может сразу нормально сделать не текстовым полем?
21 Масянька
 
23.10.17
14:27
(18) Автоматизация бардака приводит к автоматизированному бардаку (С)
22 1dvd
 
23.10.17
14:27
Для Идн = 1700 По 2200 Цикл
   Если Найти(СтрокаСГодом, "" + Идн)>0 Тогда
       НайденГод = Идн;
   КонецЕсли;
КонецЦикла;
23 igork1966
 
23.10.17
14:30
(22) неразрывные пробелы пользователь как введет?  ;-)
24 NikolayNiko
 
23.10.17
14:31
(20) Вы не поняли. У меня есть база, куда долгие годы в реквизит ТЧ документа(строкового типа) вносили эти данные. Теперь создан реквизит документа с типом дата. Мне нужно написать обработку, которая перелопатит все документы, отберет самую свежую дату из ТЧ каждого документа и присвоит её реквизиту документа. Как-то так
25 NikolayNiko
 
23.10.17
14:31
В реквизит тч уже никто ничего больше вбивать не будет
26 Лефмихалыч
 
23.10.17
14:33
(24) а много документов?
27 igork1966
 
23.10.17
14:33
(24) если у тебя одна дата, то "2013-2014" как год преобразовывать хочешь?  В 2013?
28 NikolayNiko
 
23.10.17
14:33
(26) довольно таки да
29 igork1966
 
23.10.17
14:34
(24) варианты только указанные в (0)?
30 1dvd
 
23.10.17
14:34
(23) пардон

Для Идн = 1700 По 2200 Цикл
   Если Найти(СтрокаСГодом, Формат(Идн, "ЧГ=0"))>0 Тогда
       НайденГод = Идн;
   КонецЕсли;
КонецЦикла;
31 NikolayNiko
 
23.10.17
14:34
В самую свежую, то есть в 2014. А ТЧ может быть несколько строк с датой. Там то же самое - берем самую свежую
32 NikolayNiko
 
23.10.17
14:35
(29) НЕт, варианты могут быть разные. Главное что дата в формате ГГГГ
33 perester
 
23.10.17
14:39
(0) короче парсишь строку в цифры и готово, или как подсказал (30) , если это разовая акция то изящество решения это не главное
34 Масянька
 
23.10.17
14:41
(31) А что за документ? Смысловая нагрузка его какова?
35 NikolayNiko
 
23.10.17
14:45
(34) Да обычный документ. Самописная конфа.
36 NikolayNiko
 
23.10.17
14:46
(30) Попробуем. Спасибо всем кто отозвался!
37 Масянька
 
23.10.17
14:48
(35) У обычного документа есть дата. Смысл даты (периода) в ТЧ?
38 NikolayNiko
 
23.10.17
14:51
(37) Говорю же самописка. Был какой-то умысел видимо у создателя. Но сейчас это уже не нужно. Нужна просто одна самая свежая дата
39 igork1966
 
23.10.17
14:52
(38) еще нечто такое:

Год = 0;
сч = 1;
Пока сч <= СтрДлина(СтрокаСГодом) Цикл
  год = "";
  Пока сч <= СтрДлина(СтрокаСГодом) и СтрНайти("0123456789", Сред(СтрокаСГодом,cч,1)) > 0 Цикл
    год = год + Сред(СтрокаСГодом,cч,1);
    сч = сч + 1;
  КонецЦикла;
  Если СтрДлина(год) = 4 Тогда
    Год = Макс(Год,Число(год));
  КонецЕсли;
  сч = сч + 1;
КонецЦикла;
40 Масянька
 
23.10.17
14:52
(38) Так... Пойдем длинным путём...
Дата документа и дата из ТЧ чем отличаются?
А вообще, если "умысел" не понятен - снеси и не выноси мозг.
41 X Leshiy
 
23.10.17
14:56
(40) Может он сам разберется?
42 NikolayNiko
 
23.10.17
14:57
(40) Дата документа не причем! Есть реквизит "Дата бла-бла", отличный от даты документа. Что значит Снеси?
43 NikolayNiko
 
23.10.17
14:59
(39) Всё же я думал есть какие-то менее "творческие" пути) Не уж то придется так извращаться?
44 igork1966
 
23.10.17
14:59
(42) в переменную Год нужно как-то отлично от год назвать...
45 Масянька
 
23.10.17
14:59
(42) В (38) написано: "Был какой-то умысел видимо у создателя. Но сейчас это уже не нужно." Если "не нужно" - снеси.
А что нужно? Смысл этой "Дата бла-бла"?
46 igork1966
 
23.10.17
15:01
(45) Он уже выбросил, хочет в старых документах заполнить новое поле по этому полю, чтобы заставить пользователей исправить только немного документов где год не сумеет вычислить из этого текста.
47 NikolayNiko
 
23.10.17
15:03
(46) именно!
48 Масянька
 
23.10.17
15:04
(46) Подожди...
"Дата бла-бла" снес, значит, на фиг не нужно. А год зачем тогда?
49 Масянька
 
23.10.17
15:05
(47) Что "именно"? Top secret - что за док-т, и что за дата (период)?
50 RomaH
 
naïve
23.10.17
15:05
(43) см (3)
51 RomaH
 
naïve
23.10.17
15:06
ну если не хочешь (3) см ВК в БСП - в поиске и удалении дублей используется fuzzy чего-то там
52 RomaH
 
naïve
23.10.17
15:07
(43) см не (3), а (12)
53 Масянька
 
23.10.17
15:07
(46) Кстати, если это акт сверки - период есть в ТЧ. Так, к слову.
54 NikolayNiko
 
23.10.17
15:24
(12) Спасибо большое! Все работает!
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн