Здравствуйте. Столкнулась с проблемой, что файл с помощью чтения через табличный документ получается некорректный при загрузке, считывается только первая колонка первого листа. В файле присутствуют объединения и он в целом достаточно нестандартный. Вопрос, как его можно корректно считать? Пример входных данных прикрепляю.
---
Универсальный механизм:

```1c
    тДокумент = Новый ТабличныйДокумент;
    тДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    ПоследняяСтрока = тДокумент.ВысотаТаблицы;
    ПоследняяКолонка = тДокумент.ШиринаТаблицы;

    ТЗ = Новый ТаблицаЗначений;
    Для Сч = 1 По ПоследняяКолонка Цикл
    ТЗ.Колонки.Добавить("Колонка" + Формат(Сч, "ЧГ="));
    КонецЦикла;

    Для НомерСтроки = 1 По ПоследняяСтрока Цикл
    НСтр = ТЗ.Добавить();
    Для НомерКолоноки = 1 По ПоследняяКолонка Цикл
    Нстр[НомерКолонки - 1] = тДокумент.Область(НомерСтроки, НомерКолонки).Значение;
    КонецЦикла;
    КонецЦикла;
```
---
так и в чем проблемы читать нужные данные?
---
Проблема в том, что при установлении области в весь лист, считывается только первая колонка.
---
вы читаете файл какой-то типовой обработкой?
скопируйте нужные строки/колонки в другой файл и прочитайте
---
Нет, не обработкой. Просто ТабДок.Прочитать(ИмяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
, а потом с помощью построителя запроса в таблицу значений перевожу.
---
читайте нужные значения "вручную", без применения построителя запроса

В приложенном файле, данные находятся в 7-8 строках, колонки - стандартные, без объединений.
---
К сожалению, не совсем понимаю, это же не будет универсальным алгоритмом для других файлов с подобным "каркасом"? Мне надо сделать не единоразовую обработку файла, а потом обрабатывать так же другие (с другими данными).
---
это же не будет универсальным алгоритмом для других файлов с подобным "каркасом"?
как раз таки будет.

Если формат данных поменяется, то и алгоритм обработки так же должен поменятся.
---
Количество "нужных" колонок в разных файлах одинаковое? Если да, то можете в цикле попробовать обработать
```1c
    тДокумент = Новый ТабличныйДокумент;
    тДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    ПоследняяСтрока = тДокумент.ВысотаТаблицы;
    ПоследняяКолонка = тДокумент.ШиринаТаблицы;
    Для Сч = 1 По ПоследняяСтрока 20 Цикл
    Для СчКолонок = 1 По ПоследняяКолонка Цикл
    ОбластьЯчеек = тДокумент.Область(Сч, СчКолонок , ПоследняяСтрока, ПоследняяКолонка);
    ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);
    ПостроительОтчета = Новый ПостроительОтчета;
    ПостроительОтчета.ИсточникДанных = ИсточникДанных;
    ПостроительОтчета.Выполнить();
    Попытка
    ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
    Если ТабЗначений.Колонки.Количество() = 8 Тогда /////нужное количество колонок
    Прервать;
    КонецЕсли;
    Исключение

    КонецПопытки;
    КонецЦикла;
    КонецЦикла;
```
---
https://infostart.ru/1c/tools/1411881/

см: Работа с Excel через OLE на клиенте
---
Спасибо, попробую так.
(11) К сожалению, нет, не одинаковое.
---
Универсальный механизм:

```1c
    тДокумент = Новый ТабличныйДокумент;
    тДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    ПоследняяСтрока = тДокумент.ВысотаТаблицы;
    ПоследняяКолонка = тДокумент.ШиринаТаблицы;

    ТЗ = Новый ТаблицаЗначений;
    Для Сч = 1 По ПоследняяКолонка Цикл
    ТЗ.Колонки.Добавить("Колонка" + Формат(Сч, "ЧГ="));
    КонецЦикла;

    Для НомерСтроки = 1 По ПоследняяСтрока Цикл
    НСтр = ТЗ.Добавить();
    Для НомерКолоноки = 1 По ПоследняяКолонка Цикл
    Нстр[НомерКолонки - 1] = тДокумент.Область(НомерСтроки, НомерКолонки).Значение;
    КонецЦикла;
    КонецЦикла;
```
---
Файл ТС скачай и посмотри. Этим "Универсальным инструментом" не загрузишь даже первую таблицу (имена колонок не пройдут, только если всё перенести на один уровень R) А уж ниже с объединенными ячейками вообще ничего не получится этим "универсальным"
---
вы лично пробовали?
---
Самый универсальный механизм основанный на БСП:

```1c
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.Прочитать(ФайлПриемник, СпособЧтенияЗначенийТабличногоДокумента.Значение);

    ПоследняяСтрока = ТабДокумент.ВысотаТаблицы;

    ПоследняяКолонка = ТабДокумент.ШиринаТаблицы;

    ОбластьЯчеек = ТабДокумент.Область(Объект.НомерПервойСтроки - 1, 1, ПоследняяСтрока, ПоследняяКолонка);

    // Создаем описание источника данных на основании области ячеек табличного документа.

    ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);

    // Создаем объект для интеллектуального построения отчетов,

    ПостроительОтчета = Новый ПостроительОтчета;

    // указываем источник данных и выполняем построение отчета.

    ПостроительОтчета.ИсточникДанных = ИсточникДанных;

    ПостроительОтчета.Выполнить();

    // Результат выгружаем в таблицу значений.

    ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
```

получаем таблицу значений и делаем что хотим