Как исправить ошибку «{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"» в динамическом списке 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке управляемых форм во внешних обработках или расширениях разработчики нередко сталкиваются с ситуацией, когда при открытии формы с динамическим списком платформа 1С аварийно завершает чтение набора данных с ошибкой: «{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"». При этом визуально текст запроса в конфигураторе выглядит абсолютно корректно и начинается с ключевого слова ВЫБРАТЬ.

Разберем подробно причины возникновения этой ошибки, проанализируем ограничения динамических списков и рассмотрим проверенные способы восстановления работоспособности формы.

Основные причины возникновения ошибки

Проанализируем механику работы платформы при инициализации реквизита формы с типом ДинамическийСписок. Ошибка на первой строке и в первой позиции (1, 1) чаще всего возникает по следующим причинам:

  1. Наличие скрытых или непечатаемых символов: при копировании текста запроса из внешних текстовых редакторов, веб-страниц или мессенджеров перед первым оператором могут вставиться неразрывные пробелы, метка порядка байтов (BOM, U+FEFF) или спецсимволы с нулевой шириной. Синтаксический парсер платформы спотыкается на первом же скрытом байте и не может распознать лексему ВЫБРАТЬ.
  2. Некорректный состав полей выборки: при автогенерации текста запроса через установку свойства ОсновнаяТаблица в список полей могут попасть ссылки на табличные части целиком (например, Документ.Товары), что недопустимо для механизма СКД, на котором базируется динамический список.
  3. Повреждение внутреннего XML-описания формы: при частой смене флага ПроизвольныйЗапрос и переключении основных таблиц структура схемы динамического списка может рассинхронизироваться.
  4. Кэширование внешних файлов платформой: клиентское приложение 1С кэширует скомпилированные формы обработок во временных каталогах сеанса пользователя. В результате платформа пытается выполнить устаревшую версию запроса.

Способ 1. Очистка начала текста запроса и повторный ввод ключевого слова

Рассмотрим самый быстрый способ удаления невидимых символов из заголовка запроса:

  1. Откроем палитру свойств реквизита Список на форме.
  2. Перейдем к свойству Настройка списка и откроем окно редактирования текста запроса.
  3. Установим курсор перед первой буквой В в слове ВЫБРАТЬ.
  4. Нажмем клавишу Backspace несколько раз, чтобы удалить возможные скрытые пробелы и символы перед словом.
  5. Полностью сотрем первое слово и наберем ВЫБРАТЬ вручную на чистой строке с клавиатуры.
  6. Сохраним форму и проверим работу обработки в пользовательском режиме.

Способ 2. Нормализация текста через Конструктор запроса

Выясним, как автоматически очистить запрос от мусорных символов и некорректных полей. Для этого воспользуемся встроенным конструктором:

  1. В окне редактирования запроса динамического списка нажмем кнопку Конструктор запроса.
  2. Проверим список выбранных полей. Если в поле выборки попали табличные части документа (такие как Товары, Услуги, Оборудование), удалим их из списка полей, так как динамический список не может отображать вложенные таблицы напрямую в строке.
  3. Нажмем ОК. Конструктор автоматически пересоберет текст запроса, удалив все невалидные символы кодировки.

Посмотрим на пример корректного текста произвольного запроса для динамического списка документов поступления:


ВЫБРАТЬ
    ДокументПоступление.Ссылка КАК Ссылка,
    ДокументПоступление.ПометкаУдаления КАК ПометкаУдаления,
    ДокументПоступление.Номер КАК Номер,
    ДокументПоступление.Дата КАК Дата,
    ДокументПоступление.Проведен КАК Проведен,
    ДокументПоступление.Организация КАК Организация,
    ДокументПоступление.Контрагент КАК Контрагент,
    ДокументПоступление.СуммаДокумента КАК СуммаДокумента
ИЗ
    Документ.ПоступлениеТоваровУслуг КАК ДокументПоступление

Способ 3. Пересоздание реквизита динамического списка

Если ручное редактирование текста не помогает из-за сбоя в метаданных управляемой формы, разберем по шагам процедуру пересоздания элемента:

  1. Скопируем валидный текст запроса в буфер обмена.
  2. Удалим проблемный реквизит с типом ДинамическийСписок из списка реквизитов формы.
  3. Сохраним внешнюю обработку (или конфигурацию).
  4. Добавим новый основной реквизит с тем же именем и типом ДинамическийСписок.
  5. Установим флаг ПроизвольныйЗапрос в значение Истина и укажем ОсновнаяТаблица.
  6. Вставим текст запроса заново и привяжем реквизит к таблице на форме.

Способ 4. Программная инициализация и сброс кэша

Проанализируем программный способ переопределения текста запроса, если список настраивается в модуле формы. В событии ПриСозданииНаСервере можно явно задать текст и структуру списка:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Список.ПроизвольныйЗапрос = Истина;
    Список.ТекстЗапроса = 
        "ВЫБРАТЬ
        |   ДокументПоступление.Ссылка КАК Ссылка,
        |   ДокументПоступление.Номер КАК Номер,
        |   ДокументПоступление.Дата КАК Дата
        |ИЗ
        |   Документ.ПоступлениеТоваровУслуг КАК ДокументПоступление";
    Список.ОсновнаяТаблица = "Документ.ПоступлениеТоваровУслуг";
    
КонецПроцедуры

Если ошибка сохраняется только на стороне конкретного пользователя, обязательно выполним очистку локального кэша платформы 1С (каталоги %LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8) либо переименуем файл внешней обработки, чтобы заставить платформу скомпилировать форму заново.

← На главную