Постановка задачи
Иногда встречаются задачи, когда необходимо преобразовать текст с не верной раскладкой клавиатуры. Это тот случай, когда долго и упорно вводится текст, а потом мы смотрим на экран и видим, что был выбран другой язык ввода :)
Примеры:
- Ghbdtn vbh - Привет мир
- Hfcrkflrf - Раскладка
Думаю, суть понятна. Нужен этакий Punto Switcher но на 1С.
Готовая функция для 1С преобразования раскладки клавиатуры
// Изменить раскладку текста EN в RU.
//
// Параметры:
// ИсходныйТекст - Строка - Исходная строка в латинской раскладке
//
// Возвращаемое значение:
// Строка - Измененная раскладка текста в русской раскладке
Функция ИзменитьРаскладкуТекста(Знач ИсходныйТекст) Экспорт
Соответствие = Новый Соответствие;
Соответствие.Вставить("f", "а");
Соответствие.Вставить(",", "б");
Соответствие.Вставить("d", "в");
Соответствие.Вставить("u", "г");
Соответствие.Вставить("l", "д");
Соответствие.Вставить("t", "е");
Соответствие.Вставить("`", "ё");
Соответствие.Вставить(";", "ж");
Соответствие.Вставить("p", "з");
Соответствие.Вставить("b", "и");
Соответствие.Вставить("q", "й");
Соответствие.Вставить("r", "к");
Соответствие.Вставить("k", "л");
Соответствие.Вставить("v", "м");
Соответствие.Вставить("y", "н");
Соответствие.Вставить("j", "о");
Соответствие.Вставить("g", "п");
Соответствие.Вставить("h", "р");
Соответствие.Вставить("c", "с");
Соответствие.Вставить("n", "т");
Соответствие.Вставить("e", "у");
Соответствие.Вставить("a", "ф");
Соответствие.Вставить("[", "х");
Соответствие.Вставить("w", "ц");
Соответствие.Вставить("x", "ч");
Соответствие.Вставить("i", "ш");
Соответствие.Вставить("o", "щ");
Соответствие.Вставить("m", "ь");
Соответствие.Вставить("s", "ы");
Соответствие.Вставить("]", "ъ");
Соответствие.Вставить("'", "э");
Соответствие.Вставить(".", "ю");
Соответствие.Вставить("z", "я");
Соответствие.Вставить("F", "А");
Соответствие.Вставить("<", "Б");
Соответствие.Вставить("D", "В");
Соответствие.Вставить("U", "Г");
Соответствие.Вставить("L", "Д");
Соответствие.Вставить("T", "Е");
Соответствие.Вставить("~", "Ё");
Соответствие.Вставить(":", "Ж");
Соответствие.Вставить("P", "З");
Соответствие.Вставить("B", "И");
Соответствие.Вставить("Q", "Й");
Соответствие.Вставить("R", "К");
Соответствие.Вставить("K", "Л");
Соответствие.Вставить("V", "М");
Соответствие.Вставить("Y", "Н");
Соответствие.Вставить("J", "О");
Соответствие.Вставить("G", "П");
Соответствие.Вставить("H", "Р");
Соответствие.Вставить("C", "С");
Соответствие.Вставить("N", "Т");
Соответствие.Вставить("E", "У");
Соответствие.Вставить("A", "Ф");
Соответствие.Вставить("{", "Х");
Соответствие.Вставить("W", "Ц");
Соответствие.Вставить("X", "Ч");
Соответствие.Вставить("I", "Ш");
Соответствие.Вставить("O", "Щ");
Соответствие.Вставить("M", "Ь");
Соответствие.Вставить("S", "Ы");
Соответствие.Вставить("}", "Ъ");
Соответствие.Вставить("""", "Э");
Соответствие.Вставить(">", "Ю");
Соответствие.Вставить("Z", "Я");
Соответствие.Вставить("@", """");
Соответствие.Вставить("#", "№");
Соответствие.Вставить("$", ";");
Соответствие.Вставить("^", ":");
Соответствие.Вставить("&", "?");
Соответствие.Вставить("/", ".");
Соответствие.Вставить("?", ",");
ИсходныйТекст = СокрЛП(ИсходныйТекст);
ГотовоеЗначение = "";
ТекущийСимвол = "";
ТекущийГотовыйСимвол = "";
Для Индекс = 1 по СтрДлина(ИсходныйТекст) Цикл
ТекущийСимвол = Сред(ИсходныйТекст, Индекс, 1);
ТекущийГотовыйСимвол = Соответствие.Получить(ТекущийСимвол);
Если ТекущийГотовыйСимвол = Неопределено Тогда
ГотовоеЗначение = ГотовоеЗначение + ТекущийСимвол;
Иначе
ГотовоеЗначение = ГотовоеЗначение + ТекущийГотовыйСимвол;
КонецЕсли;
КонецЦикла;
Возврат ГотовоеЗначение;
КонецФункции
При небольших правках, можно заставить функцию конвертировать в другую сторону.