Of — структура за одну строку
Самая используемая функция во всей библиотеке. Заменяет классическую конструкцию «объявить структуру → вставить N ключей» одной инлайн-строкой. Принимает до 20 пар ключ-значение. Ключи — строки, значения — что угодно.
// 5 строк только на структуру
Параметры = Новый Структура;
Параметры.Вставить("Дата", Дата);
Параметры.Вставить("Организация", Орг);
Параметры.Вставить("Склад", Склад);
МояФункция(Параметры);
// 1 строка
МояФункция(
A1sDS.Of(
"Дата", Дата,
"Организация", Орг,
"Склад", Склад));
// ── Of: структура из пар ключ-значение (до 20 пар) ───────────────────────
Шапка = A1sDS.Of(
"Дата", '20260201',
"Организация", МояОрг,
"Склад", СкладГП,
"Комментарий", "Корпус А — февраль");
// → Структура { Дата:'...', Организация:СсылкаОрг, Склад:СсылкаСклад, ... }
// ── OfFixed: то же, но результат — ФиксированнаяСтруктура ────────────────
// Удобно для констант — платформа не даст изменить значения случайно
Режимы = A1sDS.OfFixed(
"ОсновнойСклад", СкладОсновной,
"РезервныйСклад", СкладРезерв);
// Режимы.ОсновнойСклад = X ← ошибка: ФиксированнаяСтруктура нельзя изменить
// ── OfKeys: структура из СПИСКА ключей с одним значением ─────────────────
// Применяется для инициализации счётчиков, флагов, накопителей
Счётчики = A1sDS.OfKeys("Создано, Обновлено, Ошибок", 0);
// → { Создано: 0, Обновлено: 0, Ошибок: 0 }
// После обработки строк — накапливаем:
Счётчики.Создано = Счётчики.Создано + 1;
Счётчики.Обновлено = Счётчики.Обновлено + 3;
Сообщить("Создано: " + Счётчики.Создано
+ ", Ошибок: " + Счётчики.Ошибок);
Of как значение в другой
Of — это нормально. Например, для вложенных конфигураций:
A1sDS.Of("Фильтр", A1sDS.Of("Склад", СкладСсылка, "Дата", Сегодня)).
Defaults — умолчания без перезаписи
Defaults(SourceStruct, DefaultsStruct)
— берёт данные пользователя и добавляет к ним умолчания для тех ключей, которых нет.
Ключи из источника всегда побеждают. В отличие от Merge — только дополняет, не
перезаписывает.
// ── Сценарий: обработка параметров загрузки из внешней системы ───────────
// Пользователь передал только часть настроек — остальное берём по умолчанию
НастройкиПользователя = A1sDS.Of(
"Организация", МояОрг, // пользователь задал
"Дата", '20260201'); // пользователь задал
// Склад, Валюта, НДС — не задал → возьмём из умолчаний
Умолчания = A1sDS.Of(
"Организация", ОрганизацияПоУмолчанию,
"Склад", СкладОсновной,
"Валюта", "RUB",
"НДС", Истина);
Итог = A1sDS.Defaults(НастройкиПользователя, Умолчания);
// Итог → { Организация: МояОрг, ← от пользователя (НЕ перезаписано!)
// Дата: '20260201', ← от пользователя
// Склад: СкладОсновной, ← из умолчаний
// Валюта: "RUB", ← из умолчаний
// НДС: Истина } ← из умолчаний
// ── Применение: передаём итоговые параметры в документ ───────────────────
Dok = A1sDocs.Of("ВыпускПродукцииУслуг", Итог);
Defaults(A, B) — ключи из A побеждают, B только дополняет. Merge(A, B) — ключи
из B перезаписывают A. Правило: «Defaults — для умолчаний, Merge — для обновлений».
Merge — объединить с перезаписью
Merge(База, Источник)
— возвращает новую структуру, где все ключи из Источника перезаписывают соответствующие ключи Базы. База
не мутирует — возвращается копия.
// ── Паттерн: базовая структура документа + override для конкретного случая
БазоваяШапка = A1sDS.Of(
"Организация", МояОрг,
"Склад", СкладОсновной,
"Валюта", "RUB",
"Дата", ТекущаяДата());
// Для экспортной сделки — переопределяем валюту и склад
ШапкаЭкспорт = A1sDS.Merge(БазоваяШапка, A1sDS.Of(
"Валюта", "USD",
"Склад", СкладЭкспорт));
// ШапкаЭкспорт → { Организация: МояОрг, Склад: СкладЭкспорт,
// Валюта: "USD", Дата: ТекДата }
// БазоваяШапка — НЕ изменилась (Merge возвращает новую структуру)
// ── Паттерн DTO-фабрика: функция с необязательным Overrides ──────────────
Функция НовыйВыпуск(Overrides = Неопределено)
База = A1sDS.Of(
"Организация", МояОрг,
"Склад", СкладГП,
"Дата", ТекущаяДата());
Возврат A1sDS.Merge(База, Overrides); // если Overrides=Неопределено — вернёт копию базы
КонецФункции
// Вызов без параметров — базовые значения
Dok1 = A1sDocs.Of("ВыпускПродукцииУслуг", НовыйВыпуск());
// Вызов с параметрами — база + override
Dok2 = A1sDocs.Of("ВыпускПродукцииУслуг",
НовыйВыпуск(A1sDS.Of("Дата", '20260301', "Комментарий", "Март")));
Pick / Omit — выбрать нужные или исключить лишние
Два зеркальных инструмента. Pick — берёт
только перечисленные ключи. Omit — берёт всё,
кроме перечисленных. Оба принимают ключи через запятую в строке.
// Допустим, из JSON-API пришла большая структура
ДанныеAPI = A1sDS.Of(
"id", "kv-101",
"Наименование", "Квартира 101",
"Площадь", 42.5,
"Этаж", 3,
"token", "eyJ0...", // служебное — нам не нужно
"_version", 7, // служебное — нам не нужно
"Цена", 3500000);
// ── Pick: взять только нужные поля ───────────────────────────────────────
ДляСправочника = A1sDS.Pick(ДанныеAPI, "Наименование, Площадь, Этаж, Цена");
// → { Наименование: "Квартира 101", Площадь: 42.5, Этаж: 3, Цена: 3500000 }
// token и _version — отброшены
// ── Omit: взять всё, кроме указанных ─────────────────────────────────────
ДляСправочника2 = A1sDS.Omit(ДанныеAPI, "id, token, _version");
// → { Наименование: "Квартира 101", Площадь: 42.5, Этаж: 3, Цена: 3500000 }
// Эквивалентно Pick выше, но Pick точнее — Omit добавит любые новые поля из API автоматически
// ── Практика: передать только нужные поля в Ensure ───────────────────────
A1sCatalogs.Ensure(
"Номенклатура",
ДанныеAPI.Наименование,
A1sDS.Omit(ДанныеAPI, "id, token, _version"));
Rename / RenameFields — переименовать ключи
Rename
переименовывает ключи одной структуры. RenameFields
(новое в v2.1) делает то же самое для массива структур — идеально для подготовки данных перед
LoadRows.
// ── Rename: одна структура ────────────────────────────────────────────────
// JSON из внешнего API: поля с английскими именами
СтрокаAPI = A1sDS.Of(
"name", "Квартира 101",
"area", 42.5,
"floor", 3,
"price", 3500000);
// Карта переименования: {старое_имя: "новое_имя"}
КартаПолей = A1sDS.Of(
"name", "Наименование",
"area", "Площадь",
"floor", "Этаж",
"price", "Цена");
ДляСправочника = A1sDS.Rename(СтрокаAPI, КартаПолей);
// → { Наименование: "Квартира 101", Площадь: 42.5, Этаж: 3, Цена: 3500000 }
// ── RenameFields: МАССИВ структур (новое в v2.1) ──────────────────────────
// Пришёл массив JSON-строк, нужно переименовать поля во всех сразу
// и загрузить в ТЧ документа через LoadRows
ДанныеJSON = A1sAR.Of(
A1sDS.Of("item", "Квартира 101", "qty", 1, "sum", 3500000),
A1sDS.Of("item", "Квартира 102", "qty", 1, "sum", 3100000),
A1sDS.Of("item", "Квартира 103", "qty", 1, "sum", 4400000));
// Схема один раз — описываем ДО цикла
// Поля вне схемы копируются как есть (qty → qty если не указано)
Схема = A1sDS.Of(
"item", "Номенклатура", // item → Номенклатура
"qty", "Количество", // qty → Количество
"sum", "Сумма"); // sum → Сумма
ПодготовленныеСтроки = A1sDS.RenameFields(ДанныеJSON, Схема);
// → массив структур с русскими именами:
// [{ Номенклатура: "Квартира 101", Количество: 1, Сумма: 3500000 }, ...]
// Загружаем в ТЧ документа
A1sDocs.LoadRows(Dok, "Продукция", ПодготовленныеСтроки);
AddIf — добавить поле по условию
AddIf(Структура, Ключ, ЗначениеЕслиИстина, Условие)
— добавляет ключ в структуру только если условие выполнено. Возвращает ту же структуру — удобно для
инлайн-цепочек.
// ── Сценарий: параметры фильтра формируются в зависимости от флагов ───────
Фильтр = A1sDS.Of("Организация", МояОрг); // обязательное поле
// Добавляем склад только если он задан в параметрах формы
A1sDS.AddIf(Фильтр, "Склад", Склад, ЗначениеЗаполнено(Склад));
// Добавляем период только если включён флаг "ПоПериоду"
A1sDS.AddIf(Фильтр, "НачалоПериода", НачалоПериода, ФильтрПоПериоду);
A1sDS.AddIf(Фильтр, "КонецПериода", КонецПериода, ФильтрПоПериоду);
// Добавляем комментарий с альтернативным значением при ложном условии
A1sDS.AddIf(Фильтр, "Режим",
"Детальный", // если ДетальныйРежим = Истина
ДетальныйРежим,
"Краткий"); // иначе — "Краткий"
// ── Всё вместе, инлайн-стиль ─────────────────────────────────────────────
Параметры = A1sDS.Of("Организация", МояОрг);
A1sDS.AddIf(Параметры, "Склад", Склад, ЗначениеЗаполнено(Склад));
A1sDS.AddIf(Параметры, "Контрагент", Контрагент, ЗначениеЗаполнено(Контрагент));
ДокументыПоФильтру = A1sDocs.Refs("РеализацияТоваровУслуг",
"Организация = &Организация", Параметры);
HasKeys · GetKeys · GroupBy — анализ данных
Небольшие, но полезные инструменты. HasKeys —
проверить что все обязательные поля есть. GroupBy —
сгруппировать массив структур и посчитать суммы.
// ── HasKeys: валидация обязательных полей перед загрузкой ─────────────────
СтрокаJSON = A1sDS.Of("Наименование", "Кв 101", "Площадь", 42.5);
// Поля "Этаж" и "Цена" отсутствуют
Если НЕ A1sDS.HasKeys(СтрокаJSON, "Наименование, Площадь, Цена") Тогда
Сообщить("Ошибка: не заполнены обязательные поля (Цена)");
Возврат;
КонецЕсли;
// ── GetKeys: перебрать все ключи структуры ────────────────────────────────
Ключи = A1sDS.GetKeys(СтрокаJSON); // → ["Наименование", "Площадь"]
Сообщить("Поля: " + A1sAR.Join(Ключи, ", ")); // "Поля: Наименование, Площадь"
// ── GroupBy: сгруппировать строки выпуска по этажу и посчитать суммы ──────
СтрокиВыпуска = A1sAR.Of(
A1sDS.Of("Этаж", "3", "Сумма", 3500000),
A1sDS.Of("Этаж", "3", "Сумма", 3100000),
A1sDS.Of("Этаж", "4", "Сумма", 4400000),
A1sDS.Of("Этаж", "4", "Сумма", 5100000));
ИтогиПоЭтажам = A1sDS.GroupBy(СтрокиВыпуска, "Этаж", "Сумма");
// → { "3": 6600000, "4": 9500000 }
// Без запроса к БД, без ТЗ.Итог() — просто из массива структур
Сообщить("Этаж 3: " + ИтогиПоЭтажам["3"]); // 6600000
Сообщить("Этаж 4: " + ИтогиПоЭтажам["4"]); // 9500000
Of — массив за одну строку
Зеркало A1sDS.Of, но для массивов. Принимает до 40 элементов любого типа. Именно через него
удобно передавать списки имён в EnsureBatch, PickByName, PostAll.
Имена = Новый Массив;
Имена.Добавить("ПРОЖИВАНИЕ");
Имена.Добавить("ПИТАНИЕ");
Имена.Добавить("ПРОЧЕЕ");
МояФункция(Имена);
МояФункция(
A1sAR.Of(
"ПРОЖИВАНИЕ",
"ПИТАНИЕ",
"ПРОЧЕЕ"));
// ── Of: элементы любого типа ──────────────────────────────────────────────
Числа = A1sAR.Of(1, 2, 3, 4, 5);
Имена = A1sAR.Of("ПРОЖИВАНИЕ", "ПИТАНИЕ", "ПРОЧЕЕ");
Ссылки = A1sAR.Of(Ном1, Ном2, Ном3); // ссылки тоже работают
Строки = A1sAR.Of( // массив структур — для AddRows
A1sDS.Of("Ном", Ном1, "Кол", 1),
A1sDS.Of("Ном", Ном2, "Кол", 2));
// Флаг ТолькоУникальные — убрать дубликаты при создании
УникальныеИмена = A1sAR.Of("А", "Б", "А", "В", "Б", /*ТолькоУникальные=*/ Истина);
// → ["А", "Б", "В"]
// ── OfN: массив заданного размера с одинаковым значением ─────────────────
Нули = A1sAR.OfN(5, 0); // [0, 0, 0, 0, 0]
Флаги = A1sAR.OfN(10, Ложь); // [Ложь, Ложь, ... × 10]
Буфер = A1sAR.OfN(100, ""); // 100 пустых строк — для заполнения в цикле
Concatenate · Union · Difference — операции над множествами
Три функции для работы с массивами как с множествами. Concatenate —
просто объединить (с опциональной уникализацией). Union —
объединение уникальных. Difference — что
есть в первом, но нет во втором.
// ── Concatenate: объединить несколько массивов ────────────────────────────
ВсеНом = A1sAR.Concatenate(НомДок1, НомДок2, НомДок3);
// Принимает до 8 массивов + флаг ТолькоУникальные
УникВсеНом = A1sAR.Concatenate(НомДок1, НомДок2, НомДок3, /*ТолькоУникальные*/ Истина);
// ── Union: объединение — уникальные элементы из всех массивов ─────────────
// Эквивалентно Concatenate с ТолькоУникальные=Истина, но читается явнее
ОбщаяНоменклатура = A1sAR.Union(НомДок1, НомДок2, НомДок3);
// ── Difference: что выпустили, но ещё не реализовали ─────────────────────
ВыпущеннаяНом = A1sAR.Of(Ном101, Ном102, Ном103, Ном201);
РеализованнаяНом = A1sAR.Of(Ном101, Ном201);
НевыпущенноеОстаток = A1sAR.Difference(ВыпущеннаяНом, РеализованнаяНом);
// → [Ном102, Ном103] — то что выпустили, но не реализовали
// ── Intersection: пересечение — что есть в обоих ─────────────────────────
ОбщиеПозиции = A1sAR.Intersection(ВыпущеннаяНом, РеализованнаяНом);
// → [Ном101, Ном201]
PickFilled · PickRefs · RemoveDuplicates — очистка данных
Три функции для очистки «сырых» данных до того, как передать их в документ или справочник. Убрать пустые, убрать дубликаты, оставить только ссылки.
// ── Сценарий: пользователь выбрал несколько номенклатур на форме ──────────
// Список может содержать пустые ссылки и дубликаты
ВыборПользователя = A1sAR.Of(
Ном1, Неопределено, Ном2, Ном1, // дубль Ном1
A1sCatalogs.Empty("Номенклатура"), // пустая ссылка
Ном3, Неопределено);
// Шаг 1: убрать Неопределено и пустые ссылки
БезПустых = A1sAR.PickFilled(ВыборПользователя);
// → [Ном1, Ном2, Ном1, Ном3] (Неопределено и пустые ссылки убраны)
// Шаг 2: убрать дублирующиеся ссылки
ЧистыйСписок = A1sAR.RemoveDuplicates(БезПустых);
// → [Ном1, Ном2, Ном3]
// ── Всё в одну строку: RemoveDuplicates(PickFilled(...)) ─────────────────
ГотовыйСписок = A1sAR.RemoveDuplicates(
A1sAR.PickFilled(ВыборПользователя));
// ── PickRefs: оставить только ссылки (убирает строки, числа, Неопределено)
// Используется когда массив содержит разнотипные значения
СмешанныйМассив = A1sAR.Of(Ном1, "текст", Ном2, 42, Ном3);
ТолькоСсылки = A1sAR.PickRefs(СмешанныйМассив);
// → [Ном1, Ном2, Ном3] (строки и числа убраны)
// ── PickNotNull: оставить всё кроме Неопределено (включая пустые ссылки)
// Когда пустая ссылка — валидное значение, но Неопределено — нет
БезНеопределено = A1sAR.PickNotNull(ВыборПользователя);
PickFilled убирает и Неопределено, и пустые
ссылки, и пустые строки (ЗначениеЗаполнено вернёт Ложь для всех). PickNotNull
убирает только Неопределено — пустая ссылка пройдёт. Для обычной очистки входных данных
используйте PickFilled.Chunk — разбить на пачки для пакетной обработки
Chunk(Array, Size)
разбивает массив на подмассивы заданного размера. Последний кусок может быть меньше — это нормально.
Незаменим для массовых загрузок.
// ── Сценарий: загрузить 500 квартир в справочник, порциями по 100 ─────────
// Зачем пачками? Чтобы не держать транзакцию открытой слишком долго
ВсеКвартиры = /* ... массив из 500 строк из Excel ... */;
Сообщить("Всего позиций: " + ВсеКвартиры.Количество());
// Разбиваем на пачки по 100
Пачки = A1sAR.Chunk(ВсеКвартиры, 100);
// → [[строки 1-100], [строки 101-200], ..., [строки 401-500]]
// Каждый элемент Пачки — это массив строк из Excel
НомерПачки = 0;
Для Каждого Пачка Из Пачки Цикл
НомерПачки = НомерПачки + 1;
Сообщить("Пачка " + НомерПачки + ": " + Пачка.Количество() + " записей");
Для Каждого СтрокаExcel Из Пачка Цикл
A1sCatalogs.EnsureUpdate(
"Номенклатура",
СтрокаExcel.Наименование,
A1sDS.Pick(СтрокаExcel, "Площадь, Этаж, Цена"));
КонецЦикла;
// Пауза между пачками (опционально, для больших баз)
ОбработкаПрерыванияПользователя();
КонецЦикла;
Сообщить("✓ Загружено " + ВсеКвартиры.Количество() + " позиций в "
+ Пачки.Количество() + " пачках");
First · Last · Contains · IndexOf — доступ без индексов
Маленькие функции, которые убирают типичные ошибки «выход за границы массива» и делают код более читаемым.
ВыпускиЗаМесяц = A1sDocs.AllInPeriod("ВыпускПродукцииУслуг", '20260201', '20260228');
// ── Безопасный доступ — не упадёт на пустом массиве ──────────────────────
ПервыйВыпуск = A1sAR.First(ВыпускиЗаМесяц); // Неопределено если пустой
ПоследнийВыпуск = A1sAR.Last(ВыпускиЗаМесяц); // Неопределено если пустой
Если ПервыйВыпуск = Неопределено Тогда
Сообщить("За февраль выпусков нет");
КонецЕсли;
// vs классический — требует проверки размера вручную:
// Если ВыпускиЗаМесяц.Количество() > 0 Тогда
// ПервыйВыпуск = ВыпускиЗаМесяц[0]; ← IndexOutOfBounds если забыть проверку
// КонецЕсли;
// ── Contains: проверить вхождение ────────────────────────────────────────
ДозволенныеСклады = A1sAR.Of(СкладОсновной, СкладРезерв, СкладЭкспорт);
Если НЕ A1sAR.Contains(ДозволенныеСклады, ВыбранныйСклад) Тогда
ВызватьИсключение "Склад не входит в список разрешённых";
КонецЕсли;
// ── IsEmpty: проверить что массив пустой ─────────────────────────────────
Если A1sAR.IsEmpty(ВыпускиЗаМесяц) Тогда
Сообщить("Нет документов за период");
Возврат;
КонецЕсли;
// ── IndexOf: найти позицию элемента (−1 если не найден) ──────────────────
ПозицияВыпуска = A1sAR.IndexOf(ВыпускиЗаМесяц, КонкретныйВыпуск);
Если ПозицияВыпуска >= 0 Тогда
Сообщить("Найден на позиции: " + ПозицияВыпуска);
КонецЕсли;
AddIf · Join — условное добавление и склейка
AddIf
добавляет элемент в массив только при выполнении условия. Join склеивает
элементы через разделитель — аналог СтрСоединить, но для массивов любого типа.
// ── AddIf: собрать список ошибок условно ──────────────────────────────────
Ошибки = Новый Массив;
A1sAR.AddIf(Ошибки, "Не заполнена Организация", НЕ ЗначениеЗаполнено(Организация));
A1sAR.AddIf(Ошибки, "Не заполнен Склад", НЕ ЗначениеЗаполнено(Склад));
A1sAR.AddIf(Ошибки, "ТЧ пустая", Dok.Продукция.Количество() = 0);
Если НЕ A1sAR.IsEmpty(Ошибки) Тогда
ВызватьИсключение "Ошибки заполнения: " + A1sAR.Join(Ошибки, "; ");
// → "Ошибки заполнения: Не заполнена Организация; ТЧ пустая"
КонецЕсли;
// ── AddIf с альтернативным значением ─────────────────────────────────────
СтатусыДокументов = Новый Массив;
Для Каждого Ссылка Из ВыпускиЗаМесяц Цикл
A1sAR.AddIf(СтатусыДокументов,
"✓ проведён", // если проведён
A1sDocs.IsPosted(Ссылка),
"✗ не проведён"); // иначе
КонецЦикла;
// ── Join: вывести список в одну строку ───────────────────────────────────
ИменаНом = A1sAR.Of("Квартира 101", "Квартира 102", "Квартира 103");
Сообщить("Загружено: " + A1sAR.Join(ИменаНом, ", "));
// → "Загружено: Квартира 101, Квартира 102, Квартира 103"
// Join работает с любыми типами — числа, даты тоже преобразуются в строку
СуммыВСтроку = A1sAR.Join(A1sAR.Of(3500000, 3100000, 4400000), " + ");
// → "3 500 000 + 3 100 000 + 4 400 000"
AddIf + IsEmpty + Join —
классическая тройка для валидации перед записью. Соберите все ошибки в массив, проверьте пустоту, выведите
одним сообщением. Намного лучше, чем серия Если ... ВызватьИсключение вперемешку с логикой.
A1sDS — все экспортируемые функции
| Функция | Сигнатура | Что делает |
|---|---|---|
| Of | Of(K1,V1, K2,V2 ...) | Структура из пар ключ-значение (до 20) |
| OfFixed | OfFixed(K1,V1 ...) | Неизменяемая (ФиксированнаяСтруктура) |
| OfKeys | OfKeys(Keys, Default) | Структура из списка ключей с одним значением |
| Zip | Zip(МассивКлючей, МассивЗнач) | Структура из двух параллельных массивов |
| Pick | Pick(Struct, "K1,K2") | Выбрать только перечисленные ключи |
| Omit | Omit(Struct, "K1,K2") | Исключить перечисленные ключи |
| Rename | Rename(Struct, MapStruct) | Переименовать ключи по карте |
| RenameFieldsv2.1 | RenameFields(МассивСтр, Схема) | Переименовать ключи в массиве структур |
| Defaults | Defaults(Source, Defaults) | Дополнить только отсутствующие ключи |
| Merge | Merge(Base, Source) | Слить: Source перезаписывает Base |
| AddIf | AddIf(Struct, Key, Val, Cond) | Добавить ключ по условию |
| HasKey | HasKey(Struct, Key) → Bool | Есть ли ключ |
| HasKeys | HasKeys(Struct, "K1,K2") → Bool | Есть ли все перечисленные ключи |
| IsEmpty | IsEmpty(Struct) → Bool | Структура пустая? |
| GetKeys | GetKeys(Struct) → Array | Массив имён ключей |
| GetValues | GetValues(Struct) → Array | Массив значений |
| Equals | Equals(S1, S2) → Bool | Глубокое сравнение двух структур |
| GroupBy | GroupBy(АррСтрукт, ГрупКлюч, СумКлюч) | Группировка массива структур с суммированием |
| FlattenKeys | FlattenKeys(Nested, Sep="_") | Вложенная структура → плоская |
| NestKeys | NestKeys(Flat, Sep="_") | Плоская → вложенная |
| DeepCopy | DeepCopy(Struct) | Глубокое копирование |
| GetOrInsert | GetOrInsert(Struct, Key, Default) | Получить или вставить дефолт |
| ToFixed | ToFixed(Struct) | Преобразовать в ФиксированнаяСтруктура |
| Sanitize | Sanitize(Data) | Убрать Неопределено и пустые строки |
| ToJSON | ToJSON(Struct) → String | Сериализовать в JSON |
| On | On(Struct?) → Fluent | Fluent-обёртка для цепочек |
| SelfTest | SelfTest() → Bool | Самотест модуля |
A1sAR — все экспортируемые функции
| Функция | Сигнатура | Что делает |
|---|---|---|
| Of | Of(V1, V2 ...V40, Unique?) | Массив из значений (до 40) |
| OfN | OfN(Size, Default) | Массив N штук с одним значением |
| Chunk | Chunk(Array, Size) → Array[] | Разбить на подмассивы заданного размера |
| Flatten | Flatten(Array) → Array | Массив массивов → плоский массив |
| Insert | Insert(Arr, Idx, Val) | Вставить элемент в позицию |
| RemoveAt | RemoveAt(Arr, Idx) | Удалить элемент по индексу |
| Sort | Sort(Arr) → Arr | Сортировать по возрастанию |
| Reverse | Reverse(Arr) → Arr | Обратить порядок |
| Split | Split(Arr, Value, Include?) | Разделить массив по значению-разделителю |
| SplitAt | SplitAt(Arr, Index) | Разрезать по индексу на два |
| Concatenate | Concatenate(A1..A8, Unique?) | Объединить до 8 массивов |
| RemoveDuplicates | RemoveDuplicates(Arr) | Убрать дубликаты |
| Union | Union(A1..A8) | Объединение уникальных из всех |
| Intersection | Intersection(A1..A8) | Пересечение: только общие элементы |
| Difference | Difference(A1, A2..A8) | Разность: есть в A1, нет в остальных |
| PickByType | PickByType(Arr, Type) | Только элементы указанного типа |
| OmitByType | OmitByType(Arr, Type) | Всё кроме указанного типа |
| PickRefs | PickRefs(Arr) | Только ссылки |
| PickFilled | PickFilled(Arr) | Только заполненные значения |
| PickNotNull | PickNotNull(Arr) | Всё кроме Неопределено |
| ConvertTo | ConvertTo(Arr, Type, Default?) | Привести все элементы к типу |
| First | First(Arr) → Val|Undefined | Первый элемент или Неопределено |
| Last | Last(Arr) → Val|Undefined | Последний элемент или Неопределено |
| Contains | Contains(Arr, Val) → Bool | Содержит ли значение |
| IndexOf | IndexOf(Arr, Val) → Num | Индекс первого вхождения (−1 если нет) |
| Join | Join(Arr, Sep) → String | Склеить элементы через разделитель |
| IsEmpty | IsEmpty(Arr) → Bool | Массив пустой? |
| AddIf | AddIf(Arr, Val, Cond, ElseVal?) | Добавить элемент по условию |
| Equals | Equals(A1, A2) → Bool | Поэлементное сравнение |
| ToJSON | ToJSON(Arr) → String | Сериализовать в JSON |
| Sanitize | Sanitize(Arr) | Очистить от мусорных значений |
| On | On(Arr?) → Fluent | Fluent-обёртка A1sDP_AR |