Имя: Пароль:
1C
1C 7.7
v7: Исправление ошибок найденых ТиИ (символы из "чужих" кодировок в поле BLOCK) )
0 Susirya
 
13.02.12
17:40
В продолжение заархивированной Результат ТИИ. Неверное содержимое текстового поля.
1с 7.7 ТИС
Та же ситуация - по результатам ТиИ стало ясно, что накопилось приличное кол-во неверных записей поля BLOCK в 1SBLOB.dbf(присутствуют некорректные символы). Задача/желание - исправить. Подскажите что лучше: 1. искать связь с конкретными объектами и править из самой 1С. 2. перебирать dbf и править поля обработкой.
Если 1 - то как найти связь с объектами?
Если 2 - то как? (в смысле как отсеять некорректные символы и не навредить dbf-ке?)
1 andrewks
 
13.02.12
17:47
если что - 1с умеет читать dbf файлы. и даже без 1cpp
2 andrewks
 
13.02.12
17:50
а ещё можно пробежаться по метаданным и составить список текстовых реквизитов. а потом - перебирать и проверять
3 Mikeware
 
13.02.12
17:52
(0) по п.1 - ищи  описание 1sblob
по п.2 - смотри в СП вункции работы со строками
(2) если в блобе - то не просто текстовых, а текстовых неограниченой длины.
4 andrewks
 
13.02.12
17:52
(3) ну, на ноль проверить ведь не сложно? :)
5 andrewks
 
13.02.12
17:54
+(4) а вообще, лучше сразу писать проверку всех текстовых. сегодня в блобе, завтра в обычном текстовом грязь запишут
6 Mikeware
 
13.02.12
17:57
(5) И ведь пишут! :-)
вместо шифта жмут контрол...
7 Ёпрст
 
гуру
13.02.12
17:59
есть еще варипнт - забить и ничего не исправлять
8 andrewks
 
13.02.12
18:00
(7) ты знаешь, я в 1-м посте хотел его предложить, но постеснялся ;-)
9 Susirya
 
13.02.12
18:00
Спасибо всем за направление! Примерно азимут ясен... )
(6) это обработкой из клиент банка тянется
10 andrewks
 
13.02.12
18:00
+(8) подумал - а ну как вдруг будут переносить данные в v8, ведь глюканёт
11 Susirya
 
13.02.12
18:01
(7)(8) - ну "не аккуратненько как-то"... :)
12 Susirya
 
13.02.12
18:02
+(11) в далекой перспективе перенос предусматривается...
13 Ёпрст
 
гуру
13.02.12
18:03
ну вот, понапихают тебе в блоб всякие © ... и.. нафига их удалять ?
14 Mikeware
 
13.02.12
18:03
(10) ПРОверять на наличие недопустимых символов...
15 Susirya
 
13.02.12
18:06
(14) подскажите как определить "недопустимость" символа в строке?
16 Susirya
 
13.02.12
18:11
+(15) неужели только Найти(стрТестСимвол, стрДопустимыйАлфавит) в цикле?
Как то деревянно...
17 andrewks
 
13.02.12
18:15
ну, если в лоб, то как-то так:

Для НомСимв=1 По СтрДлина(ВхСтр) Цикл
ТекКод=КодСимв(Сред(ВхСтр,НомСимв,1));
Если ПроверитьДопустимостьСимв(ТекКод)=0 Тогда
// недопустимый символ
КонецЕсли;
КонецЦикла;
18 Susirya
 
13.02.12
18:33
(17) да это понятно, принцип перебора ясен. Не ясно как ПроверитьДопустимостьСимв()?...
ткните пожалуйста в источник знаний?
(неужели только Найти(стрТестСимвол, стрДопустимыйАлфавит)?)
19 Susirya
 
13.02.12
20:20
Если кому-то пригодится:
"Пуск > Программы > ... > Служебные > Таблица символов
Все символы, которые непонятно зачем нужны, можно считать недопустимыми. Например диапазон с 127 по 191 (0x7F - 0xBF). Для буквы Ё можно сделать исключение (168 и 184), если не лень.
Но в первую очередь стоит проверить строку на наличие неразрывных пробелов и тире.
Стр = СтрЗаменить(Стр, Симв(160), " ");
Стр = СтрЗаменить(Стр, Симв(150), "-");
Стр = СтрЗаменить(Стр, Симв(151), "-");"
Спасибо всем!
20 andrewks
 
13.02.12
21:26
(18)
Функция ПроверитьДопустимостьСимв(КодСимв)
Если (КодСимв<32) ИЛИ // тут выбираем, какие коды нам неугодны
Тогда
Возврат 0;
Иначе
Возврат 1;
КонецЕсли;
КонецФункции
21 Susirya
 
13.02.12
22:00
andrewks, еще раз Спасибо за все ответы! Теперь все предельно понятно.