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

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

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

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

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

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

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

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

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

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

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

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

...

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

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

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

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


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

Содержание:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

Вопрос

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Инструкция. Программная модификация управляемых форм

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

Мы рассмотрим основные составляющие этой задачи: добавление реквизитов, добавление элементов формы и назначение обработчиков событий элементов формы.

Добавление реквизитов

Для добавления реквизитов используется метод объекта ФормаКлиентскогоПриложения

							ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты);
						

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

Переменная ДобавляемыеРеквизиты является массивом объектов типа РеквизитФормы.

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

							ДобавляемыеРеквизиты = Новый Массив;
							ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Демо_ТаблицаДанных", Новый ОписаниеТипов("ТаблицаЗначений"), , "Таблица значений", Ложь));
							ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Поставщик", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"), "ТаблицаДанных", "Кто поставляет", Ложь));
							ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Товар", Новый ОписаниеТипов("СправочникСсылка.Товары"), "ТаблицаДанных", "Имя товара", Ложь));
							ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ОписаниеОбъекта", ТипСтрока, "", "Описание объекта", Ложь));
							ИзменитьРеквизиты(ДобавляемыеРеквизиты);
							

К добавленным реквизитам верхнего уровня из модуля можно обращаться только с помощью конструкции ЭтотОбъект. ˂Имя реквизита˃.

Процедуру ИзменитьРеквизиты логично вызывать из обработчика ПриСозданииНаСервере, но т.к. мы не заимствуем форму в расширение, то следует найти другую точку входа. Для конфигураций УТ 11, КА 2 и ERP 2 существует типовой механизм упрощенного изменения конфигураций. Нас интересует модуль МодификацияКонфигурацииПереопределяемый, в состав которого входит процедура

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

Данную процедуру можно заимствовать в расширение, добавить проверку имени формы и вставить код изменения реквизитов:

							Если Форма.ИмяФормы = "Справочник.Номенклатура.Форма.ФормаЭлемента" Тогда
							// код модификации реквизитов
							КонецЕсли;
						

Для остальных конфигураций придется переопределять другие процедуры. Например

							ПодключаемыеКоманды.ПриСозданииНаСервере(Форма)
						

или

							ВерсионированиеОбъектов.ПриСозданииНаСервере(Форма)
						

Использование той или иной процедуры следует проверить в модуле редактируемой формы.

Изменение элементов формы

Управление элементами формы производится через коллекцию Элементы объекта ФормаКлиентскогоПриложения, с помощью которой можно добавлять, удалять, изменять свойства элементов формы, а также перемещать элементы формы между родителями.

Для добавления нового элемента формы требуется передать в функцию Добавить данной коллекции имя элемента, его тип и родителя (при необходимости). Например:

							Элемент = Элементы.Добавить("Демо_ОписаниеОбъекта", Тип("ПолеФормы"));
							Элемент.Вид = ВидПоляФормы.ПолеВвода;
							Элемент.ПутьКДанным = "ОписаниеОбъекта";
						

По аналогии с добавлением реквизитов, данный код можно выполнять в функциях МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере (УТ, КА, ERP), ПодключаемыеКоманды.ПриСозданииНаСервере или ВерсионированиеОбъектов.ПриСозданииНаСервере.

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

Обработка событий формы

Выполнить код по событию элемента формы можно двумя способами:

  • Создать команду, указать для этой команды имя обработчика события и назначить эту команду элементу формы
  • Выполнить метод УстановитьДействие элемента формы, чтобы указать имя обработчика события в модуле формы

Оба метода предполагают наличие в модуле формы процедуры с сигнатурой, соответствующей обработчику события. Для первого способа в модуле формы должна быть клиентская процедура, принимающая единственный аргумент — Команда. Для второго — всё зависит от события, для которого выполняется обработчик. Так, например, для события ПриИзменении элемента формы с типом ПолеВвода будет требоваться процедура, принимающая единственный аргумент — ЭлементФормы. А для события ПередНачаломДобавления таблицы формы — целых 6 аргументов (ЭлементФормы, Отказ, Копирование, Родитель, ЭтоГруппа, Параметр). Поэтому для некоторых событий попросту невозможно подобрать соответствующие клиентские методы в модуле формы и заимствования формы в расширение не избежать.

Для самых простых случаев (команда или событие без параметров) можно использовать следующие комбинации обработчиков и переопределяемых процедур:

  • обработчик Подключаемый_ВыполнитьПереопределяемуюКоманду с переопределением процедуры МодификацияКонфигурацииКлиентПереопределяемый.ВыполнитьПереопределяемуюКоманду для УТ, КА и ERP;
  • обработчик Подключаемый_ВыполнитьКоманду с переопределением процедуры ПодключаемыеКомандыКлиент.ВыполнитьКоманду

При этом в предопределенной процедуре обязательно проверять имя команды (или имя элемента формы) и имя самой формы.

Например:

							ЭлементУПД.УстановитьДействие("ПриИзменении", "Подключаемый_ВыполнитьКоманду");
							
							&Вместо("ВыполнитьКоманду")
							Процедура Демо_ВыполнитьКоманду(Форма, Команда, Источник)
								Если ТипЗнч(Форма) = Тип("ФормаКлиентскогоПриложения") И Форма.ИмяФормы = "Справочник.Контрагенты.Форма.ФормаЭлемента" Тогда
									Если ТипЗнч(Команда) = Тип("ПолеФормы") Тогда
										Если Команда.Имя = "Демо_ВедущийМенеджер" Тогда
							// код обработки события
											Возврат;
										КонецЕсли;
									КонецЕсли;
								КонецЕсли;
								ПродолжитьВызов(Форма, Команда, Источник);
							КонецПроцедуры;
						

Либо вариант с использованием команд:

							Команда = Команды.Добавить("Демо_КомандаИзменитьСтроку");
							Команда.Действие = "Подключаемый_ВыполнитьПереопределяемуюКоманду ";
							Элемент = Элементы.Добавить("Демо_ИзменитьСтроку", Тип("КнопкаФормы"));
							Элемент.ИмяКоманды = "Демо_КомандаИзменитьСтроку";
							
							
							&Вместо("ВыполнитьПереопределяемуюКоманду")
							Процедура Демо_ВыполнитьПереопределяемуюКоманду(Форма, Команда, ДополнительныеПараметры) Экспорт
							Если ТипЗнч(Форма) = Тип("ФормаКлиентскогоПриложения") И Форма.ИмяФормы = "Справочник.Контрагенты.Форма.ФормаЭлемента" Тогда
								Если Команда.Имя = "Демо_КомандаИзменитьСтроку" Тогда
							// код обработчика события
								КонецЕсли;
							КонецПроцедуры
						

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

Полезные советы

Работа с динамическими списками

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

Для небольших изменений гораздо лучше воспользоваться объектом СхемаЗапроса, появившемся в версии платформы 8.3.5. Он позволит всегда иметь актуальный текст запроса, если он поменяется при обновлении конфигурации.

Например:

							СхемаЗапроса = Новый СхемаЗапроса;
							СхемаЗапроса.УстановитьТекстЗапроса(Список.ТекстЗапроса);
							Пакет = СхемаЗапроса.ПакетЗапросов[0];
							Оператор = Пакет.Операторы[0];
							Оператор.ВыбираемыеПоля.Добавить("РеализацияТоваровУслуг.Ссылка");
							Список.ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
						

Переопределение открываемой формы

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

Для этого следует реализовать новую форму (не заимствовать её, а написать с нуля) и в модуле менеджера переопределить процедуру ОбработкаПолученияФормы.

Например:

							Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
								Если ВидФормы = "ФормаОбъекта" И Параметры.Ключ.Вид = Перечисления.ВидыТоваров.Услуга Тогда
									ВыбраннаяФорма = Метаданные.Справочники.Товары.Формы.ФормаУслуги;
									СтандартнаяОбработка = Ложь;
								КонецЕсли;
							КонецПроцедуры
						

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

