Сбой встроенного языка в 1С:Предприятии: от текста сообщения до исправленной строки кода

· 11 мин

Содержание

Ошибку встроенного языка в 1С исправляют по адресу из самого сообщения: в фигурных скобках платформа пишет модуль и номер строки, например {Документ.РеализацияТоваровУслуг.МодульОбъекта(245)}. Откройте этот модуль в Конфигураторе, перейдите на строку 245 и посмотрите, какой объект или реквизит там не существует, не заполнен или недоступен пользователю. Если в конфигурацию никто не вносил правок, причину почти всегда находят вне кода: в правах, расширении, внешней обработке или кэше.

Путей к решению несколько, и выбирают их по ситуации. Ошибка у одного пользователя — сначала права и кэш. У всех после обновления — расширения и доработки. Только в одном документе — данные этого документа. Ошибка при запуске базы — режим совместимости, версия платформы и целостность информационной базы.

Откуда берётся сбой встроенного языка в платформе 1С

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

Выделяют два больших класса таких сбоев:

  • 🧩 Ошибки компиляции. Модуль вообще не собирается: опечатка, лишняя скобка, обращение к процедуре, которой нет. Сообщение содержит слова Ошибка компиляции модуля или Процедура или функция с указанным именем не определена.
  • ⚙️ Ошибки времени выполнения. Код собран, но падает на конкретных данных или в конкретных условиях.

Типичные тексты ошибок времени выполнения:

Текст сообщенияЧто обычно означает
Поле объекта не обнаружено (Склад)В коде обращение к реквизиту, которого нет у объекта (удалён при обновлении или есть только в расширении)
Значение не является значением объектного типаПеременная пустая (Неопределено), а у неё запрашивают реквизит
Метод объекта не обнаруженВызов метода у объекта другого типа
Деление на 0Пустое количество или сумма в данных
Переменная не определенаОпечатка в имени или переменная объявлена в другом контексте (клиент/сервер)
Нарушение прав доступа!У пользователя нет права на чтение или запись нужного объекта
Ошибка при вызове метода контекста (Записать)Запись объекта прервана, точная причина — в строках ниже

Читайте сообщение целиком, до последней строки. Первая строка часто общая, а настоящая причина стоит в самом низу, после цепочки вызовов.

Как прочитать адрес ошибки

Строка вида {ОбщийМодуль.ПроведениеСервер.Модуль(1834)} разбирается так:

  1. ОбщийМодуль — тип объекта метаданных.
  2. ПроведениеСервер — его имя в дереве конфигурации.
  3. Модуль — какой именно модуль (бывает МодульОбъекта, МодульМенеджера, Форма.ФормаДокумента.Форма).
  4. 1834 — номер строки.

Если адресов несколько, это стек вызовов. Верхний адрес — где упало, нижние — откуда туда пришли. Для внешней обработки адрес начинается с ВнешняяОбработка., для расширения — с имени объекта, но строка относится к модулю расширения.

💡 В окне ошибки 8.3 есть ссылка на подробный текст и формирование отчёта об ошибке. Скопируйте полный текст до того, как закроете окно: потом его придётся искать в журнале.

Журнал регистрации: где увидеть полный текст ошибки

Пользователь закрыл окно и пересказал своими словами — ситуация обычная. Полный текст с адресом модуля сохраняется в журнале регистрации.

Как открыть журнал:

  • в режиме Предприятия (БП 3.0, ЗУП 3.1, УТ 11): Администрирование → Обслуживание → Журнал регистрации;
  • в любой конфигурации через Все функции → Стандартные → Журнал регистрации (команду «Все функции» включают в параметрах главного меню);
  • в Конфигураторе: Администрирование → Журнал регистрации.

Как отфильтровать нужное:

  1. Нажмите кнопку отбора и задайте интервал: день и примерное время сбоя.
  2. В поле «Уровень» оставьте только «Ошибка».
  3. Укажите пользователя, у которого возник сбой.
  4. Откройте найденную запись двойным щелчком: в поле комментария будет полный текст с модулем и строкой.

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

Если журнал пуст за нужный период, проверьте настройку уровня регистрации: в Конфигураторе Администрирование → Настройка журнала регистрации. При уровне «Не регистрировать» записей не будет совсем.

Для серверной базы, где ошибка не попадает в журнал или возникает в фоновых заданиях, подключают технологический журнал. Он настраивается файлом logcfg.xml в каталоге conf платформы. Событие исключений называется EXCP. Технологический журнал быстро растёт, поэтому включайте его на время диагностики и задавайте срок хранения.

Права доступа и роли: когда код ни при чём

Если ошибка возникает у одного сотрудника, а у администратора под тем же документом всё работает, начинайте с ролей. Код в модуле может быть исправным, но падать на строке, где читается объект, недоступный пользователю.

Признаки «прав», а не кода:

  • 🔒 текст содержит Нарушение прав доступа! или Недостаточно прав для;
  • 👤 под полными правами ошибка не воспроизводится;
  • 🆕 пользователя недавно завели или поменяли ему профиль.

Что проверить в типовых конфигурациях на БСП:

  1. Откройте Администрирование → Настройки пользователей и прав → Пользователи.
  2. В карточке пользователя нажмите «Права доступа » и посмотрите, какие группы доступа и профили назначены.
  3. Сравните с коллегой, у которого ошибки нет. Разница в профилях обычно сразу видна.
  4. Если используются ограничения на уровне записей (по организациям, складам), проверьте, есть ли у пользователя доступ к организации документа.

Для быстрой проверки создайте тестового пользователя с тем же профилем и попробуйте повторить действие. Так вы не трогаете рабочую учётную запись.

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

Параметры запуска, версия платформы и режим совместимости

Когда ошибка появляется сразу при входе, ещё до открытия документов, виноват чаще всего запуск, а не прикладной код.

Режим совместимости конфигурации

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

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

Версия платформы для конкретной базы

В окне выбора баз нажмите «Изменить» у нужной базы и пройдите до последнего шага. Там поле «Версия 1С:Предприятия». Если в нём жёстко прописана старая версия, а на компьютере стоит и новая, база может открываться не той платформой. Оставьте поле пустым или укажите нужную версию.

Кэш клиента

Сбой иногда «живёт» в устаревшем кэше: в базе код уже исправлен, а клиент держит старую копию. Варианты очистки:

  • запустить 1С с параметром /ClearCache: в окне выбора баз «Изменить» → последний шаг → поле «Дополнительные параметры запуска»;
  • закрыть все сеансы 1С на компьютере и удалить содержимое каталогов кэша пользователя в %APPDATA%\1C\1cv8 и %LOCALAPPDATA%\1C\1cv8 (папки с длинными именами-идентификаторами).

Перед ручным удалением папок кэша закройте все окна 1С на этом компьютере: открытые сеансы оборвутся с потерей несохранённых данных. Файл ibases.v8i со списком баз не трогайте, иначе список придётся собирать заново.

Толстый и тонкий клиент

Часть старых доработок и внешних обработок писалась под обычные формы и толстый клиент. В тонком клиенте такой код падает с ошибками вида Переменная не определена или вызов недоступен на клиенте. Если ошибка возникает только при одном режиме запуска, проверьте, под какой клиент сделана обработка, и попросите разработчика адаптировать её под управляемые формы.

Диагностика: выберите симптом

Поиск ошибки в коде конфигурации: отладчик и проверка модулей

Если права, кэш и запуск в порядке, остаётся код. Здесь нужен доступ к Конфигуратору и понимание, что в нём менять.

Шаг 1. Синтаксическая проверка

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

Шаг 2. Остановка по ошибке в отладчике

  1. В Конфигураторе запустите отладку: Отладка → Начать отладку.
  2. Включите Отладка → Остановка по ошибке и отметьте остановку на любой ошибке.
  3. Повторите действие пользователя в открывшемся окне Предприятия.
  4. Отладчик остановится на строке сбоя. Наведите курсор на переменные или откройте окно «Вычислить выражение» (Shift+F9) и посмотрите их значения.

Для серверных модулей в клиент-серверной базе отладка на сервере должна быть разрешена: службу агента сервера запускают с ключом -debug. Изменение параметров службы требует её перезапуска, а это обрывает все сеансы, поэтому делается вне рабочего времени.

Шаг 3. Исправление типичных конструкций

Самая частая ошибка времени выполнения — обращение к реквизиту пустой ссылки. Защитная проверка выглядит так:

Если ЗначениеЗаполнено(Документ.Склад) Тогда
    Ответственный = Документ.Склад.ОтветственноеЛицо;
Иначе
    ВызватьИсключение СтрШаблон(
        НСтр("ru = 'В документе %1 не заполнен склад'"),
        Документ.Номер);
КонецЕсли;

Пользователь вместо Значение не является значением объектного типа получит понятное сообщение, что нужно заполнить.

Для деления на ноль — проверка знаменателя:

Цена = ?(Количество = 0, 0, Сумма / Количество);

Расширения и внешние обработки

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

Как проверить:

  1. В БП 3.0 и ЗУП 3.1 откройте Администрирование → Печатные формы, отчеты и обработки → Расширения. Универсальный путь — Все функции → Стандартные → Управление расширениями конфигурации.
  2. Снимите флажок «Активно» у одного расширения и перезапустите сеанс.
  3. Повторите действие. Если ошибка пропала — виновник найден, передайте его разработчику для адаптации к новому релизу.
  4. Внешние обработки и печатные формы проверьте в разделе дополнительных отчётов и обработок: временно отключите подозрительную.

Сохраните расширение в файл .cfe до любых правок. Если адаптация пойдёт не так, его можно будет вернуть за минуту.

Восстановление работы информационной базы

Бывает, что код, права и запуск в порядке, а ошибки продолжаются на разных объектах: битые ссылки вида <Объект не найден>, падения при открытии списков. Это признак повреждённых данных, а не встроенного языка как такового.

Перед любым из шагов ниже сделайте резервную копию базы — выгрузку .dt через Конфигуратор или копию каталога файловой базы при закрытых сеансах.

СпособКогда применятьРиски
Тестирование и исправление в КонфигуратореОшибки на разных объектах, битые ссылкиНужен монопольный доступ; режим «удалять ссылки» может стереть данные
Утилита chdbfl.exeФайловая база не открывается или падает при входеТолько для файловой базы, база должна быть закрыта
Откат на резервную копиюСбой начался после известного события, свежая копия естьПотеря данных, введённых после копии
Средства СУБДСерверная база, ошибки на уровне таблицТолько силами администратора СУБД

Тестирование и исправление

  1. Завершите сеансы пользователей и предупредите их заранее: для режима нужен монопольный доступ.
  2. В Конфигураторе откройте Администрирование → Тестирование и исправление.
  3. Для начала выберите только проверку логической и ссылочной целостности без исправления — посмотрите масштаб.
  4. Для битых ссылок выбирайте «Создавать объекты» вместо «Удалять ссылки на объекты»: так потом можно найти и перезаполнить пустышки.
  5. После исправления запустите проверку повторно.

Утилита для файловой базы

chdbfl.exe лежит в каталоге bin установленной платформы. Укажите в ней файл 1Cv8.1CD, сначала запустите проверку без флажка исправления. Если ошибки найдены, сделайте копию файла и только потом повторите с исправлением.

Если ничего не помогло

Остались случаи, когда причина не находится стандартными приёмами:

  • 🗂️ Ошибка только на одном компьютере. Переустановите платформу той же версии, проверьте антивирус: он иногда блокирует файлы кэша и временные каталоги.
  • 🖥️ Ошибка только в серверной базе. Сравните поведение на копии базы в файловом варианте. Если в файловой всё работает, ищите в настройках кластера и прав службы сервера.
  • 📦 Ошибка в типовом коде без доработок. Проверьте, нет ли более нового релиза: в списке исправленных ошибок часто встречается именно ваш текст. Если релиз последний — обратитесь к партнёру, который обслуживает вашу базу, с полным текстом ошибки и шагами воспроизведения.

Что передать разработчику, чтобы он не тратил время на переписку:

  1. Полный текст ошибки со всеми адресами модулей.
  2. Точную последовательность действий, после которой она появляется.
  3. Под каким пользователем и в каком клиенте (тонкий, веб, толстый).
  4. Версию платформы и релиз конфигурации из окна «О программе».
  5. Список активных расширений и подключённых внешних обработок.

Частые вопросы об ошибках встроенного языка

Можно ли исправить ошибку встроенного языка без программиста?
Да, если причина в правах, кэше, версии платформы или расширении: это настраивается в режиме Предприятия и в окне запуска. Правка самого кода в модуле требует навыков разработки.
Почему ошибка появилась, хотя в базе ничего не меняли?
Меняться могли окружение и данные: обновилась платформа, установили новую внешнюю обработку, в документ попал пустой элемент справочника. Журнал регистрации покажет, что происходило перед первым сбоем.
Опасно ли снимать конфигурацию с поддержки, чтобы исправить строку кода?
Последующие обновления станут сложнее: изменённые объекты придётся сравнивать и объединять вручную. Для типовых конфигураций правку лучше делать в расширении.
Что значит адрес модуля с пометкой ВнешняяОбработка?
Ошибка произошла в файле внешней обработки или печатной формы, а не в конфигурации. Исправлять нужно этот файл, а не базу.
Помогает ли переустановка 1С от ошибок встроенного языка?
Только если повреждены файлы платформы на конкретном компьютере. Ошибки в коде конфигурации или данных переустановка не убирает.