Формирование синонима переменной из идентификатора

05.04.17

Разработка - Универсальные функции

Функция формирует синоним переменной из идентификатора, как это делает платформа 1С8.

Функция формирует синоним переменной из идентификатора, как это делает платформа 1С8.
Используется при визуализации таблицы значений, давая читабельные для пользователей названия колонок:

  • "СуммаБезНДС" => "Сумма без НДС",
  • "СуммаЗадолженностиКонтрагента" => "Сумма задолженности контрагента",
  • "СинонимПеременной" => "Синоним переменной".

Для 7.7 переделывается легко.

// Формирует синоним переменной.
// Пример: на входе "ИмяПеременнойАБВГ", на выходе "Имя переменной АБВГ"
//
// Параметры
// ИмяРеквизита - Строка. Имя переменной, имя колонки таблицы
//
// Возвращаемое значение:
// Строка - Представление переменной
//
Функция СформироватьСиноним(ИмяРеквизита)
    
    Перем Синоним, ъ, Символ, ПредСимвол, СледСимвол, Прописная, ПредПрописная, СледПрописная, ДлинаСтроки;
    
    Синоним = ВРег(Сред(ИмяРеквизита, 1, 1));
    ДлинаСтроки = СтрДлина(ИмяРеквизита);
    Для ъ=2 По ДлинаСтроки Цикл
        Символ = Сред(ИмяРеквизита, ъ, 1);
        ПредСимвол = Сред(ИмяРеквизита, ъ-1, 1);
        СледСимвол = Сред(ИмяРеквизита, ъ+1, 1);
        Прописная = Символ = ВРег(Символ);
        ПредПрописная = ПредСимвол = ВРег(ПредСимвол);
        СледПрописная = СледСимвол = ВРег(СледСимвол);
        
        // Варианты:
        Если НЕ ПредПрописная И Прописная Тогда
            Синоним = Синоним + " " + Символ;
        ИначеЕсли Прописная И НЕ СледПрописная Тогда
            Синоним = Синоним + " " + Символ;
        Иначе
            Синоним = Синоним + Символ;
        Конецесли;
    КонецЦикла;
    
    Возврат Синоним;
    
КонецФункции // СформироватьСиноним()

Синоним Создание синонима Полезные функции

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

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

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2667    0    John_d    8    

53

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4600    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3960    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8813    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16142    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

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

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7242    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. DrAku1a 1679 21.11.12 02:55 Сейчас в теме
А вот обратное преобразование:

// Преобразовывает имя переменной к более читабельному виду, аналогично внутренним алгоритмам 1С
// Например "ОбменСБазой" -> "Обмен с базой"
Функция ПредставлениеПерменной(знач ИмяПеременной) Экспорт
	Перем МаленькиеБуквы, Буква, Ответ, сч, ПредыдущаяБуква, СледующаяБуква;
	ИмяПеременной = СокрЛП(ИмяПеременной);
	МаленькиеБуквы = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя_";
	Буква = Лев(ИмяПеременной, 1);
	Ответ = ""+Буква;
	Для сч=2 По СтрДлина(ИмяПеременной) Цикл
		ПредыдущаяБуква = Буква;
		Буква = Сред(ИмяПеременной, сч, 1);
		Если (Найти(МаленькиеБуквы, Буква)=0) и (Найти(МаленькиеБуквы, ПредыдущаяБуква)>0) Тогда
			СледующаяБуква = Сред(ИмяПеременной, сч+1, 1);
			Если (СледующаяБуква<>"") и (Найти(МаленькиеБуквы, СледующаяБуква)>0) Тогда
				Буква = НРег(Буква);
			КонецЕсли;
			Буква = " "+Буква;
		КонецЕсли;
		Ответ = Ответ + Буква;
	КонецЦикла;
	Возврат СтрЗаменить(Ответ, "_", " ");
КонецФункции
Показать


P.S. ъ - как счетчик цика... мда... оригинально.
GATTUSO; anchovy; awk; RustIG; shakmaev; +5 Ответить
16. v.l. 434 21.11.12 17:32 Сейчас в теме
(1) DrAku1a, гиде взял? ))

Вот пару строк для этого: (8-ка)

	Синоним = ТРег(ИмяРеквизита);
	Синоним = СтрЗаменить(Синоним, " ", "");
	
	Возврат Синоним;
