Рассмотрим ситуацию, с которой сталкиваются разработчики при работе с регистрами сведений или динамическими списками: при попытке открыть форму или прокрутить список записей платформа внезапно завершает работу с критической ошибкой «не найдено завершающего символа после кавычки». Эта проблема осложняется тем, что стандартный отладчик часто не может остановиться на строке с ошибкой, а в журнале регистрации не фиксируется никаких подробностей. Разберем по шагам, почему это происходит и как найти «виновника» в программном коде.
Ошибка «не найдено завершающего символа после кавычки» — это не просто синтаксическая ошибка в модуле, которую легко обнаружит проверка конфигурации. Это ошибка лексического анализатора (парсера) платформы. Она возникает в тот момент, когда встроенная функция 1С пытается разобрать строку со специальным форматированием (например, форматную строку или параметры вывода чисел) и наталкивается на символ, который нарушает ожидаемую структуру.
Проанализируем ситуацию: чаще всего эта ошибка проявляется в обработчиках событий интерфейса, таких как ПриВыводеСтроки или ПриПолученииДанных в обычных формах. Поскольку эти события вызываются в потоке отрисовки интерфейса (UI-thread), критический сбой в них приводит к мгновенному закрытию приложения до того, как отладчик успеет перехватить управление. Именно поэтому стандартная точка останова может не сработать.
Как показывает практика и разбор реальных кейсов (например, в конфигурациях семейства «Альфа-Авто»), основной причиной данной ошибки является некорректное использование одинарных кавычек внутри параметров функции ЧислоПрописью(). Платформа ожидает строго определенный формат третьего параметра этой функции.
Рассмотрим пример проблемного кода, который может годами находиться в базе и «выстрелить» только при появлении определенных данных:
// Пример некорректного кода, вызывающего падение платформы
Периодичность = "Каждые " + ЧислоПрописью(Часов, "НД = Ложь", "' час', часа, часов, м, , , , , 0");
В данном примере внутри строки параметров используются одинарные кавычки ' час'. Согласно документации 1С, форматная строка для прописи должна содержать компоненты, разделенные запятыми. Использование одинарных кавычек для выделения пояснительного текста внутри этой строки не предусмотрено внутренним парсером. Платформа воспринимает одинарную кавычку как начало блока, не находит парную закрывающую кавычку и аварийно завершает работу.
Для того чтобы исправить ошибку и предотвратить падение системы, необходимо привести форматную строку к стандартному виду. Если нам нужно добавить пояснительные слова, они должны быть либо частью строковой константы вне функции, либо оформлены согласно правилам конструктора форматной строки (если применимо).
Исправим приведенный выше пример кода:
// Вариант 1: Удаление лишних кавычек внутри параметров
Периодичность = "Каждые " + ЧислоПрописью(Часов, "НД = Ложь", "час, часа, часов, м, , , , , 0");
// Вариант 2: Более надежное формирование строки
СтрокаЧасов = ЧислоПрописью(Часов, "НД = Ложь", "час, часа, часов, м, , , , , 0");
Периодичность = СтрШаблон("Каждые %1", СокрЛП(СтрокаЧасов));
Обратите внимание, что в правильном варианте мы убрали одинарные кавычки вокруг слова час. Теперь парсер платформы корректно обработает строку параметров, и ошибка исчезнет.
Если в вашей конфигурации сотни модулей и вы не знаете, где именно вызывается злополучная функция, проанализируем стратегию поиска:
EXCP (исключения). В логах ТЖ непосредственно перед завершением работы процесса будет зафиксирована ошибка и, что самое важное, контекст выполнения. В контексте будет указан модуль и номер строки.ЧислоПрописью. Внимательно проверьте каждый найденный фрагмент на наличие одинарных кавычек внутри параметров. Особое внимание уделите участкам кода, отвечающим за формирование напоминаний, расписаний или вывод итогов в печатные формы.Важно отметить, что данная проблема особенно остро проявлялась на релизах платформы линейки 8.3.11 (например, 8.3.11.2867). В более современных версиях платформы (8.3.20 и выше) разработчики 1С доработали механизмы обработки исключений. Теперь вместо «глухого» падения приложения система чаще выдает штатное окно об ошибке с описанием «Неверные параметры», что позволяет программисту гораздо быстрее найти проблемное место через стек вызовов.
Тем не менее, если вы сопровождаете старые конфигурации на обычных формах, знание этого нюанса с кавычками сэкономит вам часы отладки. Помните: внутри форматных строк 1С одинарные кавычки недопустимы, если это прямо не предусмотрено спецификацией конкретного формата (как в случае с форматом даты, но там они используются иначе).
Мы проанализировали одну из самых коварных ошибок платформы 1С. Подведем итог: если ваша база «вылетает» с сообщением о ненайденном завершающем символе кавычки, первым делом проверяйте функции ЧислоПрописью и Формат на наличие лишних символов в параметрах. Чистота синтаксиса в этих функциях — залог стабильной работы интерфейса вашей системы.