A1sCode библиотека 1С

Идея дня

Базовые примеры


Функция NormalizeSpaces(Текст) Экспорт
    S = A1sS.AsString(Текст);
    // 1) Сжать любые пробелы/табуляции/переводы строк до одного пробела
    S = A1sS.RegexReplace(S, "\s+", " ");
    // 2) Убрать пробелы по краям
    S = A1sS.RegexReplace(S, "^\s+|\s+$", "");
    Возврат S;
КонецФункции

Сообщить( NormalizeSpaces("  Привет,   мир \n\t!") ); // "Привет, мир !"
      

Схлопывание повторяющихся символов


// Много дефисов → один дефис
A1sS.RegexReplace("A---B----C", "-{2,}", "-"); // "A-B-C"

// Удалить все неразрывные пробелы и заменить на обычный пробел
A1sS.RegexReplace("Цена\u00A0123", "\u00A0", " "); // "Цена 123"
      

Очистка HTML/маркерной разметки


Функция StripHTML(Текст) Экспорт
    S = A1sS.AsString(Текст);
    // Убрать теги
    S = A1sS.RegexReplace(S, "<[^>]+>", "");
    // Схлопнуть пробелы
    S = A1sS.RegexReplace(S, "\s+", " ");
    // Трим
    S = A1sS.RegexReplace(S, "^\s+|\s+$", "");
    Возврат S;
КонецФункции

Сообщить( StripHTML("<p>Кабель <b>ПВС</b></p>") ); // "Кабель ПВС"
      

Если встречаются HTML-сущности (&nbsp; и др.), их тоже можно заменить через RegexReplace или обычное СтрЗаменить.

Нормализация телефона

Оставляем только цифры и ведущий «+», убираем прочее.


Функция NormalizePhone(Тел) Экспорт
    S = A1sS.AsString(Тел);
    // Разрешаем первый "+" и цифры, остальное выбрасываем
    S = A1sS.RegexReplace(S, "(?<!^)\+", "");      // все "+" кроме первого
    S = A1sS.RegexReplace(S, "[^\d\+]", "");         // всё, что не цифры/+
    // Схлопнуть ведущие "8" → "+7" (пример для РФ)
    S = A1sS.RegexReplace(S, "^8(\d{10})$", "+7$1");
    Возврат S;
КонецФункции

Сообщить( NormalizePhone("+7 (999) 123-45-67") ); // "+79991234567"
Сообщить( NormalizePhone("8 999 123 45 67") );    // "+79991234567"
      

Подготовка маски для запросов (ПОДОБНО)

Пользователь вводит * и ? — переводим в % и _ для ПОДОБНО.


Функция ToLikeMask(ПользВвод) Экспорт
    S = NormalizeSpaces(ПользВвод);
    // Экранируем спецсимволы SQL LIKE: %, _, \
    S = A1sS.RegexReplace(S, "([%_\\\])", "\\\\$1");
    // Переводим пользовательские шаблоны
    S = A1sS.RegexReplace(S, "\*", "%");
    S = A1sS.RegexReplace(S, "\?", "_");
    // По умолчанию — искать вхождение
    Если Лев(С,1) <> "%" Тогда S = "%" + S; КонецЕсли;
    Если Прав(С,1) <> "%" Тогда S = S + "%"; КонецЕсли;
    Возврат S;
КонецФункции

Функция НайтиИменаПоМаске(Ввод, Лимит = 20) Экспорт
    Маска = ToLikeMask(Ввод);
    ТекстQ = "
    |ВЫБРАТЬ ПЕРВЫЕ &Лимит
    |    Ном.Наименование КАК Name
    |ИЗ Справочник.Номенклатура КАК Ном
    |ГДЕ Ном.Наименование ПОДОБНО &Маска
    |УПОРЯДОЧИТЬ ПО Name
    ";
    // Порядок: &Лимит, &Маска
    Таб = A1sQ.Unload(ТекстQ, Лимит, Маска);
    Возврат Таб.ВыгрузитьКолонку("Name");
КонецФункции
      

Нормализация артикулов/кодиров

Удаляем «мусор», приводим к единому виду.


Функция NormalizeSKU(Код) Экспорт
    S = A1sS.AsString(Код);
    // Оставить латиницу/цифры/дефис/нижнее подчеркивание
    S = A1sS.RegexReplace(S, "[^A-Za-z0-9\-_]", "");
    // Несколько дефисов → один
    S = A1sS.RegexReplace(S, "-{2,}", "-");
    // В верхний регистр
    Возврат ВРег(S);
КонецФункции
      

Конвейер «очистить описание для печати»


Функция CleanDescription(Текст) Экспорт
    S = A1sS.AsString(Текст);
    // 1) Убрать теги/скрипты
    S = A1sS.RegexReplace(S, "<script[^>]*>.*?</script>", "");
    S = A1sS.RegexReplace(S, "<style[^>]*>.*?</style>", "");
    S = A1sS.RegexReplace(S, "<[^>]+>", "");
    // 2) Схлопнуть пробелы и убрать пробелы в начале/конце
    S = A1sS.RegexReplace(S, "\s+", " ");
    S = A1sS.RegexReplace(S, "^\s+|\s+$", "");
    // 3) Длинные тире/многоточия → нормализованные символы
    S = A1sS.RegexReplace(S, "[–—]+", "—");
    S = A1sS.RegexReplace(S, "\.{3,}", "…");
    Возврат S;
КонецФункции
      

Группы захвата: форматирование ФИО


// "Иванов И И" → "Иванов И.И."
Функция NormalizeFIO(Текст) Экспорт
    S = NormalizeSpaces(Текст);
    Возврат A1sS.RegexReplace(
        S,
        "^([А-ЯЁ][а-яё]+)\s+([А-ЯЁ])[.\s]*([А-ЯЁ])\.?$",
        "$1 $2.$3."
    );
КонецФункции
      

Анти-паттерны

Практика (15–30 минут)

  1. Соберите утилиту NormalizeSpaces и примените её к формам ввода.
  2. Реализуйте NormalizePhone и прикрутите к карточке контрагента.
  3. Сделайте ToLikeMask и используйте в поиске ПОДОБНО (см. пример).
  4. Очистите HTML-описание товара для печати через CleanDescription.

Чек-лист

Что дальше

День 21: A1sLog — Эффективное логирование — уровни, кореляция, формат, полезные шаблоны.