К основному содержанию
A1sCode
Быстрый старт
Модуль A1sCode · API · сверено с исходником

A1sDS — структуры как явный контракт данных

Создание, выбор полей, слияние, глубокое копирование, анализ и сериализация структур.

Функций 38Разделов 12ЗависимостиИсходных примеров 32
1Выберите раздел

Навигация построена только по экспортным функциям исходного модуля.

2Проверьте контракт

Сигнатура и параметры сверены с объявлением функции.

3Скопируйте пример

Исходные примеры сохранены, недостающие добавлены при аудите.

Разделы модуля

01Фабрики

Создание обычных и фиксированных структур из пар, ключей и значений.

02Парсинг

Преобразование строк, массивов и патчей в структуры.

03Селекция и трансформация

Выбор, исключение и переименование полей без изменения исходных данных.

04Доступ и ленивая инициализация

Получение значений с безопасной вставкой отсутствующих ключей и путей.

05Модификация и слияние

Применение значений по умолчанию и объединение структур.

06Копирование и сброс

Обычное и глубокое копирование, заполнение и сброс значений.

07Глубокие операции

Служебные рекурсивные преобразования и неизменяемые представления.

08Анализ и агрегация

Проверка ключей, сравнение, группировка и извлечение коллекций.

09Сетевые операции

Пересечение и разность структур по наборам ключей.

10Сериализация и санация

Подготовка сложных данных к JSON и сериализация.

11Тестирование

Самопроверки публичного контракта модуля.

12Fluent API

Создание цепочечной обёртки для последовательных операций.

Ничего не найденоИзмените поисковый запрос.

Фабрики

Создание обычных и фиксированных структур из пар, ключей и значений.

Создает структуру из произвольного количества пар ключ-значение (до 20).

Полная сигнатураOf(Ключ1 = Неопределено, Знач1 = Неопределено, Ключ2 = Неопределено, Знач2 = Неопределено, Ключ3 = Неопределено, Знач3 = Неопределено, Ключ4 = Неопределено, Знач4 = Неопределено, Ключ5 = Неопределено, Знач5 = Неопределено, Ключ6 = Неопределено, Знач6 = Неопределено, Ключ7 = Неопределено, Знач7 = Неопределено, Ключ8 = Неопределено, Знач8 = Неопределено, Ключ9 = Неопределено, Знач9 = Неопределено, Ключ10 = Неопределено, Знач10 = Неопределено, Ключ11 = Неопределено, Знач11 = Неопределено, Ключ12 = Неопределено, Знач12 = Неопределено, Ключ13 = Неопределено, Знач13 = Неопределено, Ключ14 = Неопределено, Знач14 = Неопределено, Ключ15 = Неопределено, Знач15 = Неопределено, Ключ16 = Неопределено, Знач16 = Неопределено, Ключ17 = Неопределено, Знач17 = Неопределено, Ключ18 = Неопределено, Знач18 = Неопределено, Ключ19 = Неопределено, Знач19 = Неопределено, Ключ20 = Неопределено, Знач20 = Неопределено) → Structure
ПараметрТипОписание
Ключ1StringПервый ключ По умолчанию: Неопределено.
Знач1ArbitraryПервое значение По умолчанию: Неопределено.
Ключ2StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач2ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ3StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач3ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ4StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач4ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ5StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач5ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ6StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач6ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ7StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач7ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ8StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач8ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ9StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач9ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ10StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач10ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ11StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач11ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ12StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач12ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ13StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач13ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ14StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач14ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ15StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач15ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ16StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач16ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ17StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач17ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ18StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач18ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ19StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач19ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ20StringДвадцатый ключ По умолчанию: Неопределено.
Знач20ArbitraryДвадцатое значение По умолчанию: Неопределено.
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Создает структуру из произвольного количества пар ключ-значение (до 20).
// Граница: Обязательных параметров нет; все параметры необязательны (40).
// Результат: Structure.

// A1sDS.Of("name", "John", "age", 30) -> {name: "John", age: 30}
    // A1sDS.Of("x", 10, "y", 20, "color", "red") -> {x: 10, y: 20, color: "red"}

Создает фиксированную (неизменяемую) структуру из пар ключ-значение (до 20).

Полная сигнатураOfFixed(Ключ1 = Неопределено, Знач1 = Неопределено, Ключ2 = Неопределено, Знач2 = Неопределено, Ключ3 = Неопределено, Знач3 = Неопределено, Ключ4 = Неопределено, Знач4 = Неопределено, Ключ5 = Неопределено, Знач5 = Неопределено, Ключ6 = Неопределено, Знач6 = Неопределено, Ключ7 = Неопределено, Знач7 = Неопределено, Ключ8 = Неопределено, Знач8 = Неопределено, Ключ9 = Неопределено, Знач9 = Неопределено, Ключ10 = Неопределено, Знач10 = Неопределено, Ключ11 = Неопределено, Знач11 = Неопределено, Ключ12 = Неопределено, Знач12 = Неопределено, Ключ13 = Неопределено, Знач13 = Неопределено, Ключ14 = Неопределено, Знач14 = Неопределено, Ключ15 = Неопределено, Знач15 = Неопределено, Ключ16 = Неопределено, Знач16 = Неопределено, Ключ17 = Неопределено, Знач17 = Неопределено, Ключ18 = Неопределено, Знач18 = Неопределено, Ключ19 = Неопределено, Знач19 = Неопределено, Ключ20 = Неопределено, Знач20 = Неопределено) → FixedStructure
ПараметрТипОписание
Ключ1StringПервый ключ По умолчанию: Неопределено.
Знач1ArbitraryПервое значение По умолчанию: Неопределено.
Ключ2StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач2ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ3StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач3ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ4StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач4ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ5StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач5ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ6StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач6ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ7StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач7ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ8StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач8ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ9StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач9ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ10StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач10ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ11StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач11ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ12StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач12ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ13StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач13ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ14StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач14ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ15StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач15ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ16StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач16ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ17StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач17ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ18StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач18ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ19StringПараметр группы ключ1…ключN. По умолчанию: Неопределено.
Знач19ArbitraryПараметр группы знач1…значN. По умолчанию: Неопределено.
Ключ20StringДвадцатый ключ По умолчанию: Неопределено.
Знач20ArbitraryДвадцатое значение По умолчанию: Неопределено.
ВозвращаетFixedStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Создает фиксированную (неизменяемую) структуру из пар ключ-значение (до 20).
// Граница: Обязательных параметров нет; все параметры необязательны (40).
// Результат: FixedStructure.

// Константы = A1sDS.OfFixed("PI", 3.14159, "E", 2.71828);
    // Константы.PI = 3; // Ошибка! Изменение запрещено

Создает структуру из массива или строки ключей, заполняя все одним значением.

Полная сигнатураOfKeys(Keys, DefaultValue) → Structure
ПараметрТипОписание
KeysString|ArrayСтрока ключей через запятую или массив ключей
DefaultValueArbitraryЗначение по умолчанию для всех ключей
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Создает структуру из массива или строки ключей, заполняя все одним значением.
// Граница: Обязательные параметры: Keys, DefaultValue
// Результат: Structure.

// A1sDS.OfKeys("x,y,z", 0) -> {x: 0, y: 0, z: 0}

Парсинг

Преобразование строк, массивов и патчей в структуры.

Создает структуру из QueryString (URL параметров): "name=John&age=30".

Полная сигнатураOfQueryString(QueryString) → Structure
ПараметрТипОписание
QueryStringStringСтрока параметров URL
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Создает структуру из QueryString (URL параметров): "name=John&age=30".
// Граница: Обязательные параметры: QueryString
// Результат: Structure.

// A1sDS.OfQueryString("name=John&age=30&city=New%20York")
// -> {name: "John", age: "30", city: "New York"}

Создает структуру из строки ключей или массива ключей и массива значений, объединяя их попарно (Zip).

Полная сигнатураZip(Ключи, Значения) → Structure
ПараметрТипОписание
КлючиString|ArrayСтрока ключей, разделенных запятыми, или массив ключей.
ЗначенияArrayМассив значений. Обязательный параметр.
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Создает структуру из строки ключей или массива ключей и массива значений, объединяя их попарно (Zip).
// Граница: Обязательные параметры: Ключи, Значения
// Результат: Structure.

A1sDS.Zip("x,y,z", A1sAR.Of(1, 2, 3)) -> {x: 1, y: 2, z: 3}
    A1sDS.Zip(A1sAR.Of("a","b"), A1sAR.Of(10,20)) -> {a: 10, b: 20}

Применяет патч (набор изменений) к существующей структуре. Обновляет значения существующих ключей и добавляет новые.

Полная сигнатураPatch(Target, Keys, Values) → Structure
ПараметрТипОписание
TargetStructureЦелевая структура (изменяется "на месте").
KeysString|ArrayСтрока ключей через запятую или массив ключей.
ValuesArrayМассив новых значений для патча.
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Применяет патч (набор изменений) к существующей структуре. Обновляет значения существующих ключей и добавляет новые.
// Граница: Обязательные параметры: Target, Keys, Values
// Результат: Structure.

Options = A1sDS.Of("x", 10, "y", 25);
    A1sDS.Patch(Options, "y,z", A1sAR.Of(20, 30));
    // Результат: {x: 10, y: 20, z: 30} — y обновлен, z добавлен

Селекция и трансформация