Дмитрий74Чел; +1 Ответить
17. andrewks 1368 21.11.12 18:34 Сейчас в теме
(16) что она даст для "Цена закупки" ?
18. v.l. 434 21.11.12 20:23 Сейчас в теме
(17) andrewks, ну если пошагово, то так:

    Синоним = ТРег(ИмяРеквизита);            | "Цена Закупки"
    Синоним = СтрЗаменить(Синоним, " ", ""); | "ЦенаЗакупки" 
RustIG; Serj1C; +2 Ответить
21. andrewks 1368 21.11.12 20:31 Сейчас в теме
(18) допустим. а для "Сумма НУ" ?
24. DrAku1a 1679 22.11.12 02:27 Сейчас в теме
(16),(18) блин... протупил я... это не обратное преобразование - это аналог получается... :-)
(20) По-идее правильно преобразовывать: "Слава КПСС" <-> "Слава_КПСС", а "Цена закупки" <-> "ЦенаЗакупки", так что, (16) - не совсем верно.
26. v.l. 434 22.11.12 12:17 Сейчас в теме
(24) DrAku1a, Трям!

А это идея - аббревиатуры отделять знаком подчёркивания.
Да и подчёркивание я не учел в начальной процедуре.
2. nelse 21.11.12 04:09 Сейчас в теме
Мура
GATTUSO; Alien_RS_Forever; shakmaev; RomanUzmov; wolfsoft; +5 Ответить
3. DrAku1a 1679 21.11.12 08:05 Сейчас в теме
(2) Иногда требуется и так поизвращаться...
4. bulas 211 21.11.12 08:23 Сейчас в теме
Если для счетчика вместо ъ использовать Ё, то работает быстрее.
kirinalex; zfilin; Alien_RS_Forever; RustIG; SeiOkami; Артано; +6 Ответить
6. v.l. 434 21.11.12 12:41 Сейчас в теме
(4) bulas, многолетние опыты британских учёных подтвердили использование именно маленького твёрдого знака "ъ" вместо заглавной "Ё".
5. wolfsoft 2421 21.11.12 11:43 Сейчас в теме
Для ъ=2 По ДлинаСтроки Цикл
<...>
СледСимвол = Сред(ИмяРеквизита, ъ+1, 1);

Дальше можно не смотреть.
GATTUSO; Alien_RS_Forever; Serj1C; +3 Ответить
7. v.l. 434 21.11.12 12:43 Сейчас в теме
(5) wolfsoft, предложи свой вариант, мне интересно.
10. wolfsoft 2421 21.11.12 14:01 Сейчас в теме
(7) лень копаться, навскидку, чтобы не было выходов за границы строки, например так:

Функция СформироватьСиноним(ИмяРеквизита)
	
	Перем Синоним, ъ, Символ, ПредСимвол, СледСимвол, Прописная, ПредПрописная, СледПрописная, ДлинаСтроки;
	
	Синоним = ВРег(Сред(ИмяРеквизита, 1, 1));
	ДлинаСтроки = СтрДлина(ИмяРеквизита);
	
	Для ъ=2 По ДлинаСтроки Цикл
		
		Символ = Сред(ИмяРеквизита, ъ, 1);
		ПредСимвол = Сред(ИмяРеквизита, ъ-1, 1);
		//СледСимвол = Сред(ИмяРеквизита, ъ+1, 1);
		
		Прописная = Символ = ВРег(Символ);
		ПредПрописная = ПредСимвол = ВРег(ПредСимвол);
		//СледПрописная = СледСимвол = ВРег(СледСимвол);
		
		// Варианты:
		Если НЕ ПредПрописная И Прописная Тогда
			Синоним = Синоним + " " + Символ;
		//ИначеЕсли Прописная И НЕ СледПрописная Тогда
		//	Синоним = Синоним + " " + Символ;
		Иначе
			Синоним = Синоним + Символ;
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат Синоним;
	
КонецФункции // СформироватьСиноним()
Показать
12. v.l. 434 21.11.12 17:23 Сейчас в теме
(10) wolfsoft, вроде ошибок не было. СледСимвол в последней итерации возвращает пустую строку (8-ка). В 7.7 нет возможности попробовать.
13. andrewks 1368 21.11.12 17:26 Сейчас в теме
(12) Сред() не будет ругаться на выход за границы, а просто вернёт пустоту. это ж не си/паскали вам
19. wolfsoft 2421 21.11.12 20:28 Сейчас в теме
(12) в (13) уже ответили

