Доброго дня, коллеги!
А вы теряли стандартные реквизиты в конструкторе запросов в расширении? Сколько времени ушло на поиск решения проблемы? А наш слушатель получил ответ оперативно. Теперь данной хитростью делимся с вами! Безвозмездно
Вопрос
Добрый день! Подскажите, а добавляются ли в расширение стандартные реквизиты, например, для справочника реквизит “ЭтоГруппа” или “Владелец” (когда я делаю запрос в расширении и хочу отобрать элементы, не являющиеся каталогами, данных реквизитов нет). Пробовал добавлять все реквизиты и формы данного справочника в расширение, но стандартные так и не добавились. В свойствах стандартных реквизитов так же не нашел возможности добавить в расширение. Платформа 1С 8.3.15, конфигурация 1С:УПП 1.3.
Ответ
Добрый день! Нужно в расширении указать, что этот справочник является иерархическим (то есть указать в расширении свойство Иерархический как контролируемое):
Тогда конструктор запроса покажет поле ЭтоГруппа.
Или давайте рассмотрим на примере, на пустой базе. Пусть у нас есть справочник Спецификации, подчиненный справочнику Номенклатура:
Создадим расширение конфигурации, заимствуем оба справочника в расширение.
В расширении воспользуемся конструктором запроса. Для справочника Спецификации поле Владелец недоступно:
Теперь отметим для справочника Спецификации свойство Владельцы как контролируемое:
После этого в конструкторе запроса появляется поле Владелец:
На форме объекта в расширении можно отобразить владельца:
Как перенести объект из конфигурации в расширение полностью? |
Я |
01.04.21 — 15:27
Как перенести объект из конфигурации в расширение полностью? Чтобы в конфигурации исчез, а в расширении появился. Минимальный путь какой?
1 — 01.04.21 — 15:31
Ты кажется расширение с чем-то путаешь
2 — 01.04.21 — 15:32
(0) CTRL+C -> CTRL+V
3 — 01.04.21 — 15:34
а о каких, например, объектах речь?
Допустим, не совсем понятна цель удаления типового объекта из типовой конфигурации
4 — 01.04.21 — 15:36
Самописные документы и обработки
5 — 01.04.21 — 15:38
(2)
да это работает, спс
6 — 01.04.21 — 15:40
Я бы открыл второй конфигуратор, в котором самописных объектов нет и вставлял в расширение уже на нем. Чтоб не возникали попытки переименовать чего-то
7 — 01.04.21 — 15:44
(0) Какова конечная цель?
8 — 01.04.21 — 15:45
(7)
До меня насоздавали объектов в расширении, я насоздавал в конфигурации. Теперь между ними надо активно писать взаимодействие,а это неудобно когда они в разных местах, сложнее обращаться
9 — 01.04.21 — 15:47
(8) Данные по этим объектам уже есть?
10 — 01.04.21 — 15:48
(9)
Которые до меня были в расширении есть, которые я создал пока нет.
11 — 01.04.21 — 15:55
создавай лучше свои в основной конфигурации
1. ты знаешь, что делаешь
2 данных всё равно нет
3. дальнейших проблем меньше
12 — 01.04.21 — 15:56
аааа стоп
ты и создал в основной
оставь так
13 — 01.04.21 — 15:57
Если конфа уже снята с поддержки (и там нахреначено своих объектов) то не советую в расширении допиливать
Это имеет смысл если хотим все допилки из конфы в расширение перекинуть, оставив типовую
14 — 01.04.21 — 15:58
(12)Да я заколебался взаимодействия простейшие через попу прописывать. Ну не я же придумал, что из основной конфигурации в расширение через точку не обратиться и реквизит с типом документа расширения не создать
15 — 01.04.21 — 16:01
(14) Дык см (13)
Переноси все допилки в расширение
16 — 01.04.21 — 16:01
(15)+ Или откажись от расширения
17 — 01.04.21 — 16:05
18 — 01.04.21 — 16:42
(0) Хозяин — барин. Но если в конфигурации уже включена возможность изменений, то лучше все новые собственные объекты и новые реквизиты типовых объектов создавать в основной конфигурации.
Использовать для этого (новых объектов и новых реквизитов типовых объектов) расширение — просто глупость и бессмысленная блажь, не имеющая под собой никакой логической основы и реальной потребности. Просто массовое умопомрачение какое-то. Типа мода такая — лепить без разбора любые доработки только через расширение! А зачем? — А никто не знает…
19 — 01.04.21 — 16:44
(18) чтобы потом хобана хобана и обновили малой кровью перешли на новую версию конфы)
20 — 01.04.21 — 16:58
(19)бля а тут че хобана отпадает?
куда у него денутся новые объекты со своим префиксом из основной
конфы при обновлении?
21 — 01.04.21 — 17:00
(20) а куда думаешь денутся его доработки в типовых формах и модулях?
22 — 01.04.21 — 17:46
(18) для того, что бы понять всю прелесть расширений — надо попробовать сопровождать клиентов на поддерживаемой конфе, в противном случае даже осуждать нечего.
23 — 01.04.21 — 18:04
(22) Чтобы понять все недостатки расширений надо попробовать делать это (сопровождать клиентов на поддерживаемой конфе) достаточно длительное время и с хоть сколько-нибудь серьёзными доработками.
Ещё раз повторюсь, для тех у кого с чтением проблемы. Использовать расширение данных в конфигурациях, где включена возможность изменения (или есть можно её включить), совершенно бессмысленное занятие. Никакого профита от это нет, кроме рисков и геморроя.
А автор (19) вообще видимо не понимает какую дичь пишет. Ибо добавление своих объектов и реквизитов в основной конфигурации на процесс обновления на новую версию никак не влияет.
Расширения — крутая и полезная штука. Но не для этих целей.
24 — 01.04.21 — 18:47
(23) >> Чтобы понять все недостатки расширений надо попробовать делать это (сопровождать клиентов на поддерживаемой конфе) достаточно длительное время и с хоть сколько-нибудь серьёзными доработками.
Видимо у меня есть такой опыт и следовательно могу судить о том, стоит ли использовать расширения и для каких целей. А снимать конфу с поддержки это последнее дело.
25 — 01.04.21 — 19:44
(24)видимо мелковат опыт в этом
(21)для доработки форм давно выбран наиболее оптимальный
вариант — программно
все для этого есть в нормальных типовых
и
никуда твои процедуры из форм не денутся
26 — 01.04.21 — 19:55
(25) что-то мне подсказывает, что мой опыт будет чуть побольше.
27 — 01.04.21 — 20:11
писькометр ищите
28 — 01.04.21 — 20:23
(26)да ради бога.
29 — 01.04.21 — 20:28
(24) >> у меня есть такой опыт … А снимать конфу с поддержки это последнее дело.
Для человека, который не видит или не понимает разницы между «включение возможности изменения» и «снять с поддержки», утверждение о том, что у тебя есть достаточный опыт выглядит кране сомнительно.
Дальше спорить просто бессмысленно, если ты даже в базовых механизмах поддержки разобраться не сумел.
30 — 02.04.21 — 09:16
(25) Вот представь у тебя кусок года воткнут в типовую функцию/процедуру, а в след релизе эта процедура изменилась(и таких вставок 100500 в некоторых конфах), то что по твоему перенесется при обновлении? Просто из сообщений читаешь, мол все так легко и просто, тыкнул обновить и все заработало…А теперь представь, что эти куски кода вставлены в расширение, а конфа с поддержки не снята, то тут останется лишь проверить, что обращения к типовым функциям действуют. Либо другой вариант, у тебя на поддержке штук 20 бухгалтерий и столько же Зуп, они типовые, но в них нужно каую нить херню в добавить в конфиг и сразу обновление такой конфы становится раза 2-3 дольше из-за сравнений, расширение в таких случаях выручает.
31 — 02.04.21 — 09:18
(30) Особенно «доставляет» переносить конфу с лохматых времен на новую версию… как раз подобная задача меня ждет в этом месяце(чертова маркировка и СРМ). А конфа запилена перепилена, извращались на ней жестоко.
32 — 07.04.21 — 17:36
Выше имели ввиду, видимо, именно добавление в конфигурацию нов. объектов и включение возм-ти изменения. С добавленными объектами при обновлении действительно ничего не происходит, они не мешают. А вот «кромсать» готовые модули и объекты на поддержке — нужно очень аккуратно, в исключительных случаях и при обновлении за этими изменениями — следить.
33 — 07.04.21 — 17:44
(32) про новые объекты вообще вопросов нет, а вот с модифицированными типовыми процедурами могут быть проблемы, в этом случае расширения выручают
34 — 07.04.21 — 18:28
(7) я предполагал но не угадал: беспроблемное обновление типовой конфигурации при вынесении доработок в расширение (даже в расширения — «автономные» доработки которые наращивают отдельный функционал — и отдельно доработки, которые потенциально могут пересекаться с направлением развития самой конфигурации ее разработчиком а также исправления для их ревизии после обновления).
ЗЫ: интересно — ситуация двигается в сторону реализации именно pure модульности в виде конфигурации-карткаса с модулями-расширениями?..
35 — 07.04.21 — 20:18
(33) >> с модифицированными типовыми процедурами могут быть проблемы, в этом случае расширения выручают.
Всё ровным счетом наоборот. Типовой код следует в большинстве случае дорабатывать внутри самой конфигурации.
Ибо при обновлении придётся вручную(!) каждый раз проверять совместимость твоего расширения с доработанной процедурой.
Если же процедура доработана внутри самой конфы, то при трёхстороннем сравнении/объединении ты сразу видишь в одном окне все изменения поставщика и может адекватно сравнить и сопоставить их с тем изменениями, которые сделал сам. Оценить их комплементарность и при необходимости внести сразу правки.
36 — 07.04.21 — 20:18
(34) >> ситуация двигается в сторону реализации именно pure модульности в виде конфигурации-карткаса с модулями-расширениями?
Нет. Расширения не для этого.
37 — 07.04.21 — 20:20
(35) +1
38 — 07.04.21 — 20:25
(25): нуралиев?
расширения для этого пригодны — и становятся все более пригодными. поэтому и вопрос такой.
39 — 07.04.21 — 21:21
(5) А теперь попробуй через метаданные из конфигурации к нему обратиться.
40 — 07.04.21 — 22:39
(34) >>ЗЫ: интересно — ситуация двигается в сторону реализации именно pure модульности в виде конфигурации-карткаса с модулями-расширениями?..
Двигается, но не 1С, поищи в яндексе «Модульная конфигурация».
41 — 08.04.21 — 01:04
42 — 08.04.21 — 01:14
Интересный теоретический вопрос: если создать объекты в расширение(справочники, документы и т.д.), набить по ним данных в базе, а потом бах и отключить расширение (или даже удалить), запустить базу, а потом включить расширение обратно. Что будет с данными по этим объектам?
43 — 08.04.21 — 06:18
(42) если удалить расширение то логично, что данные будут удалены…если просто отключить то с данными ничего не случится.
lucbak
44 — 08.04.21 — 06:18
(41) да
09.06.2017
Расширение данных
Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.
Реализовано в версии 8.3.11.2867.
Теперь с помощью расширений конфигурации вы можете добавлять к прикладному решению собственные структуры для хранения данных: справочники, документы, регистры сведений.
В расширении вы добавляете (или модифицируете) соответствующий объект конфигурации. При загрузке расширения, «на лету», выполняется реструктуризация базы данных, и, перезапустив сеанс, вы сразу же можете заполнять новые структуры своими данными.
Что мы сделали
Можно сказать, что это самая сложная и самая ожидаемая доработка механизма расширений. Мы доработали механизм расширений таким образом, что теперь вы можете добавить в прикладное решение объекты или реквизиты, данные которых будут сохранены в информационной базе. Раньше вы могли дорабатывать прикладное решение, но расширение не влияло на структуру хранимых данных. Теперь с помощью расширений вы можете изменить и структуру данных тоже.
Вы можете добавлять собственные:
- Справочники;
- Документы;
- Регистры сведений;
- Планы обмена.
Кроме этого к справочникам и документам прикладного решения вы можете добавить собственные:
- Реквизиты;
- Табличные части;
- Реквизиты табличных частей.
Как это устроено физически
Чтобы не усложнять, рассмотрим основные принципы работы этого механизма на примере справочника.
Если расширение добавляет собственный справочник, то для него создаётся новая таблица в базе данных. В этом случае всё просто и очевидно.
Сложнее обстоят дела, когда расширение модифицирует уже существующую структуру данных. Если расширение добавляет собственный реквизит к справочнику прикладного решения, то для этого справочника создаётся отдельная таблица с новой структурой (с дополнительной колонкой для нового реквизита). Будем называть её расширенная таблица. В неё переносятся данные из старой таблицы справочника. В дальнейшем все обращения к этому справочнику будут переадресовываться к расширенной таблице.
Независимо от количества расширений, модифицирующих этот справочник, расширенная таблица будет всегда одна. Её структура будет содержать изменения, добавленные всеми расширениями.
Если прикладное решение использует разделение данных, и расширение применяется к одной рабочей области, то в расширенную таблицу будут копироваться только те данные справочника, которые относятся к этой области. На рисунке расширенная таблица называется _REFERENCE1X, оранжевым цветом обозначена колонка, добавленная расширением.
В этой рабочей области обращение к данным справочника будет переадресовываться к расширенной таблице. А для остальных областей, для которых не применялось расширение, все обращения к данным будут адресоваться к старой, исходной таблице справочника _REFERENCE1.
Из такой реализации вытекает одно ограничение, которое, на наш взгляд, не должно существенно помешать вам использовать новые возможности.
Если расширение, модифицирующее структуру данных, вы хотите применять к отдельным областям, то все объекты прикладного решения, которые модифицируются расширением, должны разделяться только «независимо».
Если же вы хотите модифицировать и те объекты, которые разделяются «независимо и совместно», то в этом случае вам не удастся применить расширение только к одной области. Его надо будет применить ко всей базе, ко всем областям сразу. Для этого нужно указать, что разделение данных на расширения «не действует» (свойство общего реквизита Разделение расширений конфигурации = Не использовать).
Дальше рассмотрим несколько ситуаций, которые могут возникнуть после того, как вы применили к прикладному решению расширение, модифицирующее структуру данных.
Изменение расширяемой конфигурации
Итак, в базе данных появились расширенные таблицы. Но после этого конфигурация прикладного решения изменилась. Что будет происходить при реструктуризации базы данных?
Все расширенные таблицы также будут реструктуризироваться. Общая стратегия заключается в том, что все расширенные таблицы должны обновиться до нового состояния расширяемой конфигурации. При этом если в процессе их обновления возникнут ошибки, вызванные исключительно изменениями основной конфигурации, то информация об этом будет выдана так же, как и раньше.
Невозможность применения расширения
Другая ситуация — пользователи поработали, заполнили расширенные таблицы данными. После этого конфигурация прикладного решения изменилась, и при очередном запуске расширение не применилось. Что будет с данными в расширенных таблицах?
Самое главное – данные никуда не исчезнут, они останутся в таблицах. А вот способы работы с этими таблицами могут быть разными.
Самый простой случай, если расширение добавляло собственный справочник. Тогда мы оказываемся в ситуации, когда таблица есть, а метаданных, которые её описывают, нет. В этом случае данные просто будут недоступны. До тех пор, пока не будет решена проблема с применением расширения.
Более интересная ситуация получается тогда, когда расширение модифицировало существующий справочник. В этом случае мы имеем расширенную таблицу и метаданные (из конфигурации), которые описывают только часть этой таблицы. В такой ситуации данные, находящиеся в колонках, добавленных расширением, также будут недоступны. Но остальные данные можно будет прочитать.
Однако запись в этот справочник будет недоступна. До тех пор, пока не будет решена проблема с применением расширения. То есть до тех пор, когда у платформы не появится полный набор метаданных, описывающих эту таблицу.
Удаление расширения
Раньше вы могли спокойно удалять расширения из информационной базы. Это не имело никаких последствий для данных, так как расширения привносили только свою функциональность.
Теперь удаление расширений становится ответственной операцией. Потому что при удалении расширения из базы данных будут удалены и все данные, которые содержатся в структурах, добавленных расширением.
При этом если получается так, что конечная структура таблиц полностью описывается конфигурацией прикладного решения, будет выполнена и «обратная» реструктуризация. То есть данные из расширенных таблиц будут скопированы обратно в исходные таблицы объектов, а сами расширенные таблицы будут удалены.
Загрузка, применение и реструктуризация
Как вы понимаете, результатом использования новых возможностей расширения должна стать база данных с новыми таблицами. Процесс изменения структуры таблиц базы данных (реструктуризация) обычно, раньше, выполнялся только в конфигураторе. В тот момент, например, когда вы нажимали кнопку Обновить конфигурацию базы данных.
Теперь ситуация меняется. Расширения могут подключаться как в конфигураторе, так и в режиме работы 1С:Предприятие. Если при этом требуется изменить структуру таблиц, то в том же режиме будет выполняться и реструктуризация. И для её выполнения требуется монопольный режим.
Если вы работаете с неразделённой базой, то будет установлена монопольная блокировка всей базы. А если база использует режим разделения данных, то будет установлена монопольная блокировка той области, в которую загружается расширение.
При работе в конфигураторе реструктуризация, как и раньше, выполняется в момент обновления конфигурации базы данных. То есть сначала вы загружаете (или создаёте) расширение, сохраняете его в информационной базе. А затем выполняете обновление конфигурации базы данных. В этот момент происходит реструктуризация и создание новых и расширенных таблиц.
А при работе в режиме 1С:Предприятие процессы загрузки расширения и реструктуризации базы данных совмещены, не разделяются.
То есть в момент добавления расширения, или в момент его загрузки в существующее расширение, будут выполнены следующие действия:
- Загрузка расширения в информационную базу;
- Проверка возможности применения расширения;
- Анализ изменений;
- Если на предыдущем этапе выяснилось, что нужно изменять структуру данных, то будет установлен монопольный режим;
- Реструктуризация (если она необходима).
Если на 2 шаге окажется, что расширение применить невозможно, весь процесс будет возвращён к исходному состоянию, в том числе и загрузка расширения в информационную базу.
Реструктуризация в режиме 1С:Предприятие выглядит проще, чем в конфигураторе. Чтобы понять разницу, напомним, как это выглядело в конфигураторе раньше.
Сначала платформа анализировала изменение метаданных и готовила всё, что необходимо для последующего изменения структуры базы данных. Когда всё было готово, она отображала диалог будущих изменений, и ожидала от вас явной команды для того, чтобы всё это выполнить. Вы соглашались, и платформа начинала менять структуру базы данных. Если в этом месте происходил сбой, то оставшиеся изменения платформа выполняла при следующем запуске конфигуратора. Если реструктуризация не была завершена, а вы пытались запустить сеанс 1С:Предприятия, платформа не позволяла вам это сделать, и предлагала перейти в конфигуратор, чтобы завершить реструктуризацию.
Теперь, когда реструктуризация выполняется в режиме 1С:Предприятие, всё происходит так же, но проще. Отсутствует диалог явного принятия будущих изменений. Если в фазе подготовки никаких ошибок не возникло, платформа автоматически примет все изменения и изменит структуру базы данных. Если в фазе изменения структуры базы данных произойдёт сбой, то завершение изменений будет выполнено при следующем запуске сеанса 1С:Предприятия (или при следующем входе в область, если база в режиме разделения данных). То есть тут не требуется участие конфигуратора ни на какой стадии.
Ограничения и планы
Нужно сказать, что в описываемой версии мы сделали не всё, что хотелось сделать. Однако мы решили, что важнее выпустить то, что уже сделано, пусть даже с некоторыми ограничениями.
На текущий момент существенные, на наш взгляд, ограничения выглядят так:
- Регистраторы регистра сведений. Заимствованному регистру нельзя назначить ни собственный, ни заимствованный регистратор (документ);
- При этом собственному регистру можно назначить как заимствованный, так и собственный регистратор;
- При обмене в распределенной информационной базе в главном узле и в подчинённом узле должен быть одинаковый набор расширений, модифицирующих структуру данных. Автоматическая синхронизация таких расширений между узлами пока не реализована;
- В состав плана обмена (собственного или заимствованного) могут быть включены только собственные объекты расширения;
Эти ограничения мы планируем устранять, в ближайшее время мы будем работать в этом направлении.
Кроме этого мы планируем увеличить набор объектов конфигурации, которые можно дорабатывать с помощью расширений.
Также мы будем работать над тем, чтобы упростить создание расширений, упростить их адаптацию к изменениям прикладного решения (тот случай, когда расширение перестаёт подключаться).
Помимо этого мы готовы принимать ваши пожелания, анализировать их, и учитывать. В настоящий момент существует довольно широкий спектр задач и направлений для дальнейшего развития, поэтому своими пожеланиями вы можете повысить приоритет тех или иных задач в нашей будущей работе. Прежде всего, нам хотелось бы увидеть пожелания, основанные на реальной практике создания и использования расширений.
Теги:
расширения
8.3.11
Файлы материала
Описание
Новый реквизит на форму, можно добавить программно через расширение, при этом не забирать саму форму в расширение (это удобно тем, что последующие обновления внешнего вида формы не смогут сломать наше расширение). В типовых конфигурациях, данный способ можно реализовывать в процедуре “ПриСозданииНаСервере” общего модуля “УправлениеСвойствами” .
Программное добавление реквизита на форму
Для примера, стоит задача в конфигурации ЗУП 3.1 добавить реквизит «Способ отражения зарплаты в БУ» для позиции штатного расписания в группе “Дополнительные данные”.
Создадим расширение и выполним следующую последовательность действий:
- Добавим в расширение справочник “Штатное расписание” и создадим реквизит “АВ_СпособОтражения” с типом данных “СправочникСсылка.СпособыОтраженияЗарплатыВБухУчете”
2. Заберем в расширение процедуру “ПриСозданииНаСервере” из общего модуля “УправлениеСвойствами”, программно добавим поле в форму и свяжем его с реквизитом объекта добавленного на первом шаге.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
&После(«ПриСозданииНаСервере») Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры) Если Форма.ИмяФормы = «Справочник.ШтатноеРасписание.Форма.ФормаЭлемента» Тогда #Область ДобавлениеЭлементовФормы ИмяГруппы = «ГруппаДополнительныеРеквизиты»; ГруппаФормы = Форма.Элементы.Найти(ИмяГруппы); Если ГруппаФормы <> Неопределено Тогда ИмяЭлемента = «АВ_СпособОтражения»; Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда ЭлементФормы = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ПолеФормы»), ГруппаФормы); //Вместо Добавить() можно использовать метод Вставить() //в 4-й параметре указывается Элемент перед которым должен быть вставлен новый элемент. //ЭлементФормы = Форма.Элементы.Вставить(ИмяЭлемента, Тип(«ПолеФормы»), ГруппаФормы, Форма.Элементы.Найти(«ИмяСледующегоЭлементаФормы»)); ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода; ЭлементФормы.ПутьКДанным = «Объект.АВ_СпособОтражения»; //ЭлементФормы.МногострочныйРежим = Истина; //ЭлементФормы.Высота = 3; КонецЕсли; КонецЕсли; #КонецОбласти КонецЕсли; КонецПроцедуры |
Образец расширения для скачивания в начале описания.
Программное добавление реквизита в табличную часть формы
Например, таким же способом, добавим в табличную часть “Рабочие места” реквизит “Спецжиры” с типом “Булево”.
&После(«ПриСозданииНаСервере») Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры) Если Форма.ИмяФормы = «Документ.РезультатыСпецоценкиУсловийТруда.Форма.ФормаДокумента» Тогда #Область ДобавлениеЭлементовФормы ИмяЭлемента = «АВ_ЕстьСпецжиры»; Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда ЭлементФормы = Форма.Элементы.Добавить(«Спецжиры», Тип(«ПолеФормы»), Форма.Элементы.РабочиеМеста); ЭлементФормы.Вид = ВидПоляФормы.ПолеФлажка; ЭлементФормы.ПутьКДанным = «Объект.РабочиеМеста.АВ_ЕстьСпецжиры»; //ЭлементФормы.ТолькоПросмотр = Истина; КонецЕсли; #КонецОбласти КонецЕсли; КонецПроцедуры |
В результате получим табличную часть с новой колонкой.
Программное добавление табличной части на форму
Аналогично добавим табличную часть “АВ_ВредныеФакторы” на форму справочника “Профессии”.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
&После(«ПриСозданииНаСервере») Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры) Если Форма.ИмяФормы = «Справочник.ПрофессииРабочих.Форма.ФормаЭлемента» Тогда #Область ДобавлениеЭлементовФормы ИмяГруппы = «ГруппаДополнительныеРеквизиты»; ГруппаФормы = Форма.Элементы.Найти(ИмяГруппы); Если ГруппаФормы <> Неопределено Тогда ИмяЭлемента = «АВ_ВредныеФакторы»; Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда ЭлементФормыТаблица = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ТаблицаФормы»), ГруппаФормы); ЭлементФормыТаблица.ПутьКДанным = «Объект.АВ_ВредныеФакторы»; ЭлементФормы = Форма.Элементы.Добавить(«ВредныйФактор», Тип(«ПолеФормы»), ЭлементФормыТаблица); ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода; ЭлементФормы.ПутьКДанным = «Объект.АВ_ВредныеФакторы.ВредныйФактор»; КонецЕсли; КонецЕсли; #КонецОбласти КонецЕсли; КонецПроцедуры |
Связь реквизитов формы с элементами формы
Кроме того, реквизиты формы можно создавать программно и связывать их с элементами формы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#Область ДобавлениеРеквизитовФормы // Массив для новых реквизитов ДобавляемыеРеквизиты = Новый Массив; // Опишем ревизиты формы Реквизит_РабочееМесто = Новый РеквизитФормы(«АВ_РабочееМесто», Новый ОписаниеТипов(«СправочникСсылка.РабочиеМестаОхраныТруда»), , «Рабочее место»); // Заполним массив после описания реквизитов формы ДобавляемыеРеквизиты.Добавить(Реквизит_РабочееМесто); // Добавим новые реквизиты в форму Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); #КонецОбласти #Область ДобавлениеЭлементовФормы ... #КонецОбласти #Область ЗаполнениеДанных Форма.АВ_РабочееМесто = Форма.Объект.АВ_РабочееМесто; #КонецОбласти |
Расширения, Типовые приемы, Шаблоны и заготовки
Yulunga 1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
||||||||
1 |
||||||||
расширения и недоступные реквизиты17.11.2017, 11:11. Показов 35379. Ответов 8 Метки нет (Все метки)
добрый день.
теперь собираюсь его же забацать в 8.3 с расширением
в консоли запросов работает. в расширении — нет. говорит нет ничего . добавил реквизит валюта взаиморасчета. окей.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
17.11.2017, 11:11 |
8 |
476 / 413 / 93 Регистрация: 26.09.2012 Сообщений: 1,907 |
|
17.11.2017, 17:37 |
2 |
Идешь по справочниками и добавляешь нужные реквизиты. Думаю в случае владельца, нужно добавить и все справочники, что могут быть его владельцем.
0 |
1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
|
20.11.2017, 08:06 [ТС] |
3 |
нужно добавить и все справочники, что могут быть его владельцем. там родитель — справочник.контрагенты. а он добавлен. засада ( Миниатюры
0 |
1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
|
20.11.2017, 08:26 [ТС] |
4 |
прикольно. надо добавить форму списка в расширение. тогда всё появляется )
0 |
Joker_vad 476 / 413 / 93 Регистрация: 26.09.2012 Сообщений: 1,907 |
||||
20.11.2017, 17:32 |
5 |
|||
На м..сте нашел что нужно получить поля через * т.е
0 |
1808 / 1228 / 442 Регистрация: 16.01.2015 Сообщений: 5,395 |
|
20.11.2017, 17:49 |
6 |
может кто пояснить, при чём тут ФОРМА ? Yulunga, Еще как причем. Добавляя форму в расширение, автоматом добавляются все связанные с формой реквизиты, все Справочники документы перечисления, чей тип установлен для полей формы. Добавлено через 7 минут
там родитель — справочник.контрагенты. а он добавлен. засада ( А на скрине как раз реквизит Контрагент в справочнике ДоговорыКонтрагентов, в расширение не перенесен. Просто перенесите этот реквизит в расширение и все
1 |
1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
|
20.11.2017, 18:27 [ТС] |
7 |
Проверка синтаксиса в расширении даст ошибку, но запрос в режиме предприятия будет работать а, это слово-в-слово я где-то прочитал сегодня. но не вчитался. теперь понял.
Добавляя форму в расширение, автоматом добавляются все связанные с формой реквизиты,… теперь понятно, спасибо, вник.
А на скрине как раз реквизит Контрагент в справочнике ДоговорыКонтрагентов, в расширение не перенесен. Просто перенесите этот реквизит в расширение и все так в этом и был вопрос — как ?
0 |
1808 / 1228 / 442 Регистрация: 16.01.2015 Сообщений: 5,395 |
|
20.11.2017, 19:13 |
8 |
а, это слово-в-слово я где-то прочитал сегодня. но не вчитался. теперь понял. Чест слово не копипастил))) Но… для удобства работы, сам всегда переношу все что надо в расширение
теперь понятно, спасибо, вник. И…. одна из задач после окончания написания расширения, удалить ВСЕ, что не задействовано в его работе (то что задействовано, не даст удалить. начинать надо с реквизитов форм и подниматься выше по иерархии)
потому что реквизита контрагент не было. переносить было нечего. это и есть родитель Это в справочнике ДоговорыКонтрагентов НЕТ реквизита Контрагент?!!! Может вы не поняли? Надо реквизит справочника из основной конфигурации перенести в расширение. На реквизите в основной пр кн мыши — добавить в расширение
0 |
1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
|
21.11.2017, 07:24 [ТС] |
9 |
Это в справочнике ДоговорыКонтрагентов НЕТ реквизита Контрагент?!!! см. рисунок.
Может вы не поняли? я наверно плохо объясняю. Миниатюры
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
21.11.2017, 07:24 |
9 |
1С, как добавить, изменить реквизит формы объекта через расширение
В новых версиях платформы, при изменении типовых форм, стандартные и новые реквизиты (добавленные в расширение) по умолчанию недоступны: их нельзя изменить, ни добавить в форму. Дело в том, что немного изменился механизм добавления реквизитов в расширение, для изменения типовых форм объектов.
Вам необходимо выполнить следующие действия:
- В дереве метаданных нажать правой кнопкой мыши на реквизит -> «Добавить в расширение» -> выбрать расширение;
- Перейти в расширение конфигурации, открыть форму, в которую планируем добавить (или изменить) реквизит -> в области справа выделить реквизит -> нажать правую кнопку мыши -> «Добавить реквизит»;
Почему в новой платформе изменился данный механизм?
Теперь связанные с формой реквизиты в дереве метаданных платформы не переносятся вместе с формой в расширение, а только отображаются как отражение основной конфигурации. Перенос реквизитов для их модификации проводится прямо из формы. Сделано это было для того, чтобы при изменении какого либо реквизита в стандартной конфигурации — расширение не теряло свою работоспособность.
Реквизиты, которые возможно изменить в форме выделяются черным цветом, а недоступные — серым. При этом при обновлении реквизиты в старых расширениях будут сразу доступны для редактирования.
Связанные статьи
Contents
- 1 Механизм расширения конфигурации 1C
- 2 Как добавить расширение конфигурации 1С 8.3
Механизм расширения конфигурации 1C
Приветствую уважаемый читатель, в данной статье предлагаю ознакомиться с Механизмом расширения конфигурации 1С 8.3, в частности мы познакомимся с его работой в режиме Адаптация, а также рассмотрим пример программного изменения Формы объекта при помощи расширения. Ну, а сейчас немного теории…
Как указано в описании: «Механизм расширения конфигурации – это специальный механизм, предназначенный для доработки расширяемой конфигурации без изменения этой конфигурации (в том числе без снятия с поддержки).»
Основным назначением расширения конфигурации является доработка прикладных решений (конфигураций) под нужды клиента. При этом нет необходимости в снятии дорабатываемой конфигурации с поддержки. В результате сохраняется простота сопровождения и обновления типового прикладного решения, стоящего на поддержке.
При разработке расширений следует учитывать следующие факты:
— в системе могут функционировать более одного расширения.
— расширяемая конфигурация в любой момент может быть изменена, например, в результате обновления и разработчик расширения никак не может повлиять на возможность или невозможность обновления
Расширение может иметь одно из следующих назначений:
Исправление — предназначено для оперативного исправления ошибок в прикладном решении. В таких расширениях часто применяется метод с помощью аннотации Вместо. Как правило это назначение предназначено для определенной версии прикладного решения. При выходе следующей версии этого решения автор расширения должен проводить анализ применимости созданных расширений в новой версии.
Адаптация — предназначено для адаптации прикладного решения под условия конкретного заказчика. Предполагается, что в каждый момент времени в информационной базе существует минимальное количество таких расширений. Если в одно расширение невозможно включить весь набор изменений, то рекомендуется расширения с назначением Адаптация разбивать по максимально крупным блокам расширяемого прикладного решения.
Дополнение — предназначено для реализации новых возможностей прикладных решений, которые минимально привязаны к конкретной версии прикладного решения. В качестве примера можно привести создание нового набора отчетов, который отсутствует в прикладном решении. Предполагается, что таких расширений может быть произвольное количество.
Расширение создается в конфигураторе, хранится в информационной базе и может быть выгружено в файл. Для подключения расширения, сохраненного в файл, в прикладное решение нет необходимости использовать конфигуратор. Подключить расширение можно с помощью стандартного функционала (Все функции Стандартные Управление расширениями конфигурации). Подключить расширение также используя программный интерфейс, предоставляемый платформой.
Ограничения использования расширений:
Расширения конфигурации не поддерживают создание следующих собственных объектов:
— Параметры сеанса.
— Общие реквизиты.
— Критерии отбора.
— Подписки на события.
— Регламентные задания.
— Функциональные опции и параметры функциональных опций.
— Определяемые типы.
— Хранилища настроек.
— Языки.
— Константы.
— Журналы документов.
— Бизнес-процессы и задачи.
— Внешние источники данных.
Не поддерживается расширение следующих объектов:
— Нельзя создавать подчиненные подсистемы.
— Если объект не может быть собственным объектом расширения его расширение также не поддерживается.
— Состав значений перечислений;
Не поддерживается добавление реквизитов и табличных частей для:
— План видов характеристик;
— План счетов;
— План видов расчетов.
Не поддерживается изменение структуры регистров всех видов. Поддерживается только расширение состава регистраторов.
В базовых версиях прикладных решений работа с расширениями не поддерживается.
Стоит помнить, что Механизм расширения конфигурации – это перспективный постоянно развивающийся механизм и с выходом новых версий платформ их функционал только расширяется и лишается текущих недочетов.
Как добавить расширение конфигурации 1С 8.3
Предлагаю рассмотреть задачу добавления нового Справочника «Категория должности по Классификатору Предприятия» с выводом его значения на Форму Справочника Должности, на базе Конфигурации ЗУП 3.1
Для создания расширения необходимо запустить 1С в режиме конфигуратора.
В конфигураторе необходимо зайти в меню «Конфигурация» и выбрать пункт «Расширения конфигурации». Откроется окно со списком расширений (если они есть). Далее нажмем кнопку «Добавить». Мы увидим диалоговое окно создания расширения:
Стоит отдельно выделить поле Назначение – необходимо выбрать его значение в зависимости от решаемой задачи – т.к. мы выполняем добавление объектов по требованиям конкретного заказчика – нам подойдет вариант «Адаптация».
После нажатия на кнопку «ОК» — двойным кликом по появившейся строке откроем Конфигурацию расширения. Мы увидим практически пустое дерево конфигурации.
Добавим в расширение справочник Категория должности по Классификатору Предприятия. Стоит обратить внимание, что в название всех объектов процедур и функций созданных в расширении, добавляется его префикс (в нашем случае Расш1_);
Разместим наш новый Справочник в Подсистеме «ШтатноеРасписание» для этого необходимо добавить эту подсистему в Расширение – Перейдем в дерево основной Конфигурации и нажмем правой кнопкой мыши на строке с нужной подсистемой и выберем пункт «Добавить в расширение».
Теперь мы можем управлять ее составом, добавим наш новый объект в подсистему.
Далее добавим в расширение Справочник Должности и добавим для него новый реквизит КатегорияДолжности с типом СправочникСсылка.Расш1_КатегорияДолжностиПоКлассификаторуПредприятия
Далее необходимо решить задачу с выводом реквизита КатегорияДолжности на форму Справочника Должности, реализовать это можно двумя способами:
— Интерактивно, добавив Форму «ФормаЭлемента» в расширение
— Программно, не добавляя Форму Справочника в расширении, а добавив подходящую процедуру, вызываемую в обработчике Формы «ПриСозданииНаСервере» в расширение.
Останавливаться на плюсах и минусах каждого решения не будем, а ниже рассмотрим оба варианта.
Интерактивное изменение Формы в расширении.
Для того чтобы вывести Реквизит на форму интерактивно: необходимо добавить саму Форму «ФормаЭлемента» в расширение. Обращу ваше внимание на следующий момент – для того чтобы появилась возможность Интерактивного добавления Реквизита объекта на форму необходимо сам Объект тоже добавить в расширение.
Далее добавим новый Реквизит в подходящую Группу на форме.
Запустив 1С в режиме Предприятия убедимся, что новый Справочник появился в интерфейсе
А открыв элемент справочника Должности, увидим, что добавляемый реквизит Категория должности также в нужном месте.
Программное изменение Формы в расширении.
Для того чтобы программно добавить элемент на форму нам необходимо определится в каком месте это сделать оптимально с точки зрения простоты дальнейшей поддержки и обновления конфигурации.
Предлагаю воспользоваться одной из процедур вызываемых в обработчике Формы «ПриСозданииНаСервере», в которую передается наша Форма в качестве параметра например УправлениеСвойствами.ПриСозданииНаСервере.
Перейдем в Общий модуль УправлениеСвойствами где находится данная процедура, и кликнем правой кнопкой мыши по процедуре ПриСозданииНаСервере. В выпадающем меню выберем пункт «Добавить в расширение»
Система предложит нам выбрать одну из аннотаций, подробнее о каждой из них рассмотрим в следующих публикациях, а сейчас выберем «Вызывать после»
После проделанных процедур увидим что в Расширение был добавлен общий модуль УправлениеСвойствами и процедура Расш1_ПриСозданииНаСервере с аннотацией &После(«ПриСозданииНаСервере»)
Далее в добавленную процедуру поместим следующий код:
//Определим тип, чтобы ограничить добавление реквизитов только нужными нам Формами Если ТипЗнч(Форма.СсылкаНаобъект) = Тип("СправочникСсылка.Должности") Тогда // Добавим элемент формы "Категория должности" мИмя = "Расш1_КатегорияДолжности"; Если Форма.Элементы.Найти(мИмя) = Неопределено Тогда Элемент = Форма.Элементы.Добавить(мИмя, Тип("ПолеФормы"), Форма.Элементы.ОплатаГруппа); Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = "Объект.КатегорияДолжности"; Элемент.Заголовок = "КатегорияДолжности (пр.)"; КонецЕсли; КонецЕсли;
Запустим 1С в режиме предприятия и убедимся, что на форме также появился добавленный реквизит «КатегорияДолжности (пр.)»
Готовое расширение можно выгрузить в файл перейдя в конфигураторе в меню «Конфигурация» и выбрать пункт «Расширения конфигурации». В открывшемся списке расширений по правой кнопкой мыши можно вызвать выпадающее меню, либо выбрать пункт командной панели «Конфигурация» и выбрать пункт «Сохранить конфигурацию в файл…». На выходе мы получим Файл типа *.cfe который можно передать заказчику.
Таким образом, мы научились создавать собственные расширения на примере конкретного кейса.