Используемые методы:
Добавить (Add)
Синтаксис:
Добавить(<Имя>, <ТипЭлемента>, <Родитель>)
Параметры:
<Имя> (обязательный)
Тип: Строка.
Уникальное имя добавляемого элемента.
<ТипЭлемента> (обязательный)
Тип: Тип.
Тип добавляемого элемента.
<Родитель> (необязательный)
Тип: ГруппаФормы, ТаблицаФормы, ФормаКлиентскогоПриложения.
Родитель для добавляемого элемента.
Если не указан, то добавляется на верхний уровень.
Вставить (Insert)
Синтаксис:
Вставить(<Имя>, <ТипЭлемента>, <Родитель>, <Элемент>)
Параметры:
<Имя> (обязательный)
Тип: Строка.
Уникальное имя добавляемого элемента.
<ТипЭлемента> (обязательный)
Тип: Тип.
Тип добавляемого элемента.
<Родитель> (необязательный)
Тип: ГруппаФормы, ТаблицаФормы, ФормаКлиентскогоПриложения.
Родитель для добавляемого элемента.
Если не указан, то вставляется на верхний уровень.
<Элемент> (необязательный)
Тип: ДекорацияФормы, ГруппаФормы, КнопкаФормы, ТаблицаФормы, ПолеФормы.
Элемент, перед которым должен быть вставлен новый элемент. Если не указан, то элемент будет вставлен в конец.
Параметров немного, но ошибки возникают часто. Некоторые ставят в тупик.
Какие могут быть причины ошибки "Недопустимое значение параметров":
1. Элемент с таким именем уже есть на форме в типовом решении.
Конфликт имен с именем элемента формы типовой конфигурации или другого расширения.
Способы обхода:
- Не забываем добавлять префиксы, чтобы гарантировать уникальность имени. Даже если сейчас код работает, никто не даст гарантии, что в будущем в типовой конфигурации такой реквизит не появится.
2. Элемент уже добавлен вашим же кодом.
Например вы используете для добавления реквизитов ПриЧтенииДанныхНаСервере. Такой обработчик может вызваться много раз.
Способ обхода - проверять наличие элемента формы:
Если Элементы.Найти("МойЭлемент") <> Неопределено Тогда
Возврат;
КонецЕсли;
Элементы.Добавить("МойЭлемент",...
3. Можно дважды подключиться к одному и тому же обработчику события.
В принципе легко диагностируется. Но я с таким сталкивался.
Обработчик ПриСозданииНаСервере можно подключить через свойства формы (расширение обработчика) дважды:
- ПриСозданииНаСервереПеред
- ПриСозданииНаСервереПосле
Также можно подключиться к имеющейся в модуле процедуре через аннотации
- &Вместо
- &Перед
- &После
- &ИзменениеИКонтроль
4. Ошибка параметра номер 3 - родитель.
Нет такой группы, в которую вы хотите поместить ваш элемент. Может возникнуть после очередного обновления. Группу могут переименовать или удалить совсем. Результат один. Последствия печальные - форма может перестать открываться совсем. Если у вас решение массовое, то такой вариант развития событий нельзя сбрасывать со счетов.
У ваших клиентов будет только один способ обхода - это отключение или удаление расширения. Но во фреше отключить расширение нельзя. Если ваше расширение использует расширение данных, то последствия отключения - это потеря расширенных данных. Можно нахватать отрицательных оценок, которые пользователи не будут торопиться исправлять даже тогда, когда проблема будет устранена.
Способ обхода - надо убедиться в наличии группы:
Если Элементы.Найти("ИмяГруппыДляДобавленияНашегоПоля") = Неопределено Тогда
Возврат;
КонецЕсли;
Элементы.Добавить("МойЭлемент", Тип("ПолеФормы"), Элементы.ИмяГруппыДляДобавленияНашегоПоля);
5. Проблема при вставке элемента.
когда элемент должен встать в группу на определенную позицию, а не просто в конец, то используем метод Вставить() или последовательность методов Добавить() и Переместить().
Ошибка "Недопустимое значение параметров" мало чем помогает при расследовании.
Причина ошибки в параметре №4 - элемент перед которым должен встать наш элемент. Этот элемент должен лежать в той же группе что и наш добавляемый элемент. Вам могут позвонить клиенты с такой ошибкой. Причем у вас она не будет воспроизводиться. Причиной может быть очередное добавление, стороннее расширение или ручное изменение формы (Форма/Изменить форму).
Результат будет такой же плачевный - форма перестает открываться, лишая доступа пользователя к типовому функционалу.
Способ обхода - проверка что элемент перед которым вы вставляете ваш элемент, находится в той же группе, куда происходит добавление нового элемента:
Если Не ГруппаДляДобавления = ПолеПередКоторымМыДобавляемСвойЭлемент.Родитель Тогда
Возврат;
КонецЕсли;
Элементы.Вставить("МойЭлемент",Тип("ПолеФормы"), ГруппаДляДобавления, ПолеПередКоторымМыДобавляемСвойЭлемент);
6. Подчиненность групп определенного вида.
С такой проблемой может столкнуться начинающий разработчик.
Например при добавлении группы формы с видом Страница. Добавлять такую группу можно только внутрь группы с видом Страницы.
Полезные ссылки: