При переходе на новые релизы 1С:Комплексная автоматизация (КА 2.5) или 1С:ERP 2.5 пользователи часто сталкиваются с критической ошибкой на этапе выполнения обработчиков отложенного обновления. Система завершает процесс на 100%, но выдает сообщение: {(1, 1)}: Ожидается выражение "ВЫБРАТЬ". Эта ошибка блокирует дальнейшую работу и связана с регистрами учета основных средств. В данной статье мы подробно разберем причины этой проблемы и рассмотрим несколько способов ее решения.
Давайте посмотрим на текст ошибки, который выдает конфигуратор. Основной сбой происходит в модуле менеджера регистра накопления СтоимостьОС, а именно в методе ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию. Проблема заключается в динамическом формировании текста запроса. Рассмотрим, как это работает «под капотом».
В процессе обновления система анализирует данные прошлых периодов, чтобы перенести их в новую архитектуру учета внеоборотных активов версии 2.5. Для этого программно строится текст запроса, который должен собрать список документов-регистраторов. Если по какой-то причине (специфика данных, пустые ссылки или ошибки в логике конфигурации) список условий для запроса оказывается пустым, система формирует некорректную строку запроса, которая не содержит ключевого слова ВЫБРАТЬ. При попытке выполнить такой «пустой» запрос платформа 1С выдает синтаксическую ошибку.
Типичный стек вызова выглядит так:
{РегистрНакопления.СтоимостьОС.МодульМенеджера(358)}:Регистраторы = Запрос.Выполнить.Выгрузить.ВыгрузитьКолонку("Регистратор");
{(1)}:РегистрыНакопления.СтоимостьОС.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры[0])
Как показывает практика и обсуждения на форумах, эта ошибка часто проявляется именно в клиент-серверном варианте работы (на SQL). По неизвестным причинам механизмы фоновых заданий на сервере могут иначе обрабатывать кэш метаданных или специфику временных таблиц в этом конкретном обработчике. Разберем по шагам алгоритм, который помог многим специалистам:
.dt..dt и загрузим обратно в рабочую SQL-базу.Важно: Этот метод является «танцем с бубном», но он эффективен, когда нужно быстро запустить систему в работу.
Фирма «1С» знает об этой проблеме, так как она массово проявлялась на первых релизах ветки 2.5. Для исправления ситуации выпускаются специальные патчи. Проанализируем, как проверить их наличие:
Перейдем в раздел Администрирование — Обслуживание — Обновление программы — Установленные исправления (патчи). Нам необходимо убедиться, что установлены все актуальные исправления для текущего релиза. Если патчей нет, стоит выполнить их поиск и установку. Обычно исправление выглядит как модуль, добавляющий проверку текста запроса перед выполнением:
Если НЕ ПустаяСтрока(ТекстЗапроса) Тогда
Запрос.Текст = ТекстЗапроса;
// ... выполнение запроса
КонецЕсли;
Иногда ошибка Ожидается выражение "ВЫБРАТЬ" является следствием некорректного кэширования модулей менеджера регистров на стороне сервера 1С:Предприятие. Попробуем выполнить следующие действия:
srvinfo (обычно это C:\Program Files\1cv8\srvinfo).snccntx и reg_1541 (содержимое папок кэша)./C ЗапуститьОбновлениеИнформационнойБазы.Если ошибка сохраняется, выясним причину в самих данных. Возможно, в регистре СтоимостьОС присутствуют записи, которые «сводят с ума» алгоритм обновления. Проверим следующее:
Регистратор не заполнено (объект не найден). Это можно сделать с помощью консоли запросов:
ВЫБРАТЬ
СтоимостьОС.Регистратор
ИЗ
РегистрНакопления.СтоимостьОС КАК СтоимостьОС
ГДЕ
СтоимостьОС.Регистратор.Ссылка ЕСТЬ NULL
Если такие записи найдены, их необходимо удалить или исправить до запуска обновления.
Рассмотрим вариант, когда база слишком велика для конвертации в файловую. В этом случае воспользуемся «Функциями для технического специалиста» и найдем обработку Результаты обновления программы.
СтоимостьОС.Подведем итоги: Ошибка при переходе на КА 2.5 чаще всего вызвана недоработкой в коде типовой конфигурации, которая проявляется на определенных наборах данных в SQL-версии. Наиболее надежным способом «проскочить» этот этап остается временная выгрузка базы в файловый режим или установка последних официальных патчей от разработчика.