В 1С постоянно нужно мержить настройки из разных источников:
БазаКонфиг = Новый Структура(
"Сервер", "localhost",
"Порт", 80
);
ПользовательКонфиг = Новый Структура(
"Сервер", "prod.com",
"SSL", Истина
);
ИтогКонфиг = Новый Структура();
Для Каждого Пара Из БазаКонфиг Цикл
ИтогКонфиг.Вставить(Пара.Ключ, Пара.Значение);
КонецЦикла;
Для Каждого Пара Из ПользовательКонфиг Цикл
ИтогКонфиг.Вставить(Пара.Ключ, Пара.Значение);
КонецЦикла;
ИтогКонфиг = A1sDS.Concatenate(
БазаКонфиг,
ПользовательКонфиг
);
// {Сервер: "prod.com", Порт: 80, SSL: Истина}
Стр1 = A1sDS.Of("a", 1, "b", 2);
Стр2 = A1sDS.Of("b", 3, "c", 4);
Результат = A1sDS.Concatenate(Стр1, Стр2);
// {a: 1, b: 3, c: 4} ← "b" перезаписано значением из Стр2
До 8 структур одновременно:
Итог = A1sDS.Concatenate(база, пользователь, окружение, временные);
Настр1 = A1sDS.Of("Язык", "ru", "Тема", "светлая", "Размер", 12);
Настр2 = A1sDS.Of("Язык", "en", "Тема", "темная", "Шрифт", "Arial");
Настр3 = A1sDS.Of("Язык", "de", "Размер", 14);
Общие = A1sDS.Intersection(Настр1, Настр2, Настр3);
// {Язык: "de"} ← только ключи, присутствующие во ВСЕХ структурах
Все = A1sDS.Of("ID", 1, "Имя", "Товар", "Цена", 100, "Количество", 5);
Базовые = A1sDS.Of("ID", 1, "Имя", "Товар");
Дополнительные = A1sDS.Difference(Все, Базовые);
// {Цена: 100, Количество: 5} ← всё кроме базовых полей
// Базовая конфигурация приложения
База = A1sDS.Of(
"АдресСервера", "localhost",
"Порт", 80,
"Таймаут", 30,
"Отладка", Ложь
);
// Пользовательские настройки
Пользователь = A1sDS.Of(
"АдресСервера", "prod.server.com",
"Порт", 443,
"Отладка", Истина
);
// Переменные окружения (наивысший приоритет)
Окружение = A1sDS.Of(
"Порт", 8080,
"SSL", Истина
);
// Итоговая конфигурация (приоритет: окружение > пользователь > база)
Конфиг = A1sDS.Concatenate(База, Пользователь, Окружение);
// {АдресСервера: "prod.server.com", Порт: 8080, Таймаут: 30, Отладка: Истина, SSL: Истина}
// Показать переопределённые настройки
Переопределённые = A1sDS.Intersection(База, Пользователь, Окружение);
// {Порт: 8080} ← только "Порт" есть во всех трёх уровнях
// Уникальные настройки каждого уровня
УникальныеБазы = A1sDS.Difference(База, Пользователь, Окружение);
// {Таймаут: 30} ← только в базовой конфигурации
// ИИ видит:
A1sDS.Concatenate(s1, s2, s3)
// Вместо:
Результат = Новый Структура();
Для Каждого Пара Из s1 Цикл...
Для Каждого Пара Из s2 Цикл...
ИИ мгновенно понимает намерение: