1с как программно добавить колонку реквизита

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

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

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

&НаСервере

Процедура ДобавитьКолонкуНаСервере()

нРеквизиты = Новый Массив;

нРеквизиты.Добавить(Новый РеквизитФормы(«Тест3», Новый ОписаниеТипов(«Строка»), «Объект.Тест», «Тест3», Истина));

ИзменитьРеквизиты(нРеквизиты);

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

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

нЭлемент.ПутьКДанным = «Объект.Тест.Тест3»;

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

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

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

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

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

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

Загрузка…

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

Программное добавление колонок в ТЧ управляемой формы

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

1С Добавление колонок в ТЧ

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

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

И в эту процедуру добавить следующий код.

// добавим реквизит в табличную часть
	МассивРеквизитов = Новый Массив;
	МассивРеквизитов.Добавить(Новый РеквизитФормы("Комментарий", Новый ОписаниеТипов("Строка"), "Объект.Товары", "Комментарий", Ложь));
	ИзменитьРеквизиты( МассивРеквизитов );
	
	Эл = Элементы.Добавить("Колонка1", Тип("ПолеФормы"), Элементы.Товары);
	Эл.Вид = ВидПоляФормы.ПолеВвода;
	Эл.ПутьКДанным = "Объект.Товары.Комментарий"; 

Программное добавление колонок в ТЧ управляемой формы

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

1С как программно добавить реквизит табличной части

Это программный реквизит который создается в момент создания документа, в конфигураторе вы его не увидите.

1С как программно добавить колонку в табличную часть любого документа

Таким образом можно добавить реквизит табличной части в любой конфигурации 1С.

Очень важный момент, в таком варианте внесенные данные в эту колонку не будут сохраняться в базе.

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

Создание таблицы значение в 1С 8.3

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

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

У объекта Коллекция колонок таблицы значений существует два метода по созданию новых колонок. Это Добавить и Вставить.

Метод Добавить – добавляет новую колонку в конец коллекции, а метод Вставить – вставляет колонку в нужное место по соответствующему индексу.

Метод  добавить:

ФИО = Новый ТаблицаЗначений;
ФИО.Колонки.Добавить(«Фамилия»);
ФИО.Колонки.Добавить(«Имя»);
ФИО.Колонки.Добавить(«Отчество»);

В этом примере я использовал самый простой вариант использование метода Добавить: мы указываем только название колонки и всё.

Рассмотрим синтаксис этого метода

Добавить(<Имя>, <Тип>, <Заголовок>, <Ширина>)

Как видно, у данного метода всего четыре параметра.

Параметр Имя  — это имя колонки таблицы значений, задается также как и имя переменной. Обязательный параметр.

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

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

Параметр Ширина имеет тип Число и задает длину колонки(количество символов).

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

ОписаниеТиповСтрока = Новый ОписаниеТипов(«Строка»);
ОписаниеТиповДата   = Новый ОписаниеТипов(«Дата»)


ФИО = Новый ТаблицаЗначений;
ФИО.Колонки.Добавить(«Фамилия»,ОписаниеТиповСтрока,«Фамилия»,50);
ФИО.Колонки.Добавить(«Имя»,ОписаниеТиповСтрока,«Имя»,50);
ФИО.Колонки.Добавить(«Отчество»,ОписаниеТиповСтрока,«Отчество»,50);
ФИО.Колонки.Добавить(«ДатаРождения»,ОписаниеТиповДата,«Дата рождения»,10);

Метод Вставить имеет следующий синтаксис:

Вставить(<Индекс>, <Имя>, <Тип>, <Заголовок>, <Ширина>)

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

Доработаем предыдущий код:

ФИО.Колонки.Вставить(3,«ФИО»,ОписаниеТиповСтрока,«ФИО»,50);

В нашем случае колонка ФИО встала точно между Отчеством и Датой рождения.

Создание колонок в таблице значений на форме

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

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

После этого колонка будет создана, и нам нужно задать ей имя, заголовок и тип.

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

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

Первый способ – перетащить колонку из реквизитов в элементы.

Перетаскиваем колонку из реквизитов формы в элементы

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

Колонка в таблице на форме

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

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

Добавляем новый элемент управляемой формы

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

Свойство ПутьКДанным элемента поле управляемой формы

После этого колонка сразу же появиться в таблице на форме 1С.

