Почему закрывается 1С при изменении подписывающих лиц и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При ежедневной работе с программными продуктами «1С:Предприятие 8» пользователи и администраторы иногда сталкиваются со сверхкритическими сбоями, когда программа полностью закрывается (вылетает) без объяснения причин, предлагая лишь записать аварийный дамп. Особенно неприятно, когда это происходит при выполнении рутинных операций — например, при попытке открыть раздел «Подписи» в документах расчета зарплаты, кадрового учета или первичных учетных документах.

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

Причина сбоя: технический анализ ошибки платформы 10216264

Для начала выясним первопричину аварийного завершения работы. Данная проблема не связана напрямую с ошибками в кодовой базе ваших прикладных конфигураций (будь то «Зарплата и управление персоналом», «Бухгалтерия предприятия» или «ERP Управление предприятием»). Источник проблемы кроется в ядре самой технологической платформы «1С:Предприятие».

Фирмой «1С» официально зарегистрирована критическая ошибка под номером 10216264. Ее описание в баг-трекере звучит следующим образом: «В клиентском приложении при развертывании свернутой группы, у которой свойство ОтображениеУправления имеет значение ГиперссылкаЗаголовка, происходит аварийное завершение работы».

Давайте посмотрим, как эта уязвимость графического интерфейса платформы проявляется на практике:

  1. В современных конфигурациях на базе Библиотеки стандартных подсистем (БСП) блок работы с подписантами документов вынесен в отдельную программную подсистему ПодписиДокументов.
  2. Для экономии экранного пространства разработчики БСП группируют реквизиты подписантов (руководитель, главный бухгалтер, кассир, исполнитель) в специальную сворачиваемую обычную группу на управляемой форме.
  3. При создании этой группы на форме программно инициализируется свойство отображения управления: ПосадочнаяГруппа.ОтображениеУправления = ОтображениеУправленияОбычнойГруппы.ГиперссылкаЗаголовка;.
  4. В релизах платформы ветки 8.3.16 (начиная с тестовых версий и релиза 8.3.16.1030 вплоть до 8.3.16.1063) обработчик рендеринга графического интерфейса при клике на такую гиперссылку вызывает критический сбой памяти. Программа экстренно завершает процесс, формируя дамп памяти, при этом в Журнал регистрации не успевает записаться ни одно событие об ошибке.

Теперь, когда мы детально понимаем физику процесса, разберем по шагам доступные варианты решения проблемы.

Способ 1. Кардинальное решение — обновление технологической платформы

Поскольку ошибка допущена на уровне движка платформы «1С», самым правильным и долгосрочным решением является переход на релиз платформы, в котором этот баг был исправлен разработчиками фирмы «1С».

Согласно официальной информации, ошибка полностью устранена в следующих версиях платформ:

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

Способ 2. Программный обход через расширение конфигурации (без изменения типовой конфигурации)

Если обновить платформу в ближайшее время невозможно, мы можем обойти ошибку программно. Для этого не нужно снимать основную конфигурацию с поддержки. Мы воспользуемся механизмом расширений, который позволяет безопасно скорректировать поведение общего модуля.

Наша цель — переопределить проблемное свойство отображения управления у посадочной группы подписей, заменив значение ГиперссылкаЗаголовка на безопасную Картинку. Проанализируем алгоритм создания расширения.

Выполним следующие шаги:

  1. Откроем информационную базу в режиме Конфигуратор.
  2. Перейдем в меню Конфигурация — Расширения конфигурации.
  3. Добавим новое расширение (например, с именем ИсправлениеОшибкиПодписей). Укажем назначение расширения: Адаптация или Исправление. Снимем флажки «Безопасный режим» и «Защита от опасных действий» в свойствах добавленного расширения (это критически важно, иначе платформа заблокирует работу расширения с интерфейсными элементами формы).
  4. Найдем в основной конфигурации общий модуль ПодписиДокументовФормы.
  5. Добавим этот модуль в наше расширение и найдем в нем процедуру УстановитьСвойстваПосадочнойГруппе.
  6. Переопределим выполнение этой процедуры с помощью аннотации &Вместо.

Нам необходимо написать следующий код в модуле расширения:


&Вместо("УстановитьСвойстваПосадочнойГруппе")
Процедура Ип_УстановитьСвойстваПосадочнойГруппе(Форма, ОписаниеФормыОбъекта)
	
	ПосадочнаяГруппа = Форма.Элементы.Найти(ОписаниеФормыОбъекта.ИмяПосадочнойГруппы);
	Если ПосадочнаяГруппа = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ПосадочнаяГруппа.Заголовок = НСтр("ru = 'Подписи'");
	ПосадочнаяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
	ПосадочнаяГруппа.Отображение = ОтображениеОбычнойГруппы.Нет;
	
	// Внедряем обход ошибки релиза 8.3.16.1030 / 8.3.16.1063
	// Исходный проблемный код:
	// ПосадочнаяГруппа.ОтображениеУправления = ОтображениеУправленияОбычнойГруппы.ГиперссылкаЗаголовка;
	
	// Безопасный код, не вызывающий падения платформы:
	ПосадочнаяГруппа.ОтображениеУправления = ОтображениеУправленияОбычнойГруппы.Картинка;

КонецПроцедуры

После сохранения расширения и запуска сеанса работы в режиме «1С:Предприятие» вместо текстовой гиперссылки для раскрытия блока подписантов будет выводиться стандартная иконка-стрелка. Нажатие на нее больше не будет приводить к аварийному завершению работы системы.

Особенности применения расширения на серверных базах данных

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

Это связано с особенностями кэширования модулей на стороне сервера приложений «1С:Предприятия». Чтобы изменения, внесенные через расширение в общий модуль ПодписиДокументовФормы, гарантированно применились для всех пользователей серверной базы, выполним следующие действия:

  1. После успешного подключения и сохранения расширения завершим все активные пользовательские сеансы работы с базой данных.
  2. Запустим утилиту администрирования серверов «1С:Предприятия» и временно заблокируем начало новых регламентных заданий и сеансов.
  3. Выполним перезапуск службы Агент сервера 1С:Предприятия 8.3 (имя службы в Windows обычно 1C:Enterprise 8.3 Server Agent или ragent). Это принудительно очистит кэш скомпилированных модулей на сервере приложений.
  4. Если ручной перезапуск службы нежелателен, можно воспользоваться выборочной очисткой кэша конфигурации на сервере, удалив временные каталоги в профиле пользователя, под которым запущена служба сервера 1С (папки snccg).

Способ 3. Быстрый пользовательский обход через интерфейс (без программирования)

Рассмотрим ситуацию, когда у вас нет прав администратора для обновления платформы или добавления расширений (например, вы работаете под учетной записью обычного бухгалтера или кадровика), а документ нужно провести прямо сейчас. Для этого случая существует элегантный способ индивидуального обхода ошибки непосредственно через пользовательский интерфейс 1С.

Разберем этот процесс по шагам на примере документа «Отпуск» или любого другого кадрового/расчетного документа в программе «1С:Зарплата и управление персоналом»:

  1. Откроем проблемный документ, в котором при изменении подписантов программа вылетает.
  2. В правом верхнем углу окна программы найдем и нажмем кнопку «Еще».
  3. В выпадающем контекстном меню выберем команду «Изменить форму...».
  4. Перед нами откроется окно настройки элементов формы. В левой части этого окна представлено иерархическое дерево элементов. Нам необходимо пролистать его вниз и найти группу под названием «Подписи» (при наведении на нее она выделится желтой рамкой).
  5. Выделим элемент «Подписи» кликом мыши.
  6. Обратим внимание на правую часть окна настроек — там отображаются свойства выделенного элемента формы. Найдем строку свойства «Группировка».
  7. По умолчанию там может быть установлено значение «Горизонтальная» или «Авто». Нам необходимо принудительно изменить это свойство, выбрав из списка значение «Вертикальная».
  8. Нажмем кнопку «Применить», а затем кнопку «ОК» для сохранения настроек.

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

При этом стоит учитывать, что данные настройки интерактивного изменения формы сохраняются в разрезе текущего пользователя. Если с базой работают несколько сотрудников, операцию «Изменить форму» потребуется повторить на рабочих местах каждого из них, либо администратор может скопировать эти настройки интерфейса другим пользователям через стандартный механизм управления настройками пользователей в разделе Администрирование.

Мы подробно проанализировали проблему аварийного завершения работы платформы «1С» при изменении подписантов. Надеемся, что предложенные методы помогут вам быстро восстановить штатную работу системы и избежать простоев в работе бухгалтерии и отдела кадров.

← На главную