Все знают, как заполнять параметры ТабДок (ПараметрыМакетаТабличногоДокумента) из структуры:
ЗаполнитьЗначенияСвойств(ТабДок.Параметры,Структура).
ТабДок.Параметры.Заполнить(Структура).
А в обратную сторону - пробовали? Не работает! Платформа не поддерживает!
ЗаполнитьЗначенияСвойств(Структура,ТабДок.Параметры) - иниц.не предусмотрена
Структура = ТабДок.Параметры.Выгрузить() - нет такого метода
Решение есть!
(1) По сути самого первого вопроса - есть ответ на ИТС (Сорри что поздно, но сам столкнулся)))):
https://its.1c.ru/db/metod8dev/content/2611/hdoc/ При использовании запросов следует учитывать, что в результате запроса в колонках,
кроме типов значений исходных полей, могут присутствовать значения типа NULL.
Поэтому тип колонки таблицы значений, полученной из результата запроса,
не будет полностью соответствовать типу исходного поля таблицы, а будет дополнительно содержать тип NULL.
Иными словами Запрос.Выполнить().Выгрузить() - всегда добавляет к описанию типа возвращаемых колонок тип("NULL")
Это заложено платформой. И никак по-другому.
Сделал для себя процедуру, которая потом из таблицы "выбрасывает" этот NULL, может кому пригодится:
Код
Процедура ТаблицаЗначенийБезNull(ТаблицаЗначений, фИзменилиТаблицу = ЛОЖЬ) Экспорт
фИзменилиТаблицу = ЛОЖЬ;
чКрайний = ТаблицаЗначений.Колонки.Количество()-1;
Для чИндекс = 0 По чКрайний Цикл
ТипКолонки = ТаблицаЗначений.Колонки[чИндекс].ТипЗначения;
Если ТипКолонки.СодержитТип(Тип("Null")) Тогда
ИмяКолонки = ТаблицаЗначений.Колонки[чИндекс].Имя;
ЗагКолонки = ТаблицаЗначений.Колонки[чИндекс].Заголовок;
ШирКолонки = ТаблицаЗначений.Колонки[чИндекс].Ширина;
ЗнчКолонки = ТаблицаЗначений.ВыгрузитьКолонку(чИндекс);
ТипКолонки = Новый ОписаниеТипов(ТипКолонки,,"NULL"
,ТипКолонки.КвалификаторыЧисла
,ТипКолонки.КвалификаторыСтроки
,ТипКолонки.КвалификаторыДаты
,ТипКолонки.КвалификаторыДвоичныхДанных
);
ТаблицаЗначений.Колонки.Удалить(чИндекс);
ТаблицаЗначений.Колонки.Вставить(чИндекс,ИмяКолонки,ТипКолонки,ЗагКолонки,ШирКолонки);
ТаблицаЗначений.ЗагрузитьКолонку(ЗнчКолонки,чИндекс);
фИзменилиТаблицу = ИСТИНА;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
(6) в самом начале я написал постановку задачи - имена параметров заранее не известны (это важно).
Понятно, что если - знаешь имена - то и получить значение можно.......
(4) это просто демонстрация - как хотелось бы, чтоб работало в платформе. Этот кусок кода можно удалить. Просто демонстрация - почему не работает в платформе....
Все знают, как заполнять параметры ТабДок (ПараметрыМакетаТабличногоДокумента) из структуры:
<br><font size=small color=blue> ЗаполнитьЗначенияСвойств(ТабДок.Параметры,Структура).</font>
<br><font size=small color=blue> ТабДок.Параметры.Заполнить(Структура).</font>
<br>
<br>А в обратную сторону - пробовали? Не работает! Платформа не поддерживает!
<br><font size=small color=blue> ЗаполнитьЗначенияСвойств(Структура,ТабДок.Параметры)</font> - иниц.не предусмотрена
<br><font size=small color=blue> Структура = ТабДок.Параметры.Выгрузить()</font> - нет такого метода
<br>
при чтении первого листа (без учета версий 1с8), предлагаю простую мини-функцию 8))
Код
Функция ПолучитьТЗизФайлаЕксель(ИмяФайлаЗагрузки,знач НачСтрока=1,знач НачКолонка=1,знач КонСтрока=0,знач КонКолонка=0)
ТЗ = Новый ТаблицаЗначений;
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайлаЗагрузки,СпособЧтенияЗначенийТабличногоДокумента.Значение);
Область = ТабДок.ПолучитьОбласть();
КоличествоСтрок = Область.ВысотаТаблицы;
КоличествоКолонок = Область.ШиринаТаблицы;
КоличествоСтрок = ?(КонСтрока=0,КоличествоСтрок,Мин(КоличествоСтрок,КонСтрока));
КоличествоКолонок = ?(КонКолонка=0,КоличествоКолонок,Мин(КоличествоКолонок,КонКолонка));
Для нКолонка = НачКолонка По КоличествоКолонок Цикл
ТЗ.Колонки.Добавить("Колонка" + СокрЛП(нКолонка));
КонецЦикла;
Для нСтрока = НачСтрока По КоличествоСтрок Цикл
НоваяСтрока = ТЗ.Добавить();
Для нКолонка = НачКолонка По КоличествоКолонок Цикл
Область = ТабДок.Область(нСтрока,нКолонка,нСтрока,нКолонка);
Если Область.СодержитЗначение Тогда
НоваяСтрока.Установить(нКолонка-1,Область.Значение);
Иначе
НоваяСтрока.Установить(нКолонка-1,СокрЛП(Область.Текст));
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат ТЗ;
КонецФункции