Удалить недопустимые символы 1с
Иногда возникает необходимость удалить из переменной с типом Строка все специальные символы и оставить только буквы, цифры, тире, подчеркивание и т.п. Например, это нужно при формировании имени файла.
Способов существует много. Некоторые предлагают работать с кодом символов. Известно, что коды букв и цифр находятся в определенном интервале. Таким образом, можно получать код каждого символа, сравнивать его с допустимыми интервалами и в случае необходимости удалять символ.
Я же предлагаю более простой, на мой взгляд, способ. Он заключается в последовательном переборе символов строки и допустимых символов. Для строк с небольшой длиной (а имена файлов редко бывают очень длинными) этот код работает достаточно быстро.
Функция ПолучитьПолноеИмяФайла ( знач Контрагент )
//Создаем переменную, в которую поместим все допустимые символы
ДопустимыеСимволы = " абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_" ;
ДлинаДС = СтрДлина ( ДопустимыеСимволы ) ;
Символ = СтрДлина ( Контрагент ) ;
//В переменной Контрагент находится строка, из которой нужно убрать недопустимые символы
//Обойдем каждый символ этой строки, начиная с конца
Пока Символ > 0 Цикл
Найдено = Ложь ;
//Проверим, есть ли этот символ в перечне допустимых.
//Здесь вместо цикла можно было бы использовать еще функцию Найти()
Для ДопустимыйСимвол = 1 По ДлинаДС Цикл
Если Сред ( Контрагент , Символ , 1 ) = Сред ( ДопустимыеСимволы , ДопустимыйСимвол , 1 ) Тогда
Найдено = Истина ;
Прервать ;
КонецЕсли ;
КонецЦикла ;
//Если символ не найден, удаляем его.
Если Не Найдено ТОгда
Контрагент = СтрЗаменить ( Контрагент , Сред ( Контрагент , Символ , 1 ) , "" ) ;
КонецЕсли ;
Символ = Символ - 1 ;
КонецЦикла ;
Как удалить из строки все символы кроме букв и цифр : 7 комментариев
Ваш код вообше не работает. отладчик показывает что ваш код возвращает первый символ строки
Добрый день, Азим.
Только что проверили. Код работает.
Не хороший пример.
СтрЗаменить(Контрагент, Сред(Контрагент,Символ, 1), «»); — убирает сразу несколько символов из строки, а отнимается только один (Символ = Символ-1;)
«фыв?фывыф. фывфы?» Как вы думаете, удалит этот код знаки вопроса?
Да, наш код удалит знаки вопроса.
В вашем примере знаки вопроса будут удалены еще на первой итерации, т.к. последний символ — вопрос, а проверка идет с конца строки.
Действительно, удаляется несколько символов, а отнимается потом только один. Это не приводит к ошибке, т.к. функция СРЕД при выходе за границы строки возвращает «» — пустую строку. В результате функция СТРЗАМЕНИТЬ выглядит так: СТРЗАМЕНИТЬ(Контрагент, «», «»). Это никак не влияет на обрабатываемое значение.
Но Вы правы, наш код не оптимален, можно его доработать так, чтобы не было лишних операций поиска и замены.
Можно проще и без двух вложенных циклов, которые дико тормозят при массовом вызове данной функции.
Предлагайте свой вариант :)
Функция УбратьЛишниеСимволы(Строка1) Экспорт
НовСтрока = «»;
ПравильныеСимволы = «0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm»;
Для Сч = 1 по СтрДлина(Строка1) Цикл
ТекСимв = Сред(Строка1, Сч, 1);
Если Найти(ПравильныеСимволы, ТекСимв) > 0 Тогда
НовСтрока = НовСтрока + ТекСимв;
КонецЕсли;
КонецЦикла;
Добавить комментарий Отменить ответ
Теперь мы в соцсетях! Подписывайтесь, чтобы получать информацию о последних обновлениях или задать вопрос.
КракозяL9;бры (крякозяL9;бры) — бессмысленный с точки зрения читателя набор символов, чаще всего получаемый на компьютере в результате неправильного перекодирования осмысленного текста. Если (не)осмысленные пользователи (не)осмысленно ввели такой текст в наименование например номенклатуры - получим некоторые проблемы при обменах xml.
Постановка задачи:
Ошибка при загрузке данных: : Ошибка при вызове метода контекста (Прочитать): Ошибка разбора XML: - [2444,36021]
Фатальная ошибка:
PCDATA invalid Char value 2
Программисты 8.х видимо наступали на эти грабли, поэтому в каждой типовой конфигурации аж несколько раз встречается экспортная функция УдалитьНедопустимыеСимволыXML(Строка).
И при экспорте в xml символы такие удаляют.
А вот программисты "клюшек" считают что их дело выгрузить, а как будет загружаться, так это проблема на вашей стороне - и они ничего такого не делают.
Поэтому при переходе с 7.7 на 8.3 вас может ждать нежданчик.
Особенно это приятно, когда сам файл размером в 500 Мб.
Решение:
Слету не нашел ничего похожего ни для 1С, ни для PC, не считая могучих пакетов для обработки xml.
Внешняя обработка в 1С, которая убирает некорректные символы из файла xml и записывает его с новым названием, не перезаписывая старый..
Порядок работы:
Открываем обработку в 1С.
Нажимаем кнопку «Выполнить»
Выбираем файл для обработки
Требования к запуску обработки:
Обработка предназначена для использования с актуальными типовыми конфигурациями на управляемых формах.
Также возможна адаптация отчета под любую имеющуюся у пользователя типовую или нетиповую конфигурацию.
Установка и использование обработки:
- Обработка выполнена с использованием управляемых форм, соответственно, для конфигураций с обычным интерфейсом требует для работы включения в конфигурацию либо запуска в управляемом интерфейсе.
- Может использоваться платформа 8.3.7.х и старше
Поддержка отчета, лицензирование:
Не верю, что мне приходится писать для пользователей этого сайта, но как оказалось нужно.
Если вы не представляете: что такое 1С Предприятие, файл, xml и зачем вам нужна эта кухня.
Если физиологические, моральные, религиозные или другие причины не позволяют вам заполнять справочники, документы, настраивать отчеты 1С и запускать обработки.
А платить вы за это не будете так как программист с десятилетним стажем.
Закройте эту страницу не продолжая чтения дальше.
Для адекватных людей:
Если оно есть у вас или предложения по улучшению - пишите.
Код открыт - дорабатывайте по себя как хотите.
Специальные предложения
Доброе утро!
Тема весьма актуальная.
Учитывая источники информации вводимые в справочники (копипаст).
С уважением
Добрый день!
Подскажите, пожалуйста, как можно получить эту обработку Удаление недопустимых символов в существующем файле XML.
Виктор
Простенько и со вкусом +1
Прикрутил в свой механизм: пригодилось.
(4) Добавил получение атрибута XML из строки в вашей функции:
Для тех кто хочет скачать:
в данной обработке всего 18 строк (вместе с пустыми), она даже не сообщает были недопустимые символы или нет.
Нет выбора кодировки. Нет никаких ухищрений для работы с большими файлами.
Обработка заработает только в стандартных 1С конфигурациях.
И за это 2 стартмани.
Для проверки недопустимых символов есть метод в платформе:
НайтиНедопустимыеСимволыXML(Стр);
т.е. просто перебирайте строки файла и проверяйте этим методом и не тратьте свои денежки.
Просмотры 20509
Загрузки 80
Рейтинг 12
Создание 25.09.17 15:36
Обновление 25.09.17 15:36
№ Публикации 677885
Конфигурация Конфигурации 1cv8
Операционная система Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Да
См. также
Групповая корректировка записей регистров (Управляемое приложение) v 2.2 Промо
Обработка предназначена для групповой корректировки записей регистров Накопления, Сведений и Бухгалтерии. Разработана специально для Управляемого приложения.
2 стартмани
06.09.2013 72982 382 kser87 69
Предпросмотр PDF, JPG, PNG, TIFF, Word, Excel
Предварительный просмотр присоединенных файлов PDF, JPG, PNG, TIFF, Word, Excel через расширение. Позволяет изменять масштаб, поворачивать и листать. Не требует подключения к интернету и внешних компонент.
2 стартмани
01.11.2021 4532 50 TyurinArt 23
Управление платформенными обработками (расширение для типовых) [update 8.3.20]
Расширение использует недокументированную возможность для управления платформенными обработками. Например, чтобы подменить "Активные пользователи" или доработать "Конструктор запросов".
1 стартмани
07.10.2021 6034 10 SeiOkami 24
Универсальная обработка переноса данных из основной конфигурации в расширение
Обработка предназначена для разработчиков, для тех случаев, когда ранее дописанный функционал, перенесен в расширение и появляется необходимость перенести данные из объектов основной конфигурации в объекты расширения. Перенос осуществляется настройкой соответствия объектов основной конфигурации объектам расширения.
5 стартмани
05.10.2020 13367 81 biz-intel 71
Универсальная выгрузка/загрузка данных для отличающихся конфигураций (JSON, Такси+ОФ) Промо
Простой перенос через JSON данных между двумя базами 1С (документов, справочников, ПВХ, ПВР, счетов). Аналогична произвольной выгрузке в типовой "Выгрузка/загрузка XML", но может использоваться для отличающихся конфигураций. Подходит для любых пар баз с любым интерфейсом (управляемый + обычный). Без настроек. Не требует идентичности конфигураций и платформ. При переносе типы данных сопоставляются по наименованиям метаданных, объекты и ссылки по UID.
1 стартмани
22.10.2014 230962 4478 ekaruk 189
Улучшенная обработка универсального обмена данными в формате XML (УФ)
Улучшенная обработка "Универсальный обмен данными" с полноценными возможностями СКД для выборки данных (не только для отборов).
1 стартмани
23.06.2020 16115 170 Lem0n 1
Панель команд текущего объекта (документа, справочника и т.д.) со следующим возможностями: Редактор реквизитов, таблиц и движений текущего объекта, Анализ прав доступа к текущему объекту, Поиск ссылок на объект с отборами, Сторно движений документа, Выгрузка/загрузка текущего объекта между базами. Реализована всплывающей панелью в форме объекта. Подключается как расширение конфигурации (*.cfe) либо отдельными обработками.
2 стартмани
01.05.2020 17790 118 sapervodichka 3
Яндекс сервисы [Расширение]
Расширение для работы с Яндекс-сервисами (предиктор,переводчик,проверка орфографии)
1 стартмани
24.10.2019 18008 11 noprogrammer 12
Обработка "Распознавание штрихкода с помощью утилиты Zbar" для Документооборот ред. 2 Промо
В связи с тем, что стандартный функционал программы «Документооборот» ред. 2.1 дает возможность распознавания штрихкодов только форма EAN-13, данная обработка - альтернативный способ для распознавания штрихкода в программе 1С: Документооборот ред. 2 с помощью утилиты Zbar, которая распознает в том числе и в формате Code 128 (один из стандартных штрихкодов кодирования документов, например, «Управление торговлей» ред. 11), а также с возможностью поэтапно проследить все действия от распознавания до прикрепления к документу или простой загрузки в каталоги файлов в базе 1С.
5 стартмани
05.09.2016 30493 187 SEOAngels 11
Работа с файлами (обычная и управляемая форма)
Нужно загрузить файл с клиента на сервер или же, наоборот, файл загрузить с сервера на клиент, а впридачу все это на web-клиенте, да еще и асинхронно? Нет ничего проще, читай далее, как это сделать!
1 стартмани
10.06.2019 48403 261 Xershi 78
Электронная таблица средствами 1С (Версия 2.0)
Функционал электронной таблицы для программ на платформе 1С реализован на основе табличных документов. Функционал реализован в виде обработки. Большую часть формы обработки занимают листы (закладки) с табличными документами, которые выполняет роль электронной таблицы. Листы могут быть добавлены, удалены или переименованы. Ограничение по количеству листов определяется возможностью платформы. В формулах электронной таблицы можно использовать любые языковые конструкции, процедуры и функции 1С, ссылки на другие ячейки электронной таблицы расположенные в том числе и на других листах. Допустимо обращаться к ячейкам электронной таблицы по имени именованной области. В случае использования в формулах электронной таблицы данных из самой таблицы пересчет зависимых ячеек с формулами производится автоматически. Электронную таблицу можно сохранить в файл.
Если данные справочника были загружены из какой-то внешней системы, есть большая вероятность, что эти данные будут содержать недопустимые символы. И в какой-то момент, например, при выводе информации на форму может возникнуть ошибка:
Вычислить элементы, содержащие недопустимые символы не просто. Внешне эти символы могут быть похожи на обычные буквы русского или английского алфавита. При попытке вывести их в таблицу или список значений будет появляться ошибка.
Для облегчения поиска была написана эта обработка.
На форме обработки нужно выбрать вид справочника:
И нажать кнопку "Найти недопустимые символы".
В списке будут выведены коды элементов справочника, содержащих недопустимые символы:
Тестировалось на платформе 8.3.17.1549.
Специальные предложения
Ну да, а можно в групповой обработке выполнить простенький алгоритм с опцией "Объект записывается: в коде алгоритма"
(0), в БСП всё уже давно есть. Просто выбирайте, что вам нужно:
ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыXML(Текст, СимволЗамены)
Или
ОбщегоНазначенияКлиентСервер.УдалитьНедопустимыеСимволыXML(Текст)
(5), ну по хорошему надо не допускать их появление :), то есть проверять/исправлять этими процедурами при загрузке извне и только потом записывать. Ну и бывают невидимые недопустимые символы. Что даст поиск визуально в которой не видно в чем проблема?
Ну в целом, если вам прям так нужен поиск без исправления, то взять за основу одну из процедур скопировать и убрать исправление и оставить только поиск это быстро. Ну допустим, вам прям надо взглянуть, какие элементы выдают ошибки для анализа какого-то. Но в вашей обработке еще напрашивается кнопочка удалить и/или заменить недопустимые символы :). Или еще одна кнопочка - это показать коды недопустимых символов, чтобы понять что это прилетело, если визуально не видно.
(6) Пожалуй, даже сделаю, немного погодя, кнопочки: "удалить", "заменить", "показать коды". Спасибо за идею!
Я бы сделал так:
Если одинаковых символов несколько - нет смысла гонять циклом, лучше удалять их все сразу.
В подавляющем большинстве случаев символ удаляем, поэтому функцию так и назовём.
А если вдруг нужно символ не удалять, а заменить, используем второй параметр.
П.С. с удивлением обнаружил в УПП функцию ОбщегоНазначенияКлиентСервер.УдалитьНедопустимыеСимволыXML, она поражает своей атмосферностью.
В данной статье будет рассмотрено, как происходит замена и удаление недопустимых символов в системе 1С, если мы находим недопустимые символы в имени файла и когда недопустимые символы содержит XML.
1. Недопустимые символы в имени файла
Когда имя некоторого файла содержит недопустимые символы, возникает потребность замены этих символов. Для произведения замены нужно оговорить, какой синтаксис имеет функция замены при ошибке недопустимых символов в имени файла. Он представлен на скриншоте со строкой кода далее:
Рис.1 Замена недопустимых символов с имени файла
Также у данной функции есть первичные параметры:
· «ИмяФайла» – параметр со строкой, которая содержит наименование файла;
· «НаЧтоМенять» – параметр со строкой, на которую будут заменены недопустимые символы в названии файла.
Результат работы данной функции – это значение, которое будет возвращаться. В нашем случае это строка, которая содержит новое имя файла, после преобразований.
Рассмотрим пример вызова данной функции:
Рис. 2 функция замены при ошибке недопустимых символов
Также очень важным аспектом является доступность данной функции. В системе 1С функцию можно использовать на сервере, на тонком клиенте, на толстом клиенте и на внешнем соединении.
2. Недопустимые символы в XML
Рассмотрим, как происходит удаление если XML содержит недопустимые символы.
Чтобы выполнить данную процедуру, аналогично предыдущему пункту используем специальную функцию, которая продемонстрирована на строке ниже:
Рис. 3 Функция для удаления недопустимых символов XML
Далее следует оговорить, какие параметры поддерживаются в данной функции. Параметр в данном случае только один – это «Текст-Строка». Это строка, внутри которой требуется провести удаление всех недопустимых символов.
Итогом работы этой функции будет значение, которое возвращается в виде строки, полученной в итоге удаления всех недопустимых символов из XML строки.
Рассмотрим на примере общего вида, который представлен ниже, как будет выглядеть вызов функции по удалению, когда текст XML содержит недопустимые символы:
Рис. 4 Вызов функции для удаления недопустимых символов XML
Использование данной функции доступно для сервера, на тонком и толстом клиентах и для внешнего соединения.
Рассмотрим использование функции «НайтиНедопустимыеСимволыXML» на примере. Данная функция не удаляет, а только производит поиск по символам в строке, которые являются недопустимыми в XML строке:
Рис. 5 Удаление недопустимых символов XML
Чтобы сделать поиск по недопустимым символам более быстрым, попытаемся определить позицию недопустимого символа в тексте XML строки. Для этого в середине цикла дадим функции первичные позиции из поиска. Пример данного применения показан на строчке кода ниже:
Рис. 6 Поиск недопустимого символа в тексте
В данной статье были рассмотрены функции, которые помогают определять и удалять, либо заменять, недопустимые символы в имени файла и в XML строке.
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) --> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) -->
Вас могут заинтересовать следующие вебинары:
Программирование в 1С [1] => 1С:Бухгалтерия [2] => 1С:Управление производственным предприятием [3] => 1С: Розница [4] => 1С: CRM [5] => 1С: Управление торговлей [6] => Бюджетирование [7] => СКД [8] => 1С: Конвертация данных [9] => Администрирование 1С [10] => Конвертация данных [11] => Лицензии 1С [12] => Оптимизация [13] => 1С: Документооборот [14] => 1С: ERP [15] => Транспортная логистика [16] => Техническое задание [17] => Продажи [18] => Ценообразование [19] => Планирование [20] => MS SQL Server [21] => Полезные обработки [22] => МСФО [23] => Отчеты в 1С [24] => XML [25] => Внедрение ERP [26] => Перенос данных [27] => Торговое оборудование [28] => РСБУ [29] => 1С:Управление корпоративными финансами [30] => 1С: Колледж [31] => 1С: Аренда и управление недвижимостью [32] => Финансовый учет ) -->
В данной статье будет рассмотрено, как происходит замена и удаление недопустимых символов в системе 1С, если мы находим недопустимые символы в имени файла и когда недопустимые символы содержит XML.
1. Недопустимые символы в имени файла
Когда имя некоторого файла содержит недопустимые символы, возникает потребность замены этих символов. Для произведения замены нужно оговорить, какой синтаксис имеет функция замены при ошибке недопустимых символов в имени файла. Он представлен на скриншоте со строкой кода далее:
Рис.1 Замена недопустимых символов с имени файла
Также у данной функции есть первичные параметры:
· «ИмяФайла» – параметр со строкой, которая содержит наименование файла;
· «НаЧтоМенять» – параметр со строкой, на которую будут заменены недопустимые символы в названии файла.
Результат работы данной функции – это значение, которое будет возвращаться. В нашем случае это строка, которая содержит новое имя файла, после преобразований.
Рассмотрим пример вызова данной функции:
Рис. 2 функция замены при ошибке недопустимых символов
Также очень важным аспектом является доступность данной функции. В системе 1С функцию можно использовать на сервере, на тонком клиенте, на толстом клиенте и на внешнем соединении.
2. Недопустимые символы в XML
Рассмотрим, как происходит удаление если XML содержит недопустимые символы.
Чтобы выполнить данную процедуру, аналогично предыдущему пункту используем специальную функцию, которая продемонстрирована на строке ниже:
Рис. 3 Функция для удаления недопустимых символов XML
Далее следует оговорить, какие параметры поддерживаются в данной функции. Параметр в данном случае только один – это «Текст-Строка». Это строка, внутри которой требуется провести удаление всех недопустимых символов.
Итогом работы этой функции будет значение, которое возвращается в виде строки, полученной в итоге удаления всех недопустимых символов из XML строки.
Рассмотрим на примере общего вида, который представлен ниже, как будет выглядеть вызов функции по удалению, когда текст XML содержит недопустимые символы:
Рис. 4 Вызов функции для удаления недопустимых символов XML
Использование данной функции доступно для сервера, на тонком и толстом клиентах и для внешнего соединения.
Рассмотрим использование функции «НайтиНедопустимыеСимволыXML» на примере. Данная функция не удаляет, а только производит поиск по символам в строке, которые являются недопустимыми в XML строке:
Рис. 5 Удаление недопустимых символов XML
Чтобы сделать поиск по недопустимым символам более быстрым, попытаемся определить позицию недопустимого символа в тексте XML строки. Для этого в середине цикла дадим функции первичные позиции из поиска. Пример данного применения показан на строчке кода ниже:
Рис. 6 Поиск недопустимого символа в тексте
В данной статье были рассмотрены функции, которые помогают определять и удалять, либо заменять, недопустимые символы в имени файла и в XML строке.
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) --> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) -->
Вас могут заинтересовать следующие вебинары:
Программирование в 1С [1] => 1С:Бухгалтерия [2] => 1С:Управление производственным предприятием [3] => 1С: Розница [4] => 1С: CRM [5] => 1С: Управление торговлей [6] => Бюджетирование [7] => СКД [8] => 1С: Конвертация данных [9] => Администрирование 1С [10] => Конвертация данных [11] => Лицензии 1С [12] => Оптимизация [13] => 1С: Документооборот [14] => 1С: ERP [15] => Транспортная логистика [16] => Техническое задание [17] => Продажи [18] => Ценообразование [19] => Планирование [20] => MS SQL Server [21] => Полезные обработки [22] => МСФО [23] => Отчеты в 1С [24] => XML [25] => Внедрение ERP [26] => Перенос данных [27] => Торговое оборудование [28] => РСБУ [29] => 1С:Управление корпоративными финансами [30] => 1С: Колледж [31] => 1С: Аренда и управление недвижимостью [32] => Финансовый учет ) -->
Читайте также: