gifts2017

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

См. также

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

если уже побывали обработку то надо удалить кеш старого tinyMCE, в виндовс 7 в каталоге C:\Users\Имя_пользователя\AppData\Local\Temp удалить папку TinyMCE
3. Алексей Плутенко (Noy) 22.09.11 18:43
В описании указана в том числе и платформа 7.7, а в файлах судя по всему все только для 8.х
Пример для 7.7 будет?
4. Александр Зубарь (azubar) 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) 22.09.11 20:51
(4) спасибо за развернутый ответ
6. Доржи Балбаров (Angeros) 23.09.11 06:22
Отличная идея. Но даже не представляю где это можно применить.
7. Александр Зубарь (azubar) 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) 23.09.11 13:48
(6) Angeros, Хочу в CRM попробовать прикрутить к событию, заданию сотруднику и листу учета рабочего времени :) Посмотрить что получится..
9. Сергей Кучеров (СергейКа) 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) 25.09.11 12:18
Как применить для html текста (юзер пишет его в ПолеHtmlДокумента в режиме редактирования)?
14. Александр Зубарь (azubar) 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) 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) 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) 22.11.12 17:36
Мда, главный минус - это требования Инета. Хотя все остальное: отсутствие внеш компоненты, скорость - сплошные плюсы. :-)
27. Константин Гейнрих (CyberCerber) 23.11.12 09:42
А что насчет 8.2? Будет работать на УФ?
28. Александр (aet) 13.12.12 13:02
(27) CyberCerber, нет, надо доделывать
29. MIK В (mikukrnet) 30.08.13 18:58
А можно как-то сделать, чтобы при отсутствии ошибок окошко сразу закрывалось, в идеале - вообще не мелькало на экране?
30. Rovan (Rovan) 26.09.13 10:42
На обычной форме у меня запустилось, а
на управляемой форме не работает.
При передаче текста в полеhtmlдокумента
Ошибка сценария:
Строка 1
Символ 1
Ошибка: Синтаксическая Ошибка
Код: 0
URL: tinyMCE/tinyMCE/jscripts/tiny_mce/tiny_mce.js

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

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

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

"{Форма.ФормаУпр.Форма(25)}: Ошибка при вызове метода контекста (execScript): Произошла исключительная ситуация: Не удалось завершить действие. Ошибка 80020101."
33. tixis1c tixis1c (qwed557) 18.10.13 08:03
а можно сделать чтобы проверка выполнялась при вводе каждого слова и если нет ошибок то ничего не открывалось, а если ошибка то тогда уж открывалась форма и показывала ошибки?
34. tixis1c tixis1c (qwed557) 18.10.13 08:30
даже не так, пусть проверяет всю строку, и только если есть ошибки тогда открывает форму, а если нет то пусть форма или моргнет или вообще не открывается, было бы супер
35. tixis1c tixis1c (qwed557) 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) 30.05.14 10:02
(14) azubar, Попробовал убрать преобразование HTML <> текст, согласно Вашим рекомендациям. Получил ошибку (скршот). Можете что нибудь посоветовать?

PS Чуть ниже нашел рекомендации как сделать, вопрос снят. Только вот другой вопрос. Проверять ХТМЛ в обычном виде реально? Без потери форматирования документа?
Прикрепленные файлы:
39. Александр Зубарь (azubar) 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 документа в УФ заставить работать с этим мини-сайтом? В обычном приложении используется метод Перейти() и после этого автоматом всё подхватывается. а в УФ нет такого метода. как тут нужно делать?