Имя: Пароль:
1C
1С v8
перевести символы по ошибке написанные кирилицей в такие же латинские?
0 dimm7310
 
05.04.12
10:14
Существует ли возможность в 1С 8.2 перевести символы по ошибке написанные кирилицей в такие же латинские?
Например строка А6B - написана рускими символами, а надо переписать также английскими.

Нужно загружать данные из файла и сопоставлять их с уже записанными данными в справочнике. По идее все строки в файле должно быть записаны латиницей, но встречаются написанные кириллицей.
1 Cube
 
05.04.12
10:15
КодСимвола()?
2 FIXXXL
 
05.04.12
10:25
Функция ТранслитЛат(Имя) Экспорт
  Рез = СокрЛП(Имя);  
  Рез = СтрЗаменить(Рез,"а","a");
  Рез = СтрЗаменить(Рез,"б","b");
  Рез = СтрЗаменить(Рез,"в","v");
  Рез = СтрЗаменить(Рез,"г","g");
  Рез = СтрЗаменить(Рез,"д","d");
  Рез = СтрЗаменить(Рез,"е","e");
  Рез = СтрЗаменить(Рез,"ё","e");
  Рез = СтрЗаменить(Рез,"ж","zh");
  Рез = СтрЗаменить(Рез,"з","z");
  Рез = СтрЗаменить(Рез,"и","i");
  Рез = СтрЗаменить(Рез,"к","k");
  Рез = СтрЗаменить(Рез,"л","l");
  Рез = СтрЗаменить(Рез,"м","m");
  Рез = СтрЗаменить(Рез,"н","n");
  Рез = СтрЗаменить(Рез,"о","o");
  Рез = СтрЗаменить(Рез,"п","p");
  Рез = СтрЗаменить(Рез,"р","r");
  Рез = СтрЗаменить(Рез,"с","s");
  Рез = СтрЗаменить(Рез,"т","t");
  Рез = СтрЗаменить(Рез,"у","u");
  Рез = СтрЗаменить(Рез,"ф","f");
  Рез = СтрЗаменить(Рез,"х","h");
  Рез = СтрЗаменить(Рез,"ч","ch");
  Рез = СтрЗаменить(Рез,"ш","sh");
  Рез = СтрЗаменить(Рез,"щ","sch");
  Рез = СтрЗаменить(Рез,"ъ","");
  Рез = СтрЗаменить(Рез,"ь","");
  Рез = СтрЗаменить(Рез,"э","e");
  Рез = СтрЗаменить(Рез,"ю","yu");
  Рез = СтрЗаменить(Рез,"й","i");
  Рез = СтрЗаменить(Рез,"ц","c");
  Рез = СтрЗаменить(Рез,"я","ya");
  Рез = СтрЗаменить(Рез,"ы","i");
  Рез = СтрЗаменить(Рез,"А","A");
  Рез = СтрЗаменить(Рез,"Б","B");
  Рез = СтрЗаменить(Рез,"В","V");
  Рез = СтрЗаменить(Рез,"Г","G");
  Рез = СтрЗаменить(Рез,"Д","D");
  Рез = СтрЗаменить(Рез,"Е","E");
  Рез = СтрЗаменить(Рез,"Ё","E");
  Рез = СтрЗаменить(Рез,"Ж","ZH");
  Рез = СтрЗаменить(Рез,"З","Z");
  Рез = СтрЗаменить(Рез,"И","I");
  Рез = СтрЗаменить(Рез,"К","K");
  Рез = СтрЗаменить(Рез,"Л","L");
  Рез = СтрЗаменить(Рез,"М","M");
  Рез = СтрЗаменить(Рез,"Н","N");
  Рез = СтрЗаменить(Рез,"О","O");
  Рез = СтрЗаменить(Рез,"П","P");
  Рез = СтрЗаменить(Рез,"Р","R");
  Рез = СтрЗаменить(Рез,"С","S");
  Рез = СтрЗаменить(Рез,"Т","T");
  Рез = СтрЗаменить(Рез,"У","U");
  Рез = СтрЗаменить(Рез,"Ф","F");
  Рез = СтрЗаменить(Рез,"Х","H");
  Рез = СтрЗаменить(Рез,"Ч","CH");
  Рез = СтрЗаменить(Рез,"Ш","SH");
  Рез = СтрЗаменить(Рез,"Щ","SCH");
  Рез = СтрЗаменить(Рез,"Ъ","");
  Рез = СтрЗаменить(Рез,"Ь","");
  Рез = СтрЗаменить(Рез,"Ы","I");
  Рез = СтрЗаменить(Рез,"Ц","C");
  Рез = СтрЗаменить(Рез,"Э","E");
  Рез = СтрЗаменить(Рез,"Ю","YU");
  Рез = СтрЗаменить(Рез,"Я","YA");
  Рез = СтрЗаменить(Рез,"Й","I");
  Возврат(Рез);
КонецФункции
3 FIXXXL
 
05.04.12
10:25
(2) подреж маленько и в путь :)
4 dimm7310
 
05.04.12
10:26
(2) я так и думал, что только через СтрЗаменить
5 dimm7310
 
05.04.12
10:27
(1) не понял как применить в данном случае
6 AmoreMe
 
05.04.12
12:21
+ Code
Перем МассивСимволовЛатиницы;

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Кирилица = Истина;
   Для Индекс = 1 По СтрДлина(СтрокаСимволов) Цикл
       Если НайтиКод(КодСимвола(СтрокаСимволов, Индекс)) <> Неопределено Тогда
           Сообщить("Символ № " + Индекс + " не кирилица!",СтатусСообщения.Важное);
           Кирилица = Ложь;
       КонецЕсли;        
   КонецЦикла;
   Если Кирилица Тогда
       Сообщить("Строка полностью состоит из символов кирилицы!",СтатусСообщения.Информация);
   КонецЕсли;
КонецПроцедуры

Функция НайтиКод(ВыбранныйКод)
   Возврат МассивСимволовЛатиницы.Найти(ВыбранныйКод);
КонецФункции

Процедура ОсновныеДействияФормыИсправить(Кнопка)
   Для Индекс = 1 По СтрДлина(СтрокаСимволов) Цикл
       Код = НайтиКод(КодСимвола(СтрокаСимволов, Индекс));
       Если  Код <> Неопределено Тогда
           Сообщить("Символ № " + Индекс + " исправлен на кирилицу!",СтатусСообщения.Информация);
           Если Код = 0 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"A","А");
           ИначеЕсли Код = 1 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"a","а");
           ИначеЕсли Код = 2 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"B","В");
           ИначеЕсли Код = 3 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"b","в");
           ИначеЕсли Код = 4 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"C","С");
           ИначеЕсли Код = 5 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"c","с");
           ИначеЕсли Код = 6 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"E","Е");
           ИначеЕсли Код = 7 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"e","е");
           ИначеЕсли Код = 8 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"H","Н");
           ИначеЕсли Код = 9 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"h","н");
           ИначеЕсли Код = 10 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"K","К");
           ИначеЕсли Код = 11 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"k","к");
           ИначеЕсли Код = 12 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"T","Т");
           ИначеЕсли Код = 13 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"t","т");
           ИначеЕсли Код = 14 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"O","О");
           ИначеЕсли Код = 15 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"o","о");
           ИначеЕсли Код = 16 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"X","Х");
           ИначеЕсли Код = 17 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"x","х");
           ИначеЕсли Код = 18 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"P","Р");
           ИначеЕсли Код = 19 Тогда
               СтрокаСимволов = СтрЗаменить(СтрокаСимволов,"p","р");    
           КонецЕсли;                            
       КонецЕсли;        
   КонецЦикла;
КонецПроцедуры

МассивСимволовЛатиницы = Новый Массив;
МассивСимволовЛатиницы.Добавить(КодСимвола("A"));
МассивСимволовЛатиницы.Добавить(КодСимвола("a"));
МассивСимволовЛатиницы.Добавить(КодСимвола("B"));
МассивСимволовЛатиницы.Добавить(КодСимвола("b"));
МассивСимволовЛатиницы.Добавить(КодСимвола("C"));
МассивСимволовЛатиницы.Добавить(КодСимвола("c"));
МассивСимволовЛатиницы.Добавить(КодСимвола("E"));
МассивСимволовЛатиницы.Добавить(КодСимвола("e"));
МассивСимволовЛатиницы.Добавить(КодСимвола("H"));
МассивСимволовЛатиницы.Добавить(КодСимвола("h"));
МассивСимволовЛатиницы.Добавить(КодСимвола("K"));
МассивСимволовЛатиницы.Добавить(КодСимвола("k"));
МассивСимволовЛатиницы.Добавить(КодСимвола("T"));
МассивСимволовЛатиницы.Добавить(КодСимвола("t"));
МассивСимволовЛатиницы.Добавить(КодСимвола("O"));
МассивСимволовЛатиницы.Добавить(КодСимвола("o"));
МассивСимволовЛатиницы.Добавить(КодСимвола("X"));
МассивСимволовЛатиницы.Добавить(КодСимвола("x"));
МассивСимволовЛатиницы.Добавить(КодСимвола("P"));
МассивСимволовЛатиницы.Добавить(КодСимвола("p"));
7 nuctoh
 
05.04.12
12:30
Кошмар пишете. Вот изящный вариант. Правда он решает обратную задачу, но адаптация займет не более минуты:

Функция НайтиОшибочныеСимволы(Строка) Экспорт
   
   ОшибСимволы    = "abcdeghkmnoprtwxyuё";
   НормСимволы    = "авсдеднкмпорятшхуие";
       
   ТмпСтрока    = НРег(Строка);
   НовСтрока    = "";
   ДлинаСтроки    = СтрДлина(Строка);
   
   Для Инд = 1 По ДлинаСтроки Цикл
       
       Символ        = Сред(Строка, Инд, 1);
       ТмпСимвол    = Сред(ТмпСтрока, Инд, 1);
       
       ПозСимвола = Найти(ОшибСимволы, ТмпСимвол);
       
       Если ПозСимвола = 0 Тогда
           НовСтрока = НовСтрока + Символ;
       Иначе
           НовСимвол = Сред(НормСимволы, ПозСимвола, 1);
           НовСтрока = НовСтрока + ?(Символ = ВРег(Символ), ВРег(НовСимвол), НовСимвол);
       КонецЕсли;
       
   КонецЦикла;
   
   Возврат НовСтрока;
   
КонецФункции
Ошибка? Это не ошибка, это системная функция.