При переходе на новые версии платформы «1С:Предприятие» пользователи и администраторы иногда сталкиваются с регрессионными ошибками — это ситуации, когда функционал, стабильно работавший годами, внезапно перестает функционировать в новой сборке. Одной из таких критических проблем стала «Внутренняя ошибка» при попытке запустить внешние отчеты или обработки в версии 8.3.26.1498. Давайте подробно разберем, почему это происходит и как вернуть систему в рабочее состояние.
Проанализируем техническую сторону вопроса. В версии платформы 8.3.26.1498 разработчиками был изменен механизм инициализации форм для внешних объектов (файлов с расширениями .erf и .epf). В норме, если у внешнего отчета не создана уникальная управляемая форма, платформа автоматически генерирует её на лету, используя стандартные алгоритмы Системы компоновки данных (СКД). Однако в данной конкретной сборке этот механизм «автоподбора» сломался.
Система выдает лаконичное сообщение «Внутренняя ошибка» (Internal Error), которое не содержит описания стека вызовов, что ставит в тупик даже опытных специалистов. Проблема наиболее остро проявляется в конфигурациях с высоким режимом совместимости, таких как «Бухгалтерия предприятия 3.0» (начиная с релизов 3.0.165) и «Управление торговлей 11.5».
Рассмотрим самый правильный и долгосрочный способ решения. Поскольку проблема признана официальным багом платформы, компания «1С» оперативно выпустила исправление. Разберем шаги по устранению проблемы через обновление:
8.3.26.1498, нам необходимо скачать обновление.%AppData%\1C\1Cv8 на рабочих станциях пользователей. Это исключит ситуацию, когда «битые» формы продолжают вызываться из временных файлов.Если по каким-то причинам немедленное обновление платформы на всем предприятии невозможно (например, из-за жесткого регламента обслуживания серверов), мы можем применить обходной путь (workaround). Давайте разберем, как модифицировать внешний отчет так, чтобы он начал открываться даже на проблемной платформе.
Суть метода заключается в том, чтобы лишить платформу необходимости «выбирать» форму автоматически. Мы укажем её явно в конфигураторе:
Файл -> Открыть выберем проблемный внешний отчет (.erf).ОбщаяФорма.ФормаОтчета), которая встроена в большинство типовых конфигураций, либо создадим новую пустую форму, нажав «Далее» в мастере создания форм.После этой манипуляции платформа 8.3.26.1498 сразу получит ссылку на конкретный объект формы и не будет инициировать ошибочный процесс автоматического поиска, что позволит отчету открыться без ошибок.
Интересной особенностью данной ошибки является её связь с подсистемой «Дополнительные отчеты и обработки». Часто отчеты, загруженные в справочник, перестают работать именно из-за включенного флага Безопасный режим.
В некоторых случаях временным решением может стать снятие этого флага в карточке дополнительного отчета. Однако, мы должны понимать риски: отключение безопасного режима дает внешнему коду неограниченный доступ к файловой системе и привилегированным операциям. Используйте этот метод только для проверенных обработок, скачанных из надежных источников (например, с Инфостарта), и только как крайнюю меру.
Чтобы минимизировать проблемы при обновлениях, при написании внешних отчетов всегда старайтесь правильно заполнять функцию СведенияОВнешнейОбработке. Посмотрим на пример структуры, которая помогает системе корректно идентифицировать объект в справочнике дополнительных обработок:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
ПараметрыРегистрации.Наименование = "Наш отчет (исправленный)";
ПараметрыРегистрации.Версия = "1.1";
ПараметрыРегистрации.БезопасныйРежим = Истина;
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Открыть отчет";
НоваяКоманда.Идентификатор = "ОсновнаяКоманда";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Возврат ПараметрыРегистрации;
КонецФункции
Обратите внимание на параметр ТипКомандыОткрытиеФормы(). Если платформа испытывает трудности с определением того, какую форму открывать, явное указание основной формы в метаданных (как описано в Решении №2) в сочетании с этим кодом гарантирует стабильную работу.
Мы выяснили, что ошибка носит исключительно платформенный характер и не связана с качеством кода самих отчетов. Если вы бухгалтер или пользователь и столкнулись с этой проблемой, вашим первым шагом должно быть обращение к системному администратору для обновления платформы до версии 8.3.26.1521. Если же вы разработчик, и вам нужно срочно «оживить» конкретный инструмент, используйте метод назначения основной формы через Конфигуратор. Помните, что использование нестабильных сборок платформы (таких как .1498) в продуктивных базах всегда несет риск падения рабочих процессов rphost, поэтому своевременное обновление — залог стабильной работы учета.