1с расширение добавить реквизит на форму
Не всегда можно сходу определить причину ошибки, возникающей у слушателя в процессе выполнения обязательных и необязательных заданий курса.
Не имея под рукой его информационной базы, в первую очередь, мы начинаем задавать уточняющие вопросы. В процессе обсуждения по возможности определяем причину ошибки, и очень часто бывает, как в той самой басне Крылова: “А ларчик просто открывался”:
Вопрос
Добрый день! Не получается программно добавить элемент на форму элемента справочника Организации в расширении.
Взял ЕРП 2.4.7.127. Платформа 8.3.14.1630. Режим совместимости расширения 8.3.12. Добавил расширение (БезопасныйРежим = Ложь). Позаимствовал процедуру ПриСозданииНаСервере() общего модуля МодификацияКонфигурацииПереопределяемый:
В отладчике получаю ошибку “Поле объекта не обнаружено (ОсновнойБанковскийСчет)”.
Ответ тренера
В релизе ERP 2.4.7.127 у справочника Организации нет реквизита ОсновнойБанковскийСчет. Именно поэтому возникает ошибка “Поле объекта не обнаружено (ОсновнойБанковскийСчет)”. В остальном код у вас корректный.
Для моделирования ошибки использую любой другой реквизит, например, ГрафикРаботы. Вот такой код корректно работает. В пользовательском режиме поле на форме появляется, в процедуре ПриОткрытии есть добавленный элемент:
Было предположение, что для расширения установлена галочка Безопасный режим, поэтому серверный код не выполнился, но вы явно пишете, что эта галочка сброшена. Как вариант – попробовать на другом релизе платформы.
Уточнение слушателя
“ОсновнойБанковскийСчет” – это добавленный реквизит в расширение. Если добавлять реквизит в основной конфигурации, то все работает. Есть возможность вытащить реквизит из расширения?
Уточнение тренера
Вот теперь ошибка не воспроизводится. Взял платформу 8.3.14.1630, релиз ЕРП 2.4.7.127, добавил реквизит “ОсновнойБанковскийСчет” в расширение. Заимствовал процедуру “ПриСозданииНаСервере()” общего модуля МодификацияКонфигурацииПереопределяемый. Код скопировал ваш. Получил результат – в пользовательском режиме на форме появился новый реквизит. Может, что-то еще не указали?
Уточнение слушателя
Спасибо, что обнадежили на дальнейшие поиски проблемы. Причина в правах доступа к реквизиту.
Заметил на платформах 8.3.14 и 8.3.15.
Заимствую форму документа.
Добавляю свой реквизит как реквизит объекта заимствованного документа.
Открываю заимствованную форму документа.
Ищу свой реквизит в Объекте. Нету!
Делаю все тоже самое на платформе 8.3.13. Все ок.
Что с ними не так-то?! Весь мозг ведь изломал уже.
1v7; sondarium; t278; smit1c; allgorhythm; shaykhelov; vodolazua; AlexYAT; It-developer; vesh; zhivoglot; emorozova; Ads79; Ryo3000; Apolonov-Erik; user1285708; Tolpinski; Rusel; rzabolotin; user970589; Power_0N; Nati4ka; SkyOl; JohnConnor; user753059; LexmanR; nofear; vowg; SashinPapa; + 29 – Ответить
Бегло просмотрел, но не нашел касательно добавления своих реквизитов в заимствованный объект.
Скрин сделан на платформе 8.3.14
Добавленный реквизит не появляется в дереве объекта при редактировании заимствованной формы. Т.е. я его не могу добавить на форму.
1v7; sondarium; t278; smit1c; allgorhythm; shaykhelov; vodolazua; AlexYAT; It-developer; vesh; zhivoglot; emorozova; Ads79; Ryo3000; Apolonov-Erik; user1285708; Tolpinski; Rusel; rzabolotin; user970589; Power_0N; Nati4ka; SkyOl; JohnConnor; user753059; LexmanR; nofear; vowg; SashinPapa; + 29 – Ответить
(10) Да.Уже лучше. Реквизит появился в дереве объекта. Но форма документа сразу приняла примерно такой вид (скрин). Попробовал обновить расширение формы (6). Форма восснановилась, но сразу пропал мой реквизит из дерева объекта )))
(13) . а получилось как всегда! )))
Поставлю пока правильными ответы 13 и 10. Протестирую, дам развернутый комментарий. Спасибо всем.
(13) аргх! кровь из глаз. Какая-то логика в этом есть, но она извращенная. Добавлять Объект в расширении на расширение..
Правда, есть такая возможность как на первом слайде. Добавить реквизит на форму, выбрать Тип - ЗаказПокупателя. Там будут все реквизиты, созданные в расширении.
Можно перетащить на форму.
Однако, в режиме предприятия они на форме не отображаются!
еще было что-то с ролями, автоматически создаваемыми в расширении. я их удаляла. - как версия
только после этого я увидела на форме добавленный в расширении реквизит. танцы с бубном.
(8) Да. это мы уже проходили. убрать роли. Может, теперь наоборот, надо добавить роли. Бубен, кстати, не сильно помогает последнее время. Особенно с расширениями. )))
(12) Да подтверждаю. У меня проблема с этой ролью была. Ни как не мог свои реквизиты вывести даже програмно на форму.
Свои документы легко появлялись, а вот именно реквизит у справочника из основной конфы ни как.
Как только убил роль все заработало.
Не стал ковыряться с проверкой прав на реквизит.
Реквизит принадлежит объекту - то нужно объект добавлять в расширение. Еще замечал реквизит есть, а связанный элемент формы не выводится. Свойство элемента - пользовательская видимость все исправляет.
+ Если Вы обновили платформу с 8.3.13 до боле старшего релиза 8.3.14 (8.3.15.. ) и у Вас не активно событие по правой кнопке на Объекте - Добавить в расширение.
Попробуйте удалить форму из расширения и снова ее добавить из основной конфигурации.
(16) мне нужно в ТЧ документа счет на оплату добавить свою страницу, делаю через расширение, при добавление ТЧ нет возможности ее добавить на форму.
Есть еще костыль.
Добавить реквизит на форму в расширении и через обработчик событий вносить данные из этого поля в реквизит объекта, а при создании формы заполнять реквизит формы данными из реквизита объекта.
(20) также извернулся, ибо добавлять 50 штук реквизитов после добавление в расширение то ещё удовольствие
Как вариант решения проблемы( У самого была потребность добавить реквизит документу "Комплектация номенклатуры" и вывести его на форму)
1. Добавляем Документ в расширение
2. Добавляем нужный нам реквизит
3. Добавляем необходимую Форму документа в расширение
4. Открываем форму и из дерева реквизитов добавляем Объект в расширение
5. Реквизит появляется в списке, добавляется на форму, отражается в режиме предприятия
-----------------------
Платформа 8.3.15.1534
Amhappy2; Alex562035; kit; Aksik97; Legavaz; OldthiefXXX; Sibul; wjickey; Insanity; bzs1; + 10 – Ответить
Задача. В Заказ покупателя надо добавить галочку Отгрузка разрешена.
В случае ее установки откл все проверки при проведении.
Добавил новый реквизит документа булево в расширение.
Пробую добавить его как реквизит формы программно.
Объект "откройте" в расширении, там над объектом в форме расширения команда "Добавить в расширение"
(1) может проще его добавить на форму в конфигурации и управлять доступностью программно
(5) А зачем 2 раза его добавляете, у вас сверху уже есть кусок кода с добавлением элемента этого и внизу еще ?
(1) Теоретически вы его вставляте в форму саму, укажите родителя элемента, группу куда добавить хотите,
У нас написан целый модуль, который добавляет элементы на форму, по макету, все отлично работает, только реквизиты добавлены в основной конфе..а не в расширении.
Кстати Элемента просто не видно, или ошибку выдает .
(10) Последняя платформа при изменении формы в типовой конфигурации изменит форму в расширении с сохранением ваших изменений формы в расширении ?
Если после заимствования в расширяемой форме появятся новые элементы, вы узнаете об этом в расширении. В верхней части редактора формы будет показан баннер, который предложит вам обновить форму.
(17)Ок, мне стало интересно и я взяла УТ 11, добавила в ней расширение и сделала все то, что у вас, без всяких переносов в группы.
получился вот такой код
и после запуска он мне создал желанный флажок и показал его в самом конце формы.
а потому:
1) у вас действительно есть что-то ещё,
2) хотелось бы посмотреть на ваш список расширений
3) есть ли другие расширения которые исправляют эту форму? Что именно они делают?
4) как у вас оформлен обработчик событий формы? что в нем ещё есть?
5) давайте определимся уже с вашей конфигурацией и платформой, а то вдруг чего. )
Управление торговлей, редакция 11 (11.4.9.70)
1С:Предприятие 8.3 (8.3.15.1489)
В модуле формы документа Заказ клиента это одна процедура.
В других расширениях ее нет. Они расширяют соглашения и баксчета.
И в них этот Элемент есть.
Не настраивал. А как ?
У меня пока нет пользователей.
А реквизит объекта Опл_РазрешитьОтгрузку для Заказа клиента сделали в расширении ?
Галочки так нет.
Статья была по программному добавлению реквизитов в расширении. Попробуй посмотри, может поможет. Статья
В ЗУП 3 возникла задача добавить реквизит в справочник не внося изменений в конфигурацию. БСП с механизмом дополнительных реквизитов использовать было нежелательно, поэтому был использован механизм расширений. Для вывода данного реквизита на форму добавлять саму форму в расширение не хотелось по ряду причин, описанных ниже. Создание реквизита и элемента формы, соответствующего данному реквизиту было решено сделать программно в самом расширении, следуя принципу минимального воздействия на конфигурацию.
Начиная с платформы 1С версии 8.3.12 и выше появилась возможность добавлять реквизиты объектов в расширениях, чем я и воспользовался:
Но для вывода данного реквизита на форму элемента добавлять саму форму в расширение совсем не хотелось.
Во-первых добавление (заимствование) формы в расширение может привести к некоторым нежелательным эффектам, которые могут возникнуть после обновления конфигурации. Приведем немного теории.
Платформа использует сразу три формы:
- Форму из основной конфигурации
- Сохраненную форму
- Форму из расширения
Данные формы взаимодействуют между собой и в результате такого взаимодействия получается Результирующая форма, которую видит пользователь. В ходе взаимодействия указанных форм может возникнуть нежелательная ситуация, например, мы доработали форму в расширении, потом в новом релизе добавились реквизиты и они на форме не отображаются! Более подробно тут.
Во-вторых добавление формы в расширение привело бы к автоматическому добавлению всех реквизитов этого объекта и объектов метаданных (соответствующих ссылочным типам реквизитов объекта) в данное расширение, что загромождало бы само расширение и также не желательно.
Поэтому возникла задача программного создания элемента формы для добавленного реквизита в самом расширении, этому и посвящена данная публикация.
Посмотрев начало процедуры ПриСозданииНаСервере() модуля формы объекта, видим что вызываются экспортные методы ПриСозданииНаСервере() общих модулей подсистем БСП:
Было принято решение код для программного добавления реквизита формы объекта добавить в метод ПриСозданииНаСервере() общего модуля УправлениеСвойствами. Данный модуль предназначен для работы с дополнительными реквизитами и сведениями, но переопределив его в расширении он вполне сгодится и для наших целей.
Добавляем общий модуль УправлениеСвойствами в наше расширение:
и создаем обработчик события НП_ПриСозданииНаСервере(), вызываемый после типовой процедуры УправлениеСвойствами.ПриСозданииНаСервере().
Ниже приведен готовый код, код снабжен комментариями и разбит на области для лучшего понимания:
Смотрите в Конфигуратор – есть. Видимость, доступность – все Ok.
Тем не менее – на форме новые реквизиты не видно, хотя они есть!
Добавили (заимствовали) форму Заказа в расширение. Вывели на заимствованную форму добавленные в расширении реквизиты. Все хорошо…
Выходит новый релиз конфигурации поставщика, где у документа добавлен КакойТоНовыйРеквизит, который выведен на форму документа в конфигурации поставщика.
Если после обновления расширение успешно подключится, то, как минимум, в режиме Предприятия на форме документа не будет этого нового реквизита.
И с этим надо что-то делать:)
На самом деле нет повода для паники :) Нужно просто помнить, как 1С “вычисляет”, что показывать на форме.
Дело в том, что платформа использует сразу 3 формы:
- Форму из основной конфигурации
- Сохраненную форму
- Форму из расширения.
И как они взаимодействуют – мы разберем в новом видео.
12 минут видео, 100% полезности :)
Профессиональная доработка 1С не должна вызывать проблем с обновлениями
Мы подготовили новый курс, который рассказывает не только про расширения, но и про другие инструменты для доработки типовых конфигураций.
- Как дорабатывать типовые конфигурации внешними средствами
- Как разрабатывать и использовать расширения
- Оптимальные приемы обновления
- Все, что экономит, страхует, помогает.
Musthave для внедренцев.
Комментарии / обсуждение (74):
Добрый день!
Добавил в расширение РегистрБухгалтерии в БП 3.
При обновлении на релиз 3.0.106. все перестало работать.
При анализе таблиц регистра обнаружил добавленные поля ValueDt1…
,которые отсутствовали в старой конфигурации. Каким образом уровнять структуру моего регистра в расширении с типовой конфигурацией? Если создать новое расширение и в нем новый регистр, то все поля создаются. При попытке объединить, создать регистр в старом расширении, все добавленные поля исчезают. Не могу найти решение неделю. Что делать?
Добрый день!
В этом релизе Бухгалтерии изменился режим совместимости конфигурации на Версия 8.3.16. Возможно, в этом причина. Попробуйте изменить режим совместимости расширения.
Добрый день!
Это я сделал сразу. Результат не изменился.
Спасибо за информацию про сохраненную форму, но
что делать, если в основной конфигурации нет формы, а в расширении добавляю реквизит, создаю форму элемента (пример, справочник производители в конфигурации УТ11.4) в итоге при открытии формы – открывается “почти типовая форма” с типовыми реквизитами, но декоративные элементы (типа надписи или группы) появляются.
При попытке обратиться к созданному в расширении элементу система выдает ошибку, будто нет такого реквизита (обращался к нему из формы расширения, в правом окне с реквизитами он был, на форме элемент тоже присутствует, но при запуске 1С они все исчезают)
Добрый день!
Предполагаю, что дело в правах доступа к добавленному реквизиту. Если у пользователя нет прав на просмотр реквизита, то на форме в пользовательском режиме он не отобразится.
Добрый день!
А можно в расширении для формы выбора переопределить ПараметрыВыбора.
Например изменить параметры выбора для формы выбора договора: “Отбор.ВидДоговора((СПоставщиком, СКомиссионеромНаЗакупку, СФакторинговойКомпанией))” ?
Извиняюсь, пока писал сам разобрался.
Алексей, хорошо – бывает :)
Добрый день!
Спасибо.
Хорошая новость, потому что пути к данным действительно слетают, это мешает использовать расширения на практике.
Добрый день!
1-3. Да, такое поведение воспроизводится и на платформе 8.3.16.
Можно вот такой способ обхода использовать. В редакторе формы в расширении добавить новый элемент (Ins с клавиатуры или нажать кнопку Добавить), выбрать его тип – Таблица, затем в свойстве ПутьКДанным указать Объект.ИмяТабличнойЧасти.
После этого система запросит, нужно ли добавить колонки. На командной панели будут отображаться кнопки, а в списке событий – будут доступны все события, в том числе и ПриАктивизацииСтроки.
4. Тоже встречается такое. По наблюдениям – что-то происходит со свойством ПутьКДанным. Если его перевыбрать у проблемных элементов, они снова начинают отображаться. Еще иногда помогает закрыть конфигуратор, снова открыть, нажать кнопку Обновить расширение формы. Точной закономерности пока не уловил.
Добавил форму документа в расширение. На форме есть дерево значений, добавляю новую колонку но система почему то не дает изменить ни название ни тип колонки.
Подскажите пожалуйста, что нужно сделать, чтобы система дала изменить название и тип колонки?
Так что попробуйте платформу посвежее использовать.
ААААААААААААААААААААААААААААААААА.
О боги… я раз пять то удаляла форму из расширения, то снова добавляла. 1С:Предприятие 8.3 (8.3.14.1854). И все таки мой реквизит ТЧ документа там появился…
Спасибо за статью и видео – без них я бы не справилась.
Пожалуйста!
Интересного обучения!
Добрый день! Подскажите, а почему нельзя удалить реквизит (колонка реквизита формы “тфПараметрыНазначения” с типом ТаблицаЗначений, которое было заимствовано из основной конфигурации), который я добавила в расширение.
Правильно ли я сделала, когда удалила сам реквизит “тфПараметрыНазначения” и добавила его в расширение обратно?
Добрый день!
Тут все зависит от версии платформы. Если версия младше 8.3.14, то удалить колонку таблицы значений можно, иначе – нет. Это связано с тем, что в платформе 8.3.14 изменился механизм работы с формами – при заимствовании формы происходит заимствование только элементов формы (реквизиты, команды и параметры формы не заимствуются). Можно предложить вариант поработать со свойством видимости колонки на форме и при этом ее не удалять из таблицы значений.
Ольга, спасибо за ответ. Да, платформа 8.3.15.
Мне этот реквизит совсем не нужен (реализовала задачу по другому), и добавляла я только его одного, поэтому вариант, который я написала (удалила сам реквизит “тфПараметрыНазначения” и добавила его в расширение обратно) мне подошёл. Проверила работу в данной форме, вроде ничего не поломалось.
Конечно, если бы я добавила много реквизитов, а потом захотела бы удалить один, то получается при таком подходе (удалении реквизита и добавлении его обратно) пришлось бы остальные добавленные мной реквизиты обратно добавлять, что не удобно, но всё таки правильней, а вариант с видимостью на мой взгляд не очень корректный, так как вызывает в последующем непонимание зачем был добавлен данный реквизит и наверно затрачивает дополнительный объем памяти.
Спасибо ещё раз за ответ, теперь буду думать дважды когда буду добавлять свои реквизиты на форму в расширении. Надеюсь, правда, разработчики продумают этот момент.
Здравствуйте!
8.3.14.1779, ЕРП 2.4.8.84
Такая проблема – есть расширения, в которых не активна кнопка “добавить в расширение”.
В чём может быть проблема?
Добрый день!
У меня не воспроизвелось. Возможно, зависит от типа объекта, который Вы пытаетесь добавить в расширение. Или проблема конкретного релиза платформы.
А как дружит расширение с конвертацией данных? Если я создал расширение, добавил в нём новый реквизит в документ, а потом выгрузил информацию о структуре информационной базы – попадёт туда расширение?
Добрый день!
В тестовую конфигурацию загрузил расширение, в котором в документе добавил реквизит.
При помощи обработки MD82Exp.epf из Конвертации данных выгружаю структуру конфигурации в xml-файл. В полученном файле новый реквизит из расширения присутствует.
А что если ситуация интереснее?! Вы только добавили реквизиты в только что созданную форму расширения и они не показываются. В чем дело если сохраненная форма не причем?
Добрый день!
Возможно, дело в правах доступа.
Здравствуйте. Платформа 8.3.14, Добавил в расширение заимствованный объект “ПодразделенияОрганизаций”, добавил в него свой реквизит “GC_Кластер”. Заимстовал форму элемента, пытаюсь вывести на форму добавленный реквизит, но в реквизитах объекта на форме его попросту нет. Раньше вроде бы таких проблем не было, сейчас как то иначе это делается?
Добрый день!
В конструкторе формы добавляю Объект в расширение:
После этого на форму можно вынести созданный в расширении реквизит:
Добрый день. Спасибо за ответ. После того как добавляешь объект в расширение, с формы сразу же пропадают реквизиты, которые не добавлены заимствованием в расширение. И в режиме предприятия форма выглядит после этого ровно так как в расширении, без половины реквизитов. Научите добавлять скрины сюда
2. На этой странице нельзя добавлять скриншоты, только на страницах Мастер-группы.
Недопонимание.
1. Создаю новое расширение (единственное)
2. В расширение добавляю заимствованием справочник “Подразделения организаций”, объект и форму объекта
3. Захожу в расширении в объект “Подразделения организаций” и добавляю в него 2 реквизита – Реквизит1, Реквизит2
4. Захожу в расширении в форму объекта, нажимаю правой кнопкой мыши по корню “Объект”, жму добавить в расширение (без этого нет возможности вывести на форму добавленные мной реквизиты, см. пункт 3). После данного действия, элементов на заимствованной форме становится раза в 2 меньше чем было до.
Как мне кажется с формы исчезают элементы, которые не были добавлены заимствованием в расширение. Например есть в реквизитах формы набор записей регистра сведений (типовой реквизит), а сам регистр сведений в расширение я не добавлял. При выполнении вот этого действия (нажимаю правой кнопкой мыши по корню “Объект”, жму добавить в расширение) данный реквизит пропадает с формы в расширении.
Если в расширении в форме объекта нажать правой кнопкой по корню “Объект” и нажать удалить, а затем обновить форму расширения из конфигурации, реквизит снова появляется на форме.
5. Если мои догадки и пункта 4 верны, то получается не очень весело, например на форме есть 50 типовых реквизитов, которые ссылаются на разные справочники, регистры сведений, измерения регистров сведений, нужно пройтись по конфигурации и руками подобавлять каждый такой объект в расширение.
Конфигурация Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.10.50), платформа 8.3.14.1565
Посидел немного поковырялся еще
1. Создаю новое расширение (единственное)
2. В расширение добавляю заимствованием справочник “Подразделения организаций”, объект и форму объекта
3. Захожу в расширении в объект “Подразделения организаций” и добавляю в него 2 реквизита – Реквизит1, Реквизит2
4. Захожу в расширении в форму объекта, нажимаю правой кнопкой мыши по корню “Объект”, жму добавить в расширение (без этого нет возможности вывести на форму добавленные мной реквизиты, см. пункт 3). После данного действия, элементов на заимствованной форме становится раза в 2 меньше чем было до.
Я не имею ввиду данные формы, сами поля остаются, но у них почему то слетает путь к данным, который раньше был “Объект.ИмяТиповогоРеквизита”, как следствие реквизиты перестают отображаться на форме для пользователя. При этом, если руками прописать путь к данным, то слетает синоним реквизита, который был в основной конфигурации.
Например имя реквизита – “ПроцентСевернойНадбавки”, синоним – “% северной надбавки”, нажимаю правой кнопкой мыши по корню “Объект”, жму добавить в расширение, путь к данным слетает, прописываю руками путь к данным, реквизит вновь отображается на форме, но с синонимом “ПроцентСевернойНадбавки”
Читайте также: