1С: Нечитаемые символы в табличном документе

А вот нежданно и негаданно, оказывается что в табличный документ нельзя помещать некоторые нечитаемые символы. Если это произошло, то 1С при стандартном табдок.Показать();, тоже покажет…ошибку:

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

Пришлось внедрять функцию, которая чистит строку от «мусора», и фильтровать размещение данных в параметры макета через неё:

Функция УдалитьНечитаемыеСимволы(ВхСтрока) Экспорт
   // Удаляем переносы строк
   ИсхСтрока = СтрЗаменить(ВхСтрока,  Символы.ПС,   " "); // Перевод строки
   ИсхСтрока = СтрЗаменить(ИсхСтрока, Символы.ВК,   " "); // Возврат каретки
   ИсхСтрока = СтрЗаменить(ИсхСтрока, Символы.НПП,  " "); // Неразрывный пробел \xA0
   ИсхСтрока = СтрЗаменить(ИсхСтрока, Символы.ПФ,   " "); // Перевод формы (страницы).
   ИсхСтрока = СтрЗаменить(ИсхСтрока, Символы.ВТаб, " "); // Символ табуляции (вертикальной)
   ИсхСтрока = СтрЗаменить(ИсхСтрока, Символы.Таб,  " "); // Символ табуляции (горизонтальной).
   ИсхСтрока = СтрЗаменить(ИсхСтрока, Символ(182),  " "); // Символ параграфа
   ИсхСтрока = СтрЗаменить(ИсхСтрока, Символ(176),  " "); // Символ градуса
   ИсхСтрока = СтрЗаменить(ИсхСтрока, Символ(160),  " "); // Неразрывный пробел симв.

   // Удаляем маркеры списков
   ИсхСтрока = СтрЗаменить(ИсхСтрока, "•", "-"); // маркер 1
   ИсхСтрока = СтрЗаменить(ИсхСтрока, "◦", "-"); // маркер 2

   // Удаляем спец.HTML и Word
   ИсхСтрока = СтрЗаменить(ИсхСтрока," ", " "); //  HTML-пробел
   ИсхСтрока = СтрЗаменить(ИсхСтрока,"&",  " ");  // Раскодировать (& → &).
   //ИсхСтрока = СтрЗаменить(ИсхСтрока, "&lt;", " "); // экранированное представление символа <
   //ИсхСтрока = СтрЗаменить(ИсхСтрока, "&gt;", " "); // экранированное представление символа >
   ИсхСтрока = СтрЗаменить(ИсхСтрока, "¶", " "); // абзац симв.
   ИсхСтрока = СтрЗаменить(ИсхСтрока, "�",  ""); // битый символ

   // Удаляем все управляющие символы (ASCII 0–31), \x01и \x0B
   Для i = 0 По 31 Цикл
       ИсхСтрока = СтрЗаменить(ИсхСтрока, Символ(i), "");
   КонецЦикла;

   // Удаляем лишние пробелы по краям
   ИсхСтрока = СокрЛП(ИсхСтрока);

   // Удаляем двойные пробелы внутри строки
   Пока Найти(ИсхСтрока, "  ") > 0 Цикл
       ИсхСтрока = СтрЗаменить(ИсхСтрока, "  ", " ");
   КонецЦикла;
   Возврат ИсхСтрока;  //Возвращает очищенную строку (тип: Строка)
КонецФункции

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.