Колонка в таблице на форме
О работе со строками в таблицах значений читайте в статье по ссылке:
Таблице значений 1С: работа со строками

Более подробно о работе с таблицами значений и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»

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

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

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

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

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

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

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


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

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

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

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

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

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

Я
   unk2

16.05.13 — 07:17

Задача такая. У документа добавлен новый реквизит табличной части «Кононка1». Тип число. Необходимо программно вывести эту колонку на форму, в табличное поле. Я пробовал подобным образом:

ЭлементыФормы.РаботникиОрганизации.Колонки.Добавить(«Колонка1»,  «Дни»);

Колонка появляется на форме, но в нее нет возможности ввести значение. Посмотрел по отладчику, реквизит колонки «ЭлементУправления» = неопределенно. Возможно в этом проблема. Форма обычная.

На форуме поискал, именно того что мне нужно к удивлению не нашел.

  

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

   Любопытная

1 — 16.05.13 — 07:21

Почему обязательно программно?

   Milana

2 — 16.05.13 — 07:21

(0)

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

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

НоваяКолонка.УстановитьЭлементУправления(Тип(«ПолеВвода»));

   kosts

3 — 16.05.13 — 07:32

    эл = ЭлементыФормы.РаботникиОрганизации.Колонки.Вставить(Позиция, "ПродолжительностьВредность", "За вредные условия труда");
    эл.Имя = "ПродолжительностьВредность";
    эл.Видимость = Истина;
    эл.Положение = ПоложениеКолонки.ВТойЖеКолонке;
    эл.Данные = "ПродолжительностьВредность";
    эл.ТекстШапки = "Вредность";
    эл.УстановитьЭлементУправления(Тип("ПолеВвода"));
    эл.ЭлементУправления.УстановитьДействие("ПриИзменении", Новый Действие("РаботникиОрганизацииПродолжительностьНенормированныйПриИзмененииПодключаемая"));

   unk2

4 — 16.05.13 — 07:35

Milana да вы правы. Все сработало! Спасибо!

   Cube

5 — 16.05.13 — 07:36

(1) Обновлять потом проще.

   unk2

6 — 16.05.13 — 07:40

Да проще обновлять. Именно за этим такой «изысканный» способ размещения элементов на форме. Вот такой код работает. Спасибо всем за помощь.

ЭлементыФормы.РаботникиОрганизации.Колонки.Добавить(«Колонка1»,  «Дней компенсации»);

ЭлементыФормы.РаботникиОрганизации.Колонки.Колонка1.Данные = «Колонка1»;

ЭлементыФормы.РаботникиОрганизации.Колонки.Колонка1.УстановитьЭлементУправления(Тип(«ПолеВвода»));

   Milana

7 — 16.05.13 — 07:46

(4) Мне приятно было вам помочь. Сама недавно с этими колонками мучилась. Добрые люди помогли.

   andreymongol82

8 — 16.05.13 — 07:52

(7) Это вы еще на УФ колонки не добавляли, и мучения с обычной формой вам не покажутся мучениями :)

   kosts

9 — 16.05.13 — 07:54

(8) Бусят эти УФ. Ширину колонки нормально и то не задать…

   cw014

10 — 16.05.13 — 07:56

(7)(8) Хорош на УФ гнать — нормально все там добавляется, не надо париться

   Cube

11 — 16.05.13 — 08:51

(10) +100 УФ рулят и педалят!

   cw014

12 — 16.05.13 — 08:58

(11) А так же штырят, плющат и колбасят

   andreymongol82

13 — 16.05.13 — 09:08

(10) Ага добавляются нормально. Только кода раз так в шесть больше

   cw014

14 — 16.05.13 — 09:11

(13) Да ну ты брось

   cw014

15 — 16.05.13 — 09:11

(13) Для тч кода одинаково. Для реквизитов формы — раз так в 10 меньше (ибо исключаются «Лево»,»Верх»,»Ширина»,»Высота»,»УстановитьПривязки» и прочая ересь)

   andreymongol82

16 — 16.05.13 — 09:15

Для обычной формы, достаточной сказать типа ЭлементыФормы.ТЧ.СоздатьКолонки(), для УФ надо сначала добавить реквизит формы, типа таблица или как ее, потом по отдельности каждую колонку, потом создать элементы формы и потом передать значение в реквизит формы

   andreymongol82