Выбор, исключение и переименование полей без изменения исходных данных.

Выбирает из структуры только указанные ключи (Picker).

Полная сигнатураPick(SourceStruct, KeysString) → Structure
ПараметрТипОписание
SourceStructStructureИсходная структура
KeysStringStringСтрока нужных ключей через запятую
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Выбирает из структуры только указанные ключи (Picker).
// Граница: Обязательные параметры: SourceStruct, KeysString
// Результат: Structure.

user = A1sDS.Of("name", "John", "age", 30, "password", "secret");
  public = A1sDS.Pick(user, "name,age");
  // -> {name: "John", age: 30}

Исключает из структуры указанные ключи.

Полная сигнатураOmit(SourceStruct, ExcludeKeysString) → Structure
ПараметрТипОписание
SourceStructStructureИсходная структура
ExcludeKeysStringStringСтрока исключаемых ключей через запятую
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Исключает из структуры указанные ключи.
// Граница: Обязательные параметры: SourceStruct, ExcludeKeysString
// Результат: Structure.

user = A1sDS.Of("name", "John", "age", 30, "password", "secret");
  safe = A1sDS.Omit(user, "password");
  // -> {name: "John", age: 30}

Создает новую структуру с переименованными ключами.

Полная сигнатураRename(SourceStruct, RenameMap) → Structure
ПараметрТипОписание
SourceStructStructureИсходная структура
RenameMapStructureКарта переименования: {старое_имя: "новое_имя"}
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Создает новую структуру с переименованными ключами.
// Граница: Обязательные параметры: SourceStruct, RenameMap
// Результат: Structure.

user = A1sDS.Of("first_name", "John", "last_name", "Doe");
  map = A1sDS.Of("first_name", "имя", "last_name", "фамилия");
  result = A1sDS.Rename(user, map);
  // -> {имя: "John", фамилия: "Doe"}

Переименовывает ключи в каждой структуре массива по схеме маппинга. Поля из схемы — переименовываются. Остальные поля копируются без изменений. Чистая операция над данными — не знает о метаданных конфигурации. Используется транслятором DSL когда имена полей источника (JSON/CSV) отличаются от имён реквизитов ТЧ документа или справочника. Вызывается ДО LoadRows / LoadTabRows.

Полная сигнатураRenameFields(МассивСтруктур, СхемаПолей) → Array
ПараметрТипОписание
МассивСтруктурArrayМассив структур с исходными именами полей.
СхемаПолейStructureСтруктура: ключ = имя в источнике, значение = целевое имя. A1sDS.Of("item", "Номенклатура", "unit", "ЕдиницаИзмерения")
ВозвращаетArray
Примерпример из исходника · сигнатура проверена1C
// Намерение: Переименовывает ключи в каждой структуре массива по схеме маппинга. Поля из схемы — переименовываются. Остальные поля копируются без изменений. Чистая операция над данными — не знает о метаданных конфигурации. Используется транслятором DSL когда имена полей источника (JSON/CSV) отличаются от имён реквизитов ТЧ документа или справочника. Вызывается ДО LoadRows / LoadTabRows.
// Граница: Обязательные параметры: МассивСтруктур, СхемаПолей
// Результат: Array.

// DSL:
  //   ROWS "Продукция"
  //     MAP source.item AS Номенклатура  ENSURE "Номенклатура"
  //     MAP source.unit AS ЕдиницаИзмерения
  //     MAP source.qty  AS Количество
  //
  // Транслятор генерирует:
  Переименованные
          = A1sDS.RenameFields(
                  МассивИзJSON,
                  A1sDS.Of(
                          "item", "Номенклатура",
                          "unit", "ЕдиницаИзмерения",
                          "qty",  "Количество"));  //▶️
  A1sDocs.LoadRows(Dok, "Продукция", Переименованные);  //▶️

  // Поля не попавшие в схему (например "price") копируются как есть.

Доступ и ленивая инициализация

Получение значений с безопасной вставкой отсутствующих ключей и путей.

Возвращает значение по ключу из Структуры; если ключа нет — вставляет умолчание и возвращает его.

Полная сигнатураGetOrInsert(Struct, Key, DefaultValue) → Variant
ПараметрТипОписание
StructStructureЦелевая структура (изменяется "на месте").
KeyStringИмя ключа.
DefaultValueVariantЗначение по умолчанию (вставляется как есть).
ВозвращаетVariant
Примерпример из исходника · сигнатура проверена1C
// Намерение: Возвращает значение по ключу из Структуры; если ключа нет — вставляет умолчание и возвращает его.
// Граница: Обязательные параметры: Struct, Key, DefaultValue
// Результат: Variant.

