[ Вопрос дня ] Как программно добавить элемент на форму в расширении?

Доброго дня, коллеги!

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

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

Вопрос

Добрый день! Не получается программно добавить элемент на форму элемента справочника Организации в расширении.

Взял ЕРП 2.4.7.127. Платформа 8.3.14.1630. Режим совместимости расширения 8.3.12. Добавил расширение (БезопасныйРежим = Ложь). Позаимствовал процедуру ПриСозданииНаСервере() общего модуля МодификацияКонфигурацииПереопределяемый:

&После(“ПриСозданииНаСервере”)
Процедура Расш1_ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
Если Форма.ИмяФормы = “Справочник.Организации.Форма.ФормаЭлемента” Тогда
НовыйЭлементФормы = Форма.Элементы.Добавить(“ОсновнойБанковскийСчет”, Тип(“ПолеФормы”),Форма.Элементы.Наименования);
НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлементФормы.ПутьКДанным = “Объект.ОсновнойБанковскийСчет”;
НовыйЭлементФормы.Видимость = Истина;
НовыйЭлементФормы.Доступность = Истина;
КонецЕсли;
КонецПроцедуры

В отладчике получаю ошибку “Поле объекта не обнаружено (ОсновнойБанковскийСчет)”.

Ответ тренера

В релизе ERP 2.4.7.127 у справочника Организации нет реквизита ОсновнойБанковскийСчет. Именно поэтому возникает ошибка “Поле объекта не обнаружено (ОсновнойБанковскийСчет)”. В остальном код у вас корректный.

Для моделирования ошибки использую любой другой реквизит, например, ГрафикРаботы. Вот такой код корректно работает. В пользовательском режиме поле на форме появляется, в процедуре ПриОткрытии есть добавленный элемент:

&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка)   
    Если Форма.ИмяФормы = "Справочник.Организации.Форма.ФормаЭлемента" Тогда
        НовыйЭлементФормы = Форма.Элементы.Добавить("ОсновнойБанковскийСчет", Тип("ПолеФормы"), Форма.Элементы.Наименования);
        НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлементФормы.ПутьКДанным = "Объект.ГрафикРаботы";
        НовыйЭлементФормы.Видимость = Истина;
        НовыйЭлементФормы.Доступность = Истина;
    КонецЕсли;   
КонецПроцедуры

Было предположение, что для расширения установлена галочка Безопасный режим, поэтому серверный код не выполнился, но вы явно пишете, что эта галочка сброшена. Как вариант – попробовать на другом релизе платформы.

Уточнение слушателя

ОсновнойБанковскийСчет” – это добавленный реквизит в расширение. Если добавлять реквизит в основной конфигурации, то все работает. Есть возможность вытащить реквизит из расширения?

Уточнение тренера

Вот теперь ошибка не воспроизводится. Взял платформу 8.3.14.1630, релиз ЕРП 2.4.7.127, добавил реквизит “ОсновнойБанковскийСчет” в расширение. Заимствовал процедуру “ПриСозданииНаСервере()” общего модуля МодификацияКонфигурацииПереопределяемый. Код скопировал ваш. Получил результат – в пользовательском режиме на форме появился новый реквизит. Может, что-то еще не указали?

Уточнение слушателя

Спасибо, что обнадежили на дальнейшие поиски проблемы. Причина в правах доступа к реквизиту.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.