Постановка задачи
Иногда встречаются задачи, когда необходимо преобразовать текст с не верной раскладкой клавиатуры. Это тот случай, когда долго и упорно вводится текст, а потом мы смотрим на экран и видим, что был выбран другой язык ввода :)
Примеры:
- 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); ТекущийГотовыйСимвол = Соответствие.Получить(ТекущийСимвол); Если ТекущийГотовыйСимвол = Неопределено Тогда ГотовоеЗначение = ГотовоеЗначение + ТекущийСимвол; Иначе ГотовоеЗначение = ГотовоеЗначение + ТекущийГотовыйСимвол; КонецЕсли; КонецЦикла; Возврат ГотовоеЗначение; КонецФункции
При небольших правках, можно заставить функцию конвертировать в другую сторону.