Однажды, выполняя заказ, связанный с созданием выгрузки в интернет-магазин фирмы и Яндекс.Маркет позиций номенклатуры, цен и т.д. из 1С:Управление торговлей 10.3, столкнулся с проблемой транслитерации. Адреса страниц товаров формировались движком интернет-магазина из названий товаров (реквизит Наименование) путем перевода русских символов в английские и замены пробелов на дефисы. То же самое мне нужно было сделать программно при формировании YML-файла для Яндекс.Маркета.
Для этого нам понадобятся две функции. Первая будет заменять одни символы другими. При перечень заменяемых символов четко определен (в названии товара могут быть английские буквы, их надо оставить как есть).
Результат = Текст;
Для Сч = 1 По СтрДлина(Источник) Цикл
Результат = СтрЗаменить(Результат,Сред(Источник,Сч,1),Сред(Замена,Сч,1));
КонецЦикла;
Возврат Результат;
КонецФункции
Во второй функции мы приводим текст к нужному регистру. В моем случае это нижний регистр (функция НРег), определяем, какие символы на что надо заменять и отправляем все это в первую функцию ЗаменитьСимволы. Некоторые русские буквы нельзя заменить одной буквой английского алфавита. Такие случаи надо прописать отдельно перед вызовом функции ЗаменитьСимволы. Для таких исключительных случаев можно использовать функцию СтрЗаменить. В примере приведены только некоторые буквы. В каждом конкретном случае правила транслитерации могут различаться. Кроме того, мне нужно было заменить пробелы на дефисы и убрать некоторые лишние пробелы.
Слово = НРег(Слово);
Слово=СтрЗаменить(Слово,"её","yeyo");
Слово=СтрЗаменить(Слово,"ёе","yoye");
Слово=СтрЗаменить(Слово,"я","ya");
Слово=СтрЗаменить(Слово," - ","-");
Слово=СтрЗаменить(Слово," -","-");
Слово=СтрЗаменить(Слово,"- ","-");
Слово=СтрЗаменить(Слово," ","-");
Слово=ЗаменитьСимволы("абвгдезийклмнопрстуфыэ",Слово,"abvgdezijklmnoprstufye");
Возврат Слово;
КонецФункции
После этого остается только вызвать функцию Трансилтерация и передать в нее нужную текстовую переменную.
За методику спасибо lock73 с сайта infostart.ru.
опечатка в функции ЗаменитьСимволы в первой строке, должно быть так:
Результат = Текст;
и лучше написать так:
Функция Транслитерация(Знач Слово)
Исправлено. Спасибо.