gifts2017

Подключение проверки правописания во все документы и справочники

Опубликовал Илья Козырев (WizaXxX) в раздел Программирование - Практика программирования

Написание простой команды проверки правописания.
Используя Общие команды.

Собственно появилась задача, написать обработку, или что угодно используя любые способы и методы для проверки правописания текстовых полей в конфигурации и желательно почти в любой типовой, и на УФ.
Первой о чем я задумался был способ реализации через ВК, но потом наткнулся на статью по обработке которая использует сервис Яндекс.
Яндекс.Спеллер - API

Собственно появилась задача, написать обработку, или что угодно используя любые способы и методы для проверки правописания текстовых полей в конфигурации и желательно почти в любой типовой, и на УФ.

Первой о чем я задумался был способ реализации через ВК, но потом наткнулся на статью по обработке которая использует сервис Яндекс.

Яндекс.Спеллер - API

Мне показалось что это лучше чем ВК, так как намного быстрее, и не требует установки офиса или других программных продуктов.

Из способов я выбрал 

Web Service API

Так же доступны:

JavaScript API

Подключение к веб-формам

Подключение к текстовым редакторам

Заказчик сказал что автоматически исправлять ничего не нужно, только выводить сообщения "Где(в каком поле)","Какое слово", "Правильные варианты". Тем самым облегчив мне работу.

Далее была написана обработка которая выполняла данные действия.

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

Сам лиcтинг:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	Для Каждого Объект Из ПараметрыКоманды Цикл
	    Список = СформироватьСтруктуруДляпроверкиПровописания(Объект);
	
	    Массив = ВыполнитьПроверку(Список);
	
	    Для Каждого Элем Из Массив Цикл
		Для Каждого ЭлементСписка Из Список Цикл
			Если СтрЧислоВхождений(ЭлементСписка.Значение,Элем.Слово) > 0 Тогда
				Сообщение = "";
				Сообщение = Сообщение +"в поле: "+ПолучитьСинонимРевезита(ЭлементСписка.Представление,Объект)+Символы.ПС+"в слове "+""""+Элем.Слово+""""+" возможна ошибка:"+Символы.ПС;
				Для Каждого ВариантИсправления Из Элем.Замена Цикл
					Сообщение = Сообщение +ВариантИсправления+Символы.ПС;		
				КонецЦикла;
				Сообщить(Сообщение);
				Прервать;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла; 
КонецЦикла;
КонецПроцедуры

&НаКлиенте
Функция  Выполнитьпроверку(Список)
	СтрокаПроверки = "";
	Для Каждого Элем Из Список Цикл
		СтрокаПроверки = СтрокаПроверки + Элем.Значение+" ";			
	КонецЦикла;
	
	Соединение = Новый HTTPСоединение("speller.yandex.net/services/spellservice/checkText?text="+СтрЗаменить(СтрокаПроверки," ","+"));
	Массив = Новый Массив;
	Файл = ПолучитьИмяВременногоФайла(".xml");
	Соединение.Получить("",Файл);
	Чтение = Новый ЧтениеXML;
	Чтение.ОткрытьФайл(Файл);
	
	Пока Чтение.Прочитать() Цикл
		Структура = Новый Структура;
		Если Чтение.Имя = "word" Тогда
			Чтение.Прочитать();
			Структура.Вставить("Слово",Чтение.Значение);
			Чтение.Прочитать();
			Чтение.Прочитать();
		КонецЕсли;
		МассивОб = Новый Массив;
		Пока Чтение.Имя = "s" Цикл
			Чтение.Прочитать();
			МассивОб.Добавить(Чтение.Значение);
			Чтение.Прочитать();
			Чтение.Прочитать();
		КонецЦикла;
		Если НЕ МассивОб.Количество() = 0 Тогда
			Структура.Вставить("Замена",МассивОб);
			Массив.Добавить(Структура);
		КонецЕсли;
	КонецЦикла;	
	Возврат Массив;
КонецФункции

&НаСервере
Функция СформироватьСтруктуруДляпроверкиПровописания(Объект)
	Список = Новый СписокЗначений;
	Для Каждого Реквезит Из Объект.Метаданные().Реквизиты Цикл
		Если Строка(Реквезит.Тип) = "Строка" Тогда
			Если НЕ Объект[Реквезит.Имя] = "" Тогда
				Список.Добавить(Объект[Реквезит.Имя],Реквезит.Имя);
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	Возврат Список;
КонецФункции

&НаСервере
Функция ПолучитьСинонимРевезита(Имя,Объект)
	Возврат Объект.Метаданные().Реквизиты[Имя].Синоним;
КонецФункции


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

Наименование Файл Версия Размер
Пустая конфигурация с командой. 7
.cf 14,05Kb
11.10.13
7
.cf 1 14,05Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Шаров (Ta_Da) 11.10.13 16:02
"Реквезит" и "ПолучитьСинонимРевезита()" в "литинге" "написинного" кода в статье о проверке правописания смотрятся органично, да.
q_i; Yakud3a; CratosX; kirillsas; Kosstikk; ZOMI; Famza; EdmundoAlvares; +8 Ответить
2. Илья Козырев (WizaXxX) 11.10.13 21:29
Первый блин как говорится:) спасибо, поправил:)
3. MagIvan (RailMen) 12.10.13 00:53
Соединение = Новый HTTPСоединение("speller.yandex.net/services/spellservice/checkText?text="+СтрЗаменить(СтрокаПроверки," ","+"));

Завидую тому, что вы можете применять такую строчку...
Наша СБ такого не простит... Интернет на машинах с 1С строго под запретом...
4. Илья Козырев (WizaXxX) 12.10.13 19:04
(3) MagIvan, ,благодаря 8.3 и Профилям безопасность мы тоже закрыли весь инет, но открыли только этот адрес и все:)
5. Александр Крынецкий (echo77) 13.10.13 18:08
Все хорошо, но опечатки поправьте: пистать, выплняла

"Пистать" почему-то особо развеселила
6. Ruslan (rus128) 16.10.13 14:52
(5) + "литинг", "облеглив"...
7. q_i 23.10.13 20:40
Жаль что у ФСБ нет такого сервиса - им тоже было бы интересно узнать что там пользователи вводят в 1С.
8. artur rakhmatulin (нормальный такой) 30.01.14 01:32
тут дядя описывает метод по интереснее
http://1clancer.ru/article/veb_servisy_rabota_s_dinamicheskoj_ssylkoj_952

не реклама. очень помогло.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа