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

Зачем нужны Empty и NotEmpty

Дальнейшие утилиты с числами/датами — в Днях 12–13. Здесь только проверка наличия значения.

Базовая семантика

Важно: 0 и Ложьне пусто. Для числовых «по умолчанию» используйте День 13 (NumOrZero), для дат — День 12.

Примеры использования

Строки


// "" → пусто; "  " (если нужно) — решайте валидацией на уровне A1sS (День 18–20)
Если A1sO.Empty("") Тогда
    A1sLog.Info("Day10", "Пустая строка");
КонецЕсли;

Если A1sO.NotEmpty("Кабель") Тогда
    A1sLog.Info("Day10", "Непустая строка");
КонецЕсли;
      

Ссылки


Пер = Справочники.Номенклатура.НайтиПоНаименованию("Кабель ПВС");
Если A1sO.Empty(Пер) Тогда
    A1sLog.Info("Day10", "Ссылка пустая/не найдена");
Иначе
    A1sLog.Info("Day10", "Есть ссылка: " + Пер);
КонецЕсли;
      

Коллекции и таблицы


Таб = A1sQ.Unload("ВЫБРАТЬ 1 КАК One");
Если A1sO.NotEmpty(Таб) Тогда
    Сообщить("Строк: " + Таб.Количество());
КонецЕсли;

Масс = Новый Массив;
Если A1sO.Empty(Масс) Тогда
    Масс.Добавить("Первый элемент");
КонецЕсли;
      

Булево и число


// Ложь/Истина — это значение (не пусто)
Если A1sO.NotEmpty(Ложь) Тогда
    A1sLog.Info("Day10", "Булево задано, пусть и Ложь");
КонецЕсли;

// 0 — это число, не пусто
Если A1sO.NotEmpty(0) Тогда
    A1sLog.Info("Day10", "Ноль — валидное значение");
КонецЕсли;
      

Охранные условия (guard clauses)

Сокращаем вложенность: выходим рано, если входные данные пусты.


Процедура ОбновитьЦену(Товар, ЦенаНовая) Экспорт
    Если A1sO.Empty(Товар) Тогда
        A1sLog.Warn("Day10", "Нет товара — выходим");
        Возврат;
    КонецЕсли;

    Если A1sO.Empty(ЦенаНовая) Тогда
        A1sLog.Warn("Day10", "Цена не задана — выходим");
        Возврат;
    КонецЕсли;

    // Здесь гарантировано «есть значения»
    // ...
КонецПроцедуры
      

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

Часто удобно проверить «и параметр, и результат» одной логикой.


Функция НайтиИмена(Маска, Лимит = 20) Экспорт
    Если A1sO.Empty(Маска) Тогда Возврат Новый Массив; КонецЕсли;

    ТекстQ = "
    |ВЫБРАТЬ ПЕРВЫЕ &Лимит
    |    Ном.Наименование КАК Name
    |ИЗ Справочник.Номенклатура КАК Ном
    |ГДЕ Ном.Наименование ПОДОБНО &Маска
    |УПОРЯДОЧИТЬ ПО Name
    ";
    Таб = A1sQ.Unload(ТекстQ, Лимит, Маска);

    Если A1sO.Empty(Таб) Тогда Возврат Новый Массив; КонецЕсли;
    Возврат Таб.ВыгрузитьКолонку("Name");
КонецФункции
      

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

Микро-шаблоны для проекта

Безопасное получение «первого непустого»


Функция FirstNotEmpty(Знач1, Знач2, Знач3 = Неопределено) Экспорт
    Если A1sO.NotEmpty(Знач1) Тогда Возврат Знач1; КонецЕсли;
    Если A1sO.NotEmpty(Знач2) Тогда Возврат Знач2; КонецЕсли;
    Если A1sO.NotEmpty(Знач3) Тогда Возврат Знач3; КонецЕсли;
    Возврат Неопределено;
КонецФункции
      

Проверка обязательных полей формы


Функция ВалидироватьКарточку(Имя, Группа, Код) Экспорт
    Ош = Новый Массив;

    Если A1sO.Empty(Имя) Тогда   Ош.Добавить("Имя обязательно"); КонецЕсли;
    Если A1sO.Empty(Группа) Тогда Ош.Добавить("Не выбрана группа"); КонецЕсли;
    // Код может быть "0" — это допустимо
    Если A1sO.Empty(Код) Тогда    Ош.Добавить("Код не задан"); КонецЕсли;

    Возврат Ош; // пустой массив = валидно
КонецФункции
      

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

  1. Замените разрозненные проверки пустоты в одном из модулей на A1sO.Empty/NotEmpty.
  2. Добавьте охранные условия в процедуру сохранения сущности.
  3. Напишите утилиту FirstNotEmpty и примените её в двух местах.
  4. Сделайте валидацию формы: соберите массив ошибок и выведите пользователю.

Чек-лист

Что дальше

День 11: A1sO — работа с коллекциями — безопасные проверки, извлечение и преобразования.