1с расширение добавить реквизит расширения на форму

Файлы материала
Описание

Новый реквизит на форму, можно добавить программно через расширение, при этом не забирать саму форму в расширение (это удобно тем, что последующие обновления внешнего вида формы не смогут сломать наше расширение). В типовых конфигурациях, данный способ можно реализовывать в процедуре “ПриСозданииНаСервере” общего модуля “УправлениеСвойствами” .

Программное добавление реквизита на форму

Для примера, стоит задача в конфигурации ЗУП 3.1 добавить реквизит «Способ отражения зарплаты в БУ» для позиции штатного расписания в группе “Дополнительные данные”.

Способ отражение в позиции штатного расписания

Создадим расширение и выполним следующую последовательность действий:

  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

#Область ДобавлениеРеквизитовФормы

// Массив для новых реквизитов

ДобавляемыеРеквизиты = Новый Массив;

// Опишем ревизиты формы

Реквизит_РабочееМесто = Новый РеквизитФормы(«АВ_РабочееМесто», Новый ОписаниеТипов(«СправочникСсылка.РабочиеМестаОхраныТруда»), , «Рабочее место»);

// Заполним массив после описания реквизитов формы

ДобавляемыеРеквизиты.Добавить(Реквизит_РабочееМесто);

// Добавим новые реквизиты в форму

Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);

#КонецОбласти

#Область ДобавлениеЭлементовФормы

...

#КонецОбласти

#Область ЗаполнениеДанных

Форма.АВ_РабочееМесто = Форма.Объект.АВ_РабочееМесто;

#КонецОбласти


Расширения, Типовые приемы, Шаблоны и заготовки

Новые реквизиты в расширении

Я
   Звездец

07.10.19 — 02:35

Создавать новые реквизиты в расширении можно уже давно. Но пока приходилось создавать новые объекты целиком (новый справочник, документ, регистр) и все было ок. И вот понадобилось добавить реквизит к заимствованному документу. Ну как бы все реализовано (https://wonderland.v8.1c.ru/blog/rasshirenie-dannykh/) приступаем.

Создаем расширение, заимствуем форму, создаем новый реквизит. осталось добавить его на форму … и тут упс… а в форме его нет. Связать с ним поле нельзя

image

что за?.. опять новая фича или я где-то затупил

  

Партнерская программа EFSOL Oblako

   seevkik

1 — 07.10.19 — 03:09

Как бы реализовано, ага, а режим совместимости какой?

   hhhh

2 — 07.10.19 — 03:10

(0) вы невнимательны. Выбрали вверху  ФормаДокумента. А надо наоборот, ту что внизу ФормаДокумента.

   pavig

3 — 07.10.19 — 03:15

(0)

Правой кнопкой на «Объект» (в области на которой ты указал знак вопроса) -> «Добавить в расширение» и всё получится

   pavig

4 — 07.10.19 — 03:16

   famnam

7 — 07.10.19 — 06:42

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

   Звездец

8 — 07.10.19 — 07:01

Специально создал демо без режима совместимости на последней платформе. Форма открыта правильно уже заимствованная

   Звездец

9 — 07.10.19 — 07:02

(4) ну так этим я создам реквизит формы в расширении и он не будет связан с новым реквизитом объекта в расширении

   Uzyf

10 — 07.10.19 — 08:44

Не стоит создавать реквизиты в расширении, чтобы потом не терять из них данные

   Звездец

11 — 07.10.19 — 09:00

(10) это тема для другой дискуссии. Сейчас не об этом

   AlvlSpb

12 — 07.10.19 — 09:56

(11) В (2) тебе четко назвали причину. Добавляешь реквизит в расширении, так и на форму выводи его в расширении, а не в основной форме

   Звездец

13 — 07.10.19 — 09:58

(12) тьфу ты блин. Спать надо ночью …

   Cyberhawk

14 — 07.10.19 — 10:00

Интересно, как тогда предполагается понимать по задумке ребяток из 1С надпись «Форма (расширение)» в конструкторе формы )

   Звездец

15 — 07.10.19 — 10:02

(14) ага, вот это и меня смутило. Вроде форма уже заимствована, реквизит добавлен, а оказывается его еще раз надо добавлять в форму

   Cyberhawk

16 — 07.10.19 — 10:04

(15) Так ты сначала добавил реквизит, а потом заимствовал?

   Звездец

17 — 07.10.19 — 10:05

(16) по разному пробовал. и сначала форму, потом реквизит. И сначала заимствовал объект, потом добавил реквизит, потом заимствовал форму. разницы никакой

   Cyberhawk

18 — 07.10.19 — 10:10

(17) Так ты открывал форму (конструктор формы) из дерева основной конфигурации, а не из дерева расширения, правильно понял?

   Звездец

19 — 07.10.19 — 10:14

нет, все из дерева расширения естественно

   Cyberhawk

20 — 07.10.19 — 10:14

Проверил: (14) не наблюдается.

Значит у тебя на твоей картинке открыта форма из расширения. Что тогда предлагают тебе делать (2) и (11) не ясно.

   Звездец

21 — 07.10.19 — 10:16

ну а у тебя добавить реквизит на форму получилось?

   Cyberhawk

22 — 07.10.19 — 10:21

(21) На 8.3.10 поведение не отличается от того, что ты описал

   Cyberhawk

23 — 07.10.19 — 10:21

Щас на конфе с режимом совместимости 8.3.12 проверю

   Звездец

24 — 07.10.19 — 10:23

(22) это 8.3.11 появилось

   Cyberhawk

25 — 07.10.19 — 10:23

+(23) Аналогично

   Cyberhawk

26 — 07.10.19 — 10:23

(24) Платформа 8.3.14 везде, в (22) вел речь о режиме совместимости конфы / расширения.

   Cyberhawk

27 — 07.10.19 — 10:25

Полагаю, в конструктор формы расширения добавляемые в объект реквизиты тупо не подвезли

   Cyberhawk

28 — 07.10.19 — 10:25

Т.е. программно добавить элемент и путь к данным прописать получится без труда

   RomanYS

29 — 07.10.19 — 10:27

(27) Проверил. Там реально крепкий маразм. В расширенной форме нужно объект (в реквизитах) добавить в расширение)))

   RomanYS

30 — 07.10.19 — 10:29

+(29) пытаюсь найти в этом хоть каплю здравого смысла, пока не получается

   Cyberhawk

31 — 07.10.19 — 10:31

+(29) Ага, помогло. Только после этого отображение формы сломалось.

А при вызове команды «Обновить расширение формы» все возвращается обратно, в т.ч. и добавленный реквизит исчезает.

   Cyberhawk

32 — 07.10.19 — 10:32

+(31) После этого действия добавленный реквизит в объект уже никак не добавить, команда «добавить в расширение» неактивна)

   Cyberhawk

33 — 07.10.19 — 10:32

*добавленный в объект реквизит в форму уже никак не добавить

   Звездец

34 — 07.10.19 — 10:33

(31) да вообще какой-то треш с обновлением расширений. Если сделал чего-то сложного — задолбешься потом переделывать. В общем какое-то уг пока. Попробую попользовать на паре реквизитов, ну а одну идею пока отложу до лучших времен

   Cyberhawk

35 — 07.10.19 — 10:34

(34) В 8.3.15 вроде это пофиксили, там форма в расширение приезжает сразу куцая

   RomanYS

36 — 07.10.19 — 10:34

(31) (32) (33) Жесть. Ну их в ж.. эти расширения. Где адепты этого волшебного инструмента?

   Звездец

37 — 07.10.19 — 10:35

(35) не, че-то ничего они толком не пофиксили

   RomanYS

38 — 07.10.19 — 10:35

(35) Это не лечит (31). Я тестил на 8.3.15.1656

   Cyberhawk

39 — 07.10.19 — 10:36

(38) А режим совместимосты конфы и расширения тоже 8.3.15?

   Звездец

40 — 07.10.19 — 10:37

(39) да, я ради этого как раз новую пустую демо и создавал. Тоже грешил на совместимость вначале

   Cyberhawk

41 — 07.10.19 — 10:37

(36) Используем только как патчи, и не для форм

   Звездец

42 — 07.10.19 — 10:39

(41) ну при этом то хочется. Снимать с поддержки конфу если надо пару реквизитов добавить и в печ форму вывести очень не хочется, а использовать дополнительные реквизиты неудобно из-за их вывода в ж-пе формы

   RomanYS

43 — 07.10.19 — 10:40

(31) Эта кнопка вроде должна обновлять сохраненную форму основной конфы в составе расширенной после изменения/обновления конфигурации. Почему она вообще доступна и что-то делает, если конфигурация не менялась?

   RomanYS

44 — 07.10.19 — 10:41

(39) было 8.3.13. Перепроверил (расширение создавал заново) без совместимости — всё также

   Cyberhawk

45 — 07.10.19 — 10:42

(42) Снимать с поддержки рано или поздно скорее всего все равно придется, оттягивая этот момент только добавляешь себе мороки по началу) Если конечно ты не потоковый франч с типовыми

   Cyberhawk

46 — 07.10.19 — 10:42

(42) «использовать дополнительные реквизиты неудобно из-за их вывода в ж-пе формы» // Вот через расширение как раз можно использовать чтоб программно переопределять место вывода нужных тебе доп. реквизитов, например.

   Cyberhawk

47 — 07.10.19 — 10:43

(40) (44) Ок, спс, запомнил что расширения для интерактивной работы с конструктором формы не подходят)

   RomanYS

48 — 07.10.19 — 10:44

(47) Подходят. Только нельзя нажимать «обновить форму», это запомнить нельзя, я себе запишу))

   AlvlSpb

49 — 07.10.19 — 11:22

Никогда не обращал внимания, но вы оказались правы. Действительно поведение в расширении более чем странное. Вроде нашел лекарство. Встать на Объект, Изменить и обновить тип объекта (например «ДокументОбъект.ЗаказПокупателя») реквизит появляется и можно выводить на форму. При этом уже не требует обновить форму. Проверьте как у вас

   AlvlSpb

50 — 07.10.19 — 11:25

(49) Естественно Объект в форме расширения

   pavig

51 — 07.10.19 — 11:38

(47)

Нормально оно всё подходит

   RomanYS

52 — 07.10.19 — 11:43

(49) Да. Реквизит возвращается.

>> При этом уже не требует обновить форму

Он и до этого не требовал. Но если Вам потребуется или случайно нажмете — сюрприз

   AlvlSpb

53 — 07.10.19 — 16:13

(52) Не для дискуссии, но у меня требовал. Вернее в конфигураторе сверху формы писал «Форма была изменена. Обновить форму?».

   Звездец

54 — 08.10.19 — 09:25

ну вроде разобрался с добавлением. Добавил. Запускаю, а на форме изменений нет. Что за … трава у разработчиков

   AlvlSpb

55 — 08.10.19 — 11:17

(54) расширение единственное в базе или еще есть?

   AlvlSpb

56 — 08.10.19 — 11:19

И безопасный режим расширения отключи, если включен

   unenu

57 — 08.10.19 — 11:32

ответ дали еще в (3)

о чем вы говорите?

  

Cyberhawk

58 — 08.10.19 — 19:24

(57) «Ну, братец, виноват: Слона-то я и не приметил» (с) :)

Содержание:

  1. Добавляем реквизит
  2. Добавление кнопки
  3. Добавление группы
  4. Добавляем табличную часть 1С

В связи с развитием системы расширений многие разработчики 1С сталкиваются с проблемой: если форма захвачена и на ней произведены изменения, то после обновления в основной конфигурации формы, эти изменения не будут отражены на захваченной форме. Получается, что форму после обновления надо каждый раз проверять. Это трудно и «убивает» все плюсы расширения. Но из любой непростой ситуации есть выход, если знать, где его искать. Можно захватить форму в расширение и не изменять её, а все новые реквизиты добавить программно. Тогда при обновлении формы в основной конфигурации 1С 8.3, форма измениться в расширении, и добавленные реквизиты будут корректно отображаться в ней.

В этой статье я постараюсь собрать все основные методы создания реквизитов на форме. 

1.     Добавляем реквизит

Начнем с самого простого. Мы добавили реквизит «МоеРасширение_НаименованиеНаАнглийском» в справочник контрагентов.

                Для того, чтобы вывести его на форму програмно, пишем код процедуры «МоеРасширение_ПриСозданииНаСервереПосле» (Отказ, Стандартная Обработка).

                НовыйЭлемент = Элементы.Добавить («МоеРасширение_НаименованиеНаАнглийском», Тип(«ПолеФормы»));

                НовыйЭлемент.ПутьКДанным                = «Объект. МоеРасширение_НаименованиеНаАнглийском»;

                НовыйЭлемент.Вид                                     = ВидПоляФормы.ПолеВвода;

                НовыйЭлемент.ТолькоПросмотр         = Ложь;

                НовыйЭлемент.Видимость                      = Истина;

                НовыйЭлемент.Доступность                  = Истина.