(16) у нас прямо конкурс решений образовался :)
"ленивый" вариант для обратного преобразования

Функция СформироватьРеквизит(Синоним)
	
	Стр = СтрЗаменить(Синоним, " ", Символы.ПС);
	СтрДлина = СтрЧислоСтрок(Стр);
	
	ИмяРеквизита = "";
	Для Индекс = 1 По СтрДлина Цикл
		
		ТекСтр = СтрПолучитьСтроку(Стр, Индекс);
		
		Если ПустаяСтрока(ТекСтр) Тогда
			Продолжить;
		КонецЕсли;
		
		ИмяРеквизита = ИмяРеквизита + ВРег(Лев(ТекСтр, 1)) + Сред(ТекСтр, 2);
		
	КонецЦикла;
	
	Возврат ИмяРеквизита;
	
КонецФункции // СформироватьРеквизит()
Показать
20. v.l. 434 21.11.12 20:29 Сейчас в теме
(19) О! А это уже универсальное решение для любой платформы. Респект и уважуха.

Конкурс! да! профинтерес размяться )))

Я вот думаю над параметром "ЦенаСНДС", чтобы его в "Цена с НДС" перевести, наверно, составить словарь односимвольных слов "С", "а", "в", "к". Если массив прописных букв начинается с этого слова, отедалить её как слово.

"СлаваКПСС" тогда сработает как "Слава к ПСС", зато "СуммаСНДС" будет правильно - "Сумма с НДС"!

----

upd: Хотя нет, Символы.ПС - это ж для 8-ки, а в 7.7 РазделительСтрок.
Да и отталкиваться тогда удобнее от пробелов.
25. ShantinTD 91 22.11.12 10:27 Сейчас в теме
(20) про СлаваКПСС - улыбнул. Спасибо.

не в тему:
Разбор предложения: Дочь генерала.
Дочь - "кто?", генерала - "что делала?".
29. RustIG 1351 23.11.12 21:02 Сейчас в теме
(20) надо создать слова-исключения, передавать через параметр, выделять из строки целиком, как раз кажется так и реализовано в (27)
22. andrewks 1368 21.11.12 20:32 Сейчас в теме
(19) wolfsoft, вот это нормально. сам именно такой алгоритм утвердил "в голове", да писАть лень было )
8. SPID 21.11.12 13:02 Сейчас в теме
А что вернет по идентификатору СуммаСНДС? Не тестировал, но кажется получается "Сумма СНДС".
11. v.l. 434 21.11.12 17:18 Сейчас в теме
(8) SPID, да так и вернёт "Сумма СНДС"
9. Поручик 4670 21.11.12 13:28 Сейчас в теме
Я бы вместо маленького твёрдого знака использовал большой мягкий Ь
anchovy; ShantinTD; +2 Ответить
14. andrewks 1368 21.11.12 17:27 Сейчас в теме
не думал, что подобного рода вспомогательные процедурки, коих пишешь по несколько за день, тянут на публикацию.
GATTUSO; romign; ilov_boris; tolyan_ekb; +4 Ответить
15. v.l. 434 21.11.12 17:28 Сейчас в теме
(14) andrewks, да вот сам не думал )))
23. v.l. 434 21.11.12 20:34 Сейчас в теме
Чуть позже, дома проверю)))
27. sstar90 22.11.12 14:59 Сейчас в теме
Внесу и свою лепту - в прикрепленной обработке функции преобразования, которые я использую.
Результат их выполнения:
"Сумма_С_НДС", "СуммаСНДС" => "Сумма с НДС"
"Сумма с НДС", "Сумма _ с НДС" => "СуммаСНДС"
Прикрепленные файлы:
ВнешняяОбработка1.epf
28. v.l. 434 22.11.12 17:02 Сейчас в теме
30. eugen91 25.11.12 01:33 Сейчас в теме
да, по мне можно было красивее найти выход
31. v.l. 434 26.11.12 13:58 Сейчас в теме
32. maloi_a 26.11.12 14:18 Сейчас в теме
Проверка на прописные буквы делается просто:

// 7.х
Прописная = Символ>="А" И Символ<="Я" ИЛИ Символ>="A" И Символ<="Z";
// 8.х
Прописная = КодСимвола(Символ)>=КодСимвола("А") И КодСимвола(Символ)<=КодСимвола("Я")
ИЛИ КодСимвола(Символ)>=КодСимвола("A") И КодСимвола(Символ)<=КодСимвола("Z");
33. v.l. 434 26.11.12 15:04 Сейчас в теме
(32) maloi_a, точно. Для 7.7 сгодится. Но ведь в 8-ке куда проще написать
Прописная = Символ = ВРег(Символ);
. С латиницей понятно, там действительно алфавит находится в одной последовательности, не прерываясь.
Что же делать с национальными кодировками? Украинский, белорусский, казахский языки имеют свои буквы, которые не вписываются в диапазон А..Я, они часто стоят отдельно. Та же Ё и ё не вписываются в диапазон "а".."я", они раньше. Так же и с "Ґ" и "ґ", "Є" и "є", "І" и "і", "Ї" и "ї", "Ў" и "ў". Да и КодСимвола("Z") ведь постоянный, можно просто заменить на диапазон 0x41..0x5a. Правда? )))

За подсказку спасибо, в 7.7 код не тестировал, честно.
34. maloi_a 26.11.12 15:49 Сейчас в теме
(33)
Всё правильно.
Да и с русским языком тоже проблема с "Ё".
В 7.х простое сравнение строк не пойдёт.
Проверил, там "=" к строкам правильно, а ">", "<" для строк применяются без учёта регистра.
Надо использовать КодСимв() и проверку на Ё.
35. v.l. 434 26.11.12 19:43 Сейчас в теме
(34) maloi_a, не только Ё, но и на другие буквы с диакритическими знаками. Не помню уже, но в каком-то типовом семёрочном клиент-банке при выгрузке/загрузке в/из ДБФ все эти буквы с диакритическими знаками конвертировались туда-сюда. Уже не помню, во что, но эти белорусские Ў были вместе с украинскими Є и Ї. Потому что в ДБФ они терялись (((
36. O-Planet 6431 27.11.12 11:20 Сейчас в теме
Обсуждение пошло явно не в то русло :)
Предлагаю альтернативное решение проблемы:

Процедура ВариацияЪ(Знач Стр,П=1)
	Если П>59 Тогда
		Возврат Стр;
	КонецЕсли;	
	Большие="ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁQWERTYUIOPASDFGHJK­LZXCVBNM";
	Махонькие="йцукенгшщзхъфывапролджэячсмитьбюёqwertyuiopasdfgh­jklzxcvbnm";
	Х=Найти(Стр,Сред(Большие,П,1));
	Если Х=0 Тогда
		П=П+1;
	Иначе
		Стр=Лев(Стр,Х-1)+" "+Сред(Махонькие,Х,1)+Сред(Стр,Х+1);
	КонецЕсли;	
	Возврат ВариацияЪ(Стр,П);
КонецПроцедуры
Показать


Зацените мощЪ мысли... :D
37. O-Planet 6431 27.11.12 11:23 Сейчас в теме
Пс... И не говорите мне про НРЕГ! Тогда оно уже почти перестанет быть быдлокодом...
38. maloi_a 27.11.12 15:18 Сейчас в теме
(37)
Процедуру заменить на функцию
и
Стр=Лев(Стр,Х-1)+" "+Сред(Махонькие,П,1)+Сред(Стр,Х+1);

Тогда будет всё правильно.
40. O-Planet 6431 27.11.12 17:22 Сейчас в теме
39. KillHunter 7 27.11.12 16:07 Сейчас в теме
да хороший вариант:
Стр=Лев(Стр,Х-1)+" "+Сред(Махонькие,П,1)+Сред(Стр,Х+1);
41. O-Planet 6431 27.11.12 17:25 Сейчас в теме
А вот интересно, на какой длине строки этот вариант начнёт работать быстрее, чем оригинальный в статье?
44. maloi_a 28.11.12 09:16 Сейчас в теме
(41)
При длине имени больше 200 ВариацияЪ() будет быстрее.
Увы.
Мой вариант самый эффективный - сравнение "<>" работает быстрее встроенной Врег().
42. ildarovich 7850 28.11.12 02:04 Сейчас в теме
Предложу свой вариант на основе стэйт-машины
Функция Синонимайзер(Имя, Ответ = "", Стэйт = 7, б = "") Экспорт
	Для ё = 1 По СтрДлина(Имя) Цикл
		а = Сред(Имя, ё, 1);
		Стэйт = (НРег(а) <> а) * 4 + Цел(Стэйт / 2);
		Ответ = Ответ + ?(Стэйт = 2, НРег(б), ?(ё = 2, ВРег(б), б)) + ?(Стэйт = 4 ИЛИ Стэйт = 5, " ", "");
		б = а
	КонецЦикла;
	Возврат Ответ + б
КонецФункции
Показать
Выгодное отличие здесь в том, что символ вырезается из строки и проверяется на регистр только один раз. Если б не надо было первую букву делать заглавной - было бы еще красивее.
saddy; mr_sav; +2 Ответить
46. v.l. 434 29.11.12 11:36 Сейчас в теме
(42) Класс!
Значения параметров что обозначают? // сплю я еще
47. ildarovich 7850 05.12.12 21:03 Сейчас в теме
(46) Значения параметров обозначают начальные значения переменных цикла. Делая их параметрами, мы, кроме сокращения количества строк в записи функции, добиваемся некоторого расширения ее возможностей. Например, присвоив параметру Ответ значение "Синоним:" мы получим результат, начинающийся со строки "Синоним:". Присвоив параметру Стэйт значение 7 * 2 * 2 * 2 * 2 * 2 (7 умножить на два в некоторой степени), мы "защитим от преобразования" соответствующее количество символов в имени. Присвоив параметру б некоторое значение, мы получим результат, начинающийся с этого значения, записанного в верхнем регистре.
Дмитрий74Чел; v.l.; mr_sav; Evil Beaver; +4 Ответить
48. v.l. 434 06.12.12 01:35 Сейчас в теме
(47) ildarovich, вона, как... Для меня пока слишком умнО.
43. PlatonStepan 38 28.11.12 05:15 Сейчас в теме
непорядок :)
СинКосТан32Котан
Син кос тан32 котан - преобразование 1с-ки
Син кос тан 32Котан - преобразование Синонимайзера
45. ildarovich 7850 28.11.12 11:00 Сейчас в теме
(43) Внес исправления, теперь должно работать правильно...
Прикрепленные файлы:
CratosX; mr_sav; PlatonStepan; +3 Ответить
49. Поручик 4670 17.01.13 12:19 Сейчас в теме
Немного подумал и решил использовать в рабочем проекте.
50. nick-max 249 06.08.13 11:02 Сейчас в теме
51. nalivai-chai 687 20.09.13 15:52 Сейчас в теме
Хотел здесь найти функцию, которая вернет правильный идентификатор по произвольной строке, но не нашел(:
Пришлось самому писать, вот может кому пригодиться:

//	Возвращает правильный идентификатор переменной языка 1С из произвольной строки.
//
Функция ПолучитьПравильноеИмяИдентификатораЯзыка1С(Строка)
	
	ДлинаСтроки = СтрДлина(Строка);
	
	Идентификатор = "";
	
	ПерваяБуква = Истина;
	
	Для НомерСимвола = 1 По ДлинаСтроки Цикл
		
		ТипСимвола = ТипСимвола(Строка, НомерСимвола); 
		Если ТипСимвола >= 1 И ТипСимвола <= 4 Тогда
			Если ПерваяБуква Тогда
				Идентификатор = Идентификатор + ВРег(Сред(Строка, НомерСимвола, 1));
			Иначе
				Идентификатор = Идентификатор + Сред(Строка, НомерСимвола, 1);
			КонецЕсли;
			ПерваяБуква = Ложь;
		Иначе
			Если ТипСимвола >= 5 И ТипСимвола <= 6 Тогда
				Идентификатор = Идентификатор + Сред(Строка, НомерСимвола, 1);
			КонецЕсли;
			ПерваяБуква = Истина;
		КонецЕсли;
		
	КонецЦикла;
	
	Если ПустаяСтрока(Идентификатор) Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	Если ТипСимвола(Идентификатор, 1) = 5 Тогда
		Идентификатор = "_" + Идентификатор;
	КонецЕсли;
	
	Возврат Идентификатор;
   
КонецФункции
	
//	Возвращает код типа символа:
//		1	- верхний регистр кириллицы;
//		2	- нижний регистр криллицы;
//		3	- верхний регистр латиницы;
//		4	- нижний регистр латинцы;
//		5	- цифра;
//		6	- нижние подчеркивание;
//		-1	- не является ни буквой, ни цифрой.
Функция ТипСимвола(Стр, Поз = 1) Экспорт
	
	Код_с = КодСимвола(Стр, Поз);
		
	Код_0		= 48;	//	КодСимвола("0");
	Код_9 		= 57;	//	КодСимвола("9");

	Код_в_Эй	= 65;	//	КодСимвола("A");
	Код_в_Зэд	= 90;	//	КодСимвола("Z");
	Код_н_эй	= 97;	//	КодСимвола("a");
	Код_н_зэд	= 122;	//	КодСимвола("z");
	
	Код_		= 95;   //	КодСимвола("_");

	Код_в_А		= 1040;	//	КодСимвола("А");
	Код_в_Я		= 1071;	//	КодСимвола("Я");
	Код_н_а		= 1072;	//	КодСимвола("а");
	Код_н_я		= 1103;	//	КодСимвола("я");
	
	Если (Код_с >= Код_в_А) И (Код_с <= Код_в_Я) Тогда
		Возврат 1;
	ИначеЕсли (Код_с >= Код_н_а) И (Код_с <= Код_н_я) Тогда
		Возврат 2;
	ИначеЕсли (Код_с >= Код_в_Эй) И (Код_с <= Код_в_Зэд) Тогда
		Возврат 3;
	ИначеЕсли (Код_с >= Код_н_эй) И (Код_с <= Код_н_зэд) Тогда
		Возврат 4;
	ИначеЕсли (Код_с >= Код_0) И (Код_с <= Код_9) Тогда
		Возврат 5;
	ИначеЕсли Код_с = Код_ Тогда
		Возврат 6;
	КонецЕсли;
		
	Возврат -1;
	
КонецФункции

Показать
52. v.l. 434 17.10.13 11:57 Сейчас в теме
(51) nalivai-chai, "нижнее подчеркивание"... Хм... навеяло: "В подвале клуба любителей тавтологии обнаружен смертельно убитый труп погибшего мертвеца".

А можно ж и переделать: убрать недопустимые символы и символ после пробела преобразовать к верхнему регистру, а пробел удалить.
Аналог такой функции я использовал в отчете по менеджерам в 2008 году http://infostart.ru/public/16635
Там динамически формируются колонки в таблице значений по фамилиям менеджеров.

В типовых есть процедура,разлагающая строку на массив слов. Обходя массив делать первый символ верхним. Навскидку:
Подстроки = Общегоназначения.РазложитьСтрокуВМассивПодстрок(Синоним, " ");
Имя = "";
Для каждого ТекСтрока Из Подстроки Цикл
	Имя = Имя + ТРег(ТекСтрока);
КонецЦикла;
53. nalivai-chai 687 17.10.13 19:59 Сейчас в теме
(52) однако, не один такой, из Википедии:

... Кроме того, этот символ часто называют «Нижнее подчёркивание», что также некорректно и является плеоназмом — подчёркивание всегда выполняется снизу...
54. Denic_01 46 30.07.20 10:30 Сейчас в теме
Строку:
Синоним = Синоним + " " + Символ;

В некоторых случаях следует заменить на:
Синоним = Синоним + " " + НРег(Символ);

т.к. в простом случае, сейчас "ЦенаЗакупки"
Вернет "Цена Закупки"
что неверно - должно быть "Цена закупки"

в остальном рабочий вариант)
55. Vlad_2008 16 21.01.22 05:17 Сейчас в теме
Для частного случая, типа МояЛюбимаяПеременная, аббревиатуры, подчеркивания и цифры не учитываются, сделал простенькую функцию в пару строк, рекурсия вместо цикла

&НаКлиенте
Процедура ПолучитьСиноним(Команда)
	
	Синоним = ФС(Переменная);
		
КонецПроцедуры

&НаКлиенте
Функция ФС(Переменная, Синоним = "", Начало = Неопределено, Конец = Неопределено)
	
	Если Переменная <> "" Тогда
		
		Синоним = Синоним + ?(Начало = ТРег(Начало) И Конец = НРег(Конец), " " + НРег(Начало), Лев(Переменная, 1));
		
		ФС(Сред(Переменная, 2), Синоним, Сред(Переменная, 2, 1), Прав(Синоним, 1));
		
	КонецЕсли;
	
	Возврат Синоним;

КонецФункции


Показать
Дмитрий74Чел; v.l.; +2 Ответить
Оставьте свое сообщение