Начиная с версии платформы 1С 7.7 одной из самых частых задач является доработка конфигурации под нужды организации или клиента. В версии платформы 8.2 в конфигурации для внесения изменений необходимо было включить возможность изменений или вовсе снять с поддержки. Это означает, что конфигурация не может обновляться автоматически и обновление нужно делать вручную. И чем больше и чем серьезней вносятся изменения в конфигурации, тем более сложной и трудоемкой становится дальнейшая поддержка и обновление. Поэтому начиная с версии 8.3.6 в платформе появился механизм расширений. Он позволяет вносить изменения, не затрагивая основную конфигурацию и не снимая ее с поддержки. В расширениях можно добавлять новые объекты, изменять поведение форм, переопределять типовые алгоритмы.

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

Contents

  • 1 Добавление расширения для изменения форм 1С
  • 2 Доработка форм 1С в редакторе форм
  • 3 Программное изменение форм 1С при помощи расширений
    • 3.1 Вспомогательные функции и процедуры для создания элементов формы
      • 3.1.1 ЕслиСтруктураНеопределена
      • 3.1.2 Процедуры УстановитьСвойстваЭлемента и УстановитьСобытияЭлемента
      • 3.1.3 ВидыПолейФормы
    • 3.2 Добавление нового реквизита на форму
    • 3.3 Создание реквизита формы
    • 3.4 Создание группы формы
    • 3.5 Создание страницы
    • 3.6 Создание команды и кнопки

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

Откроем форму элемента справочника и доработаем форму при помощи редактора формы:

Добавление расширения и справочника для формы 1с

Доработка форм 1С в редакторе форм

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

Доработка форм 1С в редакторе форм

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

Нажимаем правой кнопкой мыши на объекте и выбираем пункт «Добавить в расширение»:

Доработка форм 1С в редакторе форм: добавить расширение

После добавления объекта в расширение, реквизит «ДФ_КонтактноеЛицо» станет виден:

реквизит ДФ_КонтактноеЛицо виден после добавления объекта в расширение

Теперь реквизит «ДФ_КонтактноеЛицо» мы можем вытащить на форму:

реквизит ДФ_КонтактноеЛицо можем вытащить на форму

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

доработка форм 1с: добавление нового реквизита

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

Создадим обработчик события «ПриИзменении» реквизита «Видимость контактного лица» и добавим в него код:

доработка форм 1с: создание справочника события ПриИзменении

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

доработка форм 1с: добавление новой страницы

Страницу назовем просто «Новая страница» и после добавления переносим на нее наши добавленные реквизиты. После переноса форма примет вид:

вид формы 1с после доработки

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

доработка форм 1с: создание обработчика

В обработчике команды напишем следующий код:

доработка форм 1с: код в обработчике команды

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

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

Программное изменение форм 1С при помощи расширений

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

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

Для начала в расширении создадим общий модуль ДФ_РаботаСЭлементаФормы:

программное изменение форм 1С при помощи расширений

В общем модуле добавим функцию, которая будет возвращать нам новый элемент формы:

программное изменение форм 1С при помощи расширений

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

В качестве параметров передаются:

  • Форма – управляемая форма;
  • ИмяЭлемента – строковое представление элемента;
  • ТипЭлемента – при помощи функции Тип() передать тип элемента. Например, Тип(”ПолеВвода”) или Тип(”ГруппаФормы”);
  • РодительЭлемента – родитель добавляемого элемента. Это может быть как группа формы, так и сама форма;
  • ЭлементПеред – элемент формы, перед которым будет добавлен новый элемент.

Вспомогательные функции и процедуры для создания элементов формы

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

ЕслиСтруктураНеопределена

Данная процедура переопределяет входящий параметр. Если параметр будет равен «Неопределено», то процедура переопределит его на тип «Структура». Такая проверка довольно часто будет использоваться, поэтому была вынесена в отдельную процедуру.

программное изменение форм 1С при помощи расширений

Процедуры УстановитьСвойстваЭлемента и УстановитьСобытияЭлемента

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

программное изменение форм 1С при помощи расширений

ВидыПолейФормы

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

программное изменение форм 1С при помощи расширений

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

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

программное изменение форм 1С при помощи расширений: добавление нового реквизита

программное изменение форм 1С при помощи расширений

Далее в общем модуле опишем функцию, которая добавит поле ввода, и свяжем ее с нашим новым реквизитом.

программное изменение форм 1С при помощи расширений

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

программное изменение форм 1С при помощи расширений

После запуска и отработки обработчика «ПриСозданииНаСервереПосле» форма элемента справочника примет вид:

программное изменение форм 1С при помощи расширений

Как видно, функция по созданию нового поля отработала, и наш реквизит появился на форме.

Создание реквизита формы

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

программное изменение форм 1С при помощи расширений

Процедура СоздатьРеквизиты создает реквизиты формы. В качестве параметров мы передаем саму форму и структуру реквизитов. Ключом структуры является имя реквизита формы, а значением структуры описание типа реквизита. Процедура СоздатьРеквизит создает структуру с одним значением и вызывает процедуру СоздатьРеквизиты. Добавляем новый реквизит формы «ВидимостьКонтактногоЛица». Для этого в обработчике «ПриСозданииНаСерверПосле» допишем следующий код:

программное изменение форм 1С при помощи расширений

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

программное изменение форм 1С при помощи расширений

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

Создание группы формы

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

программное изменение форм 1С при помощи расширений: создание группы формы

Первая функция создает обычную группу, вторая функция обычную группу без отображения.

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

программное изменение форм 1С при помощи расширений

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

программное изменение форм 1С при помощи расширений

Вначале мы получаем структуру свойств для группы. В этой структуре переопределяем два свойства: группировка и заголовок. Группировку укажем «ГоризонтальнаяВсегда», заголовок произвольный. Создаем обычную группу при помощи функции «СоздатьОбычнуюГруппу». В нее мы передаем форму, имя группы, родителя и структуру свойств. Функция вернет нам элемент группы формы. Далее остается все то же самое, кроме одного момента. В создаваемых элементах формы в качестве родителя мы будем указывать не саму форму, а ранее созданную группу. Также для флажка «ВидимостьКонтактногоЛица» в качестве параметра ЭлементПеред укажем созданное поле «КонтактноеЛицо». Это нужно для того, чтобы элементы выстроились друг за другом.

После доработки обработчика результат его работы будет выглядеть следующим образом: созданные флажок и поле объединились в группе «Добавленные реквизиты»:

программное изменение форм 1С при помощи расширений

Создание страницы

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

программное изменение форм 1С при помощи расширений: создание страницы

программное изменение форм 1С при помощи расширений: создание страницы

В функцию «СоздатьСтраницу» в параметрах передаем форму, имя страницы, группу страницы – т.е. это группа, которой будет подчинена наша страница, структура свойств и страница перед – т.е. группа страницы, перед которой будет создана наша страница.

Добавим новую страницу и перенесем в нее наши созданные элементы. Как и ранее будем дорабатывать обработчик «ПриСозданииНаСервереПосле».

программное изменение форм 1С при помощи расширений

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

программное изменение форм 1С при помощи расширений

Создание команды и кнопки

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

программное изменение форм 1С при помощи расширений: создание команды и кнопки

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

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

программное изменение форм 1С при помощи расширений

Переходим к доработке обработчика «ПриСозданииНаСервереПосле». В конец обработчика сначала добавляем код создания команды формы. В качестве действия команды передадим имя обработчика, которое выведет в качестве сообщения содержимое поля контактное лицо. После создаем кнопку формы. Получаем структуру свойств кнопки и, при необходимости, переопределяем их. Создаем элемент формы кнопка и связываем ее с созданной командой. Для этого нужно передать имя команды, которое передавали в параметре ИмяКоманды функции СоздатьКоманду. После доработки код обработчика «ПриСозданииНаСервереПосле»:

программное изменение форм 1С при помощи расширений

После того как обработчик «ПриСозданииНаСерверПосле» отработает, форма примет следующий вид. Нажмем на кнопку «Сообщить конт. лицо» и проверим, срабатывает ли обработчик команды.

программное изменение форм 1С при помощи расширений

При нажатии на кнопку обработчик команды срабатывает и сообщает нам содержимое поля контактное лицо. При желании кнопку можно перенести в командную панель. Для этого при создании кнопки формы в параметр РодительКнопки передадим командную панель формы:

программное изменение форм 1С при помощи расширений

Результат работы такого кода приведен на рисунке.

программное изменение форм 1С при помощи расширений

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

Экспериментируем в тонком клиенте, Бухгалтерия предприятия, редакция 3.0 (3.0.51.25) .

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

Добавили в расширение документ УстановкаЦенНоменклатуры. Далее добавляем ФормуДокумента.

Ревизит1 и Реквизит4 создаем исключительно программно в форме документа в Расширении. Реквизит1 добавляем к форме документа, а Реквизит4 добавляем к табличной части документа.

фотка 1

Ревизит2 добавлен явно в форме документа в Расширении.

фотка 2

Реквизит3 явно добавлен в Форме документа в ветку реквизитов Объект / Табличная часть . Он будет появляться в таблице Товары.

    В модуле ФормыДокументы добавляем Реквизит1 и Реквизит2 к имеющейся форме, и Реквизит3 к табличные :

  • &НаСервере
  • мм1 = Новый Массив;
  • //здесь обычные реквизиты Реквизит1 , Реквизит2, …
  • Реквизит1 = Новый РеквизитФормы(«Реквизит1», Новый ОписаниеТипов(«Строка»), , «Реквизит1», Истина);
  • мм1.Добавить(Реквизит1);
  • …..
  • //здесь Реквизит4 — реквизит табличной части
  • Реквизит4 = Новый РеквизитФормы(«Реквизит4», Новый ОписаниеТипов(«Строка»),»Объект.Товары» , «Реквизит4», Истина);
  • мм1.Добавить(Реквизит4);
  • ….
  • ИзменитьРеквизиты(мм1);
  • //———— связываем реквизиты с элементами формы——————————-
  • Элемент = ЭтаФорма.Элементы.Добавить(«Реквизит1», Тип(«ПолеФормы»), ЭтаФорма);
  • Элемент.Вид = ВидПоляФормы.ПолеВвода;
  • Элемент.ПутьКДанным = «Реквизит1»;
  • Элемент = ЭтаФорма.Элементы.Добавить(«Реквизит2», Тип(«ПолеФормы»), ЭтаФорма);
  • Элемент.Вид = ВидПоляФормы.ПолеВвода;
  • Элемент.ПутьКДанным = «Реквизит2»;
  • Элемент = ЭтаФорма.Элементы.Добавить(«Реквизит3», Тип(«ПолеФормы»), Этаформа.Элементы.Товары);
  • Элемент.Вид = ВидПоляФормы.ПолеВвода;
  • Элемент.ПутьКДанным = «Объект.Товары.Реквизит3»;

Теперь для заполнения колонки Реквизит3 достаточно на Сервере сделать так (без предварительного кода сразу ссылаемся на Объект.Товары :
Для каждого стр из Объект.Товары цикл
стр.Реквизит3 = 123;
КонецЦикла;

Для установки значения Реквизит1(или Реквизит2) делаем на Сервере так ЭтаФорма[«Реквизит1»]=»34231432432″ (эту возможность я искал 3 часа в интернете). ЗначениеВРеквизитФормы(«вопыорвоап»,»Реквизит1″) — не катит.
Создать изначально в Объекте Реквизит1 = Новый РеквизитФормы(«Реквизит1», Новый ОписаниеТипов(«Строка»),»Объект» , «Реквизит1», Истина) — тоже не проходит.

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

Я
   Звездец

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с расширение добавить реквизит расширения на форму
  • Автоследование от брокерских компаний что это такое
  • 1с реквизит формы таблица значений добавить колонку
  • Автостоянка или автомойка форма организации бизнеса