Добавить реквизит на форму типа справочник

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

Сейчас форма имеет следующий вид:

После добавления новых элементов она будет иметь вид:

Итак, добавляем реквизиты:

  • ЕдиницаИзмерения, тип СправочникСсылка.ЕдиницыИзмерения;
  • ТекущийОстаток, тип Число.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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

    // Описываем новые ревизиты формы
    РеквизитЕдиницаИзмерения = Новый РеквизитФормы(
        "ЕдиницаИзмерения",
        Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"),
        ,
        "Единица измерения"
    );
    РеквизитТекущийОстаток = Новый РеквизитФормы(
        "ТекущийОстаток",
        Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(10, 3)),
        ,
        "Текущий остаток"
    );

    // Заполняем массив новых реквизитов
    ДобавляемыеРеквизиты.Добавить(РеквизитЕдиницаИзмерения);
    ДобавляемыеРеквизиты.Добавить(РеквизитТекущийОстаток);

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

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

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

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

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

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

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

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

    // Имитируем заполнение данных
    ЭтаФорма.ЕдиницаИзмерения = ПредопределенноеЗначение(
        "Справочник.ЕдиницыИзмерения.Штука"
    );
    ЭтаФорма.ТекущийОстаток = 12;

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

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

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

Теперь посмотрим, как можно изменить основной реквизит формы. Изменим табличную часть Состав документа РасходнаяНакладная:

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

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

    // Описываем новый ревизит формы
    РеквизитЕдиницаИзмерения = Новый РеквизитФормы(
        "ЕдиницаИзмерения",
        Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"),
        "Объект.Состав",
        "Единица измерения"
    );

    // Заполняем массив новых реквизитов
    ДобавляемыеРеквизиты.Добавить(РеквизитЕдиницаИзмерения);

    // Добавляем новый реквизит в форму
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);

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

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

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

Поиск:
1С:Предприятие • Изменить реквизиты • При создании на сервере • Реквизит • Управляемая форма • Элемент формы

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

Содержание

  1. Задача
  2. Добавление реквизитов
  3. Удаление реквизитов
  4. Добавление реквизита табличной части
  5. Добавление реквизита с типом Произвольный

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

Задача

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

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

  • ЯчейкаХранения, тип СправочникСсылка.ЯчейкиХранения;
  • ТекущийОстаток, тип Число.

Элементы объединить в группу с горизонтальной группировкой. На текущий момент форма имеет следующий вид:

добавить реквизит формы

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

В обработчике формы ПриСозданииНаСервере() опишем код, который разбивается на 3 этапа:

  1. Описание и создание реквизитов формы;
  2. Создание элементов формы, объединение в группу без отображения;
  3. Заполнение данных.

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
    #Область ДобавлениеРеквизитовФормы
	
    // Массив для новых реквизитов
    ДобавляемыеРеквизиты	= Новый Массив;
		
    // Опишем ревизиты формы
    Реквизит_ЯчейкаХранения = Новый РеквизитФормы("ЯчейкаХранения",	Новый ОписаниеТипов("СправочникСсылка.ЯчейкиХранения"),	, "Ячейка");
    Реквизит_ТекущийОстаток = Новый РеквизитФормы("ТекущийОстаток",	Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(10, 3)), , "Остаток");
	
    // Для наглядности заполним массив после описания реквизитов формы
    ДобавляемыеРеквизиты.Добавить(Реквизит_ЯчейкаХранения);
    ДобавляемыеРеквизиты.Добавить(Реквизит_ТекущийОстаток);
	
    // Добавим новые реквизиты в форму
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);
	
    #КонецОбласти
	
    #Область ДобавлениеЭлементовФормы
	
    // Горизонтальная группа без отображения на форме
    ГруппаФормы = Элементы.Добавить("Группа_СправочныеДанные", Тип("ГруппаФормы"));
    ГруппаФормы.Вид                        = ВидГруппыФормы.ОбычнаяГруппа;
    ГруппаФормы.Отображение                = ОтображениеОбычнойГруппы.Нет;
    ГруппаФормы.ОтображатьЗаголовок        = Ложь;
    ГруппаФормы.Группировка                = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
	
    // Элементы
	
    НовыйЭлемент = Элементы.Добавить("ЯчейкаХранения", Тип("ПолеФормы"), ГруппаФормы);
    НовыйЭлемент.ПутьКДанным                  = "ЯчейкаХранения";
    НовыйЭлемент.Вид                          = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ТолькоПросмотр               = Истина;
	
    НовыйЭлемент = Элементы.Добавить("ТекущийОстаток", Тип("ПолеФормы"), ГруппаФормы);
    НовыйЭлемент.ПутьКДанным                  = "ТекущийОстаток";
    НовыйЭлемент.Вид                          = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ТолькоПросмотр               = Истина;
	
    #КонецОбласти
	
    #Область ЗаполнениеДанных
	
    //  Имитируем заполнение данных
    ЭтаФорма.ЯчейкаХранения = ПредопределенноеЗначение("Справочник.ЯчейкиХранения.Распаковка");
    ЭтаФорма.ТекущийОстаток = 12;
	
    #КонецОбласти
	
КонецПроцедуры

После выполнения приведенного кода форма будет выглядеть так:

реквизит программно

Удаление реквизитов

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

    #Область УдалениеРеквизитовФормы
	
    // Массив удаляемых реквизитов
    УдаляемыеРеквизиты = Новый Массив;
    УдаляемыеРеквизиты.Добавить("ЯчейкаХранения");
    УдаляемыеРеквизиты.Добавить("ТекущийОстаток");
	
    // Удалим реквизиты формы
    ИзменитьРеквизиты( , УдаляемыеРеквизиты);
	
    #КонецОбласти

Внимание!!! Удалять можно только реквизиты созданные программно.

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

Добавление реквизита и элемента формы для табличной части почти ничем не отличается, необходимо только указать путь «Объект.<ИмяТабличнойЧасти>». Ниже пример добавления реквизита Ячейка в ТЧ Комплектация.

    #Область ДобавлениеРеквизитаТЧ
	
    // Массив для новых реквизитов
    ДобавляемыеРеквизиты = Новый Массив;
	
    // Опишем ревизиты формы
    Реквизит_Ячейка = Новый РеквизитФормы("Ячейка",	Новый ОписаниеТипов("СправочникСсылка.ЯчейкиХранения"),	"Объект.Комплектация", "Ячейка");
	
    // Для наглядности заполним массив после описания реквизитов формы
    ДобавляемыеРеквизиты.Добавить(Реквизит_Ячейка);
	
    // Добавим новые реквизиты в форму
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);
	
    НовыйЭлемент = Элементы.Добавить("КомплектацияЯчейка", Тип("ПолеФормы"), Элементы.Комплектация);
    НовыйЭлемент.ПутьКДанным    = "Объект.Комплектация.Ячейка";
    НовыйЭлемент.Вид            = ВидПоляФормы.ПолеВвода;
	
    #КонецОбласти

Добавление реквизита с типом Произвольный

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

ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Реквизит", Новый ОписаниеТипов("")));

Внимание!!! Данные добавленного реквизита сохраняться в ИБ не будут.

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

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

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

Для примера, стоит задача в конфигурации ЗУП 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С «МоеРасширение_Номенклатура» с реквизитом «Номенклатура» и выведем ее на форму.

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

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

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

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

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

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

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

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

 

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

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

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

Добавление реквизита справочника в объект расширения

Я
   Hammond

10.02.21 — 12:05

Добрый день, нужен совсем, совсем запутался.

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

Создать его я создал, но в объекте он не появился. При нажатии на ПКМ что на новый реквизит, что на объект формы, кнопки «Добавить в расширение» нет. Подскажите, как быть

  

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

   Cypher

1 — 10.02.21 — 12:09

Что именно хотите добавить? Какой элемент справочника?

   Cypher

2 — 10.02.21 — 12:12

Посмотрите Это видео, возможно Вам даст что-то новое и прояснит Ваши мысли!

Видео на Ютубе: https://www.youtube.com/watch?v=jb4S3iXl6sQ

   Hammond

3 — 10.02.21 — 12:28

Это не совсем то. Мне нужно добавить на форму справочника номенклатура булевый реквизит. В документе заказ клиента создать вкладку, в которой будет таблица значений с реквизитами номенклатура и количество. У номенклатуры тип ссылка на справочник номенклатура, у количество число.

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

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

Может быть можно как-то проще решить мою задачу?

   ChMikle

4 — 10.02.21 — 12:29

(3) нажмите кнопку обновить форму , должен слева появиться и перетащите

   ChMikle

5 — 10.02.21 — 12:30

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

   Hammond

6 — 10.02.21 — 12:35

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

   Hammond

7 — 10.02.21 — 12:36

Обновить форму?

Что-то не вижу такой кнопки, где она располагается?

Нашёл только «обновить расширение формы»

   VladZ

8 — 10.02.21 — 12:37

(6) Форму документа перетащил в расширение?

   ChMikle

9 — 10.02.21 — 12:37

(6) захожу в форму под названием «форма документа» и слева вверху смотрите обновить форму в расширении , как-то так было и в окне реквизитов слева должен появится ваш реквизит , который вы добавили в расширение

   Hammond

10 — 10.02.21 — 12:39

Форма документа уже была в расширении. Я создал реквизит в справочнике в расширении, смотрю форму документа в расширении и там его нет

   Hammond

11 — 10.02.21 — 12:40

(9) в элементах появиться должен?

   Hammond

12 — 10.02.21 — 12:41

В элементах его нет

   Cypher

13 — 10.02.21 — 12:42

Вы можете написать, что именно Вы хотите перенести в Расширение, чтобы это можно было визуально отобразить в табличной части элементов Справочника, а то получается догадайся по Феншую!?

   Cypher

14 — 10.02.21 — 12:45

Напишите Конфигурацию, что за Справочник, и какой реквизит Вы не можете вытащить из Конфигурации!? Чтобы можно было у себя проверить, и Вам подсказать!

   Hammond

15 — 10.02.21 — 12:46

Попробую ещё раз

Я открываю расширение. Справочник номенклатура. Мне нужно создать в нем реквизит под названием «проверка» с типом булево. Я в расширении нажимаю на справочник номенклатура ПКМ, добавить, реквизит. Создаю реквизит. Теперь он отображается в реквизитах справочника номенклатура в расширении.

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

   Фрэнки

16 — 10.02.21 — 12:46

(15) Форма документа в Расширении есть?

   Hammond

17 — 10.02.21 — 12:46

Конфигурация УТ 11.4.12.71

   МимохожийОднако

18 — 10.02.21 — 12:47

Сохрани, закрой, открой заново. Перезапусти в режиме предприятия.

   Фрэнки

19 — 10.02.21 — 12:47

Где открываешь форму документа? Когда?

   Hammond

20 — 10.02.21 — 12:47

(16) форма документа в расширении есть.

Я работаю только в расширении

   Hammond

21 — 10.02.21 — 12:48

Не «форма документа», а «форма элемента», прошу прощения

   МимохожийОднако

22 — 10.02.21 — 12:49

Добавь форму элемента в расширение еще раз.

   Hammond

23 — 10.02.21 — 12:50

(18) сейчас попробую. (19) в конфигураторе выбираю нужную мне форму и открываю её для редактирования

   Hammond

24 — 10.02.21 — 12:52

Ничего не изменилось. В расширении у справочника номенклатура есть реквизит «проверка», в форме элемента расширения реквизита нет

   Фрэнки

25 — 10.02.21 — 13:08

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

   Hammond

26 — 10.02.21 — 13:08

Есть ещё какие то версии?

   Фрэнки

27 — 10.02.21 — 13:08

Оно как-то глючит… по бестолковому

   Фрэнки

28 — 10.02.21 — 13:09

Я однажды глюк в чем-то похожий словил… Пока заново все не загрузил на «чистое место» — ничего не помогало. Походу с кешами оно работает глючно.

   Hammond

29 — 10.02.21 — 13:10

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

   Фрэнки

30 — 10.02.21 — 13:13

Если создать свою отдельную форму, то да. Будешь видеть все также как и в основной привык видеть. Но после заимствования что-то оно не дает смотреть. Может закрыть его надо. Убрать с редактирования и заново открыть из списка расширений, чтоб правильно все встало. Тут трудно что-то предположить.

   Фрэнки

31 — 10.02.21 — 13:14

Сохранил расширение в файл. Загрузил тестовую базу без него в новую папку в новой строчке пускаца (чтоб кэшей не было 100%) — затем установил готовое расширение из файла. Смотрю. Работает как нужно.

   Hammond

32 — 10.02.21 — 13:15

Понял, спасибо за помощь)

Буду разбираться

   Hammond

33 — 10.02.21 — 13:39

Эх, мне это не помогло(

   ЧессМастер

34 — 10.02.21 — 13:58

Спецы по расширениям. Подскажите в чем может быть дело.

Мне надо в расширение вынести движения существующего документа по новому регистру которого нет конфигурации Поставщика.

Создаю расширение.

1. Добавил в расширение существующий документ.

2. Добавил в расширение новый регистр.

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

Куда копать ?

Платформа 8.3.17.1851)

Пробую на конфе Бухгалтерия предприятия, редакция 3.0 (3.0.82.24)

   orakool

35 — 10.02.21 — 14:03

(34) Свойства документа / Движения / Указать новый регистр

   ChMikle

36 — 10.02.21 — 14:05

(10) верхняя панель слева пункт ОБНОВИТЬ РАСШИРЕНИЕ ФОРМЫ и в объекте ищите свой реквизит

   ChMikle

37 — 10.02.21 — 14:12

(36) + все этонадо делать на форме открытой в конфигураторе в расширении

   VladZ

38 — 10.02.21 — 16:12

(34) Рискуешь. Отвалится твое расширение — и будешь потом все свои «новые движения» с бубном искать.

   ЧессМастер

39 — 10.02.21 — 16:13

(35) Спасибо.  Вроде то что нужно.

   sitex

40 — 10.02.21 — 16:14

(38) Если не дают снимают с поддержки , есть другие варианты ? Озвучь

   ЧессМастер

41 — 10.02.21 — 16:14

(38) Отвалиться значит через набор записей выгружу — загружу через XML. Сериализацию давно придумали.

   ЧессМастер

42 — 10.02.21 — 16:19

(40) У меня другая задача.

Я неоднократно сталкивался уже с задачами типа «надо обновить переписанную вхлам конфу при этом у существующих документов добавлены движения по новым регистрам».

И каждый раз при накатывании обновления ты вынужден проверять эти моменты.

Пропустишь этот момент и у тебя набор записей регистра по документам этого вида обнулится. Когда тебе надо за выходные успеть накатить релизов 20 то пропустить глазами подобные моменты очень просто.

   ЧессМастер

43 — 10.02.21 — 16:22

(40) При этом со всем остальным проблемы не настолько сложные.

Формы копируются  и таким образом отвязываются от форм Поставщика. Необходимость изменения в модулях объектов легко обходиться через подписки. Реквизиты добавляются без проблем.

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

   ЧессМастер

44 — 11.02.21 — 11:01

(5) А в расширении можно заменять основную форму на другую ?

То есть в конфигурации у элемента справочника создана форма И_ФормаЭлемента.

И включены изменения на корень объекта метаданных этого справочника.

И сейчас в качестве основной формы прописана она.

Можно ли в расширении указать что основная форма элемента справочника ФормаЭлемента а И_ФормаЭлемента ? При этом имея в основной конфигурации замочек на справочнике ?

   hhhh

45 — 11.02.21 — 12:24

(44) конечно, щелкаешь на свойства справочника, там есть Основная форма объекта

   ЧессМастер

46 — 11.02.21 — 13:49

(45)

1. Добавил в расширение документ.

2. Добавил в расширение добавленную форму.

3. В расширении выбираю свойствам документа. Все поля недоступны. Начиная от «тип номера», «длина номера» заканчивая «основная форма объекта», «основная форма списка», «основная форма выбора».

Назначение расширения выбрал «Дополнение».

   ЧессМастер

47 — 11.02.21 — 13:51

+(46) В чем нюанс ? Почему в свойствах документа эти поля недоступны ?

   Фрэнки

48 — 11.02.21 — 14:08

стоишь на справочнике в расширении.

справа отображается панель Свойства

Представление

о Основная форма объекта (пустое поле для выбора формы) — вот тут в самом начале в чек-бокс тыкаешь — а затем уже сможешь форму выбирать.

з.ы. И самое смешное — для особо одаренных — Если после заимствования Справочника, переходишь внутрь него (там пусто) и начинаешь создавать новую форму — само пишет «Сделать форму основной?»

Да

Смотришь в свойствах — а оно уже прописалось.

   ЧессМастер

49 — 11.02.21 — 14:16

(48)

>стоишь на справочнике в расширении.

Стою.

>справа отображается панель Свойства

Отображается. Но поля со свойствами форм недоступны. Доступно поле только с движениями.

   ЧессМастер

50 — 11.02.21 — 14:20

(48) >Основная форма объекта (пустое поле для выбора формы) — вот тут в самом начале в чек-бокс тыкаешь — а затем уже сможешь форму выбирать.

У меня это поле НЕДОСТУПНО.

Все поля начиная от «тип номера», «длина номера» заканчивая «основная форма объекта», «основная форма списка», «основная форма выбора» недоступны.

Доступно только «Движения».

   hhhh

51 — 11.02.21 — 14:50

(49) это так нарисовано на экране, что недоступно. Типа затененные. А на самом деле доступно, это просто такая игра цветов у них.

   hhhh

52 — 11.02.21 — 14:53

(50) свойство Основная форма объекта, ставлю слева флажок, потом выбираю форму из списка или создаю в расширении новую. Что я делаю не так?

   ЧессМастер

53 — 11.02.21 — 21:13

(52) >ставлю слева флажок, потом выбираю форму из списка

Да точно. Спасибо за подсказку.

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

   ЧессМастер

54 — 19.02.21 — 19:39

Вопрос к знатокам расширений.

Объясните понятным языком в чем разница между «Адаптацией» и «Дополнением» ?

Что можно делать в одном случае и не нельзя и что в другом.

В теории очень сухо и непонятно этот момент описан.

   МимохожийОднако

55 — 19.02.21 — 19:48

   FIXXXL

56 — 19.02.21 — 20:25

(34) я в таких случаях делаю документ-пустышку с одним реквизитом «ДокументОснование» (ссылка на типовой док), он и пишет движуху в новые регистры через подписку

т.е. и док движения и регистры — добавлены

надо только один раз нормально «обвязку» сделать — и забываешь о пропаже движений

   FIXXXL

57 — 19.02.21 — 20:26

(56) ну и в отчетах не забывать Регистратор.ДокументОснование использовать :)

   ЧессМастер

58 — 20.02.21 — 16:53

(56) >надо только один раз нормально «обвязку» сделать — и забываешь о пропаже движений

Ты не понял в чем сложность от которой хочу уйти использованием расширений.

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

>он и пишет движуху в новые регистры через подписку

Еще раз.

Проблема не в том чтобы написать движения по регистру. А в том что после того как у тебя в Документ.Движения пропадет связь «Документ Х делает движения по регистру Y» у тебя автоматом пропадают все движения по регистру Y где регистраторы докуvенты типа X/

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

   Фрэнки

59 — 20.02.21 — 21:08

(58) он то как раз понял :-)

И добавил костыль.

В виде отдельного,

совсем отдельного регистратора,

которые сохранит наличие наборов записей регистра,

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

   Фрэнки

60 — 20.02.21 — 21:09

Хотя потребность в нагораживании такого костыля отсутствует.

  

ЧессМастер

61 — 25.02.21 — 12:33

(59) Какое то реально сильное извращение такая схема.

Внимание! Перед вами ознакомительная версия урока, материалы которого могут быть неполными.

Создание конфигураций 1С: добавляем реквизит

Автор уроков и преподаватель школы: Владимир Милькин02

Продолжаем изучение азов создания конфигураций на 1С.

Оглавление

  • Где найти реквизиты справочника
  • Как открыть свойства реквизитов справочника
  • Какие типы бывают у реквизитов справочника
  • Добавляем новый реквизит к справочнику
  • Проверяем, что получилось
  • Пройдите тест

Вернёмся в конфигуратор и откроем дерево конфигурации:

  

Где найти реквизиты справочника

Давайте познакомимся поближе со справочником «Сотрудники». Откроем его окно двойным щелчком:

Открылось окно настроек со множеством вкладок. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Нас интересует прежде всего вкладка «Данные»:

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

  

Как открыть свойства реквизитов справочника

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

Открылась дополнительная панель со свойствами этого реквизита:

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

 

Какие типы бывают у реквизитов справочника

В параметре «Тип» указано «Дата» и это логично, ведь мы храним в этом реквизите дату рождения сотрудника.

Раскройте этот параметр (стрелка вниз), чтобы посмотреть какие ещё типы бывают у реквизитов:

  

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

Давайте вместе добавим новый реквизит для справочника «Сотрудники» для хранения должности.

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

Нажмём зелёную кнопку плюсик над панелью с реквизитами:

Добавится реквизит с именем «Реквизит1»:

Откроем его свойства (двойным щелчком по реквизиту) и установим в свойство «Имя» значение «Должность», а в свойство «Тип» значение «Строка»:

  

Проверяем, что получилось

Посмотрим что получилось! Для этого запустим 1С в режиме пользователя (меню «Отладка»->»Начать отладку»). На все вопросы об обновлении конфигурации базы данных сейчас и впредь отвечаем утвердительно.

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

Замечательно :)

Пройдите тест

Для учеников

Обязательно повторяйте все действия, которые мы выполняем на уроках данного модуля. Теория, не подкреплённая практикой — ничего не значит.

На вопросы учеников — отвечаю по почте,  но прежде загляните в ЧАВО (ссылка) .

С уважением, Владимир Милькин

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

Реквизит должен находится в метаданных.

Листинг кода:


Поле = Элементы.Добавить(«ТестовыйРеквизит», Тип(«ПолеФормы»), Элементы.ГруппаРеквизиты);
//»ТестовыйРеквизит» — Название реквизита (Метаданные)
//Тип(«ПолеФормы») — тип добавляемого объекта
//Элементы.ГруппаРеквизиты — группа куда добавляем наш реквизит
Поле.ПутьКДанным = «Объект.ТестовыйРеквизит»;//Обязательно надо указывать путь к данным, иначе поле не отобразится на форме
Поле.Вид = ВидПоляФормы.ПолеВвода; //Указываем что это поле ввода
//Все свойства созданного элемента «Поле» можно глянуть при отладке, там все как в свойствах

Чтобы вставить нужный нам реквизит перед каким либо уже существующим реквизитом нужно использовать параметр «Вставить()» . Четвертым параметром этого метода и будет являть тот реквизит перед которым мы будем вставлять наш реквизит.

Поле = Элементы.Вставить(«ТестовыйРеквизит», Тип(«ПолеФормы»),Элементы.ГруппаРеквизиты,Элементы.СтранаПроисхождения);
//Элементы.СтранаПроисхождения — реквизит перед которым вставляем
Поле.ПутьКДанным = «Объект.ТестовыйРеквизит»;
Поле.Вид = ВидПоляФормы.ПолеВвода; 

Программное добавление поля ввода на форму:

Листинг:

//Программное создание реквизита на форме
Массив = Новый Массив;
Массив.Добавить(Новый РеквизитФормы(«Статус», Новый ОписаниеТипов(«Строка»)));
ИзменитьРеквизиты(Массив);  //Изменяем массив содержащий реквизиты формы

//Теперь добавим созданный нам реквизит на форму уже изученным способом программно
Поле = Элементы.Вставить(«Статус», Тип(«ПолеФормы»),Элементы.ГруппаРеквизиты,Элементы.СтранаПроисхождения);
Поле.ПутьКДанным = «Статус»;
Поле.Вид = ВидПоляФормы.ПолеВвода;

Чтобы подключить событие к созданному полю нужно создать процедуру и подключить ее к полю:

*Процедура команды обязательно должна выполняться в директиве компиляции «&НаКлиенте»

Добавление команды на форму программно: 

НашаКоманда = Команды.Добавить(«НашаКоманда»);
НашаКоманда.Действие = «НашаКомандаПроцедура»;  //Указываем имя процедуры на клиенте 
//которую будет вызывать команда
Кнопка = Элементы.Вставить(«НашаКоманда», Тип(«КнопкаФормы»));
Кнопка.ИмяКоманды = «НашаКоманда»;
Кнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;

Понравилась статья? Поделить с друзьями:
  • Добыть артефакт виноград плохая компания 2
  • За сколько можно проехать 160 км на машине
  • Доверенность от имени управляющей компании
  • За сколько можно проехать 180 км на машине
  • Доверительное управление деньгами компании