Prefs = Новый Структура;
    Dark  = A1sDS.GetOrInsert(Prefs, "useDarkmode", Истина); // запишет Истина один раз

Ленивая версия: если ключ отсутствует — вычисляет выражение строкой, вставляет и возвращает.

Полная сигнатураGetOrInsertEval(Struct, Key, ValueExpr) → Variant
ПараметрТипОписание
StructStructureЦелевая структура (изменяется "на месте").
KeyStringИмя ключа.
ValueExprStringBSL-выражение, которое вернёт значение (выполняется ТОЛЬКО если ключ отсутствует).
ВозвращаетVariant
Примерпример из исходника · сигнатура проверена1C
// Намерение: Ленивая версия: если ключ отсутствует — вычисляет выражение строкой, вставляет и возвращает.
// Граница: Обязательные параметры: Struct, Key, ValueExpr
// Результат: Variant.

Cache = Новый Структура;
    // Компилируем дорогую регулярку лишь однажды:
    Rx = A1sDS.GetOrInsertEval(Cache, "rxINN", "Новый РегулярноеВыражение(""^\d{10}(\d{2})?$"")");

Вставляет умолчание по «пути ключей» в Структуре (создаёт промежуточные узлы) и возвращает конечное значение.

Полная сигнатураGetOrInsertPath(Struct, Path, DefaultValue, Sep = ".") → Variant
ПараметрТипОписание
StructStructureЦелевая структура (изменяется "на месте").
PathStringПуть вида "ui.theme.dark" (разделитель по умолчанию ".").
DefaultValueVariantУмолчание для конечного ключа.
SepStringРазделитель пути. По умолчанию: ".".
ВозвращаетVariant
Примерпример из исходника · сигнатура проверена1C
// Намерение: Вставляет умолчание по «пути ключей» в Структуре (создаёт промежуточные узлы) и возвращает конечное значение.
// Граница: Обязательные параметры: Struct, Path, DefaultValue
// Результат: Variant.

Prefs = Новый Структура;
    // Создаст: ui = { theme = { dark = Истина } }
    A1sDS.GetOrInsertPath(Prefs, "ui.theme.dark", Истина);

Модификация и слияние

Применение значений по умолчанию и объединение структур.

Создает структуру, объединив данные с заданными значениями по умолчанию.

Полная сигнатураDefaults(SourceStruct, DefaultsStruct) → Structure
ПараметрТипОписание
SourceStructStructureИсходная структура
DefaultsStructStructureСтруктура значений по умолчанию
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Создает структуру, объединив данные с заданными значениями по умолчанию.
// Граница: Обязательные параметры: SourceStruct, DefaultsStruct
// Результат: Structure.

config = A1sDS.Of("host", "localhost");
  defaults = A1sDS.Of("host", "127.0.0.1", "port", 8080);
  result = A1sDS.Defaults(config, defaults);
  // -> {host: "localhost", port: 8080}

Объединяет структуры слева направо; значения более поздних источников перекрывают предыдущие.

Полная сигнатураMerge(БазоваяСтруктура, Знач Источник) → Structure
ПараметрТипОписание
БазоваяСтруктураArbitraryПараметр публичной сигнатуры.
Знач ИсточникBooleanПараметр публичной сигнатуры.
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Объединяет структуры слева направо; значения более поздних источников перекрывают предыдущие.
// Граница: Обязательные параметры: БазоваяСтруктура, Знач Источник
// Результат: Structure.

