[Alimir_BootModal_Login]

Создание конфигураций 1С: пишем "Переводчик английского" часть 4/4

Автор уроков и преподаватель школы: Владимир Милькин

Переходим к заключительной части создания "Переводчика" на 1С. После двадцать первого шага мы добавили команду "Перевести" на форму обработки "Перевод текста", превратили эту команду в кнопку и написали простейший обработчик (процедуру) для действия команды.

Если вы прерывались (закрывали конфигуратор) после предыдущей части -  выполните шаг №3 (открытие конфигуратора) и шаг №4 (открытие дерева конфигурации). В дереве конфигурации откройте обработку "ПереводТекста":
- найдите в ней закладку "Формы"
- откройте там элемент "Форма"
- перейдите в модуль формы (закладка внизу "Модуль")
- уже после этого переходите к шагу №22

Шаг №22: пишем функцию для перевода одного слова

Для этого вернёмся в конфигуратор и перейдём в модуль формы.

Допишем в конец модуля функцию "ИскатьПереводНаСервере":

50_1

Код функции снабжён очень подробными комментариями, поэтому разобраться с ним не составит труда. Все конструкции должны быть вам хорошо знакомы по первым двум модулям обучения, в которых мы изучали встроенный язык 1С. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Если это не так, пожалуйста, вернитесь к изучению внутреннего языка 1С (модуль №1 и модуль №2).

Первый интересный момент в этой функции - выборка элементов из справочника "Слова". Код выборки довольно типовой (методы "Выбрать" и "Следующий") и будет использоваться нами в дальнейшем и для других справочников.

Второй момент - это то, что она выполняется на сервере (директива &НаСервереБезКонтекста), хотя все функции, которые мы писали до этого выполнялись на клиенте. Это вынужденная мера, ведь клиент ничего не знает о данных справочника (он умеет только работать с их представлением, то есть интерфейсом). Поэтому все манипуляции с данными базы (чтение, запись) всегда проводятся на сервере.

 
 

Шаг №23: применяем написанную функцию на практике

Изменим код процедуры "Перевести" таким образом, чтобы задействовать только что написанную функцию:

51

Что тут происходит? Мы вызываем функцию "ИскатьПереводНаСервере", передаём ей введенное пользователем слово (реквизит "Текст"), функция пробегается по всем элементам справочника и если находит перевод слова возвращает его. То значение, которое вернула функция "ИскатьПереводНаСервере" мы записываем в реквизит "Перевод", который тут же отображается в поле на форме.

 
 

Шаг №24: проверяем функцию в деле

Снова запустим режим 1С:Предприятие ("Отладка"->"Начать отладку") и  откроем нашу обработку. В поле "Текст" введём слово "hello", нажмём кнопку "Перевести" и в поле "Перевод" автоматически подставится слово "привет":

52

Отлично! Наша программа уже может переводить отдельные слова с английского на русский. Конечно перевод этих слов должен быть предварительно забит в справочник "Слова" (что мы и сделали для некоторых слов в самом начале, помните?).

 
 

Шаг №25: разбиваем текст на слова (функция "ПереводНаСервере")

Но если мы попытаемся вместо отдельных слов переводить целые предложения ничего не получится. Ведь функция "ИскатьПереводНаСервере" принимает на вход отдельные слова, но никак не предложения.

А значит нам требуется разбить введённый текст на слова. Вернее нужно проанализировать текст, вытащить из него английские слова, сделать их перевод (при помощи функции "ИскатьПереводНаСервере") и вставить этот перевод на место английских слов.

Чтобы отделить английские буквы от других символов напишем в модуле формы (в конце) функцию "ЭтоАнглийскаяБуква". Она принимает на вход символ строки и возвращает "Истина", если этот символ - буква английского алфавита или "Ложь", если это не так:

53

Я попробовал написать сам, покажите мне эталонный вариант

Наконец, напишем функцию "ПереводНаСервере", которая будет принимать введенный пользователем текст, а затем при помощи функции "ЭтоАнглийскаяБуква" разделять его на отдельные английские слова.

В этой же функции эти слова будут переводиться при помощи функции "ИскатьПереводНаСервере" и подставляться в итоговый результат:

54

Я попробовал написать сам, покажите мне эталонный вариант
 
 

Шаг №26: используем только что написанную функцию

Воспользуемся только что написанной функцией и изменим процедуру "Перевести" следующим образом:

55

 
 

Шаг №27: делаем тестирование переводчика на целых предложениях

Запустим 1С в режиме Предприятие ("Отладка"->"Начать отладку") и будем пробовать переводить предложения:

"Hello, World!":

56

"How are you?":

57

"I am Alex":

58

Эталонная база, после выполнения всех шагов этого урока