Обращаюсь опять к коллективному разуму. Ребята, подскажите, плиз, слепой где собака порылась?
Имеется датапорт, который импортирует данные из csv-файла в таблицы Нава (одна - список неких объектов, другая- комментарии к ним).
Вот фрагмент кода тригера OnAfterImportRecord (!!!! выделена строка, на которой вылетает ошибка конвертации из текста в текст - превышение допустимой длины)
Код:
IF (gtx_Bemerk <> '') THEN BEGIN
BemerkTxt := DELCHR(gtx_Bemerk,'<>',' ');
WHILE STRLEN(BemerkTxt) > 0 DO BEGIN
BindeStrich := STRPOS(BemerkTxt,'_');
IF BindeStrich > 0 THEN
BemTxt := COPYSTR(BemerkTxt,1,BindeStrich-1);
ELSE
BemTxt := COPYSTR(BemerkTxt,1);
...
lrec_T50014.INIT;
lrec_T50014.Tabellenname := lrec_T50014.Tabellenname::Fremdinstrumente;
lrec_T50014."Debitor-Nr." := "Debitor-Nr.";
lrec_T50014."Instrument-Nr." := "Lfd. Nr";
lrec_T50014."Zeilennr." := какое-то значение
lrec_T50014.Bemerkung := BemTxt;
lrec_T50014.INSERT;
IF STRLEN(BemerkTxt) > 0 THEN
BemerkTxt := DELCHR(COPYSTR(BemerkTxt,BindeStrich+1),'<>',' '); // !!!!! на этой строке вылетает ошибка
END;
END;
gtx_Bemerk - одно из полей датапорта. BemerkTxt - переменная. Обе текстовые длиной 1024.
Смысл сего фрагмента: текст, считанный в переменную gmx_Bemerk, нужно поделить на строки и занести каждую отдельно в таблицу комментариев (у нас это Т50014). Признаком конца строки является знак _
csv-файл проверен: считываемое в переменную gmx_Bemerk значение не превышает 1024 символа (самое длинное - 1018)
Файл содержит порядка 5тыс. строк. Более 2тыс. строк обрабатываются, а на 2тыс. какой-то вылетает эта ошибка.
Вот оригинальный текст_ который записан в файле:
26.09.95 Erf_07.01.15 gest.v. FU_30.01.15 gest.v. SL_01.03.15 gest.v. SL_02.03.15 gest.v. SL_05.03.15 gest.v. SL_06.03.15 gest.v. SL_15.03.15 gest.v. FU_09.03.15 gest.v. SL_18.03.15 gest.v. SL_24.04.15 gest.v. SL_11.05.15 gest.v. FU_27.05.15 gest.v. SL_28.05.15 gest.v. SL_02.06.15 gest.v. SL_03.06.15 gest.v. SL_09.06.15 gest.v. SL_10.06.15 gest.v. SL_11.06.15 gest.v. SL_22.06.15 gest.v. SL_07.07.15 gest.v. SL_08.07.15 gest.v. SL_08.07.15 gest.v. SL_17.08.15 gest.v. FU_18.08.15 gest.v. FU_19.08.15 gest.v. FU_13.08.15 gest.v. SL_27.08.15 gest.v. FU_
А вот, что пишется в сообщении об ошибке:
Überlauf bei der Typkonvertierung von Text to Text.
07.01.15 gest.v. FU_30.01.15 gest.v. SL_01.03.15 gest.v. SL_02.03.15 gest.v. SL_05.03.15 gest.v. SL_06.03.15 gest.v. SL_15.03.15 gest.v. FU_09.03.15 gest.v. SL_18.03.15 gest.v. SL_24.04.15 gest.v. SL_11.05.15 gest.v. FU_27.05.15 gest.v. SL_28.05.15 gest.v. SL_02.06.15 gest.v. SL_03.06.1507.01.15 gest.v. FU_30.01.15 gest.v. SL_01.03.15 gest.v. SL_02.03.15 gest.v. SL_05.03.15 gest.v. SL_06.03.15 gest.v. SL_15.03.15 gest.v. FU_09.03.15 gest.v. SL_18.03.15 gest.v. SL_24.04.15 gest.v. SL_11.05.15 gest.v. FU_27.05.15 gest.v. SL_28.05.15 gest.1507.01.15 gest.v. FU_30.01.15 gest.v. SL_01.03.15 gest.v. SL_02.03.15 gest.v. SL_05.03.15 gest.v. SL_06.03.15 gest.v. SL_15.03.15 gest.v. FU_09.03.15 gest.v. SL_18.03.15 gest.v. SL_24.04.15 gest.v. SL_11.05.15 gest.v. FU_27.05.15 gest.v. SL_28.05.15 gest.v. SL_02.06.15 gest.v. SL_03.06.15 gest.v. SL_09.06.15 gest.v. SL_10.06.15 gest.v. SL_11.06.15 gest.v. SL_22.06.15 gest.v. SL_07.07.15 gest.v. SL_08.07.15 gest.v. SL_08.07.15 gest.v. SL_17.08.15 gest.v. FU_18.08.15 gest.v. FU_
Как видим - фигня полная! т.е. первый раз цикл отрабатывает корректно: первая строка комментариев (26.09.95 Erf) определяется правильно и удаляется из текста, а потом строка преобразуется по непонятному алгоритму (в нее вставляется дважды ее же фрагмент).