Часто возникает ситуация, когда внешняя обработка в 1С после первого успешного запуска начинает выдавать ошибку при последующих открытиях. Как правило, первая мысль — виноваты сохраненные пользовательские настройки, которые "запомнились" в некорректном состоянии. Задача сводится к тому, чтобы вернуть обработку в ее первоначальный вид. Рассмотрим, как это сделать, а также проанализируем ситуацию, когда проблема кроется глубже, чем кажется на первый взгляд.
В нашем примере пользователь столкнулся с ошибкой после работы с типовой обработкой ЗагрузкаДанныхИзТабличногоДокумента.epf в конфигурации «Зарплата и Управление Персоналом 3.1». Стандартные методы очистки не помогали, что и привело к поиску решения.
Прежде чем приступать к удалению настроек, важно убедиться, что причина ошибки именно в них. В обсуждаемой ситуации ключевой проблемой оказалась попытка использовать старую обработку, написанную для обычных форм (платформа 8.2), в современной конфигурации, работающей в режиме управляемого приложения (ЗУП 3.1).
Это фундаментальная несовместимость. Старая обработка пытается выполнить код, который некорректно работает в управляемом режиме. Например, она может пытаться интерактивно создать форму документа, для которого в новой конфигурации такая операция запрещена или требует предварительного заполнения реквизитов, что и вызывает ошибку. Как было отмечено, в ЗУП 3.1 документ ДанныеДляРасчетаЗарплаты нельзя создать интерактивно без указания ВидДокумента.
Вывод: Если вы работаете в современной конфигурации (ERP, УТ 11, БП 3.0, ЗУП 3.1 и т.д.), убедитесь, что используемая вами внешняя обработка предназначена для управляемых форм. В противном случае никакая очистка настроек не поможет. Наиболее правильное решение — найти актуальную версию обработки для управляемого приложения. При разработке новых решений на базе БСП можно использовать шаблон дополнительной обработки с разделением хранения настроек.
Если же вы уверены, что обработка совместима, а проблема именно в сохраненных параметрах, перейдем к методам их очистки.
Начнем с методов, не требующих открытия конфигуратора и написания кода. Часто они помогают решить проблему.
Полная очистка кэша 1С. В локальном кэше на компьютере пользователя могут "застревать" некорректные данные форм и настроек. Это самый универсальный и безопасный способ.
%APPDATA%\1C\1cv8, нажмите Enter. Полностью удалите содержимое этой папки (или папку с идентификатором вашей базы, если знаете его).%LOCALAPPDATA%\1C\1cv8 и также удалите содержимое.Изменение идентификаторов обработки. Система привязывает настройки к внутреннему имени объекта и идентификатору его формы. Если их изменить, 1С будет считать обработку новой и не найдет для нее старых настроек.
Стандартная очистка настроек. В режиме "Предприятие" есть стандартный инструмент: Администрирование - Настройки пользователей и прав - Очистка настроек. Здесь можно выбрать пользователя и типы настроек для удаления. Однако этот способ может не сработать, если разработчик обработки использовал нестандартный механизм их сохранения.
Если простые методы не помогли, можно прибегнуть к программным решениям. Их можно выполнить через универсальную обработку "Консоль кода" или создать свою временную обработку. Для запуска подобных скриптов подойдёт консоль кода для управляемых форм.
Этот метод удаляет абсолютно все сохраненные настройки для указанного пользователя: положения окон, отборы в списках, варианты отчетов и т.д. Используйте его с осторожностью.
// Получаем текущего пользователя
Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
// Удаляем все его настройки
ОчиститьНастройкиПользователя(Пользователь);
Это самый точный способ, который позволяет удалить конкретную настройку, не затрагивая остальные. Сложность заключается в том, чтобы правильно определить ключ, под которым настройка сохранена. Обычно он имеет структуру "ТипОбъекта.ИмяОбъекта.ИмяФормы/ИмяСохраняемогоПараметра". Имя объекта можно посмотреть в свойствах обработки в конфигураторе.
Вот пример кода для удаления настроек окна и настроек данных формы для внешней обработки:
// Имя пользователя, для которого удаляем настройки. Можно получить программно.
ИмяПользователя = "ИвановИИ";
// Ключ для удаления настроек расположения окна формы
КлючНастроекОкна = "ВнешняяОбработка.МояОбработка.Форма.Форма/НастройкиОкна";
// Ключ для удаления настроек данных формы (например, отборов СКД)
КлючНастроекДанных = "ВнешняяОбработка.МояОбработка.Форма.Форма/КлючТекущихНастроекДанных";
// Удаляем настройку из системного хранилища
ХранилищеСистемныхНастроек.Удалить(КлючНастроекОкна, , ИмяПользователя);
ХранилищеСистемныхНастроек.Удалить(КлючНастроекДанных, , ИмяПользователя);
Чтобы найти точный ключ, иногда приходится анализировать код самой обработки или использовать специализированные инструменты для просмотра содержимого хранилищ настроек.
Этот способ не удаляет настройки, а программно очищает их в момент открытия формы. Он требует внесения изменений в код самой обработки. Нужно в модуле формы найти или создать процедуру-обработчик события ПередЗагрузкойПользовательскихНастроекНаСервере.
Например, если проблема в сохраненном отборе системы компоновки данных (СКД), можно очистить его следующим образом:
&НаСервере
Процедура ПередЗагрузкойПользовательскихНастроекНаСервере(Настройки)
// Перебираем загружаемые настройки
Для Каждого Настройка Из Настройки.Элементы Цикл
// Если это настройка отбора СКД, очищаем ее элементы
Если ТипЗнч(Настройка) = Тип("ОтборКомпоновкиДанных") Тогда
Настройка.Элементы.Очистить();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Этот метод хорош тем, что он обратим: достаточно закомментировать код, и настройки снова начнут загружаться.
В заключение, решая проблему с ошибкой в обработке, всегда начинайте с проверки на совместимость. Если с ней все в порядке, последовательно применяйте методы очистки: от простого к сложному, начиная с очистки кэша и заканчивая точечным программным удалением настроек.