1С 8.3 Преобразование Кириллицы в Латиницу (и обратно) - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Преобразование Кириллицы в Латиницу (и обратно)

Данные > Примеры кода 1С > 1С 8.3 Строка, текст, буквы
Функция преобразует в 1С 8.3 строку из кириллицы в латиницу и наоборот, из латиницы в кириллицу с помощью параметра реверс.
Преобразование Кириллицы в Латиницу (и обратно) в 1С 8.3:
Функция Транслит(СтрокаВход, Реверс) Экспорт

  
// Параметры:
   // СтрокаВход - строка на Кириллице или Латинице
   // Реверс - Булево, если Истина, то строка на Латинице. Преобразуем латиницу в Кириллицу
   //                  если Ложь, то строка на Кириллице. Преобразуем латиницу в Латиницу

  
ВыходСтрока= "";
  
AZ_3 = Новый Соответствие; // три символа (сочетание)
  
AZ_2 = Новый Соответствие; // два символа (сочетание)
  
AZ_1 = Новый Соответствие; // один символ

   // Соответствие символов
   // кириллицы и латиницы
  
AZ_3.Вставить(?(Реверс=Ложь,"щ","sch"),?(Реверс=Истина,"щ","sch"));

  
AZ_2.Вставить(?(Реверс=Ложь,"э","je"),?(Реверс=Истина,"э","je"));
  
AZ_2.Вставить(?(Реверс=Ложь,"ю","ju"),?(Реверс=Истина,"ю","ju"));
  
AZ_2.Вставить(?(Реверс=Ложь,"я","ya"),?(Реверс=Истина,"я","ya"));
  
AZ_2.Вставить(?(Реверс=Ложь,"ё","jo"),?(Реверс=Истина,"ё","jo"));
  
AZ_2.Вставить(?(Реверс=Ложь,"ж","zh"),?(Реверс=Истина,"ж","zh"));
  
AZ_2.Вставить(?(Реверс=Ложь,"ч","ch"),?(Реверс=Истина,"ч","ch"));
  
AZ_2.Вставить(?(Реверс=Ложь,"ш","sh"),?(Реверс=Истина,"ш","sh"));

  
AZ_1.Вставить(?(Реверс=Ложь,"а","a"),?(Реверс=Истина,"а","a"));
  
AZ_1.Вставить(?(Реверс=Ложь,"б","b"),?(Реверс=Истина,"б","b"));
  
AZ_1.Вставить(?(Реверс=Ложь,"в","v"),?(Реверс=Истина,"в","v"));
  
AZ_1.Вставить(?(Реверс=Ложь,"г","g"),?(Реверс=Истина,"г","g"));
  
AZ_1.Вставить(?(Реверс=Ложь,"д","d"),?(Реверс=Истина,"д","d"));
  
AZ_1.Вставить(?(Реверс=Ложь,"е","e"),?(Реверс=Истина,"е","e"));
  
AZ_1.Вставить(?(Реверс=Ложь,"з","z"),?(Реверс=Истина,"з","z"));
  
AZ_1.Вставить(?(Реверс=Ложь,"и","i"),?(Реверс=Истина,"и","i"));
  
AZ_1.Вставить(?(Реверс=Ложь,"й","j"),?(Реверс=Истина,"й","j"));
  
AZ_1.Вставить(?(Реверс=Ложь,"к","k"),?(Реверс=Истина,"к","k"));
  
AZ_1.Вставить(?(Реверс=Ложь,"л","l"),?(Реверс=Истина,"л","l"));
  
AZ_1.Вставить(?(Реверс=Ложь,"м","m"),?(Реверс=Истина,"м","m"));
  
AZ_1.Вставить(?(Реверс=Ложь,"н","n"),?(Реверс=Истина,"н","n"));
  
AZ_1.Вставить(?(Реверс=Ложь,"о","o"),?(Реверс=Истина,"о","o"));
  
AZ_1.Вставить(?(Реверс=Ложь,"п","p"),?(Реверс=Истина,"п","p"));
  
AZ_1.Вставить(?(Реверс=Ложь,"р","r"),?(Реверс=Истина,"р","r"));
  
AZ_1.Вставить(?(Реверс=Ложь,"с","s"),?(Реверс=Истина,"с","s"));
  
AZ_1.Вставить(?(Реверс=Ложь,"т","t"),?(Реверс=Истина,"т","t"));
  
AZ_1.Вставить(?(Реверс=Ложь,"у","u"),?(Реверс=Истина,"у","u"));
  
AZ_1.Вставить(?(Реверс=Ложь,"ф","f"),?(Реверс=Истина,"ф","f"));
  
AZ_1.Вставить(?(Реверс=Ложь,"х","h"),?(Реверс=Истина,"х","h"));
  
AZ_1.Вставить(?(Реверс=Ложь,"ц","c"),?(Реверс=Истина,"ц","c"));
  
AZ_1.Вставить(?(Реверс=Ложь,"ы","y"),?(Реверс=Истина,"ы","y"));
  
AZ_1.Вставить(?(Реверс=Ложь,"ъ",""),?(Реверс=Истина,"ъ",""));//#
  
AZ_1.Вставить(?(Реверс=Ложь,"ь",""),?(Реверс=Истина,"ь",""));//'
   //AZ_1.Вставить(?(Реверс=Ложь," ","_"),?(Реверс=Истина," ","_"));// пробел

  
Для Сч=1 По СтрДлина(СтрокаВход) Цикл

      
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,3));
      
НайденныйСимвол = AZ_3.Получить(ТекСимволСтроки);
       Если
НайденныйСимвол = Неопределено Тогда
          
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,2));
          
НайденныйСимвол = AZ_2.Получить(ТекСимволСтроки);
           Если
НайденныйСимвол = Неопределено Тогда
              
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,1));
              
НайденныйСимвол = AZ_1.Получить(ТекСимволСтроки);
               Если
НайденныйСимвол = Неопределено Тогда
                  
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,1));
                  
НайденныйСимвол = AZ_3.Получить(ТекСимволСтроки);
                   Если
НайденныйСимвол = Неопределено Тогда
                      
ТекСимволСтроки = НРЕГ(Сред(СтрокаВход,Сч,1));
                      
НайденныйСимвол = AZ_2.Получить(ТекСимволСтроки);
                   КонецЕсли;
               КонецЕсли;
           Иначе
              
Сч=Сч+1
          
КонецЕсли;
       Иначе
          
Сч=Сч+2
      
КонецЕсли;

       Если
НайденныйСимвол <> Неопределено Тогда
          
СимволВСтроку = НайденныйСимвол;
       Иначе
// Если не нашли соответствие, то оставляем символ как есть
          
СимволВСтроку = Сред(СтрокаВход,Сч,1);
       КонецЕсли;

      
ВыходСтрока = ВыходСтрока + СимволВСтроку;
   КонецЦикла;

   Возврат
ВыходСтрока;

КонецФункции
1
комментарий
Сергей
28 мар 2022
Спасибо, всё работает! Только единственное, что нужно добавить, это вот эту строчку:

AZ_2.Вставить(?(Реверс=Ложь,"х","kh"),?(Реверс=Истина,"х","kh"));
____________________
Copyright©, «Программист 1С в г.Минске», 26.05.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому