Имя: Пароль:
1C
1C 7.7
v7: Обработка даты в табличной части
0 ksru
 
24.06.17
16:27
Кто знает каким способом можно распознать дату в строке если она идет так "текс, 01.01.2001, текст"?
дата в таблично задается новой почти каждый
1 Сияющий Асинхраль
 
24.06.17
16:58
Извратится, наверное, можно. Да и алгоритм простой, если формат фиксирован, если нет - то геморрой. Для начала, если формат фиксирован найди две точки расстояние между которыми фиксировано, а дальше проверяй две цифры После первой точки - не больше 12 и не меньше 0, цифры после второй точки - вменяемое значение года (пять цифр вряд ли пойдет), ну и по месяцу и году должна соответствовать число дней в месяце - больше единицы, меньше максимального числа дней (это без проблем можно определить имея корректную цифру месяца и года). Собсно, все...
2 Сияющий Асинхраль
 
24.06.17
17:00
Ошибочка вышла "не меньше 0" стоит читать как "не меньше 1", и во втором случае "больше единицы" надо читать как "больше нуля"
3 vadim777
 
24.06.17
18:45
Встречал парсеры для 1С, помогающие извлекать разные данные из строки.
4 Базис
 
naïve
24.06.17
19:06
RegExp
5 ksru
 
24.06.17
21:03
Типо так

    Регуляр=Новый COMОбъект("VBScript.RegExp");
    Стр=СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры;
    Регуляр.Pattern="\d\d\.\d\d\.\d\d\d\d";
    Регуляр.IgnoreCase=-1;
    Регуляр.Global=-1;
    Результаты = Регуляр.Execute(Стр);
    Для к=0 По Результаты.Count-1 Цикл
        Сообщить(Результаты.item(к).value);
    КонецЦикла;
6 ksru
 
24.06.17
21:04
а если ошибочка

{Документ.ОприходованиеТоваров.Форма.ФормаДокумента.Форма(1377)}: Ошибка при вызове метода контекста (Execute)
    Результаты = Регуляр.Execute(Стр);
по причине:
Типы не совпадают (0)
7 vadim777
 
24.06.17
21:26
(5) Возьму на заметку. Я говорил о парсере именно на языке 1С.
8 ksru
 
24.06.17
21:48
(7) если бы я знал как (
9 ksru
 
25.06.17
08:29
есть пример у кого-нибудь?
10 vadim777
 
25.06.17
08:40
(9) Гугл множество ссылок показывает на "1с парсинг строки".
11 ksru
 
25.06.17
10:39
а с помощью этого можно?

    RegExp = Новый COMОбъект("VBScript.RegExp");
    RegExp.IgnoreCase = Истина; //Игнорировать регистр
    RegExp.Global = Истина; //Поиск всех вхождений шаблона
    RegExp.MultiLine = Истина; //Многострочный режим
        
    RegExp.Pattern = "[^0-9]"; // отбор только чисел
    
    стр=RegExp.Replace(стр, "");
    Сообщить(стр);
12 vadim777
 
25.06.17
10:53
(11) Разрешаю
13 ksru
 
25.06.17
11:01
а как перевести такое выражение 10.10.2017 в дату?
14 Aleksey
 
25.06.17
11:05
(13) а что не так? Сложнее перевести 30.02.2017
15 ksru
 
25.06.17
11:07
(14) не получается пока
16 ksru
 
25.06.17
11:08
Преобразование значения к типу Дата не может быть выполнено
17 NorthWind
 
25.06.17
11:14
(16) проверяйте содержимое строки, скорее всего, где-то в ней мусор остался.
18 ksru
 
25.06.17
11:25
вроде все нормально
19 ksru
 
25.06.17
11:45
вот так работает 2017.10.10
20 NorthWind
 
25.06.17
12:28
(19) немного странно. Нестандартный формат даты для России.
21 ksru
 
25.06.17
12:54
как сделать если переменную нужно взять в кавычки чтоб она работала"
22 ksru
 
25.06.17
13:28
дата записывается в кавычках Дата("2001.10.10") а как быть с переменной если дата определена переменной?
23 пипец
 
26.06.17
14:35
ох ййооо

так хочешь что ли ? ляля=Дата(сокрлп(переменная))  ?
24 Масянька
 
26.06.17
14:39
А можно спросить: а что в строке, которая (0)?