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

Справочники в 1С используются для работы с постоянной или условно постоянной информацией, но, в отличие от констант, данная информация может содержать множество значений. К примеру, если мы разрабатываем конфигурацию для учета движения товаров на складе, то такой информацией может быть вид товара, информация о самих товарах, информация о складах и т.п. Таким образом, справочники необходимы для хранения аналитики учета (то, по чему в дальнейшем будет осуществляться анализ, например, сколько товаров продано). В пользовательском режиме работа осуществляется с элементами справочника. Именно элементы справочника и являются объектами аналитики (именно они и будут анализироваться). Например, у справочника Товары могут быть элементы «Гвозди», «Хлеб» и «Молоко».

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

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

Применительно к товарам это может быть артикул, полное наименование, наименование для продажи, вид товара и т.п. Еще новая возможность справочников (в 1С 7.7. этого нет) — это возможность создавать табличные части, в которых хранится однотипная информация, количество которой может быть изменчивым. Например, для товара это могут быть какие-то дополнительные свойства.

Реквизитов и табличных частей может быть неограниченное количество.

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

Создать новый справочник 1С

После этого откроется конструктор справочника, где на закладке «Основные» необходимо ввести имя справочника.

Имя справочника 1С

На закладке Данные можно задать длину кода и наименования, тип кода (число или строка) и основное представление элемента справочника (в виде кода или в виде строки).

Код и наименование справочника 1С

А также можно создать необходимые реквизиты и табличные части.

Реквизиты и табличные справочника 1С

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

Автонумерация справочника 1С

Реквизиты справочников 1С создаются на закладке Данные в окне реквизитов.

Реквизиты справочника 1С

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

Реквизит справочника 1С с примитивным типом

Реквизит справочника 1С с ссылочными типом

В режиме «1С: Предприятия» это будет выглядеть следующим образом.

Элементы простого справочника

Справочник с ссылочным реквизитом

Обращаю внимание, на что влияет свойство «Основное представление» (закладка Данные конструктора справочника). Если у нас основное представление в виде наименования, то представление элемента справочника в каком-либо реквизите будет в виде наименование этого элемента, как на рисунке представлен элемент справочника ВидыТоваров в реквизите справочника Товары. А если основное представление в виде кода, то тогда представление этого элемента будет в виде кода элемента.

Основное представление справочника код

Основное представление справочника в виде кода

Табличные части справочников 1С

Табличные части создаются на закладке «Данные» в конструкторе справочника.

Табличные части справочников 1С

Можно создавать неограниченное количество табличных частей.

Сделаем справочник Комплектация, у которого будет табличная часть Состав.

Справочник 1С с табличной частью

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

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

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

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

Табличная часть справочника 1с

Подчиненные справочники 1С

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

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

Справочник 1С классификатор единиц измерения

У справочника Товары сделаем реквизит основная единица измерения (ссылка на справочник классификатор единиц измерения)

Реквизит справочника 1С Основная единица измерения

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

Создадим справочник ЕдиницыИзмерения.

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

Владелец справочника 1С

И создадим реквизиты: Коэффициент (тип число) и единица измерения (тип ссылка на справочник «Классификатор единиц измерения»).

Реквизиты справочника Единицы измерения

Вот как это будет выглядеть в режим «1С: Предприятия».

Справочник 1С

Подчиненный справочник 1С

Подробно о подчиненных справочниках читайте в этой статье:

Подчиненный справочник 1С

Иерархический справочник 1С

Любой справочник можно сделать Иерархическим – это значит, что пользователь сможет создавать каталоги (или, говоря простым языком, папки), в которых будут содержаться элементы.

Сделаем справочник Товары иерархическим. Для этого переходим на закладку «Иерархия» конструктора справочника и установим флаг «Иерархический».

Иерархический справочник 1С

Иерархия у справочников бывает двух видов: Иерархия групп и элементов и просто Иерархия элементов.

Иерархия групп — это каталоги, которые в себе содержат определенные элементы. А что такое Иерархия элементов? Это когда один элемент подчинен другому.

Посмотрим, как выглядит иерархический справочник в «1С:Предприятии»

Иерархический справочник 1С в 1с предприятии

Как видите, в форме списка появилось две команды. «Создать» и «Создать группу». При выполнении команды «Создать» будет открыта форма на создание нового элемента, а при выполнении команды «Создать группу» — форма на создание группы (папки).

Создание групп и элементов

Вы можете создавать нужные группы, в этих группах создавать элементы, или переносить уже созданные элементы в группы.

Подробно, про иерархический справочник читайте в этой статье:

Иерархический справочник 1С

Что такое предопределенные элементы справочников, и как с ними работать, читайте в этой статье:

Предопределенные элементы справочников 1С

Формы справочников в 1С 8.3

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

Документы в 1С 8.3

Журнал документов в 1С 8.3

Подсистемы 1С 8.3

Общие реквизиты в 1С

Более подробно и основательно работа со справочникам в дается в моей книге:

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

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

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

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

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

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

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

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

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

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

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

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

Для примера, стоит задача в конфигурации ЗУП 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

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

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

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

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

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

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

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

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

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

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

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

...

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

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

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

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


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

COM-подключение к базе 7.7 из .NET, .NET Core 1
Инсталяция: dotnet add package sabatex.V1C77 или добавить через NUGET пакет sabatex.V1C77. Добавить пространство имен: using sabatex.V1C77; пример использованя: —C# static void Main(string args) { // создаем строку соединен


ZIP-архив Чтение 0
Для того чтобы прочитать файлы из ZIP-архива необходимо выполнить несколько простых действий:
— Открыть необходимый архив
— Распаковать файлы
Создание объекта ЧтениеZIPФайла можно осуществить двумя путями — создать инициализированный объект или


Автоматическая установка ширины колонки табличного документа. 0
Процедура, которая » примерно» делает автоширину колонок (навроде, как если бы выделить все колонки и дважды щелкнуть мышкой по границе заголовка колонки). Привожу текст, работает неахти, но лучше чем ничего:
Процедура РасчетШириныКолонок(Табличный


Был ли изменен элемент справочника? 0
// Модифицированность() — Определяет, был ли изменен объект после считывания из базы данных.
// НО Метод не позволяет определить, был ли изменен объект другими пользователями.
Если Модифицированность() тогда
Сообщить(» Этот элемент справочник


Быстрый отбор в справочнике по первой букве 0
В статье описан способ быстрой организации отбора в списке справочника по первой букве наименования. Механизм легко дотачивается под собственные нужды.
https://helpf.pro/uploads/img/_1-T4ZDj6uNPX.png
// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ
НаКлиенте


Посмотреть все результаты поиска похожих

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

Содержание

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

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

Задача

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Программное добавление реквизитов в табличную часть.

Я
   НачинающийВ1С

18.06.19 — 11:08

Доброе утро.

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

На что обратить внимание, где может быть ошибка?

         Если Форма.ИмяФормы = «Документ.НашДокумент.Форма.ФормаДокумента» тогда

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

        //реквизиты ТЧ Товары

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

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

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

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

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

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

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

                
        //добавление на форму элементов ТЧ

        Номенклатура                = Форма.Элементы.Добавить(«Номенклатура», Тип(«ПолеФормы»), Форма.Элементы.Товары);

                Номенклатура.ПутьКДанным    = «Объект.Товары.Номенклатура»;

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

        
        Характеристика                = Форма.Элементы.Добавить(«Характеристика», Тип(«ПолеФормы»), Форма.Элементы.Товары);

        Характеристика.ПутьКДанным    = «Объект.Товары.Характеристика»;

        Характеристика.Вид            =ВидПоляФормы.ПолеВвода;

         КонецЕсли;

  

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

   НачинающийВ1С

1 — 18.06.19 — 11:10

Замечу, что в отладчике в «Форма.Объект.Товары» оба реквизита присутствуют после обхода этих строк.

А вот уже в предприятии номенклатуры нет, а характеристика есть.

   НачинающийВ1С

2 — 18.06.19 — 11:12

(1) Да собственно и перед выводом самим в самом конце события «при открытии формы» в отладчике оба реквизита присутствуют.

   aleks_default

3 — 18.06.19 — 11:24

Почисти кэш

   НачинающийВ1С

4 — 18.06.19 — 11:33

(3) Чистил, не помогло. На всякий случай еще раз почистил, снова не помогло.

   RomanYS

5 — 18.06.19 — 11:40

>> В самом документе в табличной части реквизиты в конфигураторе добавлены

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

   НачинающийВ1С

6 — 18.06.19 — 11:41

(5) А как правильно добавить на форму реквизиты?

Ошибок никаких не получаю.

   RomanYS

7 — 18.06.19 — 11:46

(6) Зачем это делать программно? Просто добавьте их в редакторе формы.

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

   НачинающийВ1С

8 — 18.06.19 — 11:47

(7) «НашДокумент» это абстрактное название документа. Документ типовой. Как и Номенклатура и Характеристика это абстрактные названия реквизитов.

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

   catena

9 — 18.06.19 — 11:48

+(5)ТОже не поняла. Достаточно же элементы добавить.

   catena

10 — 18.06.19 — 11:48

Вот этого должно хватить, если реквизиты в ТЧ есть:

//добавление на форму элементов ТЧ

        Номенклатура                = Форма.Элементы.Добавить(«Номенклатура», Тип(«ПолеФормы»), Форма.Элементы.Товары);

                Номенклатура.ПутьКДанным    = «Объект.Товары.Номенклатура»;

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

        
        Характеристика                = Форма.Элементы.Добавить(«Характеристика», Тип(«ПолеФормы»), Форма.Элементы.Товары);

        Характеристика.ПутьКДанным    = «Объект.Товары.Характеристика»;

        Характеристика.Вид            =ВидПоляФормы.ПолеВвода;

   НачинающийВ1С

11 — 18.06.19 — 11:53

(10) Убрал добавление самих реквизитов. Оставил только добавление элементов.

Все осталось как прежде — один реквизит добавляется, второй нет.

   НачинающийВ1С

12 — 18.06.19 — 11:54

(7) (10) Вы были правы, добавление реквизитов само по себе излишне. Уберу это в коде.

Но проблема с выводом на форму так и не решена.

   RomanYS

13 — 18.06.19 — 11:55

(8) Прикольно. Каков уровень абстракции: реквизит Номенклатура в ТЧ Товары !!!

(10) +1

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

   НачинающийВ1С

14 — 18.06.19 — 11:56

(13) Запускаю с полными правами.

   RomanYS

15 — 18.06.19 — 11:58

(14) проверь ещё раз ПутьКДанным. Хотя при ошибке по идее исключение должно выдаваться

   RomanYS

16 — 18.06.19 — 12:00

Ещё имена переменных поменяй, вместо

Номенклатура                = Форма.Элементы.Добавить(«Номенклатура», Тип(«ПолеФормы»), Форма.Элементы.Товары);

делай

НовыйЭлементФормы = Форма.Элементы.Добавить(«Номенклатура», Тип(«ПолеФормы»), Форма.Элементы.Товары);

   НачинающийВ1С

17 — 18.06.19 — 12:02

(16) Имена переменных в базе итак другие (Элемент_ИмяЭлемента)

Путь к данным правильный.

В последней строке события «При открытии» по прежнему в «Объект.Товары» есть оба нужных реквизита. А в итоге почему-то только один.

   НачинающийВ1С

18 — 18.06.19 — 12:03

(17) Не в базе, а в моем коде.

   RomanYS

19 — 18.06.19 — 12:05

(17) В Объект.Товары они независимо от твоего кода — из метаданных расширения.

Смотри Форма.Элементы.ИмяТвоегоАбстактногоРеквизита: видимость, доступность…

   singlych

20 — 18.06.19 — 12:12

ставлю на функциональную опцию

   НачинающийВ1С

21 — 18.06.19 — 12:20

(19) Сверил.

Все строчки у обоих реквизитов идентичны.

   mikecool

22 — 18.06.19 — 12:25

добавить в конфигураторе, рулить видимостью — не вариант?

   НачинающийВ1С

23 — 18.06.19 — 12:26

(22) Вы имеете ввиду добавить в конфигураторе на форме не кодом? Не вариант так.

   mikecool

24 — 18.06.19 — 12:29

(23) как пожелаешь

   aleks_default

25 — 18.06.19 — 12:31

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

   НачинающийВ1С

26 — 18.06.19 — 12:31

(24) Ну это не мое желание. Задание такое.

   НачинающийВ1С

27 — 18.06.19 — 12:32

(25) Потому что реквизиты добавлены мной вручную. А формы типовые.

   Вафель

28 — 18.06.19 — 12:32

(10) должно работать

   aleks_default

29 — 18.06.19 — 12:32

Может просмотреть код на наличие действий с элементами формы?

   aleks_default

30 — 18.06.19 — 12:34

(27) А тоесть ты реквизиты в расширении добавил?

   НачинающийВ1С

31 — 18.06.19 — 13:20

(30) Нет, сами реквизиты добавлены в конфигурации основной. А общий модуль, в котором приведенный код написан, находится в расширении. (29) Что имеется ввиду?

   RomanYS

32 — 18.06.19 — 13:24

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

   НачинающийВ1С

33 — 18.06.19 — 13:26

(32) Комплексная автоматизация 2 (2.4.7.109)

Документ «Коммерческое предложение клиенту».

В табличную часть не добавляется реквизит «Направление» (СправочникСсылка.НаправленияДеятельности)

   RomanYS

34 — 18.06.19 — 13:31

(33) Возможно Справочник.НаправленияДеятельности выключен фукнциональными опциями

   НачинающийВ1С

35 — 18.06.19 — 13:32

(34) Если добавлять просто на форму руками, все добавляется.

Как можно проверить выключен или нет?

   Avalone2010

36 — 18.06.19 — 14:49

(0) КА — типовая.Пустая.Включена ФО по КП. В модуле формы расширения.В процедуре при создании на сервере.

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

    НовыйЭлементФормы.ПутьКДанным    = «Объект.Товары._НаправлениеДеятельности»;

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

В КП добавлен в ТЧ товары новый реквизит «_НаправлениеДеятельности».

   Avalone2010

37 — 18.06.19 — 15:03

(35) Настройки фин реза и контролинг. раздел финансовый результат. галочка финансовый результат по направлениям деятельности. константа ФормироватьФинансовыйРезультат

  

НачинающийВ1С

38 — 18.06.19 — 15:21

(37) Спасибо! Это решило вопрос.

Содержание

  1. Guesto notes
  2. Задача
  3. Решение
  4. Добавление реквизита табличной части
  5. Добавление реквизита с типом Произвольный
  6. Комментарии 12

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

Итак, у нас есть справочник «Тест» с табличной частью «Тест», в табличной части присутствуют реквизиты «Тест1» и «Тест2», а нам нужно добавить еще один реквизит — «Тест3» и показать его на форме.

Выглядит это приблизительно так:

Не думаю, что приведенный код нуждается в комментариях, но на всякий случай скажу, что первые три строки создают новый реквизит типа «Строка» — тут важно указать путь к создаваемому реквизиту — третий параметр.

Точно также можно добавить колонку любой таблице значений (не табличной части) — в этом случае нужно убрать часть «Объект.» из кода.

Следующие три строки добавляют саму колонку на форму.

На этом все, надеюсь данная статья Вам помогла.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

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

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

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

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

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

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

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

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

Guesto notes

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

Задача

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

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

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

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

Решение

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

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

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

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

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

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

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

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

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

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

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

UPD 2017-05-28 Статья переработана, добавлен вариант применения с примером кода.
UPD 2017-08-07 По просьбе из комментария, в статью добавлен пример программного добавления реквизита табличной части.

Комментарии 12

Автору для начала стоит разобраться что есть Форма, а что есть Объект, а затем лезть со своими статьями в интернет.

1. Ну очень конструктивная критика;
2. Читайте СП;
3. Не болейте)

P.S. Комментарии модерируются, ссылки не относящиеся к делу нещадно удаляются.

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

ППЦ, а на остальных табу наложено?

Иди читай книжки, грамотей!

Дык, читаю

Красиво оформленный код. И полезный.

Альберт, спасибо!
Пишу код по заветам Стива Макконелла:

Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте

А как добавить реквизит к табличной части документа?

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

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

А пример удаления, собственно, где?

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

Автору большой респект! Статья написана на отлично! Все очень доступно и красиво — просто, бери и пользуйся.

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

В дереве объектов конфигурации кликните 2 раза по обозначению справочника Сотрудники, перейдите на закладку Данные, измените длину наименования до 100, добавьте новый реквизит ФИОКратко (правой кнопкой по Реквизиты -> Добавить), заполните поля в окне свойств реквизита как на картинке: Табличная часть справочника в 1С 8

Получаем: Табличная часть справочника в 1С 8

Добавим табличную часть. Правой кнопкой по Табличные части -> Добавить, в окне свойств табличной части вводим имя Информация: Табличная часть справочника в 1С 8

Получаем: Табличная часть справочника в 1С 8

Добавим новый реквизит в табличную часть: правой кнопкой по Информация -> Добавить -> Реквизит табличной части. В открывшемся окне свойств реквизита вводим имя Адрес, тип – Строка, длина — 100.
Добавим ещё один реквизит в табличную часть Информация, имя реквизита ДатаПриема, тип – Дата, состав даты – Дата: Табличная часть справочника в 1С 8

Имеем: Табличная часть справочника в 1С 8

Как вы поняли, в табличной части будем хранить информацию о сотрудниках. Переходим на закладку Формы и в группе радиокнопок Редактирование установим Обоими способами: Табличная часть справочника в 1С 8

В строке меню жмём Отладка -> Начать отладку. Откроем справочник Сотрудники, жмём кнопку Действия -> Редактировать в диалоге. Введём новый элемент в справочник: Действия -> Добавить и вводим информацию о новом сотруднике как на картинке: Табличная часть справочника в 1С 8

Аналогично введите информацию ещё о двух сотрудниках, создайте новую группу Менеджеры: Действия -> Новая группа: Табличная часть справочника в 1С 8

Переместим элемент справочника Иванов И.И. В группу Менеджеры: ставим курсор на строку с кодом 1, Действия -> Переместить в группу -> выбираем группу Менеджеры двойным кликом. В эту же группу перемещаем двух других сотрудников. Получаем: Табличная часть справочника в 1С 8

Получаем такой результат.

Понравилась статья? Поделить с друзьями:
  • Гранд сервис экспресс кому принадлежит компания
  • Добавить реквизит на форму в обычном приложении
  • Громадская щебеночная компания официальный сайт
  • Добавлять дополнительные реквизиты к документам
  • Добродомик в санкт петербурге адрес часы работы