Имя: Пароль:
1C
 
Как преобразовать строку в пригодную для ключа структуры?
0 Dragonofdwarfs
 
25.02.26
16:54
Коллеги, всем доброго времени суток, собственно сам вопрос выше.  К ключу требования, насколько я знаю, чтобы он не начинался с цифр и не содержал спецсимволы, кроме "_". Есть ли какая-нибудь бспшная функция, которая производит такие махинации или самому писать?
1 Волшебник
 
25.02.26
16:55
Сгенери GUID, убери дефисы, добавь впереди "_"
2 Dragonofdwarfs
 
25.02.26
16:59
(1) Я примерно так и хочу сделать, только впереди оставить наименование, но пользователь может ввести что ему заблагорассудится, поэтому и хочу сделать преобразование
3 Волшебник
 
25.02.26
17:00
(2) Вы не должны принимать от пользователя строки, которые становятся ключами структуры
4 Kuzmich123
 
25.02.26
17:00
(2) а зачем пользователь участвует в генерации ун. идент.?
5 Fragster
 
гуру
25.02.26
17:04
переходи на Соответствие
6 Dragonofdwarfs
 
25.02.26
17:08
(5) Если бы писал с нуля - перешёл бы) Но там всё на структурах написано
7 Dragonofdwarfs
 
25.02.26
17:10
(4) Хотел больше жизненности что-ли дать, условно как в доп.реквизитах (для разработчика)
8 ass1c
 
25.02.26
17:21
(0) Это же все вроде легко ищется в БСП. Ищешь, используешь, под себя переделываешь...

СтандартныеПодсистемыСервер.ПреобразоватьСтрокуВДопустимоеНаименованиеКолонки(Строка);

Функция ПреобразоватьСтрокуВДопустимоеНаименованиеКолонки(Строка) Экспорт
	
	НедопустимыеСимволы = ":;!@#$%^&-~`'.,?{}[]+=*/|\ ()_""";
	Результат = "";
	Для Индекс = 1 По СтрДлина(Строка) Цикл
		Символ =  Сред(Строка, Индекс, 1);
		Если СтрНайти(НедопустимыеСимволы, Символ) > 0 Или (КодСимвола(Символ) > 126 И КодСимвола(Символ) < 256) Тогда
			Результат = Результат + "_" + КодСимвола(Символ) + "_";
		Иначе
			Результат = Результат + Символ;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Результат;
КонецФункции

УправлениеСвойствамиСлужебный.УдалитьНедопустимыеСимволы(Строка);

Процедура УдалитьНедопустимыеСимволы(Строка) Экспорт
	НедопустимыеСимволы = """'`/\[]{}:;|-=?*<>,.()+#№@!%^&~«»";
	Строка = СтрСоединить(СтрРазделить(Строка, НедопустимыеСимволы, Истина));
КонецПроцедуры
9 Garykom
 
гуру
25.02.26
17:31
(0) Используй хеширование и все
10 Волшебник
 
25.02.26
18:08
(9) Чем это лучше (1) ?
11 TormozIT
 
гуру
25.02.26
18:52
Кроме БСП и писать самому, еще можно скопировать из ИР ирОбщий.ИдентификаторИзПредставленияЛкс
12 Garykom
 
гуру
25.02.26
20:12
(10) Повторяемость преобразования
13 Волшебник
 
25.02.26
20:18
(12) Ну ок
14 Garykom
 
гуру
25.02.26
20:19
(8) Хорошая функция, жаль только медленная
Но допускает обратное преобразование

Кстати так как внутри идет замена недопустимых символов на их числовые коды между "_"
То процедура УдалитьНедопустимыеСимволы() уже лишнее, надо просто все недопустимые включить в ПреобразоватьСтрокуВДопустимоеНаименованиеКолонки
15 Garykom
 
гуру
25.02.26
20:23
Кстати а есть ограничение на длину ключа структуры?
Или на длины идентификаторов колонок, элементов форм и т.д.?
16 Волшебник
 
25.02.26
20:33
(15) Вы точно гуру?
17 Волшебник
 
25.02.26
20:34
Почему я не слышу простого "А зачем?" и "Позовите программиста".
Миста уже не та...
18 Волшебник
 
25.02.26
20:35
(8) Нас теперь воспитывают через БСП всякими уродскими функциями. Кто мы теперь?
19 Волшебник
 
25.02.26
20:36
Почему автор ветки нежится в нашем внимании, хотя должен страдать и молить о пощаде за собственную глупость и невежество?
20 Волшебник
 
модератор
25.02.26
20:44
(0) Тебе предупреждение за нарушение правил форума. Правило 5
21 ass1c
 
25.02.26
22:47
(18) Не знаю, но БСП хорош. Да не без минусов, но куда же без них. Просто большинство обленились и вместо того что бы самому посидеть и поискать/разработать решение сразу же бегут спрашивать на форум/ии - это легкий вариант, не требующий практически никаких затрат, но и не приносящий никакого опыта
Закон Брукера: Даже маленькая практика стоит большой теории.