Проверка орфографии в 1С через API Яндекс.Спеллера

Опубликовал Александр Зубарь (azubar) в раздел Обмен - Интеграция с WEB

Реализация проверки орфографии через API Яндекс.Спеллера, которую можно установить любому текстовому полю на форме. Работает быстрей  и удобней, чем проверка через COM-объекты Word или OpenOffice, но для работы необходим доступ в интернет.

Ссылки по теме:


//infostart.ru/public/81278/ - Интеграция TinyMCE в 1С. (afedorov)
//infostart.ru/public/22237/ - [TinyMCE] - редактор HTML WYSIWYG кода. (Душелов)

Обработка SpellChecker1С содержит урезанную версию TinyMCE, вырезано практически все, что не нужно для работы проверки орфографии. Не изменяет форматирование текста (сохраняет абзацы/переносы строк).

Из любой формы достаточно вызвать функцию ПроверитьОрфографию и передать ей два параметра указатель на текущую форму и на элемент формы который необходимо проверить.


Для встраивания в вашу конфигурацию необходимо в общем модуле добавить процедуру:

//Процедура ПроверитьОрфографию(ТекФорма, Элемент)
//ТекФорма - открытая форма в которой надов текстовом
// поле проверить орфографию.
//Элемент - текстовое поле для проверки орфографии.
Процедура ПроверитьОрфографию(ТекФорма, Элемент) Экспорт
    прОрфографии = Обработки.SpellChecker1С.Создать();
    прОрфографии.ТекстХТМЛ = Элемент.Значение;
    Форма = прОрфографии.ПолучитьФорму();
    Форма.ВладелецФормы = ТекФорма;
    Форма.ОткрытьМодально();
    Если (прОрфографии.Сохранить) Тогда
        Элемент.Значение = прОрфографии.ТекстХТМЛ;
    КонецЕсли;
КонецПроцедуры

Вставить внешнюю обработку SpellChecker1С и в нужной форме прописать обработку проверки, например как обработку события "Открытие":