17 — 16.05.13 — 09:16

раз так в 10 меньше (ибо исключаются «Лево»,»Верх»,»Ширина»,»Высота»,»УстановитьПривязки» и прочая ересь) — а вот с эти согласен

  

andreymongol82

18 — 16.05.13 — 09:19

(14) И, кстати, разу пошла такая пьянка, как добавить колонку в для реквизита УФ формы, который не создавался программно?

Программное удаление и добавление колонок в табличной части управляемой формы 1С 8.3

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

Перед добавлением новых элементов на форму, необходимо добавить сами реквизиты формы:

МассивДобавляемыхРеквизитов = Новый Массив;
Для Каждого тЭлемент из МассивИмен Цикл //массив имен содержит названия колонок. для упрощения примера все колонки имеют строковый тип реквизита.
     МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(тЭлемент, Новый ОписаниеТипов("Строка"),"Данные")); //тип реквизита, название реквизита, родитель, в нашем случае название табличной части
КонецЦикла;

Теперь определим удаляемые реквизиты:

МассивУдаляемыхРеквизитов = Новый Массив;
Для Каждого тЭлемент из МассивУдаляемыхИмен Цикл
     Если ЭтаФорма.Элементы.Найти("Данные"+тЭлемент) <> Неопределено Тогда
          МассивУдаляемыхРеквизитов.Добавить("Данные."+тЭлемент);
     КонецЕсли;
КонецЦикла;

После подготовки массивов — редактируем реквизты формы

ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов, МассивУдаляемыхРеквизитов);

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

Удаление колонок:

Для Каждого тЭлемент из МассивУдаляемыхИмен Цикл
     нЭлемент = ЭтаФорма.Элементы.Найти("Данные"+тЭлемент);
     Если нЭлемент <> Неопределено Тогда
          Элементы.Удалить(нЭлемент);
     КонецЕсли;
КонецЦикла;

Добавление новых колонок:

Для Каждого тЭлемент из МассивИмен Цикл
     нЭлемент = ЭтаФорма.Элементы.Добавить("Данные"+тЭлемент, Тип("ПолеФормы"), ЭтаФорма.Элементы.Данные);
     нЭлемент.Вид = ВидПоляФормы.ПолеВвода;
     нЭлемент.ПутьКДанным = "Данные."+тЭлемент;
     нЭлемент.Видимость = Истина;
КонецЦикла;

Ведущий программист 1С

Тельнова Яна

17.03.2021

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

Так мы делали, когда разрабатывали расширение “Заполнение чека ККМ по заказу клиента“. Нам нужно было в форму Чека добавить колонку с Заказом клиента.

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

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

Содержание[Убрать]

    • Как программно добавить Группу на форму?
    • Как программно добавить Поле ввода на форму?
    • Как программно добавить колонку в ТЧ?
    • Как программно вывести табличную часть документа на управляемую форму?
    • Как Добавить программно флажок на форму?
    • Как установить событие для программно созданного элемента?

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

  1. более удобно находить изменения между конфигурациями
  2. Изменять форму «на лету» в процессе работы
  3. Минимизировать изменения типовой конфигурации (в некоторых конфигурациях для этого созданы Переопределяемые модули/процедуры)

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

Как программно добавить Группу на форму?

ГруппаТовары = Элементы.Добавить("ГруппаТовары", Тип("ГруппаФормы"),Элементы);	// Добавляет группу на форму
ГруппаТовары.Заголовок = "Товары на продажу";

Как программно добавить Поле ввода на форму?

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

Как программно добавить колонку в ТЧ?

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

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

ГруппаТовары = Элементы.ГруппаТовары;
ТаблицаТовары = Элементы.Добавить("ТаблицаТовары", Тип("ТаблицаФормы"),ГруппаТовары;
ТаблицаТовары.ПутьКДанным = "Объект.Товары";
// для создания колонок в созданной таблице используется метод описанный выше "Как программно добавить колонку в ТЧ"

Как Добавить программно флажок на форму?

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

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

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

Недостаточно прав для комментирования

Понравилась статья? Поделить с друзьями:
  • Alkaloid фармацевтическая компания препараты
  • 1с как сохранить реквизит обработки для всех
  • Ярославский филиал промсвязьбанка реквизиты
  • Якутская нефтяная компания официальный сайт
  • Alliance страховая компания официальный сайт