@example.1.A1sDS.Merge {
Параметризованная фабричная функция (ПФФ) для DTO
------------------------------------------------
Function NewPostingDTO(Overrides = Undefined) Export

   Base = A1sDS.Of(
       "AccountDr",  ChartOfAccounts.Main.EmptyRef(),
       "AccountCr",  ChartOfAccounts.Main.EmptyRef(),
       "Amount",     0,
       "Description", ""
   );

   Return A1sDS.Merge(Base, Overrides);

EndFunction

/ Использование
Posting = NewPostingDTO(A1sDS.Of(
   "AccountDr", Account41,
   "AccountCr", Account62,
   "Amount",    1000
));
------------------------------------------------
}
@example.2.A1sDS.Merge {
Конфигурация с дефолтами
------------------------------------------------
// … пример сокращён; полная сигнатура и контракт сохранены

Объединяет структуры и возвращает фиксированную неизменяемую структуру.

Полная сигнатураMergeFixed(Base, Overrides = Undefined) → FixedStructure
ПараметрТипОписание
BaseArbitraryПараметр публичной сигнатуры.
OverridesArbitraryПараметр публичной сигнатуры. По умолчанию: Undefined.
ВозвращаетFixedStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Объединяет структуры и возвращает фиксированную неизменяемую структуру.
// Граница: Обязательные параметры: Base
// Результат: FixedStructure.

@example.1.A1sDS.MergeFixed {
ПФФ с возвратом фиксированного DTO
------------------------------------------------
Function NewAPIRequestDTO(Overrides = Undefined) Export

   Base = A1sDS.Of(
       "Method",  "GET",
       "Timeout", 30,
       "Headers", A1sDS.Of("Accept", "application/json")
   );

   // Возвращаем защищенный DTO
   Return A1sDS.MergeFixed(Base, Overrides);

EndFunction

/ Использование
Request = NewAPIRequestDTO(A1sDS.Of("Method", "POST"));
/ Request.Timeout = 60; // Ошибка - объект защищен!
------------------------------------------------
}

Объединяет до 8 структур, значения последующих перезаписывают предыдущие.

Полная сигнатураConcatenate(Структура1, Структура2 = Неопределено, Структура3 = Неопределено, Структура4 = Неопределено, Структура5 = Неопределено, Структура6 = Неопределено, Структура7 = Неопределено, Структура8 = Неопределено) → Structure
ПараметрТипОписание
Структура1StructureПервая структура
Структура2StructureВторая структура По умолчанию: Неопределено.
Структура3StructureТретья структура По умолчанию: Неопределено.
Структура4StructureЧетвертая структура По умолчанию: Неопределено.
Структура5StructureПятая структура По умолчанию: Неопределено.
Структура6StructureШестая структура По умолчанию: Неопределено.
Структура7StructureСедьмая структура По умолчанию: Неопределено.
Структура8StructureВосьмая структура По умолчанию: Неопределено.
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Объединяет до 8 структур, значения последующих перезаписывают предыдущие.
// Граница: Обязательные параметры: Структура1
// Результат: Structure.

// s1 = A1sDS.Of("a", 1, "b", 2);
// s2 = A1sDS.Of("b", 3, "c", 4);
// A1sDS.Concatenate(s1, s2) -> {a: 1, b: 3, c: 4}

Копирование и сброс

Обычное и глубокое копирование, заполнение и сброс значений.

Создаёт поверхностную копию структуры.

Полная сигнатураCopy(Source) → Structure
ПараметрТипОписание
SourceArbitraryПараметр публичной сигнатуры.
ВозвращаетStructure
Примерпример добавлен при аудите · сигнатура проверена1C
// Намерение: Создаёт поверхностную копию структуры.
// Граница: Обязательные параметры: Source
// Результат: Structure.

Данные = A1sDS.Copy(Source);

Глубокое копирование структуры (рекурсивно копирует вложенные структуры).

Полная сигнатураDeepCopy(ИсходнаяСтруктура) → Structure
ПараметрТипОписание
ИсходнаяСтруктураStructureСтруктура для копирования
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Глубокое копирование структуры (рекурсивно копирует вложенные структуры).
// Граница: Обязательные параметры: ИсходнаяСтруктура
// Результат: Structure.

// nested = A1sDS.Of("inner", A1sDS.Of("value", 42));
// copy = A1sDS.DeepCopy(nested);

Заполняет значения в существующей структуре (In-Place). Мутирует переданный объект. Не создает копию.

Полная сигнатураFill(TargetStruct, Value) → —
ПараметрТипОписание
TargetStructStructureСтруктура для заполнения
ValueArbitraryЗначение для заполнения
Возвращает
Примерпример из исходника · сигнатура проверена1C
// Намерение: Заполняет значения в существующей структуре (In-Place). Мутирует переданный объект. Не создает копию.
// Граница: Обязательные параметры: TargetStruct, Value
// Результат: —.

Струк = Новый Структура("a,b,c");
A1sDS.Fill(Струк, 0); // Струк теперь {a:0, b:0, c:0}

// Для конвейерных вызовов используй A1sDS.On():
// A1sDS.On(Струк).Fill(0).Insert("Итог", 100);

Преобразует структуру в фиксированную.

Полная сигнатураToFixed(Знач Структура) → FixedStructure
ПараметрТипОписание
Знач СтруктураArbitraryПараметр публичной сигнатуры.
ВозвращаетFixedStructure
Примерпример добавлен при аудите · сигнатура проверена1C
// Намерение: Преобразует структуру в фиксированную.
// Граница: Обязательные параметры: Знач Структура
// Результат: FixedStructure.

Результат = A1sDS.ToFixed(Знач Структура);

Глубокие операции

Служебные рекурсивные преобразования и неизменяемые представления.

Глубокий сброс структуры. Вложенные структуры создаются пустыми, примитивы — в дефолт.

Полная сигнатураResetDeep(SourceStruct) → Structure
ПараметрТипОписание
SourceStructStructureИсходная структура
ВозвращаетStructure
Примерпример добавлен при аудите · сигнатура проверена1C
// Намерение: Глубокий сброс структуры. Вложенные структуры создаются пустыми, примитивы — в дефолт.
// Граница: Обязательные параметры: SourceStruct
// Результат: Structure.

Данные = A1sDS.ResetDeep(SourceStruct);

Превращает вложенную структуру в плоскую, соединяя ключи через разделитель.

Полная сигнатураFlattenKeys(NestedStruct, Separator = "_") → Structure
ПараметрТипОписание
NestedStructStructureВложенная структура
SeparatorStringРазделитель для ключей (не может быть ".") По умолчанию: "_".
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Превращает вложенную структуру в плоскую, соединяя ключи через разделитель.
// Граница: Обязательные параметры: NestedStruct
// Результат: Structure.

// nested = A1sDS.Of("ui", A1sDS.Of("theme", A1sDS.Of("dark", True)));
// A1sDS.FlattenKeys(nested) -> {"ui_theme_dark": True}

Собирает плоскую структуру во вложенную, разделяя ключи по разделителю.

Полная сигнатураNestKeys(FlatStruct, Separator = "_") → Structure
ПараметрТипОписание
FlatStructStructureПлоская структура с составными ключами
SeparatorStringРазделитель ключей По умолчанию: "_".
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Собирает плоскую структуру во вложенную, разделяя ключи по разделителю.
// Граница: Обязательные параметры: FlatStruct
// Результат: Structure.

// flat = A1sDS.Of("user_profile_name", "John", "user_profile_address_city", "NY", "order_id", 456);
// A1sDS.NestKeys(flat) -> {user: {profile: {name: "John", address: {city: "NY"}}}, order: {id: 456}}

Анализ и агрегация

Проверка ключей, сравнение, группировка и извлечение коллекций.

Проверяет наличие ключа в структуре.

Полная сигнатураHasKey(Структура, Ключ) → Boolean
ПараметрТипОписание
СтруктураStructureСтруктура для проверки
КлючStringПроверяемый ключ
ВозвращаетBoolean
Примерпример из исходника · сигнатура проверена1C
// Намерение: Проверяет наличие ключа в структуре.
// Граница: Обязательные параметры: Структура, Ключ
// Результат: Boolean.

// struct = A1sDS.Of("name", "John");
// A1sDS.HasKey(struct, "name") -> Истина
// A1sDS.HasKey(struct, "age") -> Ложь

Проверяет, что структура содержит все перечисленные ключи.

Полная сигнатураHasKeys(Struct, KeysString) → Boolean
ПараметрТипОписание
StructStructureСтруктура для проверки
KeysStringStringСтрока требуемых ключей через запятую
ВозвращаетBoolean
Примерпример из исходника · сигнатура проверена1C
// Намерение: Проверяет, что структура содержит все перечисленные ключи.
// Граница: Обязательные параметры: Struct, KeysString
// Результат: Boolean.

// user = A1sDS.Of("name", "John", "age", 30);
// A1sDS.HasKeys(user, "name,age") -> Истина
// A1sDS.HasKeys(user, "name,email") -> Ложь

Проверяет, пуста ли структура (нет свойств).

Полная сигнатураIsEmpty(Структура) → Boolean
ПараметрТипОписание
СтруктураStructureСтруктура для проверки
ВозвращаетBoolean
Примерпример из исходника · сигнатура проверена1C
// Намерение: Проверяет, пуста ли структура (нет свойств).
// Граница: Обязательные параметры: Структура
// Результат: Boolean.

// A1sDS.IsEmpty(Новый Структура()) -> Истина
// A1sDS.IsEmpty(A1sDS.Of("x", 1)) -> Ложь

Возвращает массив ключей структуры.

Полная сигнатураGetKeys(Структура) → Array
ПараметрТипОписание
СтруктураStructureИсходная структура
ВозвращаетArray
Примерпример из исходника · сигнатура проверена1C
// Намерение: Возвращает массив ключей структуры.
// Граница: Обязательные параметры: Структура
// Результат: Array.

// struct = A1sDS.Of("name", "John", "age", 30);
// A1sDS.GetKeys(struct) -> ["name", "age"]

Возвращает массив значений структуры.

Полная сигнатураGetValues(Структура) → Array
ПараметрТипОписание
СтруктураStructureИсходная структура
ВозвращаетArray
Примерпример из исходника · сигнатура проверена1C
// Намерение: Возвращает массив значений структуры.
// Граница: Обязательные параметры: Структура
// Результат: Array.

// struct = A1sDS.Of("name", "John", "age", 30);
// A1sDS.GetValues(struct) -> ["John", 30]

Сравнивает две структуры на полное совпадение (ключи и значения) с рекурсией.

Полная сигнатураEquals(Struct1, Struct2) → Boolean
ПараметрТипОписание
Struct1StructureПервая структура
Struct2StructureВторая структура
ВозвращаетBoolean
Примерпример из исходника · сигнатура проверена1C
// Намерение: Сравнивает две структуры на полное совпадение (ключи и значения) с рекурсией.
// Граница: Обязательные параметры: Struct1, Struct2
// Результат: Boolean.

// s1 = A1sDS.Of("a", 1, "b", 2);
// s2 = A1sDS.Of("b", 2, "a", 1);
// A1sDS.Equals(s1, s2) -> Истина

Группирует массив структур по значению указанного ключа и агрегирует значения другого ключа.

Полная сигнатураGroupBy(ArrayOfStructs, GroupByKey, AggregateByKey) → Structure
ПараметрТипОписание
ArrayOfStructsArrayМассив структур для группировки
GroupByKeyStringКлюч, по которому группировать
AggregateByKeyStringКлюч, значения которого суммировать
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Группирует массив структур по значению указанного ключа и агрегирует значения другого ключа.
// Граница: Обязательные параметры: ArrayOfStructs, GroupByKey, AggregateByKey
// Результат: Structure.

// sales = A1sAR.Of(
//   A1sDS.Of("product", "A", "amount", 10),
//   A1sDS.Of("product", "B", "amount", 5),
//   A1sDS.Of("product", "A", "amount", 7)
// );
// A1sDS.GroupBy(sales, "product", "amount") -> {A: 17, B: 5}

Сетевые операции

Пересечение и разность структур по наборам ключей.

Возвращает структуру с ключами, которые есть во всех переданных структурах (пересечение до 8 структур).

Полная сигнатураIntersection(Структура1, Структура2 = Неопределено, Структура3 = Неопределено, Структура4 = Неопределено, Структура5 = Неопределено, Структура6 = Неопределено, Структура7 = Неопределено, Структура8 = Неопределено) → Structure
ПараметрТипОписание
Структура1StructureПервая структура
Структура2StructureВторая структура По умолчанию: Неопределено.
Структура3StructureТретья структура По умолчанию: Неопределено.
Структура4StructureЧетвертая структура По умолчанию: Неопределено.
Структура5StructureПятая структура По умолчанию: Неопределено.
Структура6StructureШестая структура По умолчанию: Неопределено.
Структура7StructureСедьмая структура По умолчанию: Неопределено.
Структура8StructureВосьмая структура По умолчанию: Неопределено.
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Возвращает структуру с ключами, которые есть во всех переданных структурах (пересечение до 8 структур).
// Граница: Обязательные параметры: Структура1
// Результат: Structure.

// s1 = A1sDS.Of("a", 1, "b", 2); s2 = A1sDS.Of("b", 3, "c", 4);
// A1sDS.Intersection(s1, s2) -> {b: 3}

Возвращает структуру с ключами из первой структуры, которых нет в остальных структурах (разность до 8 структур).

Полная сигнатураDifference(Структура1, Структура2 = Неопределено, Структура3 = Неопределено, Структура4 = Неопределено, Структура5 = Неопределено, Структура6 = Неопределено, Структура7 = Неопределено, Структура8 = Неопределено) → Structure
ПараметрТипОписание
Структура1StructureПервая структура
Структура2StructureВторая структура По умолчанию: Неопределено.
Структура3StructureТретья структура По умолчанию: Неопределено.
Структура4StructureЧетвертая структура По умолчанию: Неопределено.
Структура5StructureПятая структура По умолчанию: Неопределено.
Структура6StructureШестая структура По умолчанию: Неопределено.
Структура7StructureСедьмая структура По умолчанию: Неопределено.
Структура8StructureВосьмая структура По умолчанию: Неопределено.
ВозвращаетStructure
Примерпример из исходника · сигнатура проверена1C
// Намерение: Возвращает структуру с ключами из первой структуры, которых нет в остальных структурах (разность до 8 структур).
// Граница: Обязательные параметры: Структура1
// Результат: Structure.

// s1 = A1sDS.Of("a", 1, "b", 2); s2 = A1sDS.Of("b", 3, "c", 4);
// A1sDS.Difference(s1, s2) -> {a: 1}

Сериализация и санация

Подготовка сложных данных к JSON и сериализация.

Глубокая очистка и нормализация данных для JSON (Top-Tier Enterprise). Превращает 1C-специфичные типы в JSON-совместимые: - UUID/Ссылки -> String (через XMLString для чистого UID) - СписокЗначений -> Array - Соответствие -> Structure (Graceful Degrade для ключей) - ТаблицаЗначений -> Array of Objects (Graceful Degrade для колонок) - ДеревоЗначений -> Recursive Array with "Children" - ФиксированнаяСтруктура/Массив -> Обычные (разворачивает)

Полная сигнатураSanitize(Data) → Arbitrary
ПараметрТипОписание
DataArbitraryИсходные данные
ВозвращаетArbitrary
Примерпример из исходника · сигнатура проверена1C
// Намерение: Глубокая очистка и нормализация данных для JSON (Top-Tier Enterprise). Превращает 1C-специфичные типы в JSON-совместимые: - UUID/Ссылки -> String (через XMLString для чистого UID) - СписокЗначений -> Array - Соответствие -> Structure (Graceful Degrade для ключей) - ТаблицаЗначений -> Array of Objects (Graceful Degrade для колонок) - ДеревоЗначений -> Recursive Array with "Children" - ФиксированнаяСтруктура/Массив -> Обычные (разворачивает)
// Граница: Обязательные параметры: Data
// Результат: Arbitrary.

Mixed = ПолучитьСмешанныеДанные();
JSON = A1sDS.Sanitize(Mixed).ToJSON();

Вспомогательная функция для рекурсивного обхода ДереваЗначений. Превращает строки дерева в Структуры и вызывает себя для дочерних строк.

Полная сигнатураSanitizeTreeRows(СтрокиДерева, Колонки) → Array
ПараметрТипОписание
СтрокиДереваArbitraryКоллекция строк текущего уровня
КолонкиArbitraryКоллекция колонок дерева (схема)
ВозвращаетArray
Примерпример добавлен при аудите · сигнатура проверена1C
// Намерение: Вспомогательная функция для рекурсивного обхода ДереваЗначений. Превращает строки дерева в Структуры и вызывает себя для дочерних строк.
// Граница: Обязательные параметры: СтрокиДерева, Колонки
// Результат: Array.

Массив = A1sDS.SanitizeTreeRows(СтрокиДерева, Колонки);

Сериализует подготовленные данные в JSON-строку.

Полная сигнатураToJSON(СтруктураВJSON) → String
ПараметрТипОписание
СтруктураВJSONArbitraryПараметр публичной сигнатуры.
ВозвращаетString
Примерпример добавлен при аудите · сигнатура проверена1C
// Намерение: Сериализует подготовленные данные в JSON-строку.
// Граница: Обязательные параметры: СтруктураВJSON
// Результат: String.

Текст = A1sDS.ToJSON(СтруктураВJSON);

Тестирование

Самопроверки публичного контракта модуля.

Самотест модуля A1sDS с примерами использования.

Полная сигнатураSelfTest() → Boolean

Параметров нет.

ВозвращаетBoolean
Примерпример добавлен при аудите · сигнатура проверена1C
// Намерение: Самотест модуля A1sDS с примерами использования.
// Граница: Параметров нет.
// Результат: Boolean.

Успешно = A1sDS.SelfTest();

Fluent API

Создание цепочечной обёртки для последовательных операций.

Создаёт Fluent-обёртку A1sDP_DS для цепочки операций над структурой.

Полная сигнатураOn(Знач ИсходнаяСтруктура = Неопределено) → DataProcessorObject.A1sDP_DS
ПараметрТипОписание
Знач ИсходнаяСтруктураArbitraryПараметр публичной сигнатуры. По умолчанию: Неопределено.
ВозвращаетDataProcessorObject.A1sDP_DS
Примерпример из исходника · сигнатура проверена1C
// Намерение: Создаёт Fluent-обёртку A1sDP_DS для цепочки операций над структурой.
// Граница: Обязательных параметров нет; все параметры необязательны (1).
// Результат: DataProcessorObject.A1sDP_DS.

ИСПОЛЬЗОВАНИЯ (для документации)
============================================
@example.1.A1sDS.On — Базовое создание структуры {
------------------------------------------------
// БЫЛО (традиционный подход)
Пользователь = Новый Структура;
Пользователь.Вставить("Имя", "Иван");
Пользователь.Вставить("Возраст", 30);
Пользователь.Вставить("Город", "Москва");
Пользователь.Вставить("Активен", Истина);

// СТАЛО (fluent-стиль)
Пользователь = A1sDS.On()
    .Set("Имя", "Иван")
    .Set("Возраст", 30)
    .Set("Город", "Москва")
    .Set("Активен", Истина)
    .Value();
------------------------------------------------
}
@example.2.A1sDS.On — Фильтрация данных API {
------------------------------------------------
// Получили ответ от API с лишними полями
APIОтвет = ПолучитьДанныеОтСервиса();

// Убираем секретные данные и переименовываем
Публичные = A1sDS.On(APIОтвет)
// … пример сокращён; полная сигнатура и контракт сохранены