Процедура ОписаниеОткрытие(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ПроверкаОрфографии.ПроверитьОрфографию(ЭтаФорма, Элемент);
КонецПроцедуры

В прикрепленных файлах сама обработка и демоконфигурация с одним документом "Событие" в котором встроена проверка текстовых полей.

Видео работы демоконфигурации: http://www.youtube.com/watch?v=yu6CU70klpo

Скачать файлы

Наименование Файл Версия Размер
Обработка SpellChecker1С.epf
.epf 318,47Kb
22.09.11
259
.epf 318,47Kb 259 Скачать
Демоконфигурация
.dt 347,53Kb
22.09.11
76
.dt 347,53Kb 76 Скачать

См. также

Комментарии
1. Ийон Тихий (cool.vlad4) 41 22.09.11 15:30 Сейчас в теме
2. Александр Зубарь (azubar) 75 22.09.11 18:00 Сейчас в теме
(1) Обновил, теперь tinyMCE русский.

если уже побывали обработку то надо удалить кеш старого tinyMCE, в виндовс 7 в каталоге C:\Users\Имя_пользователя\AppData\Local\Temp удалить папку TinyMCE
3. Алексей Плутенко (Noy) 1054 22.09.11 18:43 Сейчас в теме
В описании указана в том числе и платформа 7.7, а в файлах судя по всему все только для 8.х
Пример для 7.7 будет?
4. Александр Зубарь (azubar) 75 22.09.11 19:39 Сейчас в теме
(3) Noy, к сожалению это ошибка в описании, примеры только под платформу 8.х. На 1С77 реализовать такое сложней приходится использовать ActiveX и без внешних компонент не обойтись.

Вот пример реализации TinyMCE на платформе 1С77 (использует ВК 1С++ v.3.0.1.22 и FormEx v.2.0.5.92):
http://www.1cpp.ru/forum/YaBB.pl?num=1253809274
Приделал к этой разработке проверку через Яндекс:
http://narod.ru/disk/25999743001/redactor_spellchecker_77.zip.html

Еще один пример YSIWYG редактора:
http://infostart.ru/public/79114/
5. Алексей Плутенко (Noy) 1054 22.09.11 20:51 Сейчас в теме
(4) спасибо за развернутый ответ
6. Доржи Балбаров (Angeros) 23.09.11 06:22 Сейчас в теме
Отличная идея. Но даже не представляю где это можно применить.
7. Александр Зубарь (azubar) 75 23.09.11 08:38 Сейчас в теме
(6) Angeros, мы в УТ в документе "Событие" применили. Кроме того есть конфигурации по документообороту, там тоже пойдет.
Пример использования: "Аналитика: Документооборот" - http://1c-doc.ru/work-with-docs/proverka_orfografii.html
А вообще разрабатывалась обработка как альтернатива проверки через COMОбъект("Word.Application"), так как она жутко тормозная и не удобная. Изучалась возможность интеграции 1С с пакетами проверки орфографии:
Orfo Switcher (http://orfoswitcher.ru/)
Spell Checker (http://spell.com.ru/)
ОРФО 2010 Максимальная (www.informatic.ru)
к сожалению ни один из перечисленных пакетов проверки орфографии нормально не интегрируется с 1С.
8. Николай Бекетов (jorikfon) 289 23.09.11 13:48 Сейчас в теме
(6) Angeros, Хочу в CRM попробовать прикрутить к событию, заданию сотруднику и листу учета рабочего времени :) Посмотрить что получится..
9. Сергей Кучеров (СергейКа) 610 23.09.11 16:53 Сейчас в теме
Больше всего на эту тему понравилась публикация не требующая интернета, зато появляется компонента :)
http://infostart.ru/public/19006/
Есть свои плюсы и минусы.
10. Андрей К. (andrei.k) 24.09.11 20:41 Сейчас в теме
Для Документооборота самое то :) Спасибо! Юристы люди требовательные, документы по 10 раз возвращают.
11. Саша Мелентьев (scooper) 24.09.11 21:40 Сейчас в теме
12. Алексей Панков (Hron) 25.09.11 11:19 Сейчас в теме
Спасибо, забираю, полезная вещь. Есть несколько самописных документов на форматированном документе (служебная записка, приказ и т.д.), попробую применить там.
Есть какие нибудь сложности при редактировании форматированного документа? И возможно ли редактирование сделать интерактивным, из формы самого документа?
13. Сергей Старых (tormozit) 4168 25.09.11 12:18 Сейчас в теме
Как применить для html текста (юзер пишет его в ПолеHtmlДокумента в режиме редактирования)?
14. Александр Зубарь (azubar) 75 25.09.11 23:41 Сейчас в теме
(13) tormozit, для html текста надо в модуле функции заменить две функции ИзХТМЛВТекст() и ИзТекстаВХТМЛ() на следующие:

Функция ИзХТМЛВТекст(ТекстХТМЛ)
	Возврат ТекстХТМЛ;	
КонецФункции	

Функция ИзТекстаВХТМЛ(Текст)
    Возврат Текст;
КонецФункции
...Показать Скрыть


Тогда преобразования текста выполнятся не будет. Или просто убрать вызов этих функций оставив только передаваемый им параметр, например код:
Возврат ИзХТМЛВТекст(ОбластьТекста.innerText);

заменить на:
Возврат ОбластьТекста.innerText;
15. Foken (itlbv) 26.09.11 14:40 Сейчас в теме
Огромное спасибо, обработка крайне помогла! Надо было срочно, свою писать времени не было, а тут очень вовремя на глаза попалась! Автору успехов!
16. Serg (spacedragon) 27.09.11 18:38 Сейчас в теме
Немаловажная деталь при работе он-лайн это наличие прокси сервера. Есть ли возможность в данной обработке настроить параметры прокси сервера для корректной работы?
17. Александр Зубарь (azubar) 75 27.09.11 19:38 Сейчас в теме
(16) У нас через прокси работает нормально, настройки из Internet Explorer, т.е. если у вас на Internet Explorer указан прокси то будет работать через прокси.
18. J G (JRG) 28.09.11 16:59 Сейчас в теме
19. Иван Иванов (piton667) 28.09.11 17:38 Сейчас в теме
20. Алексей Фурманов (Aleksey-29) 29.09.11 09:48 Сейчас в теме
Хорошо придумал, тока:
1. интернет нужен, а у некоторых пользователей в нашей организации его нет. Выдает ошибку или просто не проверит орфографию? (Будем посмотреть :) )
2. хорошо бы проверять орфографию в самой форме, а не в новой.
А так, отдаю свой "+" автору.
21. Надежда Кутузова (Nadushka74) 23.04.12 07:44 Сейчас в теме
все работает, но периодически выдает ошибку

{Обработка.SpellChecker1С(104)}: Ошибка при вызове метода контекста (execScript)
Эксплорер.Документ.parentWindow.ExecScript(JScript,"JavaScript");
по причине:
Произошла исключительная ситуация: Не удалось завершить действие. Ошибка 80020101.

с чем это может быть связано, обработка очень пользуется популярностью у пользователей и очень не удобно когда вылетает программа из-за нее!!!
Al3xandrov; CyberCerber; Ramonchik; +3 Ответить 1
22. Александр Зубарь (azubar) 75 30.04.12 18:25 Сейчас в теме
(21) Укажите пожалуйста версию установленного браузера Internet Explorer.
Это скорее всего связано с ошибкой преобразования хтмл в текст, которые выполняется во время передачи текста для проверки на сервер Яндекса. Преобразование выполняется при помощи VBScript.RegExp.

Как вариант решения:
1) обновить Internet Explorer;
2) обновить vbscript.dll;
3) перед вставкой текста в окно обработки очищать его от html (это если вы копируете текст из word или браузера), очистить можно путем вставки в блокнот и копирования из блокнота.

Жду информации о браузере, операционной системе и версии vbscript.dll, попробуем исправить.
Nadushka74; +1 Ответить 1
23. Надежда Кутузова (Nadushka74) 02.05.12 08:16 Сейчас в теме
(22) azubar,
IE - 8.0.6001
vbscript - 5.8.6001
текст не копируется Винда ХР
24. Лена (VorHel) 03.10.12 23:45 Сейчас в теме
Спасибо большое! Для текста работает замечательно.
Вот только для хтмл пришлось подправить:
Функция ИзТекстаВХТМЛ(Текст)
	Если ХТМЛ Тогда   //это электронное письмо у меня в формате хтмл
		НачалоBODY = Найти(Текст, "<BODY>");
		КонецBODY  = Найти(Текст, "</BODY>");
		Если НачалоBODY > 0 И КонецBODY > 0 И (НачалоBODY + 6) < КонецBODY Тогда
			Возврат "<p>"+УправлениеЭлектроннойПочтой.ПреобразоватьТекстИзХТМЛФорматаВПростой(Текст)+"</p>";
		КонецЕсли;
		Возврат Текст;
	Иначе
		Возврат "<p>"+СтрЗаменить(Текст, Символы.ПС, "")+"</p>";
	КонецЕсли;
КонецФункции
...Показать Скрыть
25. Лена (VorHel) 04.10.12 19:13 Сейчас в теме
Вчера погорячилась.
Если НачалоBODY > 0 И КонецBODY > 0 И (НачалоBODY + 6) < КонецBODY Тогда
	//Возврат "<p>"+УправлениеЭлектроннойПочтой.ПреобразоватьТекстИзХТМЛФорматаВПростой(Текст)+"</p>";
	ВремТекст = УправлениеЭлектроннойПочтой.ПреобразоватьТекстИзХТМЛФорматаВПростой(Текст);
	Возврат "<p>"+СтрЗаменить(ВремТекст, Символы.ПС, "")+"</p>";
КонецЕсли;
...Показать Скрыть
26. Константин Гейнрих (CyberCerber) 148 22.11.12 17:36 Сейчас в теме
Мда, главный минус - это требования Инета. Хотя все остальное: отсутствие внеш компоненты, скорость - сплошные плюсы. :-)
27. Константин Гейнрих (CyberCerber) 148 23.11.12 09:42 Сейчас в теме
А что насчет 8.2? Будет работать на УФ?
28. Александр (aet) 37 13.12.12 13:02 Сейчас в теме
(27) CyberCerber, нет, надо доделывать
29. MIK В (mikukrnet) 97 30.08.13 18:58 Сейчас в теме
А можно как-то сделать, чтобы при отсутствии ошибок окошко сразу закрывалось, в идеале - вообще не мелькало на экране?
30. Rovan (Rovan) 20 26.09.13 10:42 Сейчас в теме
На обычной форме у меня запустилось, а
на управляемой форме не работает.
При передаче текста в полеhtmlдокумента
Ошибка сценария:
Строка 1
Символ 1
Ошибка: Синтаксическая Ошибка
Код: 0
URL: tinyMCE/tinyMCE/jscripts/tiny_mce/tiny_mce.js

Подскажите пожалста как запустить на УФ
31. Rovan (Rovan) 20 26.09.13 11:11 Сейчас в теме
Вот такой вызов
Элементы.Эксплорер.Документ.location.href = ВремФайл;
пишет
Ошибка - отказано в доступе
32. Rovan (Rovan) 20 26.09.13 11:39 Сейчас в теме
Получилось открыть окно вот так
Элементы.Эксплорер.Документ.body.innerHTML = ВремФайл;

Но теперь следующая проблема - при запуске
parentWindow.ExecScript("tinyMCE.execCommand('mceSave')","JavaScript");

говорит
Ошибка: "tinyMCE" не определено

"{Форма.ФормаУпр.Форма(25)}: Ошибка при вызове метода контекста (execScript): Произошла исключительная ситуация: Не удалось завершить действие. Ошибка 80020101."
33. tixis1c tixis1c (qwed557) 26 18.10.13 08:03 Сейчас в теме
а можно сделать чтобы проверка выполнялась при вводе каждого слова и если нет ошибок то ничего не открывалось, а если ошибка то тогда уж открывалась форма и показывала ошибки?
34. tixis1c tixis1c (qwed557) 26 18.10.13 08:30 Сейчас в теме
даже не так, пусть проверяет всю строку, и только если есть ошибки тогда открывает форму, а если нет то пусть форма или моргнет или вообще не открывается, было бы супер
35. tixis1c tixis1c (qwed557) 26 18.10.13 09:14 Сейчас в теме
http://www.nashe1c.ru/materials-view.jsp?id=412 все то же самое только качать можно без стармани
36. Антон Юрков (yuarsm) 26.12.13 14:00 Сейчас в теме
при вызове пишет ошибку
Значение не является значением объектного типа (Документ)
Эксплорер.Документ.parentWindow.ExecScript("tinyMCE.execCommand('mceSave')","JavaScript");

перед этим выдает ошибку
Преобразование значения к типу Число не может быть выполнено
ВремФайл = КаталогДанных + "temp.html";
Прикрепленные файлы:
37. kuppidon kuppidon (kuppidon) 20.02.14 17:04 Сейчас в теме
Полдня прогибал это все под управляемое приложение.
Все получилось, но в итоге выяснилось, что это все не работает с форматированным текстом (если шрифт увеличить, жирность добавить и т.д.)
38. Евгений Чекушкин (check2) 19 30.05.14 10:02 Сейчас в теме
(14) azubar, Попробовал убрать преобразование HTML <> текст, согласно Вашим рекомендациям. Получил ошибку (скршот). Можете что нибудь посоветовать?

PS Чуть ниже нашел рекомендации как сделать, вопрос снят. Только вот другой вопрос. Проверять ХТМЛ в обычном виде реально? Без потери форматирования документа?
Прикрепленные файлы:
39. Александр Зубарь (azubar) 75 13.06.14 11:09 Сейчас в теме
(38) check2, реально, можно обновить tinyMCE до последней версии, по сути в обработку встроен tinyMCE с плагином проверки орфографии на Яндексе.
40. апрып рывпар (angel007111) 30.09.15 11:17 Сейчас в теме
(36) yuarsm, Кто-то сделал обработку так чтобы можно было проверять не только текстовые поля но и поля HTML???
41. Владимир Бывалый (mvlad777) 13.04.16 16:17 Сейчас в теме
Подскажите, пожалуйста, как переделать эту обработку под Упраляемые формы. Убил целый день, так и не смог. Ведь там с макета распаковывается целый мини сайт (иерархическая структура папок и файлов) и как поле HTML документа в УФ заставить работать с этим мини-сайтом? В обычном приложении используется метод Перейти() и после этого автоматом всё подхватывается. а в УФ нет такого метода. как тут нужно делать?