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

12.03.21

Задачи пользователя - Поиск данных

Если вы столкнулись с ошибкой "Текст XML содержит недопустимый символ в позиции...", то эта публикация для вас.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Поиск недопустимых символов в наименовании элементов справочников:
.epf 7,25Kb
111
111
1 SM
Скачать Купить за 1 850 руб.

Если данные справочника были загружены из какой-то внешней системы, есть большая вероятность, что эти данные будут содержать недопустимые символы. И в какой-то момент, например, при выводе информации на форму может возникнуть ошибка:

 

Текст XML содержит недопустимый символ в позиции 0

 

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

Для облегчения поиска была написана эта обработка.

На форме обработки нужно выбрать вид справочника:

 

Например, справочник Номенклатура

 

И нажать кнопку "Найти недопустимые символы".

В списке будут выведены коды элементов справочника, содержащих недопустимые символы:

 

Список кодов элементов, наименования которых содержат недопустимые символы

 

И сообщение о том, сколько всего элементов было найдено.

Тестировалось на платформе 8.3.17.1549.

обработка загрузка импорт xml недопустимый символ

См. также

Поиск данных Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Обработки помогут Вам легко и, главное, быстро (в 5 раз и быстрее штатной обработки 1С), выполнить поиск дублирующих данных в Ваших базах 1С на платформах 8.1-8.3. Это позволит уменьшить объем лишней информации в справочниках и документах, планах видов характеристик и др., упростит работу с данными пользователям. А так же можно, одним нажатием, узнать в каких ссылочных объектах есть вообще дубли! Понятное расположение команд и настроек, в сочетании с описанием и справкой, еще упростят процесс. А так же обновления Вы получаете бесплатно в течение года с момента приобретения данных обработок! (Обновление от 27.11.2023, версия 6.12)

10800 руб.

14.05.2012    157440    335    253    

567

Архивирование (backup) Журнал регистрации Поиск данных Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал регистрации изменений документов в 1С для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма «История изменений». Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

21600 руб.

15.05.2017    43136    12    24    

40

Поиск данных Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Отображение и просмотр реквизитов справочника или документа - с бесконечным открытием подуровней.

2 стартмани

14.06.2024    2938    5    RustIG    26    

22

Поиск данных Системный администратор Программист Платформа 1С v8.3 Россия Абонемент ($m)

Статья об опыте развертывания и интеграции с базой данных Manticore Search для быстрого полнотекстового поиска.

1 стартмани

30.11.2023    3831    andreysidor4uk    18    

49

Поиск данных Корректировка данных Пользователь Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

PowerOffice - обработка для поиска, просмотра и обработки данных для пользователей. Доступ к объектам на просмотр и редактирование данных определяется правами пользователя.

1 стартмани

05.06.2023    2175    24    PowerBoy    1    

16

Поиск данных Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Получение ссылки в 1С по бинарной строке из PostgreSQL в виде строки формата bytea или из MSSQL в виде шестнадцатиричной строки. Кроме ссылочных объектов ссылки могут быть получены и для перечислений. Это может быть полезно при анализе логов журнала регистрации или СУБД.

1 стартмани

04.04.2023    2865    2    berserg    2    

12

Поиск данных Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Обработка позволяет найти проведенные документы без движений и, наоборот, НЕ проведенные документы с движениями. Подходит для любой конфигурации.

1 стартмани

18.08.2022    3194    26    KVIKS    3    

11
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RocKeR_13 1345 12.03.21 10:35 Сейчас в теме
Ну да, а можно в групповой обработке выполнить простенький алгоритм с опцией "Объект записывается: в коде алгоритма"

ТекНаименование = Объект.Наименование;
НедопустимыйСимвол = НайтиНедопустимыеСимволыXML(ТекНаименование);
Пока НедопустимыйСимвол > 0 Цикл
	ЛеваяЧасть = ?(НедопустимыйСимвол = 1, "", Лев(ТекНаименование, НедопустимыйСимвол-1));
	ПраваяЧасть = ?(НедопустимыйСимвол = СтрДлина(ТекНаименование), "", Сред(ТекНаименование, НедопустимыйСимвол+1)); 
	ТекНаименование = ЛеваяЧасть+"_"+ПраваяЧасть;
	НедопустимыйСимвол = НайтиНедопустимыеСимволыXML(ТекНаименование);
КонецЦикла;
Если Объект.Наименование <> ТекНаименование Тогда
	Объект.Наименование = ТекНаименование;
	Объект.Записать();
КонецЕсли;
Показать
voneska7; xoisim; +2 Ответить
2. Nicholas 897 12.03.21 10:58 Сейчас в теме
(1) Тоже хороший вариант. Спасибо!
3. RocKeR_13 1345 12.03.21 10:59 Сейчас в теме
4. MVK80 13.03.21 09:30 Сейчас в теме
(0), в БСП всё уже давно есть. Просто выбирайте, что вам нужно:
ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(Текст, СимволЗамены)
Или
ОбщегоНазначенияКлиентСервер.УдалитьНедопустимыеСимволыXML(Текст)
ZDmitry83; Apolonov-Erik; Alex17; triviumfan; +4 Ответить
5. Nicholas 897 15.03.21 08:22 Сейчас в теме
(4) Да, тоже хороший вариант для исправления, но прежде чем исправлять - нужно сначала найти.
6. MVK80 15.03.21 08:48 Сейчас в теме
(5), ну по хорошему надо не допускать их появление :), то есть проверять/исправлять этими процедурами при загрузке извне и только потом записывать. Ну и бывают невидимые недопустимые символы. Что даст поиск визуально в которой не видно в чем проблема?
Ну в целом, если вам прям так нужен поиск без исправления, то взять за основу одну из процедур скопировать и убрать исправление и оставить только поиск это быстро. Ну допустим, вам прям надо взглянуть, какие элементы выдают ошибки для анализа какого-то. Но в вашей обработке еще напрашивается кнопочка удалить и/или заменить недопустимые символы :). Или еще одна кнопочка - это показать коды недопустимых символов, чтобы понять что это прилетело, если визуально не видно.
triviumfan; +1 Ответить
7. Nicholas 897 15.03.21 08:53 Сейчас в теме
(6) Пожалуй, даже сделаю, немного погодя, кнопочки: "удалить", "заменить", "показать коды". Спасибо за идею!
8. GetNight 48 30.04.21 14:15 Сейчас в теме
Я бы сделал так:

Функция XMLУдалитьНедопустимыеСимволы(СтрокаXML, СимволЗамены = "") Экспорт
#Если НЕ ВебКлиент Тогда
	Пока Истина Цикл
		Позиция = НайтиНедопустимыеСимволыXML(СтрокаXML);
		Если Позиция Тогда
			Символ = Сред(СтрокаXML, Позиция, 1);
			СтрокаXML = СтрЗаменить(СтрокаXML, Символ, СимволЗамены);
		Иначе
			Возврат СтрокаXML
		КонецЕсли
	КонецЦикла
#КонецЕсли
КонецФункции
Показать


Если одинаковых символов несколько - нет смысла гонять циклом, лучше удалять их все сразу.
В подавляющем большинстве случаев символ удаляем, поэтому функцию так и назовём.
А если вдруг нужно символ не удалять, а заменить, используем второй параметр.

П.С. с удивлением обнаружил в УПП функцию ОбщегоНазначенияКлиентСервер.УдалитьНедопустимыеСимволыXML, она поражает своей атмосферностью...
посмотреть


позаимствовал оттуда #Если НЕ ВебКлиент (я так понимаю, добавили его не просто так ;)
и назвал свою чуть иначе, чтобы не вылетало с ошибкой
Оставьте свое сообщение