Функция МакетВТаблицуЗначений(Макет, _ТЗ=Неопределено, флДобавлятьКолонки=истина) Экспорт
Перем ТЗ;
Если _ТЗ=Неопределено Тогда
ТЗ=Новый ТаблицаЗначений();
флЗаполняем=ложь;
Иначе
ТЗ=_ТЗ;
флЗаполняем=истина;
КонецЕсли;
//Считываем колонки
КоличествоКолонок=0;
ИменаКолонок=Новый Массив();
Кол=1;
Пока истина Цикл
Адрес="R1C"+Формат(Кол,"ЧГ=");
ИмяКол=Макет.Область(Адрес).Текст;
Если ПустаяСтрока(ИмяКол) Тогда
Прервать;
КонецЕсли;
КоличествоКолонок=КоличествоКолонок+1;
Если НЕ флЗаполняем или (флЗаполняем И флДобавлятьКолонки) И ТЗ.Колонки.Найти(ИмяКол)=Неопределено Тогда
ТЗ.Колонки.Добавить(ИмяКол);
КонецЕсли;
ИменаКолонок.Добавить(ИмяКол);
Кол=Кол+1;
КонецЦикла;
//Считываем строки
Стр=2; Кол=1;
Пока истина Цикл
Вставлено=ложь; Первая=истина;
Для Инд=1 По КоличествоКолонок Цикл
Адрес="R"+Формат(Стр,"ЧГ=")+"C"+Формат(Инд,"ЧГ=");
Зн=СокрЛП(Макет.Область(Адрес).Текст);
Если ПустаяСтрока(Зн) Тогда
Продолжить;
КонецЕсли;
Если Первая Тогда
ТСтр=ТЗ.Добавить();
Первая=ложь;
Вставлено=истина;
КонецЕсли;
ИмяКолонки=ИменаКолонок[Инд-1];
Если ТЗ.Колонки.Найти(ИмяКолонки)<>Неопределено Тогда
Если флЗаполняем Тогда
//Проверяем тип - число, строка, булево
ОписаниеТипаКолонки=ТЗ.Колонки[ИмяКолонки].ТипЗначения;
Если ОписаниеТипаКолонки.СодержитТип(Тип("Число")) Тогда
РезЗн=Число(Зн);
ИначеЕсли ОписаниеТипаКолонки.СодержитТип(Тип("Строка")) Тогда
РезЗн=Строка(Зн);
ИначеЕсли ОписаниеТипаКолонки.СодержитТип(Тип("Булево")) Тогда
РезЗн=Булево(Зн);
ИначеЕсли ОписаниеТипаКолонки.СодержитТип(Тип("Дата")) Тогда
РезЗн=Дата(Зн);
Иначе
РезЗн=Зн;
КонецЕсли;
Иначе
РезЗн=Зн;
КонецЕсли;
ТСтр[ИмяКолонки]=РезЗн;
КонецЕсли;
КонецЦикла;
Если Не вставлено Тогда
Прервать;
КонецЕсли;
Стр=Стр+1;
Кол=1;
КонецЦикла;
Возврат ТЗ;
КонецФункции
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.