При автоматизации загрузки прайс-листов, актов или накладных из внешних файлов формата XLSX разработчики часто используют штатный метод платформы ТабличныйДокумент.Прочитать() с последующей быстрой выгрузкой данных в объект ТаблицаЗначений через ПостроительЗапроса. Этот подход позволяет обойтись без внешних COM-соединений с приложением Microsoft Excel и работает на стороне сервера, в том числе в привилегированном режиме.
Однако на практике разработчики регулярно сталкиваются с ситуацией, когда один файл загружается без нареканий, а при чтении другого файла с аналогичной структурой данных на этапе получения результата построителя возникает системное исключение вида {(1, 1)}: Ожидается выражение "ВЫБРАТЬ" при обращении к свойству ПЗ.Результат.Выгрузить(). Внешне файлы могут выглядеть идентично, что затрудняет локализацию сбоя.
Механизм конвертации области табличного документа через ОписаниеИсточникаДанных опирается на внутреннюю автоматическую генерацию текста запроса платформой 1С. Когда в свойство ПЗ.ИсточникДанных передается область документа (например, ТабличныйДокумент.Область), платформа пытается автоматически сформировать текст выборки, принимая первую строку области за строку заголовков будущей таблицы.
Сбой анализатора запросов происходит в следующих подтвержденных практикой случаях:
ТабличныйДокумент.Область.Для восстановления работоспособности загрузки можно применить несколько вариантов решения в зависимости от того, есть ли возможность корректировать исходный файл или требуется программная устойчивость алгоритма.
1. Очистка исходного файла от пустых зон
Если загрузка выполняется из единичного проблемного файла, подтвержденным и самым быстрым решением является копирование содержательной части таблицы без пустых начальных строк и колонок в новый чистый лист Excel, где данные начинаются строго с ячейки A1. Это гарантирует, что первая строка будет воспринята как заголовок, а первая колонка не окажется пустой.
2. Программное ограничение передаваемой области
Передача всей области документа через ТабличныйДокумент.Область без параметров часто захватывает технический мусор. Чтобы избежать ошибки синтаксического анализатора, рекомендуется передавать в ОписаниеИсточникаДанных явно заданный диапазон ячеек, в котором гарантированно отсутствуют пустые поля заголовков.
3. Использование альтернативных методов обхода
Если структура входящих файлов нестабильна и может содержать пустые ячейки в шапке или объединенные области, использование ПостроителяЗапроса не рекомендуется из-за повышенной чувствительности к макету. В таких условиях более надежным решением является классический построчный обход ячеек табличного документа в цикле, либо предварительная программная валидация содержимого верхних ячеек перед формированием источника данных.