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

Загрузку решено было сделать с использованием СКД. Был создан следующий макет:

В объекте "Область" передается ОбластьЯчеекТабличногоДокумента содержащая исходные данные.

 
Для получения ТаблицыЗначений использовалась следующая функция:
Функция ПолучитьТаблицуИзМакета(ИмяМакета, НаборДанных, Параметры = Неопределено)
СхемаКомпоновкиДанных = ПолучитьМакет(ИмяМакета);
КомпоновщикМакета     = Новый КомпоновщикМакетаКомпоновкиДанных;
ПроцессорКомпоновки   = Новый ПроцессорКомпоновкиДанных;
ПроцессорВывода       = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Если Параметры <> Неопределено Тогда
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
Для Каждого Параметр Из Параметры Цикл
КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Параметр.Ключ), Параметр.Значение);
КонецЦикла;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
Иначе
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, СхемаКомпоновкиДанных.НастройкиПоУмолчанию, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
КонецЕсли;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, НаборДанных, , Истина);
Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Возврат Результат;
КонецФункции
Полученная ТаблицаЗначений далее использовалась в запросе:
 Запрос = Новый Запрос(
"ВЫБРАТЬ
| ДанныеТабличногоДокумента.КодВнешнейСистемы КАК КодВнешнейСистемы,
| ДанныеТабличногоДокумента.КодERP КАК КодERP
|ПОМЕСТИТЬ ВТ_ДанныеТабличногоДокумента
|ИЗ
| &ДанныеТабличногоДокумента КАК ДанныеТабличногоДокумента");
В процессе разработки возникла необходимость дополнить значения колонки "КодERP" лидирующими нулями, что бы в дальнейшем получить ссылки на номенклатуру. Для этого был переделан макет компоновки данных. На закладке "Наборы данных" путь к колонке "КодERP" был изменен на "КраткийКодERP", на закладке "Вычисляемые поля" было добавлено ВычисляемоеПоле "КодERP" с выражением содержащим вызов функции общего модуля:
СтроковыеФункцииКлиентСервер.ДополнитьСтроку(КраткийКодERP, 11, "0", "Слева")


Настройки макета компоновки при этом не изменились.
Однако, при использовании полученной ТаблицыЗначений в запросе, стала появляться ошибка:

Причиной был тип колонки "КодERP", вернее его отсутствие. Напомню, что данная колонка была получена из вычисляемого поля.
Так выглядит колонка "КодERP" до использования ВычисляемогоПоля:

Так выглядит колонка "КодERP" после использования ВычисляемогоПоля:

Попытки использовать условное оформление и оформление ВычислямогоПоля ни к чему не привели. Это разъяснено на ИТС. Однако там не сказано, что если у объекта ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений вызвать метод УстановитьОбъект(), то при заполнении полей установленного объекта значения будут приведены к типу соответствующей колонки объекта.
Процедура получения таблицы значений была переделана:
Функция ПолучитьТаблицуИзМакета(ИмяМакета, НаборДанных, Параметры = Неопределено, Результат = Неопределено)
СхемаКомпоновкиДанных = ПолучитьМакет(ИмяМакета);
КомпоновщикМакета   = Новый КомпоновщикМакетаКомпоновкиДанных;
ПроцессорКомпоновки   = Новый ПроцессорКомпоновкиДанных;
ПроцессорВывода    = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
Если Параметры <> Неопределено Тогда
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
Для Каждого Параметр Из Параметры Цикл
КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Параметр.Ключ), Параметр.Значение);
КонецЦикла;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
Иначе
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, СхемаКомпоновкиДанных.НастройкиПоУмолчанию, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
КонецЕсли;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, НаборДанных, , Истина);
Если Результат <> Неопределено Тогда
ПроцессорВывода.УстановитьОбъект(Результат);
КонецЕсли;
Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Возврат Результат;
КонецФункции
В качестве параметра Результат передается таблица значений с типизированными колонками.
А так выглядит колонка КодERP после использования ВычисляемогоПоля и вызова метода УстановитьОбъект():

Полученная в итоге ТаблицаЗначений может использоваться в запросе.
 
    













любопытно конечно
только я не понял в чем плюс скд в сравнении с простым перебором строк/колонок
(1) Да больше из любопытства. Но и универсальность тоже. скормил функции область, а она те ТЗ, да еще и с отборами, если необходимо.
(0) Если я правильно понял — публикация о том, что можно СКД скормить область табличного документа и по ней скомпоновать результат. Если это так, то лучше в заголовке статьи отразить именно то, что вы хотите показать компоновку СКД по данным табличного документа.
Как вывести данные из СКД в табличный документ или в коллекцию значений описано уже здесь:
(3) Публикация про то, что если ПроцессоруВывода установить объект (ТаблицаЗначений. ДеревоЗначений), то выгружаемые данные будут приведены к типам соответствующих колонок.
Считаю, что статья полезная и со своей полезной особенностью. Чтение области с помощью СКД и вывод в таблицу значений с обходом ошибки сэкономит время любому кто с этим еще не сталкивался.