Создание конфигураций 1С: пишем "Переводчик английского" часть 4/4
Автор уроков и преподаватель школы: Владимир Милькин
Переходим к заключительной части создания "Переводчика" на 1С. После двадцать первого шага мы добавили команду "Перевести" на форму обработки "Перевод текста", превратили эту команду в кнопку и написали простейший обработчик (процедуру) для действия команды.
Если вы прерывались (закрывали конфигуратор) после предыдущей части - выполните шаг №3 (открытие конфигуратора) и шаг №4 (открытие дерева конфигурации). В дереве конфигурации откройте обработку "ПереводТекста":
- найдите в ней закладку "Формы"
- откройте там элемент "Форма"
- перейдите в модуль формы (закладка внизу "Модуль")
- уже после этого переходите к шагу №22
Оглавление
- Шаг №22: пишем функцию для перевода одного слова
- Шаг №23: применяем написанную функцию на практике
- Шаг №24: проверяем функцию в деле
- Шаг №25: разбиваем текст на слова (функция "ПереводНаСервере")
- Шаг №26: используем только что написанную функцию
- Шаг №27: делаем тестирование переводчика на целых предложениях
Шаг №22: пишем функцию для перевода одного слова
Для этого вернёмся в конфигуратор и перейдём в модуль формы.
Допишем в конец модуля функцию "ИскатьПереводНаСервере":
Код функции снабжён очень подробными комментариями, поэтому разобраться с ним не составит труда. Все конструкции должны быть вам хорошо знакомы по первым двум модулям обучения, в которых мы изучали встроенный язык 1С. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Если это не так, пожалуйста, вернитесь к изучению внутреннего языка 1С (модуль №1 и модуль №2).
Первый интересный момент в этой функции - выборка элементов из справочника "Слова". Код выборки довольно типовой (методы "Выбрать" и "Следующий") и будет использоваться нами в дальнейшем и для других справочников.
Второй момент - это то, что она выполняется на сервере (директива &НаСервереБезКонтекста), хотя все функции, которые мы писали до этого выполнялись на клиенте. Это вынужденная мера, ведь клиент ничего не знает о данных справочника (он умеет только работать с их представлением, то есть интерфейсом). Поэтому все манипуляции с данными базы (чтение, запись) всегда проводятся на сервере.
Шаг №23: применяем написанную функцию на практике
Изменим код процедуры "Перевести" таким образом, чтобы задействовать только что написанную функцию:
Что тут происходит? Мы вызываем функцию "ИскатьПереводНаСервере", передаём ей введенное пользователем слово (реквизит "Текст"), функция пробегается по всем элементам справочника и если находит перевод слова возвращает его. То значение, которое вернула функция "ИскатьПереводНаСервере" мы записываем в реквизит "Перевод", который тут же отображается в поле на форме.
Шаг №24: проверяем функцию в деле
Снова запустим режим 1С:Предприятие ("Отладка"->"Начать отладку") и откроем нашу обработку. В поле "Текст" введём слово "hello", нажмём кнопку "Перевести" и в поле "Перевод" автоматически подставится слово "привет":
Отлично! Наша программа уже может переводить отдельные слова с английского на русский. Конечно перевод этих слов должен быть предварительно забит в справочник "Слова" (что мы и сделали для некоторых слов в самом начале, помните?).
Шаг №25: разбиваем текст на слова (функция "ПереводНаСервере")
Но если мы попытаемся вместо отдельных слов переводить целые предложения ничего не получится. Ведь функция "ИскатьПереводНаСервере" принимает на вход отдельные слова, но никак не предложения.
А значит нам требуется разбить введённый текст на слова. Вернее нужно проанализировать текст, вытащить из него английские слова, сделать их перевод (при помощи функции "ИскатьПереводНаСервере") и вставить этот перевод на место английских слов.
Чтобы отделить английские буквы от других символов напишем в модуле формы (в конце) функцию "ЭтоАнглийскаяБуква". Она принимает на вход символ строки и возвращает "Истина", если этот символ - буква английского алфавита или "Ложь", если это не так: