Как исправить ошибку «(13,3) Синтаксическая ошибка Конец» при открытии формы списка в 1С?

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

При разработке новых объектов в системе 1С:Предприятие 8.3 программисты иногда сталкиваются с крайне специфической ошибкой: при попытке открыть форму списка только что созданного документа система выдает сообщение «(13,3) Синтаксическая ошибка Конец». Ситуация осложняется тем, что ошибка может возникать даже в том случае, если сама форма списка еще не создана в конфигураторе и должна генерироваться платформой автоматически.

В данной статье мы подробно разберем причины возникновения этой проблемы, методы её диагностики с помощью встроенного отладчика и эффективные способы исправления.

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

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

Проанализируем основные факторы, провоцирующие этот сбой:

  1. Использование зарезервированных слов: Если в именах реквизитов документа или его табличных частей используются слова, входящие в синтаксис языка запросов (например, Конец, Выбрать, Тогда, Группировка), автоматический генератор может интерпретировать их не как имена полей, а как операторы, что ломает структуру запроса.
  2. Повреждение метаданных: При частом копировании объектов или сбоях в процессе обновления конфигурации внутренние идентификаторы таблиц могут быть нарушены.
  3. Конфликты в табличных частях: Ошибка часто локализуется именно в структуре табличных частей. Если автоматический запрос пытается соединить основную таблицу документа с его табличными частями для отображения итогов или связанных данных, любая ошибка в структуре этих ТЧ приведет к фатальной ошибке формы.
  4. Функциональные опции: Если реквизиты объекта включены в функциональные опции, которые в текущий момент выключены, платформа исключает их из запроса. В редких случаях это приводит к появлению «лишних» запятых или пустых блоков в итоговом тексте запроса.

Шаг 1. Диагностика через отладчик

Чтобы понять, что именно не нравится платформе, нам необходимо увидеть текст запроса, который она пытается выполнить. Даже если форма списка не создана «физически» в дереве метаданных, она генерируется в оперативной памяти в момент вызова.

Рассмотрим, как поймать текст запроса. Для этого нам всё же придется создать форму списка в конфигураторе (если она еще не создана) и назначить её основной. Разберем алгоритм действий:

  1. Откроем модуль созданной формы списка.
  2. В обработчике события ПриСозданииНаСервере установим точку старта отладки.
  3. Запустим сеанс в режиме «1С:Предприятие» и попытаемся открыть список.

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

В окне «Вычислить выражение» (Shift+F9) введем следующий код для анализа:


// Получаем исполняемую схему компоновки
Схема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();

// Получаем настройки
Настройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();

Проанализируем свойство Схема.Запросы[0].Текст. Именно здесь мы увидим тот самый «битый» запрос. Обратите внимание на 13-ю строку и 3-й символ (согласно координатам из ошибки) — там вы наверняка обнаружите оборванное слово или некорректно вставленный оператор Конец.

Шаг 2. Переход на произвольный запрос

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

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

Попробуем нажать кнопку «Конструктор запроса». Если конструктор открывается и корректно отображает таблицы, значит, проблема была именно в автоматическом механизме. Если же конструктор выдает ту же ошибку при попытке выбрать поля, значит, проблема в самих метаданных.

Шаг 3. Выявление проблемного реквизита

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

  1. Проверка имен: Убедимся, что ни одна табличная часть и ни один реквизит не называются Конец, Тогда, Если.
  2. Метод исключения: Попробуем временно удалить табличные части документа одну за другой (предварительно сделав бэкап или работая в копии!). Если после удаления конкретной ТЧ форма списка начала открываться — мы нашли источник проблемы.
  3. Очистка кэша: Не стоит забывать, что платформа 8.3.8 (и другие версии) может кэшировать структуру объектов. Если вы изменили имя реквизита, а ошибка сохраняется, попробуйте запустить базу с параметром /ClearCache или вручную очистить содержимое папок в %AppData%\1C\1Cv8.

Шаг 4. Исправление через Тестирование и Исправление

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

Перейдем в меню Администрирование — Тестирование и исправление... и выберем следующие пункты:

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

Резюме решения

Подводя итог, можно сказать, что ошибка «(13,3) Синтаксическая ошибка Конец» — это сигнал о невозможности платформы построить корректный внутренний запрос к данным документа. Для решения проблемы:

← На главную