Разработка и отладка внешних обработок в среде 1С:Предприятие часто преподносит сюрпризы, особенно при переходе от файлового режима к клиент-серверному или при смене типа клиента. Одной из самых загадочных проблем является ситуация, когда внешняя обработка успешно запускается в толстом клиенте, но в тонком клиенте при попытке её открыть не происходит абсолютно ничего — система просто «молчит».
В этой статье мы подробно разберем, почему так происходит, проанализируем типичные ошибки разработчиков и выясним, как диагностировать «тихие» отказы открытия форм.
Первое, на что стоит обратить внимание, — это тип созданной формы в обработке. Тонкий клиент 1С спроектирован для работы исключительно с управляемыми формами. Если ваша обработка была написана много лет назад под «обычное» приложение (на обычных формах), она физически не сможет открыться в тонком клиенте.
Как проверить: откройте обработку в Конфигураторе и посмотрите в дерево метаданных. Если у формы отсутствует значок с «лупой» и синим заголовком, характерный для управляемых форм, или в свойствах формы не стоит соответствующая отметка — это обычная форма. Решение здесь только одно: переписывать интерфейс обработки «с нуля» на управляемых формах.
Предположим, что форма у нас управляемая, и в файловой базе она открывается без проблем. Но при переходе в клиент-серверный режим или в рабочую базу тонкий клиент перестает реагировать на команду открытия. Рассмотрим ситуацию, когда в коде формы заложена логическая проверка, которая при определенных условиях блокирует создание формы.
Проанализируем пример кода, который часто становится причиной «необъяснимого» поведения системы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Пытаемся найти необходимый для работы реквизит
ВидСвойства = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Статус документа");
// Если реквизит не найден (например, его забыли создать в новой базе)
Если НЕ ЗначениеЗаполнено(ВидСвойства) Тогда
Отказ = Истина; // Система прекращает открытие формы
Возврат;
КонецЕсли;
КонецПроцедуры
В чем здесь проблема? Когда в управляемом приложении параметру Отказ присваивается значение Истина, платформа 1С зачастую не выводит пользователю никакого штатного сообщения. Для пользователя это выглядит так: нажал «Открыть», подождал секунду, ничего не произошло. Это и есть «тихая ошибка».
Чтобы избежать подобных ситуаций, мы рекомендуем всегда информировать пользователя о причинах отказа. Разберем, как улучшить этот код:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ВидСвойства = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Статус документа");
Если НЕ ЗначениеЗаполнено(ВидСвойства) Тогда
// Сообщаем пользователю причину, прежде чем прервать выполнение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не найден дополнительный реквизит 'Статус документа'. Обработка не может быть запущена.");
Отказ = Истина;
Возврат;
КонецЕсли;
КонецПроцедуры
В клиент-серверном варианте работы код процедуры ПриСозданииНаСервере исполняется непосредственно на сервере приложений 1С. Здесь вступают в силу ограничения, которых нет в файловой базе:
USR1cv8). Если ваша обработка пытается при открытии прочитать файл из сетевой папки или обратиться к реестру, и у этой учетной записи нет прав доступа, возникнет ошибка.ПриСозданииНаСервере нарушает правила безопасного режима, форма не откроется.Если «ничего не происходит», а код кажется верным, единственным надежным способом выяснить причину является Журнал регистрации. Рассмотрим последовательность действий для поиска ошибки:
Отказ = Истина.Начиная с версии платформы 8.3.9, в 1С реализован механизм «Защиты от опасных действий». При открытии любого внешнего файла (внешней обработки или отчета) система должна выдать окно с предупреждением: «Вы открываете внешний файл... Продолжить?».
Иногда, из-за специфических настроек антивирусов, блокировщиков окон или особенностей работы через веб-клиент, это окно может не отображаться или блокироваться. В результате процесс открытия «повисает» или прерывается. Попробуйте временно отключить защиту для конкретного пользователя в Конфигураторе (свойство пользователя ЗащитаОтОпасныхДействий), чтобы проверить, не в этом ли причина.
Не стоит забывать и о «классике» проблем 1С — локальном кэше. Тонкий клиент активно кэширует метаданные форм. Если вы сначала открывали обработку как обычную, а затем переделали её в управляемую, клиент может пытаться вызвать старую структуру из кэша.
Проанализируем способы решения:
/ClearCache в строке запуска.Подведем итог: если внешняя обработка не открывается в тонком клиенте, в первую очередь проверьте наличие управляемой формы. Если она есть, ищите логическую ошибку в процедуре ПриСозданииНаСервере. Помните, что клиент-серверный режим гораздо строже к правам доступа и безопасности, чем файловый.
Для надежной работы обработки мы рекомендуем: