При разработке управляемых форм во внешних обработках или расширениях разработчики нередко сталкиваются с ситуацией, когда при открытии формы с динамическим списком платформа 1С аварийно завершает чтение набора данных с ошибкой: «{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"». При этом визуально текст запроса в конфигураторе выглядит абсолютно корректно и начинается с ключевого слова ВЫБРАТЬ.
Разберем подробно причины возникновения этой ошибки, проанализируем ограничения динамических списков и рассмотрим проверенные способы восстановления работоспособности формы.
Проанализируем механику работы платформы при инициализации реквизита формы с типом ДинамическийСписок. Ошибка на первой строке и в первой позиции (1, 1) чаще всего возникает по следующим причинам:
U+FEFF) или спецсимволы с нулевой шириной. Синтаксический парсер платформы спотыкается на первом же скрытом байте и не может распознать лексему ВЫБРАТЬ.ОсновнаяТаблица в список полей могут попасть ссылки на табличные части целиком (например, Документ.Товары), что недопустимо для механизма СКД, на котором базируется динамический список.ПроизвольныйЗапрос и переключении основных таблиц структура схемы динамического списка может рассинхронизироваться.Рассмотрим самый быстрый способ удаления невидимых символов из заголовка запроса:
Список на форме.В в слове ВЫБРАТЬ.Backspace несколько раз, чтобы удалить возможные скрытые пробелы и символы перед словом.ВЫБРАТЬ вручную на чистой строке с клавиатуры.Выясним, как автоматически очистить запрос от мусорных символов и некорректных полей. Для этого воспользуемся встроенным конструктором:
Товары, Услуги, Оборудование), удалим их из списка полей, так как динамический список не может отображать вложенные таблицы напрямую в строке.Посмотрим на пример корректного текста произвольного запроса для динамического списка документов поступления:
ВЫБРАТЬ
ДокументПоступление.Ссылка КАК Ссылка,
ДокументПоступление.ПометкаУдаления КАК ПометкаУдаления,
ДокументПоступление.Номер КАК Номер,
ДокументПоступление.Дата КАК Дата,
ДокументПоступление.Проведен КАК Проведен,
ДокументПоступление.Организация КАК Организация,
ДокументПоступление.Контрагент КАК Контрагент,
ДокументПоступление.СуммаДокумента КАК СуммаДокумента
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ДокументПоступление
Если ручное редактирование текста не помогает из-за сбоя в метаданных управляемой формы, разберем по шагам процедуру пересоздания элемента:
ДинамическийСписок из списка реквизитов формы.ДинамическийСписок.ПроизвольныйЗапрос в значение Истина и укажем ОсновнаяТаблица.Проанализируем программный способ переопределения текста запроса, если список настраивается в модуле формы. В событии ПриСозданииНаСервере можно явно задать текст и структуру списка:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Список.ПроизвольныйЗапрос = Истина;
Список.ТекстЗапроса =
"ВЫБРАТЬ
| ДокументПоступление.Ссылка КАК Ссылка,
| ДокументПоступление.Номер КАК Номер,
| ДокументПоступление.Дата КАК Дата
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ДокументПоступление";
Список.ОсновнаяТаблица = "Документ.ПоступлениеТоваровУслуг";
КонецПроцедуры
Если ошибка сохраняется только на стороне конкретного пользователя, обязательно выполним очистку локального кэша платформы 1С (каталоги %LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8) либо переименуем файл внешней обработки, чтобы заставить платформу скомпилировать форму заново.