При ежедневной работе с программными продуктами «1С:Предприятие 8» пользователи и администраторы иногда сталкиваются со сверхкритическими сбоями, когда программа полностью закрывается (вылетает) без объяснения причин, предлагая лишь записать аварийный дамп. Особенно неприятно, когда это происходит при выполнении рутинных операций — например, при попытке открыть раздел «Подписи» в документах расчета зарплаты, кадрового учета или первичных учетных документах.
В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем внутренние механизмы платформы, вызывающие сбой, и рассмотрим три надежных метода устранения неполадки: от быстрого обхода силами обычного пользователя до полноценного программного исправления.
Для начала выясним первопричину аварийного завершения работы. Данная проблема не связана напрямую с ошибками в кодовой базе ваших прикладных конфигураций (будь то «Зарплата и управление персоналом», «Бухгалтерия предприятия» или «ERP Управление предприятием»). Источник проблемы кроется в ядре самой технологической платформы «1С:Предприятие».
Фирмой «1С» официально зарегистрирована критическая ошибка под номером 10216264. Ее описание в баг-трекере звучит следующим образом: «В клиентском приложении при развертывании свернутой группы, у которой свойство ОтображениеУправления имеет значение ГиперссылкаЗаголовка, происходит аварийное завершение работы».
Давайте посмотрим, как эта уязвимость графического интерфейса платформы проявляется на практике:
ПодписиДокументов.ПосадочнаяГруппа.ОтображениеУправления = ОтображениеУправленияОбычнойГруппы.ГиперссылкаЗаголовка;.Журнал регистрации не успевает записаться ни одно событие об ошибке.Теперь, когда мы детально понимаем физику процесса, разберем по шагам доступные варианты решения проблемы.
Поскольку ошибка допущена на уровне движка платформы «1С», самым правильным и долгосрочным решением является переход на релиз платформы, в котором этот баг был исправлен разработчиками фирмы «1С».
Согласно официальной информации, ошибка полностью устранена в следующих версиях платформ:
Если в вашей организации развернута клиент-серверная версия, процедура потребует обновления как клиентских лицензий и приложений на рабочих местах пользователей, так и серверной части «1С:Предприятие». Если по регламентным соображениям или из-за совместимости с другими нетиповыми базами вы не можете оперативно обновить платформу, перейдем к рассмотрению альтернативных методов.
Если обновить платформу в ближайшее время невозможно, мы можем обойти ошибку программно. Для этого не нужно снимать основную конфигурацию с поддержки. Мы воспользуемся механизмом расширений, который позволяет безопасно скорректировать поведение общего модуля.
Наша цель — переопределить проблемное свойство отображения управления у посадочной группы подписей, заменив значение ГиперссылкаЗаголовка на безопасную Картинку. Проанализируем алгоритм создания расширения.
Выполним следующие шаги:
ИсправлениеОшибкиПодписей). Укажем назначение расширения: Адаптация или Исправление. Снимем флажки «Безопасный режим» и «Защита от опасных действий» в свойствах добавленного расширения (это критически важно, иначе платформа заблокирует работу расширения с интерфейсными элементами формы).ПодписиДокументовФормы.УстановитьСвойстваПосадочнойГруппе.&Вместо.Нам необходимо написать следующий код в модуле расширения:
&Вместо("УстановитьСвойстваПосадочнойГруппе")
Процедура Ип_УстановитьСвойстваПосадочнойГруппе(Форма, ОписаниеФормыОбъекта)
ПосадочнаяГруппа = Форма.Элементы.Найти(ОписаниеФормыОбъекта.ИмяПосадочнойГруппы);
Если ПосадочнаяГруппа = Неопределено Тогда
Возврат;
КонецЕсли;
ПосадочнаяГруппа.Заголовок = НСтр("ru = 'Подписи'");
ПосадочнаяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
ПосадочнаяГруппа.Отображение = ОтображениеОбычнойГруппы.Нет;
// Внедряем обход ошибки релиза 8.3.16.1030 / 8.3.16.1063
// Исходный проблемный код:
// ПосадочнаяГруппа.ОтображениеУправления = ОтображениеУправленияОбычнойГруппы.ГиперссылкаЗаголовка;
// Безопасный код, не вызывающий падения платформы:
ПосадочнаяГруппа.ОтображениеУправления = ОтображениеУправленияОбычнойГруппы.Картинка;
КонецПроцедуры
После сохранения расширения и запуска сеанса работы в режиме «1С:Предприятие» вместо текстовой гиперссылки для раскрытия блока подписантов будет выводиться стандартная иконка-стрелка. Нажатие на нее больше не будет приводить к аварийному завершению работы системы.
Важно обратить внимание на один важный нюанс, с которым часто сталкиваются администраторы крупных систем. Бывают ситуации, когда на локальной файловой копии базы расширение отрабатывает корректно, а на серверной (SQL) базе ошибка продолжает воспроизводиться.
Это связано с особенностями кэширования модулей на стороне сервера приложений «1С:Предприятия». Чтобы изменения, внесенные через расширение в общий модуль ПодписиДокументовФормы, гарантированно применились для всех пользователей серверной базы, выполним следующие действия:
Агент сервера 1С:Предприятия 8.3 (имя службы в Windows обычно 1C:Enterprise 8.3 Server Agent или ragent). Это принудительно очистит кэш скомпилированных модулей на сервере приложений.snccg).Рассмотрим ситуацию, когда у вас нет прав администратора для обновления платформы или добавления расширений (например, вы работаете под учетной записью обычного бухгалтера или кадровика), а документ нужно провести прямо сейчас. Для этого случая существует элегантный способ индивидуального обхода ошибки непосредственно через пользовательский интерфейс 1С.
Разберем этот процесс по шагам на примере документа «Отпуск» или любого другого кадрового/расчетного документа в программе «1С:Зарплата и управление персоналом»:
После выполнения этих простых шагов структура отрисовки элементов формы изменится. Группа подписантов перестроится, а сбойное свойство отображения управления перестанет влиять на работу интерфейса. Вы сможете беспрепятственно заполнять и изменять ответственных лиц (руководителя, главного бухгалтера) без риска потерять несохраненные данные из-за внезапного закрытия программы.
При этом стоит учитывать, что данные настройки интерактивного изменения формы сохраняются в разрезе текущего пользователя. Если с базой работают несколько сотрудников, операцию «Изменить форму» потребуется повторить на рабочих местах каждого из них, либо администратор может скопировать эти настройки интерфейса другим пользователям через стандартный механизм управления настройками пользователей в разделе Администрирование.
Мы подробно проанализировали проблему аварийного завершения работы платформы «1С» при изменении подписантов. Надеемся, что предложенные методы помогут вам быстро восстановить штатную работу системы и избежать простоев в работе бухгалтерии и отдела кадров.