новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

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

  • Добавить свою публикацию
  • для этого требуется регистрация

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

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

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

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

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

Web Service API

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

JavaScript API

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

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

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

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

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

Пару картинок: 

Изображение

Изображение

Сам литинг:

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

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

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

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