После проведения планового обновления конфигурации 1С:Бухгалтерия предприятия 3.0 (например, до релиза 3.0.79.14) пользователи часто сталкиваются с неприятной ситуацией: при попытке напечатать счет на оплату или другой первичный документ система выдает критическую ошибку. Проблема локализуется в общем модуле ПерсонализированныеПредложенияСервисов и сопровождается сообщением о недопустимом значении параметров при вызове метода Вставить. Давайте вместе разберемся, почему это происходит и как быстро восстановить работоспособность базы.
Рассмотрим строку кода, на которой спотыкается система. В процедуре СоздатьРеквизитыИЭлементыФормыДляРазмещенияБаннера происходит динамическое добавление элементов на форму счета:
ГруппаБаннер = Форма.Элементы.Вставить("Баннер", Тип("ГруппаФормы"), , Форма.Элементы.Найти("ГруппаКоманднаяПанель"));
Ошибка «Недопустимое значение параметров» в данном контексте обычно сигнализирует об одной из трех проблем:
"Баннер". Такое случается, если обработчик создания элементов сработал дважды или элемент был добавлен в форму ранее другим механизмом.Найти("ГруппаКоманднаяПанель") возвращает Неопределено. Хотя платформа допускает вставку без родителя, в определенных условиях сочетание параметров может привести к отказу.ИзменитьРеквизиты().Важно понимать, что данный функционал отвечает за вывод рекламных и информационных баннеров (предложения сервисов 1С:Контрагент, 1С-ЭДО и прочих). Если сервер интернет-поддержки недоступен или возвращает некорректные данные, типовой код может отработать с ошибкой.
Проанализируем наиболее эффективный способ исправления. Чтобы не снимать основную конфигурацию с поддержки и навсегда избавиться от навязчивой рекламы, мешающей работе, мы создадим расширение, которое «заглушит» проблемные процедуры. Выполним следующие шаги:
1. Откроем конфигуратор и перейдем в меню Конфигурация — Расширения конфигурации. Создадим новое расширение (например, с именем АнтиРеклама).
2. Найдем в основной конфигурации общий модуль ПерсонализированныеПредложенияСервисов. Нажмем на него правой кнопкой мыши и выберем Добавить в расширение.
3. В модуле расширения переопределим процедуры создания элементов баннера, используя аннотацию &Вместо. Нам нужно полностью обнулить логику этих процедур.
Рассмотрим пример программного кода, который необходимо вставить в модуль расширения:
&Вместо("СоздатьРеквизитыИЭлементыФормыДляРазмещенияБаннера")
Процедура АНТИРЕКЛАМА_СоздатьРеквизитыИЭлементыФормыДляРазмещенияБаннера(Форма)
// Данная процедура теперь ничего не делает, предотвращая ошибку создания элементов
КонецПроцедуры
&Вместо("УстановитьБаннерНаФорме")
Процедура АНТИРЕКЛАМА_УстановитьБаннерНаФорме(Форма, АдресРезультата)
// Отключаем заполнение баннера данными, чтобы избежать лишних запросов
КонецПроцедуры
Важный нюанс: Если после подключения расширения ошибка сохраняется или расширение «не подхватывается», проверьте профиль безопасности информационной базы. В некоторых случаях необходимо снять флажок «Безопасный режим» в настройках расширения, чтобы оно могло корректно взаимодействовать с формами документов.
Прежде чем приступать к кодингу, мы можем попытаться решить вопрос через пользовательские настройки. Система 1С позволяет управлять отображением предложений, хотя это не всегда помогает, если код уже начал исполняться с ошибкой. Проверим следующие настройки:
Это может помочь, если причина ошибки кроется в получении «битого» пакета данных от сервера 1С, который процедура УстановитьБаннерНаФорме не может корректно обработать.
Если расширение не помогает, а ошибка возникает только в одной базе из нескольких идентичных, проанализируем состояние кэша данных. Выясним причину через стандартные инструменты обслуживания:
1. Очистка серверного и локального кэша: Удалите базу из списка и добавьте её заново, либо вручную очистите папки в %AppData%\1C\1Cv8\. Это исключит вероятность того, что платформа пытается отрисовать форму по старым кэшированным чертежам.
2. Тестирование и исправление: Запустите процедуру «Тестирование и исправление» в конфигураторе. Нас интересует пункт «Проверка логической целостности конфигурации» и «Реиндексация таблиц». Бывают случаи, когда после обновления метаданные формы в базе данных находятся в противоречивом состоянии.
3. Проверка дублей элементов программно: Перед вызовом метода Вставить в типовом коде можно вставить проверку, которая покажет, существует ли уже элемент с таким именем. Это делается с помощью метода Форма.Элементы.Найти("Баннер"). Если результат не равен Неопределено, значит, система пытается создать элемент повторно.
Подводя итог, можно сказать, что ошибка в модуле ПерсонализированныеПредложенияСервисов является следствием избыточного функционала по отображению маркетинговых материалов в типовых решениях. Использование расширения с заглушками (Способ 1) является наиболее стабильным решением, так как оно не только исправляет текущую ошибку «Недопустимое значение параметров», но и предотвращает её появление в будущем при выходе новых «сырых» обновлений. Это также немного ускоряет работу программы, избавляя её от необходимости генерировать лишние элементы интерфейса при каждом открытии счета на оплату.