Теперь мы добавим на форму реквизит, которого нет в конфигурации. Например, выведем на форму текущую задолженность: реквизит «МоеРасширение_ТекущаяЗадолженность».

Сначала создадим реквизит:

                ДобавляемыеРеквизиты           = Новый Массив;

                НовыйРеквизит = Новый РеквизитФормы(«МоеРасширение_ТекущаяЗадолженность»),      Новый ОписаниеТипов («Число», «Текущая задолженность»);

                ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);

                ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты).

Затем выведем его на форму таким же образом, как и добавленный в конфигурацию реквизит, разница только в поле «ПутьКДанным» – здесь мы пишем наименование только что созданного реквизита:

                НовыйЭлемент = Элементы.Добавить(«МоеРасширение_НаименованиеНаАнглийском», Тип(«ПолеФормы»));

                НовыйЭлемент.ПутьКДанным                = «МоеРасширение_ТекущаяЗадолженность»;

                НовыйЭлемент.Вид                                     = ВидПоляФормы.ПолеВвода;

                НовыйЭлемент.ТолькоПросмотр         = Истина;

                НовыйЭлемент.Видимость                      = Истина;

                НовыйЭлемент.Доступность                  = Истина.

Теперь переместим наши реквизиты под поле «Полное наименование». Для этого надо определить на форме место добавления, в нашем случаем – над группой «ГруппаКолонки»:

Элементы.Переместить(Элементы.МоеРасширение_НаименованиеНаАнглийском,Элементы.ГруппаКолонки.Родитель,Элементы.ГруппаКолонки);

Элементы.Переместить(Элементы.МоеРасширение_ТекущаяЗадолженность,Элементы.ГруппаКолонки.Родитель,Элементы.ГруппаКолонки).

Получаем результат:

Для того, чтобы отрабатывались процедуры событий для этих реквизитов, можем указать действия:

                Элементы. МоеРасширение_ТекущаяЗадолженность.УстановитьДействие(«ПриИзменении», «МоеРасширение_РасшифроватьЗадолженность»). 

2.     Добавление кнопки

Для того, чтобы произвести добавление кнопки на форму, сначала надо програмно добавить команду.

                НоваяКоманда = Команды.Добавить(«МоеРасширение_ПоказатьОСВ»);

                НоваяКоманда.Действие = «МоеРасширение_ПоказатьОСВ»;

                НоваяКоманда.Заголовок = «Показать ОСВ».

ВАЖНО!! В поле действие пишется имя процедуры.

Теперь добавляем саму кнопку:

                НоваяКнопка = Элементы.Добавить(«МоеРасширение_Кнопка_ПоказатьОСВ», Тип(«КнопкаФормы»));

                НоваяКнопка.ИмяКоманды = «МоеРасширение_ПоказатьОСВ». 

3.     Добавление группы

Для добавления группы переместим кнопку к полю «Текущая задолженность». На этом этапе нам надо создать группу и переместить в нее уже созданные наши элементы.

Создаем группу и помещаем ее под наименованием. Затем переносим в нее реквизит «Текущая задолженность» и кнопку «Показать ОСВ»:

                НоваяГруппа =Элементы.Добавить(«МоеРасширение_ГруппаЗадолженность», Тип(«ГруппаФормы»));

                НоваяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа;

                НоваяГруппа.Заголовок = «»;

                НоваяГруппа.ОтображатьЗаголовок = Ложь;

                НоваяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;

                Элементы.Переместить(НоваяГруппа,Элементы.ГруппаКолонки.Родитель,Элементы.ГруппаКолонки);

                Элементы.Переместить(Элементы.МоеРасширение_ТекущаяЗадолженность,НоваяГруппа);

                Элементы.Переместить(Элементы.МоеРасширение_Кнопка_ПоказатьОСВ,НоваяГруппа). 

4.     Добавляем табличную часть 1С

Добавим к контрагенту табличную часть 1С «МоеРасширение_Номенклатура» с реквизитом «Номенклатура» и выведем ее на форму.

Сначала мы добавляем табличную часть на форму, после чего описываем все колонки, которые должны отображаться на форме.

ВАЖНО! При создании реквизитов таблицы родителем указывается реквизит формы «Табличная часть».

                НоваяТабличнаяЧасть = Элементы.Добавить(«МоеРасширение_ТаблицаНоменклатура», Тип(«ТаблицаФормы»));

                НоваяТабличнаяЧасть.ПутьКДанным = «Объект.МоеРасширение_Номенклатура»;

                НовыйРеквизитТабличнойЧасти = Элементы.Добавить(«МоеРасширение_Номенклатура», Тип(«ПолеФормы»),НоваяТабличнаяЧасть);

                НовыйРеквизитТабличнойЧасти.Заголовок = «Номенклатура»;

                НовыйРеквизитТабличнойЧасти.Вид = ВидПоляФормы.ПолеВвода;

                НовыйРеквизитТабличнойЧасти.ПутьКДанным = «Объект.МоеРасширение_Номенклатура.Номенклатура».

 

Используя этот базовый набор, можно изменить любую форму программно. И при обновлениях форма всегда будет подстраиваться под выбранный алгоритм. Если форма поменяется глобально, то расширение выдаст ошибку. Тогда, переписав несколько строчек кода, мы снова получим рабочую форму. Это быстрее и проще, чем каждый раз анализировать диалоговую форму.

Специалист компании «Кодерлайн» 

Максим Федоров

Skip to content

1С, как добавить, изменить реквизит формы объекта через расширение

Как добавить, изменить реквизит формы через расширение

В новых версиях платформы, при изменении типовых форм, стандартные и новые реквизиты (добавленные в расширение) по умолчанию недоступны: их нельзя изменить, ни добавить в форму. Дело в том, что немного изменился механизм добавления реквизитов в расширение, для изменения типовых форм объектов.

Вам необходимо выполнить следующие действия:

  • В дереве метаданных нажать правой кнопкой мыши на реквизит -> «Добавить в расширение» -> выбрать расширение;

  • Перейти в расширение конфигурации, открыть форму, в которую планируем добавить (или изменить) реквизит -> в области справа выделить реквизит -> нажать правую кнопку мыши -> «Добавить реквизит»;

Почему в новой платформе изменился данный механизм?

Теперь связанные с формой реквизиты в дереве метаданных платформы не переносятся вместе с формой в расширение, а только отображаются как отражение основной конфигурации. Перенос реквизитов для их модификации проводится прямо из формы. Сделано это было для того, чтобы при изменении какого либо реквизита в стандартной конфигурации — расширение не теряло свою работоспособность.

Реквизиты, которые возможно изменить в форме выделяются черным цветом, а недоступные — серым. При этом при обновлении реквизиты в старых расширениях будут сразу доступны для редактирования.

Связанные статьи

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

На мой взгляд, самое главное новшество в механизме расширений конфигурации это возможность в расширении конфигурации создавать собственные объекты – документы, справочники, планы счетов обмена и регистры сведений. А так же возможность создавать у заимствованных документов и справочников собственные табличные части и реквизиты. Исследуем эти новые возможности, для реализации примеров, я буду использовать конфигурацию 1С «Управляемое приложение».

У конфигурации должен стоять режим совместимости «Не использовать», так же как и у расширения.

Для этого создадим в конфигурации «Управляемое приложение» подсистему «Учет автомобилей» со следующими объектами

Справочники: Марки автомобилей, Автомобили, Гаражи

Документы: Прибытие в гараж, Выбытие из гаража.

Создадим новое расширение, которое назовем «Учет автомобилей», назначение этого расширения будет «Дополнение».

Создание нового расширения конфигурации

Добавим в новое расширение собственную картинку, в которую загрузим иконку автомобиля

Добавление общей картинки в расширении конфигурации

Общая картинка в расширении конфигурации

Теперь создадим новую подсистему, которую назовем «Учет автомобилей», в этой подсистеме отметим флаг «Включать в командный интерфейс» и в свойстве «Картинка» укажем нашу новую иконку.

Новая подсистема в расширении конфигурации

Создадим справочники: МаркиАвтомобилей, Автомобили (будет реквизит Марка с  типом ссылка на справочник МаркиАвтомобилей) и Гаражи.

Создать новый справочник в расширении конфигурации легко, все делается точно так же как и в обычной конфигурации: выделяется ветка справочники, вызывается контекстное меню, в котором нужно кликнуть на пункт «Добавить»

 Новые справочники в расширении конфигурации

Точно так же создадим новые документы: Прибытие автомобиля и Выбытие автомобиля.

Новые документы в расширении конфигурации

Включим все наши новые объекты в подсистему.

Включение новых объектов расширения конфигурации в подсистему

Теперь запустим нашу конфигурацию и посмотрим на новую подсистему

Новая подсистема в конфигурации Управляемое приложение

Новая подсистема в конфигурации Управляемое приложение

Новая подсистема в конфигурации Управляемое приложение

Теперь попробуем в справочник расширяемой конфигурации добавить новый реквизит, причем тип этого реквизита будет из расширения. Сделаем следующую задачу: в справочник контрагент добавим новый реквизит с типом ссылка на справочник Автомобиль.

Для этого заимствуем справочник Контрагент в расширение.

Заимствование справочника в расширение конфигурации

Заимствованный справочник в расширении конфигурации

Добавим для заимствованного справочника новый реквизит, который назовем Автомобиль.

Добавление нового реквизита в заимствованный справочник расширения конфигурации

Реквизит мы добавили, но на форме он еще не отобразился. Для этого необходимо заимствовать форму элемента справочника.

Форма заимствованная в расширении конфигурации

И добавить на заимствованную форму реквизит расширения.

Добавили элемент на заимствованную форму в расширении конфигурации

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

Новый реквизит из расширения в типовом справочнике

Таким образом, можно прорезюмировать: платформа 8.3.11 дает принципиально новые возможности по доработкам конфигурации.  По сути, теперь расширение конфигурации является самостоятельно полноценной конфигурацией, которая строиться поверх основной конфигурации. Будем следить дальше за развитием платформы 1С.

Семь бесплатных видео-урока по работе с расширениями конфигурации

Учимся перехватывать методы в расширении конфигурации

Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Представьте: Вы доработали форму, потом в новом релизе добавили реквизиты – но они на форме не отображаются!…

Смотрите в Конфигуратор – есть. Видимость, доступность – все Ok.

Тем не менее – на форме новые реквизиты не видно, хотя они есть!

Вот прямо вчерашний пример из комментариев:

Добавили (заимствовали) форму Заказа в расширение. Вывели на заимствованную форму добавленные в расширении реквизиты. Все хорошо…

Выходит новый релиз конфигурации поставщика, где у документа добавлен КакойТоНовыйРеквизит, который выведен на форму документа в конфигурации поставщика.

Если после обновления расширение успешно подключится, то, как минимум, в режиме Предприятия на форме документа не будет этого нового реквизита.

И с этим надо что-то делать:)

На самом деле нет повода для паники :) Нужно просто помнить, как 1С “вычисляет”, что показывать на форме.

Дело в том, что платформа использует сразу 3 формы:

  • Форму из основной конфигурации
  • Сохраненную форму
  • Форму из расширения.

И как они взаимодействуют – мы разберем в новом видео.

12 минут видео, 100% полезности :)

Мы подготовили новый курс, который рассказывает не только про расширения, но и про другие инструменты для доработки типовых конфигураций.

  • Как дорабатывать типовые конфигурации внешними средствами
  • Как разрабатывать и использовать расширения
  • Оптимальные приемы обновления
  • Все, что экономит, страхует, помогает.

Musthave для внедренцев.

В ЗУП 3 возникла задача добавить реквизит в справочник не внося изменений в конфигурацию. БСП с механизмом дополнительных реквизитов использовать было нежелательно, поэтому был использован механизм расширений. Для вывода данного реквизита на форму добавлять саму форму в расширение не хотелось по ряду причин, описанных ниже. Создание реквизита и элемента формы, соответствующего данному реквизиту было решено сделать программно в самом расширении, следуя принципу минимального воздействия на конфигурацию.

Начиная с платформы 1С версии 8.3.12 и выше появилась возможность добавлять реквизиты объектов в расширениях, чем я и воспользовался:

Но для вывода данного реквизита на форму элемента добавлять саму форму в расширение совсем не хотелось.

Во-первых добавление (заимствование) формы в расширение может привести к некоторым нежелательным эффектам, которые могут возникнуть после обновления конфигурации. Приведем немного теории.

Платформа использует сразу три формы:

  • Форму из основной конфигурации
  • Сохраненную форму
  • Форму из расширения

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

Во-вторых добавление формы в расширение привело бы к автоматическому добавлению всех реквизитов этого объекта и объектов метаданных (соответствующих ссылочным типам реквизитов объекта) в данное расширение, что загромождало бы само расширение и также не желательно.

Поэтому возникла задача программного создания элемента формы для добавленного реквизита в самом расширении, этому и посвящена данная публикация.

В конфигурациях ERP 2 и УТ 11 для целей программного создания реквизитов и элементов формы можно использовать типовой механизм упрощенного изменения, который хорошо описан в статье: //infostart.ru/public/303645/. Но у меня конфигурация ЗУП 3 и данного механизма там нет. 

Посмотрев начало процедуры ПриСозданииНаСервере() модуля формы объекта, видим что вызываются экспортные методы ПриСозданииНаСервере() общих модулей подсистем БСП:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
Возврат;
КонецЕсли;

// СтандартныеПодсистемы.ВерсионированиеОбъектов
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

// СтандартныеПодсистемы.Свойства
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Объект", Объект);
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
// Конец СтандартныеПодсистемы.Свойства

// СтандартныеПодсистемы.СклонениеПредставленийОбъектов
СклонениеПредставленийОбъектов.ПриСозданииНаСервере(ЭтотОбъект, Объект.Наименование);
// Конец СтандартныеПодсистемы.СклонениеПредставленийОбъектов

Было принято решение код для программного добавления реквизита формы объекта добавить в метод ПриСозданииНаСервере() общего модуля УправлениеСвойствами. Данный модуль предназначен для работы с дополнительными реквизитами и сведениями, но переопределив его в расширении он вполне сгодится и для наших целей.

Добавляем общий модуль УправлениеСвойствами в наше расширение:

и создаем обработчик события НП_ПриСозданииНаСервере(), вызываемый после типовой процедуры УправлениеСвойствами.ПриСозданииНаСервере().

Ниже приведен готовый код, код снабжен комментариями и разбит на области для лучшего понимания:

&После("ПриСозданииНаСервере")
Процедура НП_ПриСозданииНаСервере(Форма, ДополнительныеПараметры = Неопределено) Экспорт

Если Форма.ИмяФормы = "Справочник.ПодразделенияОрганизаций.Форма.ФормаЭлемента" Тогда

#Область ДобавлениеРеквизитовФормы
// Массив для новых реквизитов
ДобавляемыеРеквизиты = Новый Массив;

// Опишем ревизиты формы
Реквизит_НаименованиеДляПечати = Новый РеквизитФормы("НаименованиеДляПечати", Новый ОписаниеТипов("Строка", , , Новый КвалификаторыСтроки(300)), , "Наименование для печати");

// Заполним массив после описания реквизитов формы
ДобавляемыеРеквизиты.Добавить(Реквизит_НаименованиеДляПечати);

// Добавим новые реквизиты в форму
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
#КонецОбласти

#Область ДобавлениеЭлементовФормы
// Элементы
ИмяГруппы = "ГруппаНаименованиеКод";
ГруппаФормы = Форма.Элементы.Найти(ИмяГруппы);
Если ГруппаФормы <> Неопределено Тогда

ИмяЭлемента = "НаименованиеДляПечати";
Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда
ЭлементФормы = Форма.Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ГруппаФормы);
ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
ЭлементФормы.ПутьКДанным = "Обьект.НаименованиеДляПечати";
ЭлементФормы.МногострочныйРежим = Истина;
ЭлементФормы.Высота = 3;
КонецЕсли;

КонецЕсли;
#КонецОбласти

#Область ЗаполнениеДанных
Форма.НаименованиеДляПечати = Форма.Объект.НаименованиеДляПечати;
#КонецОбласти

КонецЕсли;

КонецПроцедуры

Запускаем конфигурацию и убеждаемся, что все работает:

Понравилась статья? Поделить с друзьями:
  • 1с реквизит формы таблица значений добавить колонку
  • Автостоянка или автомойка форма организации бизнеса
  • Автотрейдинг транспортная компания официальный сайт
  • 1с реквизиты предопределенного элемента справочника
  • 2000 километров за сколько можно проехать на машине