Как исправить ошибку «Тип не определен (ЗаписьТекста)» при запуске 1С:Предприятия?

Системный администратор 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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


{ОбщийМодуль.ОбменДаннымиСервер.Модуль(3975,23)}: Тип не определен (ЗаписьТекста)
    ЗаписьТекста = Новый <<?>>ЗаписьТекста(ПолноеИмяВременногоФайла);

При этом очистка локального кэша на клиентских рабочих станциях (удаление каталогов в AppData) не дает положительного результата. Рассмотрим подробнее, почему синтаксический анализатор платформы перестает распознавать стандартный встроенный тип платформы ЗаписьТекста, и разберем по шагам действенные методы устранения этой неполадки.

Причины возникновения сбоя

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

  1. Сбой и рассинхронизация серверного кэша. Платформа 1С кэширует скомпилированные модули и метаданные на сервере в каталоге кластера srvinfo (в подкаталогах сеансовых данных snccntx*). При повреждении этих данных процесс сервера теряет сопоставление типов в адресном пространстве.
  2. Последствия динамического обновления конфигурации. Если накануне выполнялось обновление конфигурации базы данных без монопольного режима («дежурное» или «динамическое» обновление), в памяти процессов кластера может возникнуть рассогласование версий структур метаданных. В результате при очередной компиляции общих модулей с признаком Сервер платформа выдает ошибку о неопределенном типе даже для конструкций вроде ЗаписьТекста, ТаблицаЗначений или Запрос.
  3. Деградация или утечка памяти в рабочих процессах rphost. При длительной работе службы без регламентного перезапуска рабочие процессы накапливают фрагментацию памяти, что приводит к внутренним сбоям в работе синтаксического анализатора.

Способ 1. Быстрый перезапуск службы агента сервера 1С

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

  1. Предупредим пользователей и завершим все активные соединения в консоли администрирования кластера серверов или через оснастку управления службами.
  2. Откроем оснастку Службы (services.msc) на сервере приложений.
  3. Найдем службу Агент сервера 1С:Предприятия 8.3 (имя службы по умолчанию 1C:Enterprise 8.3 Server Agent или ragent).
  4. Нажмем правой кнопкой мыши и выберем пункт Перезапустить.
  5. Убедимся в диспетчере задач, что завершились и запустились заново исполняемые файлы ragent.exe, rmngr.exe и rphost.exe.

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

Способ 2. Ручная очистка серверного кэша кластера

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

  1. Остановим службу Агент сервера 1С:Предприятия 8.3 через консоль служб.
  2. Откроем диспетчер задач и обязательно проверим, что в системе не осталось зависших процессов rphost.exe. Если они присутствуют — снимем их принудительно.
  3. Перейдем в каталог данных кластера серверов 1С. По умолчанию путь выглядит следующим образом: C:\Program Files\1cv8\srvinfo\reg_1541\
  4. Найдем и удалим каталоги, имена которых начинаются с префикса snccntx (например, snccntx1ce00...). В них хранятся временные сеансовые данные и серверный кэш модулей.
  5. Важно: ни в коем случае не удаляйте конфигурационные файлы кластера с расширением .lst (такие как 1Cv8Clst.lst, 1cv8ws.lst), иначе база данных пропадет из консоли администрирования серверов.
  6. Запустим службу Агент сервера 1С:Предприятия 8.3.

Способ 3. Сброс кэша структуры конфигурации через Конфигуратор

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

  1. Запустим базу данных в режиме Конфигуратор монопольно (завершив предварительно сеансы пользователей).
  2. Откроем дерево метаданных и перейдем в любой общий модуль или модуль приложения.
  3. Внесем любое незначительное изменение, которое не влияет на исполнение кода (например, добавим символ пробела или пустой комментарий // сброс кэша).
  4. Выполним команду главного меню Конфигурация -> Обновить конфигурацию базы данных (или нажмем клавишу F7).
  5. Дождемся завершения реструктуризации и применения изменений, после чего запустим пользовательский сеанс в режиме 1С:Предприятие для проверки.

Превентивные меры для предотвращения проблемы

Чтобы исключить внезапное появление ошибки Тип не определен в будущем, настроим правильную эксплуатацию сервера 1С:

  1. Отказ от динамических обновлений. Любые изменения конфигурации необходимо накатывать исключительно в монопольном режиме с предварительным завершением клиентских сеансов.
  2. Настройка автоперезапуска рабочих процессов кластера. В свойствах кластера серверов в утилите администрирования рекомендуется задать параметр Интервал перезапуска рабочих процессов, равный 86400 секунд (один раз в сутки). Это позволит серверу автоматически и бесшовно обновлять рабочие процессы rphost в фоновом режиме, исключая деградацию памяти.
  3. Контроль выделения оперативной памяти. Настроим свойства кластера Допустимый объем памяти и Интервал превышения допустимого объема памяти, чтобы кластер серверов самостоятельно завершал процессы с критическими утечками памяти.
← На главную