При разработке новых объектов в системе 1С:Предприятие 8.3 программисты иногда сталкиваются с крайне специфической ошибкой: при попытке открыть форму списка только что созданного документа система выдает сообщение «(13,3) Синтаксическая ошибка Конец». Ситуация осложняется тем, что ошибка может возникать даже в том случае, если сама форма списка еще не создана в конфигураторе и должна генерироваться платформой автоматически.
В данной статье мы подробно разберем причины возникновения этой проблемы, методы её диагностики с помощью встроенного отладчика и эффективные способы исправления.
Ошибка с текстом «Синтаксическая ошибка Конец» чаще всего указывает на то, что механизм автоматической генерации текста запроса для ДинамическогоСписка не смог корректно собрать SQL-подобный запрос к базе данных. Платформа «спотыкается» на определенном месте, из-за чего текст запроса обрывается или становится нечитаемым для парсера.
Проанализируем основные факторы, провоцирующие этот сбой:
Конец, Выбрать, Тогда, Группировка), автоматический генератор может интерпретировать их не как имена полей, а как операторы, что ломает структуру запроса.Чтобы понять, что именно не нравится платформе, нам необходимо увидеть текст запроса, который она пытается выполнить. Даже если форма списка не создана «физически» в дереве метаданных, она генерируется в оперативной памяти в момент вызова.
Рассмотрим, как поймать текст запроса. Для этого нам всё же придется создать форму списка в конфигураторе (если она еще не создана) и назначить её основной. Разберем алгоритм действий:
ПриСозданииНаСервере установим точку старта отладки.Когда отладчик остановится на точке, нам нужно вычислить значение свойств динамического списка (по умолчанию он называется Список). Воспользуемся советом опытных разработчиков и обратимся к схеме компоновки данных, на которой строится список.
В окне «Вычислить выражение» (Shift+F9) введем следующий код для анализа:
// Получаем исполняемую схему компоновки
Схема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
// Получаем настройки
Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
Проанализируем свойство Схема.Запросы[0].Текст. Именно здесь мы увидим тот самый «битый» запрос. Обратите внимание на 13-ю строку и 3-й символ (согласно координатам из ошибки) — там вы наверняка обнаружите оборванное слово или некорректно вставленный оператор Конец.
Если автоматическая генерация не справляется, наиболее надежным решением будет взять управление запросом в свои руки. Посмотрим, как это сделать:
Список с типом ДинамическийСписок).Попробуем нажать кнопку «Конструктор запроса». Если конструктор открывается и корректно отображает таблицы, значит, проблема была именно в автоматическом механизме. Если же конструктор выдает ту же ошибку при попытке выбрать поля, значит, проблема в самих метаданных.
Проанализируем ситуацию, когда даже произвольный запрос не помогает. Как выяснилось в ходе обсуждения на форуме, корень зла часто кроется в табличных частях документа. Выполним следующие действия для поиска виновника:
Конец, Тогда, Если./ClearCache или вручную очистить содержимое папок в %AppData%\1C\1Cv8.В некоторых случаях ошибка (13,3) свидетельствует о логической рассогласованности базы метаданных. Разберем, какие действия в конфигураторе помогут восстановить работу:
Перейдем в меню Администрирование — Тестирование и исправление... и выберем следующие пункты:
После завершения процедуры платформа может исправить скрытые дефекты в таблицах метаданных, которые мешали генератору запросов правильно обращаться к полям нового документа.
Подводя итог, можно сказать, что ошибка «(13,3) Синтаксическая ошибка Конец» — это сигнал о невозможности платформы построить корректный внутренний запрос к данным документа. Для решения проблемы: