Как исправить ошибку «Ожидается выражение "ВЫБРАТЬ"» при обновлении 1С:Комплексная автоматизация с версии 2.4 на 2.5

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

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

Проанализируем техническую причину ошибки

Давайте посмотрим на текст ошибки, который выдает конфигуратор. Основной сбой происходит в модуле менеджера регистра накопления СтоимостьОС, а именно в методе ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию. Проблема заключается в динамическом формировании текста запроса. Рассмотрим, как это работает «под капотом».

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

Типичный стек вызова выглядит так:


{РегистрНакопления.СтоимостьОС.МодульМенеджера(358)}:Регистраторы = Запрос.Выполнить.Выгрузить.ВыгрузитьКолонку("Регистратор");
{(1)}:РегистрыНакопления.СтоимостьОС.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры[0])

Решение 1: Переход в файловый режим (проверенный метод)

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

  1. Создадим резервную копию. Это обязательный этап перед любыми манипуляциями.
  2. Выгрузим информационную базу в файл .dt. Перейдем в Конфигуратор серверной базы, выберем меню «Администрирование» — «Выгрузить информационную базу».
  3. Создадим новую файловую базу. Добавим в список пустую папку и загрузим туда полученный .dt.
  4. Запустим обновление в файловом режиме. Зайдем в режиме «1С:Предприятие» и дождемся завершения всех процедур отложенного обновления. В файловом варианте этот же код часто отрабатывает корректно без вылета ошибки.
  5. Вернем базу на сервер. После успешного завершения обновления в файловом режиме (когда статус всех заданий станет «Выполнено»), снова выгрузим ее в .dt и загрузим обратно в рабочую SQL-базу.

Важно: Этот метод является «танцем с бубном», но он эффективен, когда нужно быстро запустить систему в работу.

Решение 2: Использование официальных патчей (исправлений)

Фирма «1С» знает об этой проблеме, так как она массово проявлялась на первых релизах ветки 2.5. Для исправления ситуации выпускаются специальные патчи. Проанализируем, как проверить их наличие:

Перейдем в раздел Администрирование — Обслуживание — Обновление программы — Установленные исправления (патчи). Нам необходимо убедиться, что установлены все актуальные исправления для текущего релиза. Если патчей нет, стоит выполнить их поиск и установку. Обычно исправление выглядит как модуль, добавляющий проверку текста запроса перед выполнением:


Если НЕ ПустаяСтрока(ТекстЗапроса) Тогда
    Запрос.Текст = ТекстЗапроса;
    // ... выполнение запроса
КонецЕсли;

Решение 3: Очистка серверного кэша и перезапуск службы

Иногда ошибка Ожидается выражение "ВЫБРАТЬ" является следствием некорректного кэширования модулей менеджера регистров на стороне сервера 1С:Предприятие. Попробуем выполнить следующие действия:

  1. Остановим службу 1C:Enterprise 8.3 Server Agent.
  2. Перейдем в каталог srvinfo (обычно это C:\Program Files\1cv8\srvinfo).
  3. Найдем папку конкретной информационной базы (по ее UID) и удалим внутри папки snccntx и reg_1541 (содержимое папок кэша).
  4. Запустим службу сервера снова.
  5. Запустим процедуру обновления через консоль с параметром /C ЗапуститьОбновлениеИнформационнойБазы.

Решение 4: Проверка данных регистра «Стоимость ОС»

Если ошибка сохраняется, выясним причину в самих данных. Возможно, в регистре СтоимостьОС присутствуют записи, которые «сводят с ума» алгоритм обновления. Проверим следующее:

Если такие записи найдены, их необходимо удалить или исправить до запуска обновления.

Решение 5: Работа с консолью управления отложенным обновлением

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

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

Подведем итоги: Ошибка при переходе на КА 2.5 чаще всего вызвана недоработкой в коде типовой конфигурации, которая проявляется на определенных наборах данных в SQL-версии. Наиболее надежным способом «проскочить» этот этап остается временная выгрузка базы в файловый режим или установка последних официальных патчей от разработчика.

← На главную