Формирование синонима переменной из идентификатора
Разработка - Универсальные функции
Функция формирует синоним переменной из идентификатора, как это делает платформа 1С8.
Используется при визуализации таблицы значений, давая читабельные для пользователей названия колонок:
- "СуммаБезНДС" => "Сумма без НДС",
- "СуммаЗадолженностиКонтрагента" => "Сумма задолженности контрагента",
- "СинонимПеременной" => "Синоним переменной".
Для 7.7 переделывается легко.
// Формирует синоним переменной.
// Пример: на входе "ИмяПеременнойАБВГ", на выходе "Имя переменной АБВГ"
//
// Параметры
// ИмяРеквизита - Строка. Имя переменной, имя колонки таблицы
//
// Возвращаемое значение:
// Строка - Представление переменной
//
Функция СформироватьСиноним(ИмяРеквизита)
Перем Синоним, ъ, Символ, ПредСимвол, СледСимвол, Прописная, ПредПрописная, СледПрописная, ДлинаСтроки;
Синоним = ВРег(Сред(ИмяРеквизита, 1, 1));
ДлинаСтроки = СтрДлина(ИмяРеквизита);
Для ъ=2 По ДлинаСтроки Цикл
Символ = Сред(ИмяРеквизита, ъ, 1);
ПредСимвол = Сред(ИмяРеквизита, ъ-1, 1);
СледСимвол = Сред(ИмяРеквизита, ъ+1, 1);
Прописная = Символ = ВРег(Символ);
ПредПрописная = ПредСимвол = ВРег(ПредСимвол);
СледПрописная = СледСимвол = ВРег(СледСимвол);
// Варианты:
Если НЕ ПредПрописная И Прописная Тогда
Синоним = Синоним + " " + Символ;
ИначеЕсли Прописная И НЕ СледПрописная Тогда
Синоним = Синоним + " " + Символ;
Иначе
Синоним = Синоним + Символ;
Конецесли;
КонецЦикла;
Возврат Синоним;
КонецФункции // СформироватьСиноним()
Вступайте в нашу телеграмм-группу Инфостарт
Синоним Создание синонима Полезные функции
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Универсальные функции 1С 8.3 1С:Документооборот Россия Платные (руб)
ДО+ — расширение конфигурации, в котором собран постоянно пополняемый набор из 33 востребованных доработок для 1С:Документооборот КОРП 3.0: согласование задач прямо из мессенджеров MAX и Telegram, отзыв согласования и исполнения, гибкие повторные круги, эскалация с точностью до минут, контроль исполнительской дисциплины, выгрузка вложений в ZIP и склейка PDF, реестр документов в Excel, проверка дублей контрагентов и регистрационных номеров. Каждая возможность активируется отдельным флажком в режиме предприятия — включается только то, что нужно конкретной организации. Список функций расширяется с каждым релизом — текущая версия 2.1.0. Режим AddOn: типовая конфигурация не модифицируется, обновления ДО ставятся штатно, дополнительные лицензии и внешние компоненты не требуются. Внедрение силами администратора — около часа.
30000 руб.
09.07.2026 1396 1 0
Загрузка и выгрузка в Excel Универсальные функции Разработчик 1С:Предприятие 8 Россия Бесплатно (free)
Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).
30.10.2025 8732 Abysswalker 11
Универсальные функции Работа с интерфейсом Разработчик 1С:Предприятие 8 Бесплатно (free)
Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.
14.05.2025 14459 DeerCven 16
Инструментарий разработчика Универсальные функции Запросы Разработчик 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)
Внешняя обработка для создания запроса на основании табличных данных.
22.07.2024 11945 276 ixijixi 10
Универсальные функции Разработчик 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.
21.05.2024 68724 dimanich70 87
Универсальные функции Разработчик 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)
Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.
1 стартмани
18.03.2024 9279 7 John_d 13
Универсальные функции Разработчик Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.
12.02.2024 85761 atdonya 31
Универсальные функции Разработчик 1С:Предприятие 8 Бесплатно (free)
На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.
30.11.2023 13468 ke.92@mail.ru 18
// Преобразовывает имя переменной к более читабельному виду, аналогично внутренним алгоритмам 1С
// Например "ОбменСБазой" -> "Обмен с базой"
Функция ПредставлениеПерменной(знач ИмяПеременной) Экспорт
Перем МаленькиеБуквы, Буква, Ответ, сч, ПредыдущаяБуква, СледующаяБуква;
ИмяПеременной = СокрЛП(ИмяПеременной);
МаленькиеБуквы = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя_";
Буква = Лев(ИмяПеременной, 1);
Ответ = ""+Буква;
Для сч=2 По СтрДлина(ИмяПеременной) Цикл
ПредыдущаяБуква = Буква;
Буква = Сред(ИмяПеременной, сч, 1);
Если (Найти(МаленькиеБуквы, Буква)=0) и (Найти(МаленькиеБуквы, ПредыдущаяБуква)>0) Тогда
СледующаяБуква = Сред(ИмяПеременной, сч+1, 1);
Если (СледующаяБуква<>"") и (Найти(МаленькиеБуквы, СледующаяБуква)>0) Тогда
Буква = НРег(Буква);
КонецЕсли;
Буква = " "+Буква;
КонецЕсли;
Ответ = Ответ + Буква;
КонецЦикла;
Возврат СтрЗаменить(Ответ, "_", " ");
КонецФункции
ПоказатьP.S. ъ - как счетчик цика... мда... оригинально.
Функция СформироватьСиноним(ИмяРеквизита)
Перем Синоним, ъ, Символ, ПредСимвол, СледСимвол, Прописная, ПредПрописная, СледПрописная, ДлинаСтроки;
Синоним = ВРег(Сред(ИмяРеквизита, 1, 1));
ДлинаСтроки = СтрДлина(ИмяРеквизита);
Для ъ=2 По ДлинаСтроки Цикл
Символ = Сред(ИмяРеквизита, ъ, 1);
ПредСимвол = Сред(ИмяРеквизита, ъ-1, 1);
//СледСимвол = Сред(ИмяРеквизита, ъ+1, 1);
Прописная = Символ = ВРег(Символ);
ПредПрописная = ПредСимвол = ВРег(ПредСимвол);
//СледПрописная = СледСимвол = ВРег(СледСимвол);
// Варианты:
Если НЕ ПредПрописная И Прописная Тогда
Синоним = Синоним + " " + Символ;
//ИначеЕсли Прописная И НЕ СледПрописная Тогда
// Синоним = Синоним + " " + Символ;
Иначе
Синоним = Синоним + Символ;
КонецЕсли;
КонецЦикла;
Возврат Синоним;
КонецФункции // СформироватьСиноним()
Показать(16) у нас прямо конкурс решений образовался :)
"ленивый" вариант для обратного преобразования
Функция СформироватьРеквизит(Синоним)
Стр = СтрЗаменить(Синоним, " ", Символы.ПС);
СтрДлина = СтрЧислоСтрок(Стр);
ИмяРеквизита = "";
Для Индекс = 1 По СтрДлина Цикл
ТекСтр = СтрПолучитьСтроку(Стр, Индекс);
Если ПустаяСтрока(ТекСтр) Тогда
Продолжить;
КонецЕсли;
ИмяРеквизита = ИмяРеквизита + ВРег(Лев(ТекСтр, 1)) + Сред(ТекСтр, 2);
КонецЦикла;
Возврат ИмяРеквизита;
КонецФункции // СформироватьРеквизит()
ПоказатьКонкурс! да! профинтерес размяться )))
Я вот думаю над параметром "ЦенаСНДС", чтобы его в "Цена с НДС" перевести, наверно, составить словарь односимвольных слов "С", "а", "в", "к". Если массив прописных букв начинается с этого слова, отедалить её как слово.
"СлаваКПСС" тогда сработает как "Слава к ПСС", зато "СуммаСНДС" будет правильно - "Сумма с НДС"!
----
upd: Хотя нет, Символы.ПС - это ж для 8-ки, а в 7.7 РазделительСтрок.
Да и отталкиваться тогда удобнее от пробелов.
Результат их выполнения:
"Сумма_С_НДС", "СуммаСНДС" => "Сумма с НДС"
"Сумма с НДС", "Сумма _ с НДС" => "СуммаСНДС"
// 7.х
Прописная = Символ>="А" И Символ<="Я" ИЛИ Символ>="A" И Символ<="Z";
// 8.х
Прописная = КодСимвола(Символ)>=КодСимвола("А") И КодСимвола(Символ)<=КодСимвола("Я")
ИЛИ КодСимвола(Символ)>=КодСимвола("A") И КодСимвола(Символ)<=КодСимвола("Z");
Прописная = Символ = ВРег(Символ);Что же делать с национальными кодировками? Украинский, белорусский, казахский языки имеют свои буквы, которые не вписываются в диапазон А..Я, они часто стоят отдельно. Та же Ё и ё не вписываются в диапазон "а".."я", они раньше. Так же и с "Ґ" и "ґ", "Є" и "є", "І" и "і", "Ї" и "ї", "Ў" и "ў". Да и КодСимвола("Z") ведь постоянный, можно просто заменить на диапазон 0x41..0x5a. Правда? )))
За подсказку спасибо, в 7.7 код не тестировал, честно.
Всё правильно.
Да и с русским языком тоже проблема с "Ё".
В 7.х простое сравнение строк не пойдёт.
Проверил, там "=" к строкам правильно, а ">", "<" для строк применяются без учёта регистра.
Надо использовать КодСимв() и проверку на Ё.
Предлагаю альтернативное решение проблемы:
Процедура ВариацияЪ(Знач Стр,П=1)
Если П>59 Тогда
Возврат Стр;
КонецЕсли;
Большие="ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁQWERTYUIOPASDFGHJK LZXCVBNM";
Махонькие="йцукенгшщзхъфывапролджэячсмитьбюёqwertyuiopasdfgh jklzxcvbnm";
Х=Найти(Стр,Сред(Большие,П,1));
Если Х=0 Тогда
П=П+1;
Иначе
Стр=Лев(Стр,Х-1)+" "+Сред(Махонькие,Х,1)+Сред(Стр,Х+1);
КонецЕсли;
Возврат ВариацияЪ(Стр,П);
КонецПроцедуры
ПоказатьЗацените мощЪ мысли... :D
Стр=Лев(Стр,Х-1)+" "+Сред(Махонькие,П,1)+Сред(Стр,Х+1);
Функция Синонимайзер(Имя, Ответ = "", Стэйт = 7, б = "") Экспорт
Для ё = 1 По СтрДлина(Имя) Цикл
а = Сред(Имя, ё, 1);
Стэйт = (НРег(а) <> а) * 4 + Цел(Стэйт / 2);
Ответ = Ответ + ?(Стэйт = 2, НРег(б), ?(ё = 2, ВРег(б), б)) + ?(Стэйт = 4 ИЛИ Стэйт = 5, " ", "");
б = а
КонецЦикла;
Возврат Ответ + б
КонецФункции ПоказатьСинКосТан32Котан
Син кос тан32 котан - преобразование 1с-ки
Син кос тан 32Котан - преобразование Синонимайзера
Пришлось самому писать, вот может кому пригодиться:
// Возвращает правильный идентификатор переменной языка 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;
КонецФункции
ПоказатьА можно ж и переделать: убрать недопустимые символы и символ после пробела преобразовать к верхнему регистру, а пробел удалить.
Аналог такой функции я использовал в отчете по менеджерам в 2008 году
Там динамически формируются колонки в таблице значений по фамилиям менеджеров.
В типовых есть процедура,разлагающая строку на массив слов. Обходя массив делать первый символ верхним. Навскидку:
Подстроки = Общегоназначения.РазложитьСтрокуВМассивПодстрок(Синоним, " ");
Имя = "";
Для каждого ТекСтрока Из Подстроки Цикл
Имя = Имя + ТРег(ТекСтрока);
КонецЦикла;
Синоним = Синоним + " " + Символ;
В некоторых случаях следует заменить на:
Синоним = Синоним + " " + НРег(Символ);
т.к. в простом случае, сейчас "ЦенаЗакупки"
Вернет "Цена Закупки"
что неверно - должно быть "Цена закупки"
в остальном рабочий вариант)
&НаКлиенте
Процедура ПолучитьСиноним(Команда)
Синоним = ФС(Переменная);
КонецПроцедуры
&НаКлиенте
Функция ФС(Переменная, Синоним = "", Начало = Неопределено, Конец = Неопределено)
Если Переменная <> "" Тогда
Синоним = Синоним + ?(Начало = ТРег(Начало) И Конец = НРег(Конец), " " + НРег(Начало), Лев(Переменная, 1));
ФС(Сред(Переменная, 2), Синоним, Сред(Переменная, 2, 1), Прав(Синоним, 1));
КонецЕсли;
Возврат Синоним;
КонецФункции
ПоказатьРейтинг: 437
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 162834
Создание 20.11.12 23:55
Обновление 05.04.17 11:23
Просмотры 29952
Загрузки 0
Рейтинг
38
Комментарии 56
Код открыт Не указано
Рубрики Универсальные функции
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)