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

Идея дня

Опросы массивов (создание/объединение/уникальность) — подробно в Днях 24–27 (A1sArrays).

Базовые проверки коллекций


Если A1sO.Empty(Коллекция) Тогда
    A1sLog.Info("Day11", "Пустая коллекция — ничего не делаем");
    Возврат;
КонецЕсли;

// Коллекция не пустая — продолжаем
      

Фильтрация массива от «пустых» значений


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

    Рез = Новый Массив;
    Для каждого Э Из ИсхМассив Цикл
        Если A1sO.NotEmpty(Э) Тогда Рез.Добавить(Э); КонецЕсли;
    КонецЦикла;
    Возврат Рез;
КонецФункции
      

Соответствие: безопасное чтение

Частая задача — взять значение по ключу, а если его нет/пусто — вернуть дефолт.


Функция GetOrDefault(Соп, Ключ, ПоУмолчанию = Неопределено) Экспорт
    Если A1sO.Empty(Соп) Тогда Возврат ПоУмолчанию; КонецЕсли;
    Если НЕ Соп.СодержитКлюч(Ключ) Тогда Возврат ПоУмолчанию; КонецЕсли;

    Значение = Соп.Получить(Ключ);
    Если A1sO.Empty(Значение) Тогда Возврат ПоУмолчанию; КонецЕсли;
    Возврат Значение;
КонецФункции

// Использование:
Профиль = Новый Соответствие;
Профиль.Вставить("Имя", "Кабель ПВС");
Сообщить(GetOrDefault(Профиль, "Имя", "Без имени"));     // "Кабель ПВС"
Сообщить(GetOrDefault(Профиль, "Код", 0));                // 0 (дефолт, ключа нет)
      

Помните: 0 и Ложь — это не «пусто» (см. День 10). Меняйте GetOrDefault, если нужно иное поведение.

ТаблицаЗначений → Массив/Соответствие

Одной колонкой — в массив


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

Две колонки — в соответствие (ключ → значение)


Функция ТабВКарту(Таб, КолКлюч = "ID", КолЗнач = "Name") Экспорт
    Карта = Новый Соответствие;
    Если A1sO.Empty(Таб) Тогда Возврат Карта; КонецЕсли;

    Если Таб.Колонки.Найти(КолКлюч) = Неопределено Тогда Возврат Карта; КонецЕсли;
    Если Таб.Колонки.Найти(КолЗнач) = Неопределено Тогда Возврат Карта; КонецЕсли;

    Ключи  = Таб.ВыгрузитьКолонку(КолКлюч);
    Значи  = Таб.ВыгрузитьКолонку(КолЗнач);
    Для Н = 0 По Ключи.Количество()-1 Цикл
        Карта.Вставить(Ключи[Н], Значи[Н]);
    КонецЦикла;
    Возврат Карта;
КонецФункции
      

Массив → ТаблицаЗначений

Удобно для передачи «виртуальных таблиц» как параметров (&ВТ) в запросы (см. День 9).


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

    Для каждого Э Из МассивЗначений Цикл
        Нов = ТЗ.Добавить();
        Нов[ИмяКолонки] = Э;
    КонецЦикла;
    Возврат ТЗ;
КонецФункции
      

Компактные операции с массивами (зачатки)

Ниже — лёгкие приёмы, не пересекающиеся с будущим модулем A1sArrays.

Map: преобразование каждого элемента


Функция Map(ИсхМассив, Преобразователь) Экспорт
    // Преобразователь — процедура/функция: Функция(X) Экспорт Возврат ... КонецФункции
    Рез = Новый Массив;
    Если A1sO.Empty(ИсхМассив) Тогда Возврат Рез; КонецЕсли;

    Для каждого Э Из ИсхМассив Цикл
        Рез.Добавить(Преобразователь(Э));
    КонецЦикла;
    Возврат Рез;
КонецФункции
      

Filter: оставить только непустые


Функция FilterNotEmpty(ИсхМассив) Экспорт
    Возврат Compact(ИсхМассив); // из примера выше
КонецФункции
      

Работа со строками результата запроса

Комбинируем A1sQ и коллекции: быстро получаем массивы или соответствия для UI.


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

// Для выпадающего списка:
Имена = ТабКолонкаВМассив(Таб, "Name");

// Для быстрой навигации по ID → Name:
Карта = ТабВКарту(Таб, "ID", "Name");
      

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

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

  1. Реализуйте GetOrDefault и используйте его в двух местах чтения Соответствие.
  2. Напишите Compact и очистите массив от пустых значений.
  3. Преобразуйте результаты запроса в массив имён и карту ID → Name.
  4. Сделайте МассивВТаблицу и используйте в параметре &ВТ в одном запросе (см. День 9).

Чек-лист

Что дальше

День 12: A1sO — Даты (Now, DateOrEmpty) — безопасные даты и нормализация периодов.