1С 8.3 Скопировать колонки в Таблицу Значений или Дерево значений
Данные > Примеры кода 1С > 1С 8.3 Дерево значений
Перейти в раздел примеры кода 1С 8.3:
Данная функция может использоваться как конструктор для создания таблицы или дерева значений из других объектов, имеющих коллекцию колонок, включая РезультатЗапроса. А также дополнения колонок из других коллекций.
Функция копирования колонок в таблицу или дерево значений (конструктор таблиц и деревьев значений) в 1С 8.3 (от Sokolin D.A.):
// СкопироватьКолонки — Копирует заданые колонки из Источника в Приемник с учетом исключений
//
// Параметры:
// Приемник — ТаблицаЗначений, ДеревоЗначений — коллекция в которой создаются колонки
// Источник — РезультатЗапроса, ТаблицаЗначений, ДеревоЗначений — коллекция из которой копируются свойства колонок
// — СтрокаДереваЗначений, СтрокаТаблицыЗначений — строка коллекции из которой копируются свойства колонок
// ИменаКолонок — Строка — разделенные запятыми имена колонок, которые подлежат копированию
// — Массив, ФиксированныйМассив — массив имен колонок, которые подлежат копированию
// — Неопределено — копируются все колонки с учетом исключений
// ИменаКолонокИсключений — Строка — разделенные запятыми имена колонок, которые исключены из копирования
// — Массив, ФиксированныйМассив — массив имен колонок, которые исключены из копирования
// — Неопределено — нет исключений
//
// Возвращаемое значение:
// — ТаблицаЗначений, ДеревоЗначений — значение параметра Приемник
// Пример:
// Дерево = СкопироватьКолонки(Новый ДеревоЗначений(), РезультатЗапроса);
//
Функция СкопироватьКолонки(Приемник, Знач Источник, Знач ИменаКолонок = Неопределено, Знач ИменаКолонокИсключений = Неопределено) Экспорт
Перем Колонка, КоллекцияИмен, КоллекцияИменИсключений, КолонкиИсточника;
Если ЗначениеЗаполнено(ИменаКолонок) Тогда
Если ТипЗнч(ИменаКолонок) = Тип("Строка") Тогда
КоллекцияИмен = РазложитьСтрокуВМассивПодстрок(ИменаКолонок, ",", Истина, Истина);
Иначе
КоллекцияИмен = ИменаКолонок;
КонецЕсли;
Иначе
КоллекцияИмен = Неопределено;
КонецЕсли;
Если ЗначениеЗаполнено(ИменаКолонокИсключений) Тогда
Если ТипЗнч(ИменаКолонокИсключений) = Тип("Строка") Тогда
КоллекцияИменИсключений = РазложитьСтрокуВМассивПодстрок(ИменаКолонокИсключений, ",", Истина, Истина);
Иначе
КоллекцияИменИсключений = ИменаКолонокИсключений;
КонецЕсли;
Иначе
КоллекцияИменИсключений = Неопределено;
КонецЕсли;
Если ТипЗнч(Источник) = Тип("СтрокаДереваЗначений")
Или ТипЗнч(Источник) = Тип("СтрокаТаблицыЗначений") Тогда
КолонкиИсточника = Источник.Владелец().Колонки;
Иначе
КолонкиИсточника = Источник.Колонки;
КонецЕсли;
Для Каждого Колонка Из КолонкиИсточника Цикл
Если (КоллекцияИмен = Неопределено Или КоллекцияИмен.Найти(Колонка.Имя) <> Неопределено)
И (КоллекцияИменИсключений = Неопределено Или КоллекцияИменИсключений.Найти(Колонка.Имя) = Неопределено)
Тогда
Если ТипЗнч(Источник) = Тип("РезультатЗапроса") Тогда
Приемник.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения, Колонка.Имя, Колонка.Ширина);
Иначе
Приемник.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения, Колонка.Заголовок, Колонка.Ширина);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Приемник;
КонецФункции
//
// Параметры:
// Приемник — ТаблицаЗначений, ДеревоЗначений — коллекция в которой создаются колонки
// Источник — РезультатЗапроса, ТаблицаЗначений, ДеревоЗначений — коллекция из которой копируются свойства колонок
// — СтрокаДереваЗначений, СтрокаТаблицыЗначений — строка коллекции из которой копируются свойства колонок
// ИменаКолонок — Строка — разделенные запятыми имена колонок, которые подлежат копированию
// — Массив, ФиксированныйМассив — массив имен колонок, которые подлежат копированию
// — Неопределено — копируются все колонки с учетом исключений
// ИменаКолонокИсключений — Строка — разделенные запятыми имена колонок, которые исключены из копирования
// — Массив, ФиксированныйМассив — массив имен колонок, которые исключены из копирования
// — Неопределено — нет исключений
//
// Возвращаемое значение:
// — ТаблицаЗначений, ДеревоЗначений — значение параметра Приемник
// Пример:
// Дерево = СкопироватьКолонки(Новый ДеревоЗначений(), РезультатЗапроса);
//
Функция СкопироватьКолонки(Приемник, Знач Источник, Знач ИменаКолонок = Неопределено, Знач ИменаКолонокИсключений = Неопределено) Экспорт
Перем Колонка, КоллекцияИмен, КоллекцияИменИсключений, КолонкиИсточника;
Если ЗначениеЗаполнено(ИменаКолонок) Тогда
Если ТипЗнч(ИменаКолонок) = Тип("Строка") Тогда
КоллекцияИмен = РазложитьСтрокуВМассивПодстрок(ИменаКолонок, ",", Истина, Истина);
Иначе
КоллекцияИмен = ИменаКолонок;
КонецЕсли;
Иначе
КоллекцияИмен = Неопределено;
КонецЕсли;
Если ЗначениеЗаполнено(ИменаКолонокИсключений) Тогда
Если ТипЗнч(ИменаКолонокИсключений) = Тип("Строка") Тогда
КоллекцияИменИсключений = РазложитьСтрокуВМассивПодстрок(ИменаКолонокИсключений, ",", Истина, Истина);
Иначе
КоллекцияИменИсключений = ИменаКолонокИсключений;
КонецЕсли;
Иначе
КоллекцияИменИсключений = Неопределено;
КонецЕсли;
Если ТипЗнч(Источник) = Тип("СтрокаДереваЗначений")
Или ТипЗнч(Источник) = Тип("СтрокаТаблицыЗначений") Тогда
КолонкиИсточника = Источник.Владелец().Колонки;
Иначе
КолонкиИсточника = Источник.Колонки;
КонецЕсли;
Для Каждого Колонка Из КолонкиИсточника Цикл
Если (КоллекцияИмен = Неопределено Или КоллекцияИмен.Найти(Колонка.Имя) <> Неопределено)
И (КоллекцияИменИсключений = Неопределено Или КоллекцияИменИсключений.Найти(Колонка.Имя) = Неопределено)
Тогда
Если ТипЗнч(Источник) = Тип("РезультатЗапроса") Тогда
Приемник.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения, Колонка.Имя, Колонка.Ширина);
Иначе
Приемник.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения, Колонка.Заголовок, Колонка.Ширина);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Приемник;
КонецФункции
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник