При работе в 1С:Предприятии разработчики и системные администраторы нередко сталкиваются с ситуацией: при открытии журнала документов или формы списка у одного конкретного пользователя появляется окно с критической ошибкой «... процедура или функция с указанным именем не определена». При этом у всех остальных пользователей с абсолютно аналогичными правами и на том же сервере форма открывается штатно. Более того, имя отсутствующей функции может относиться к кнопке на форме (команде), которая вообще не должна вызываться в событиях ПриОткрытии или ПриСозданииНаСервере.
Разберем природу такого поведения платформы, проанализируем основные причины сбоя и рассмотрим пошаговые способы его устранения.
Причины возникновения ошибки у единичного пользователя
Проанализируем ситуацию: почему платформа пытается вызвать обработчик команды еще до того, как пользователь нажал кнопку, и почему это происходит избирательно?
Повреждение или рассинхронизация локального кэша конфигурации: Платформа 1С кэширует скомпилированные модули и метаданные на клиенте (в профиле пользователя операционной системы). Если при обновлении конфигурации или сбое сеанса кэш повредился, платформа может использовать устаревшую структуру формы, ссылаясь на старые адреса процедур.
Сохраненные пользовательские настройки формы: 1С автоматически сохраняет индивидуальные настройки интерфейса каждого пользователя (расположение кнопок, видимость колонок, условное оформление динамических списков) в системных таблицах ХранилищеСистемныхНастроек и ХранилищеПользовательскихНастроекДинамическихСписков. Если в конфигурации была изменена команда или переименован метод, платформа при открытии формы пытается восстановить сохраненное пользовательское состояние элементов и их связей, что приводит к попытке обращения к несуществующей функции на этапе инициализации.
Следствие динамического обновления («демонического обновления»): При обновлении конфигурации в режиме предприятия без перезапуска сеансов отдельные рабочие процессы или сеансы могут сохранять старые версии модулей, в то время как структура данных уже обновилась.
Различие в режимах запуска: Если у конкретного пользователя в свойствах учетной записи или параметрах ярлыка принудительно задан другой режим работы (например, толстый клиент вместо тонкого), то методы с директивами компиляции &НаКлиенте или модули без флага доступности в соответствующем клиенте окажутся недоступны.
Способ 1. Очистка локального кэша пользователя
Самый распространенный и быстрый метод исправления — удаление кэшированных файлов платформы в профиле проблемного пользователя.
Завершим все активные сеансы работы 1С у пользователя.
Перейдем в каталоги временных файлов операционной системы Windows:
%USERPROFILE%\AppData\Local\1C\1cv8\
%USERPROFILE%\AppData\Roaming\1C\1cv8\
Найдем и удалим папки с длинными шестнадцатеричными буквенно-цифровыми именами (GUID), например: 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d. Папки с понятными именами (например, tmplts) удалять не требуется.
Повторно запустим 1С и проверим открытие формы.
Способ 2. Передобавление информационной базы в список запуска
Чтобы не искать папки кэша вручную в профиле пользователя, применим простой административный прием:
В окне запуска 1С выделим проблемную базу и нажмем кнопку «Удалить» (файлы самой базы при этом не затрагиваются).
Нажмем кнопку «Добавить» -> «Добавление в список существующей информационной базы».
Укажем прежнее наименование базы и путь к каталогу (для файловой) или параметры кластера серверов (для клиент-серверной).
В результате платформа создаст для базы новый уникальный внутренний идентификатор (GUID) в файле ibses.dat, что автоматически изолирует сеанс от старого поврежденного кэша.
Способ 3. Сброс пользовательских настроек формы
Если очистка кэша файлов не помогла, причиной являются сохраненные настройки формы внутри самой базы данных. Сбросим их несколькими путями.
Через пользовательский интерфейс:
Если форма открывается с ошибкой, но не закрывает сеанс аварийно, в меню формы нажмем Еще (Все действия) -> Изменить форму...
В открывшемся окне настройки нажмем Еще -> Установить стандартные настройки и применим изменения.
Если используется типовая конфигурация на БСП (Библиотеке Стандартных Подсистем), перейдем под учетной записью администратора в раздел: Администрирование -> Настройки пользователей и прав -> Очистка настроек, выберем нужного пользователя и очистим настройки для проблемного журнала или документа.
Программный сброс через ХранилищеСистемныхНастроек:
Разберем программное удаление сохраненных данных формы с помощью встроенного языка 1С. Создадим внешнюю обработку и выполним следующий код:
Способ 4. Устранение последствий динамического обновления
Если ошибка возникла после внесения изменений в конфигурацию без монопольного захвата базы (динамическое обновление), выполним следующие шаги:
Откроем Конфигуратор.
Перейдем в модуль, где объявлена вызываемая функция или процедура, добавим любой пустой комментарий (например, // фиксация изменений) для изменения контрольной суммы модуля.
Обновим конфигурацию базы данных штатным образом (клавиша F7) при отсутствии активных сеансов пользователей.
Для файловых баз данных дополнительно выполним процедуру Тестирование и исправление в меню Администрирование с включенными опциями Проверка логической целостности и Реструктуризация таблиц информационной базы.