Как устранить ошибку получения информации набора данных с синтаксической ошибкой "Выбор" в 1С:Предприятии?

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

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

Выясняем причину возникновения синтаксической ошибки

Проанализируем ситуацию: ошибка чаще всего возникает в динамических списках (формах списка документов или справочников). Главная особенность заключается в том, что в конфигураторе запрос может отсутствовать (используется стандартная выборка), а форма создана автоматически. При этом в интерфейсе «Такси» система выдает сбой, тогда как в старых интерфейсах всё работает корректно.

Разберем внутренний механизм работы платформы. Когда мы открываем форму списка, 1С автоматически генерирует SQL-запрос к базе данных. В интерфейсе «Такси» этот механизм работает более сложно: платформа добавляет служебные поля для обеспечения быстрого поиска, фильтрации и динамического считывания данных. Если в метаданных документа (в реквизитах или табличных частях) присутствует поле с именем Выбор, возникает конфликт.

Важный момент: Слово ВЫБОР (или SELECT, CASE в SQL-трансляции) является зарезервированным оператором языка запросов 1С. Когда платформа формирует текст внутреннего запроса, она перечисляет поля через запятую. Если имя поля совпадает с ключевым словом, парсер запросов ожидает увидеть конструкцию ВЫБОР ... КОГДА ... ТОГДА, но вместо этого встречает запятую или другое имя поля. Это и приводит к синтаксической ошибке "," Выбор.

Способ 1. Переименование реквизита в метаданных

Рассмотрим самый надежный и правильный с точки зрения стандартов разработки способ. Если в вашем объекте (документе, справочнике) есть реквизит или колонка табличной части с именем Выбор, его необходимо переименовать.

  1. Откроем дерево метаданных в конфигураторе.
  2. Найдем проблемный документ и перейдем в список его реквизитов или табличных частей.
  3. Переименуем реквизит Выбор в нечто более специфичное, например, ВариантВыбора или ОтметкаВыбора.
  4. Выполним обновление конфигурации базы данных.

Проанализируем последствия: после переименования платформа перестанет воспринимать имя поля как оператор ВЫБОР, и автоматическая генерация запроса для динамического списка в интерфейсе «Такси» пройдет успешно.

Способ 2. Использование псевдонимов в произвольном запросе

Бывают ситуации, когда переименование реквизита в метаданных невозможно или крайне затруднительно (например, на этом поле завязано множество внешних интеграций или сложных расчетов). В этом случае мы можем прибегнуть к использованию произвольного запроса в динамическом списке.

Выполним следующие шаги:

  1. Откроем форму списка документа.
  2. Перейдем в свойства основного реквизита формы (обычно это Список с типом ДинамическийСписок).
  3. Установим галочку «Произвольный запрос».
  4. В окне редактирования запроса напишем текст вручную, явно указав псевдоним для проблемного поля.

Рассмотрим пример кода такого запроса:


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

Обратите внимание: В тексте запроса мы используем конструкцию Документ.Выбор КАК ПолеВыбор. Таким образом, для визуального интерфейса и программного кода формы поле будет называться ПолеВыбор, что исключит синтаксическую коллизию с оператором ВЫБОР.

Особенности работы с СКД (Системой компоновки данных)

Посмотрим на ситуацию, когда аналогичная ошибка возникает во внешнем отчете или в схеме компоновки данных. Проанализируем структуру наборов данных. Ошибка получения информации может возникнуть, если:

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

Дополнительные рекомендации

Выясним, почему ошибка может проявляться не сразу или только в определенных клиентах. Как показывает практика, интерфейс «Такси» активно использует механизмы кэширования метаданных на стороне клиента. Если вы удаляли и создавали форму заново, ошибка могла исчезнуть на один сеанс из-за обновления локального кэша, но вернуться при следующем запуске, когда платформа снова обращается к дескриптору объекта в базе данных.

Рекомендуем придерживаться следующих правил во избежание подобных проблем:

Таким образом, мы выяснили, что «ларчик открывался просто»: использование зарезервированных слов в именах полей — это мина замедленного действия, которая срабатывает при обновлении платформы или смене интерфейса. Своевременное исправление имен реквизитов или использование псевдонимов в запросах полностью решает проблему.

← На главную