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

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

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

Что такое Движения документа? Движения документа — это записи в регистрах накопления, сведений, бухгалтерии и расчета, которые создаются при проведении документа и уничтожаются при отмене проведения документа. Все просто. Разработчик самостоятельно настраивает, по каким регистрам будет делать движение его документ, естественно, что регистр перед этим должен быть создан.

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

Добавление документа 1С в дерево метаданных

После создания, откроется конструктор документа, где на закладке Основные задаем имя документа и синоним.

Конструктор документа в 1С 8.3

Реквизиты документов создаются на закладке Данные в верхнем окне.

Реквизиты документов 1С 8.3

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

Реквизиты документов 1С 8.3

Иногда, такие реквизиты у документов некоторые программисты называют «шапкой документа».

Табличные части документа 1С 8.3

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

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

Табличные части документа 1С 8.3

Чтобы добавить реквизит в табличную часть, необходимо выделить нужную табличную часть и нажать на кнопку «Добавить реквизит».

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

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

Реквизиты в табличной части документа 1С 8.3

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

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

Стандартные реквизиты документа 1С 8.3

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

Откроем палитру свойств стандартного реквизита

Открытие палитры свойств стандартного реквизиты документа 1С 8.3

И поменяем синоним.

Синоним стандартного реквизиты документа 1С 8.3

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

Синоним стандартного реквизиты документа 1С 8.3

Нумерация документов 1С

Каждый документ должен быть пронумерован, т.е. ему присвоится какой-то номер. Настройки нумерации документов задаются на закладке «Нумерация» конструктора документа.

Нумерация документов 1С

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

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

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

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

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

Интересное свойство Периодичность. При помощи этого свойства можно установить, что номера документов начинаются заново с какого-то периода. К примеру, если мы установим периодичность Год, то первый документ, созданный в начале года, будет иметь номер 1.

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

Нумератор документов 1С

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

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

Создание нумератора документов 1С

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

Свойства нумератора документов 1С

Осталось указать созданный нумератор в конструкторе документов Приход и Расход.

Выбор нумератора документов 1С

Выбор нумератора документов 1С

Мы уже создали документ Приход, у которого номер был 1, если сейчас создать документ Расход, то у него номер будет равен 2.

Нумератор документов 1С

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

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

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

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

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

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

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

Обработки 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Добавим в расширение справочник “Штатное расписание” и создадим реквизит “АВ_СпособОтражения” с типом данных “СправочникСсылка.СпособыОтраженияЗарплатыВБухУчете”

добавление реквизита АВ_СпособОтражения в расширение

2. Заберем в расширение процедуру “ПриСозданииНаСервере” из общего модуля “УправлениеСвойствами”, программно добавим поле в форму и свяжем его с реквизитом объекта добавленного на первом шаге.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

&После(«ПриСозданииНаСервере»)

Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

Если Форма.ИмяФормы = «Справочник.ШтатноеРасписание.Форма.ФормаЭлемента» Тогда

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

ИмяГруппы = «ГруппаДополнительныеРеквизиты»;

ГруппаФормы = Форма.Элементы.Найти(ИмяГруппы);

Если ГруппаФормы <> Неопределено Тогда

ИмяЭлемента = «АВ_СпособОтражения»;

Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда

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

//Вместо Добавить() можно использовать метод Вставить()

//в 4-й параметре указывается Элемент перед которым должен быть вставлен новый элемент.

//ЭлементФормы = Форма.Элементы.Вставить(ИмяЭлемента, Тип(«ПолеФормы»), ГруппаФормы, Форма.Элементы.Найти(«ИмяСледующегоЭлементаФормы»));

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

ЭлементФормы.ПутьКДанным = «Объект.АВ_СпособОтражения»;

//ЭлементФормы.МногострочныйРежим = Истина;

//ЭлементФормы.Высота = 3;

КонецЕсли;

КонецЕсли;

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

КонецЕсли;

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

Образец расширения для скачивания в начале описания.

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

Например, таким же способом, добавим в табличную часть “Рабочие места” реквизит “Спецжиры” с типом “Булево”.

Результат спецоценки условий труда с  колонкой спецжиры

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

&После(«ПриСозданииНаСервере»)

Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

Если Форма.ИмяФормы = «Документ.РезультатыСпецоценкиУсловийТруда.Форма.ФормаДокумента» Тогда

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

ИмяЭлемента = «АВ_ЕстьСпецжиры»;

Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда

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

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

ЭлементФормы.ПутьКДанным = «Объект.РабочиеМеста.АВ_ЕстьСпецжиры»;

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

КонецЕсли;

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

КонецЕсли;

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

В результате получим табличную часть с новой колонкой.

Программное добавление табличной части на форму

Аналогично добавим табличную часть “АВ_ВредныеФакторы” на форму справочника “Профессии”.

Табличная часть добавленная через расширение

Добавление табличной части на форму

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

&После(«ПриСозданииНаСервере»)

Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

Если Форма.ИмяФормы = «Справочник.ПрофессииРабочих.Форма.ФормаЭлемента» Тогда

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

ИмяГруппы = «ГруппаДополнительныеРеквизиты»;

ГруппаФормы = Форма.Элементы.Найти(ИмяГруппы);

Если ГруппаФормы <> Неопределено Тогда

ИмяЭлемента = «АВ_ВредныеФакторы»;

Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда   

ЭлементФормыТаблица = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ТаблицаФормы»), ГруппаФормы);  

ЭлементФормыТаблица.ПутьКДанным = «Объект.АВ_ВредныеФакторы»;

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

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

ЭлементФормы.ПутьКДанным = «Объект.АВ_ВредныеФакторы.ВредныйФактор»;    

КонецЕсли;

КонецЕсли;

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

КонецЕсли;

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

Связь реквизитов формы с элементами формы

Кроме того, реквизиты формы можно создавать программно и связывать их с элементами формы

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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

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

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

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

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

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

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

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

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

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

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

...

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

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

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

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


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

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

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

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) Спасибо! Это решило вопрос.

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

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

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

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

фотка 1

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

фотка 2

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

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

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

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

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

Содержание

  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. Комментарии модерируются, ссылки не относящиеся к делу нещадно удаляются.

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

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

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

Дык, читаю

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

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

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

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

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

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

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

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

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

Содержание:

1.     Добавление реквизитов на 1С управляемые формы

2.     Добавить элементы на форму

3.     Установка событий элементам формы

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

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

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

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

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

Рассмотрим на примерах, как делать доработку управляемых форм кодом в 1С. 

1.          Добавление реквизитов на 1С управляемые формы

Если в ходе разработки изменилась типовая структура объекта, то добавлять новые реквизиты на форму нет необходимости. Эти реквизиты будут доступны по пути «Объект.НовыйРеквизит».

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

«ДобавляемыеРеквизиты» и «УдаляемыеРеквизиты» – это массивы с элементами типа «РеквизитФормы». Тут все просто – «Добавляемые» добавляются, «Удаляемые» – удаляются.

Функция РеквизитФормы («ИмяРеквизита», «ТипРеквизита», «Путь», «Заголовок») создает объект типа «РеквизитФормы».

Тут важно понимать, что «ИмяРеквизита» содержит имя без точек. То есть имя без пути реквизита. Если нужно добавить реквизит, например, табличной части объекта, то уже в реквизите «Путь» указать путь к ТЧ реквизита – «Объект.Товары». «ТипРеквизита» задается через объект «ОписаниеТипов».

В примере ниже я добавил два реквизита «ЭтоСборка» для табличной части «Товары» у объекта и «СтатусОбработки» на форму документа. 

2.          Добавить элементы на форму

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

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

­-Элементы.Добавить(«ИмяЭлемента», «ТипЭлемента», «Родитель»).

-Элементы.Вставить(«ИмяЭлемента», «ТипЭлемента», «Родитель», «Элемент»).

«ИмяЭлемента» должно быть уникальным в рамках элементов формы. Лучше добавить какой-то префикс, чтобы не возникло пересечений с типовыми элементами формы.

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

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

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

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

3.          Установка событий элементам формы

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

Для установки событий элементам нужно использовать процедуру УстановитьДействие («ИмяСобытия», «Действие»).

«ИмяСобытия» — имя события, которое нужно отработать. Например, «ПриИзменении», «Очистка», «ОбработкаВыбора» и т.п.

«Действие» — процедура отработки события. Самое главное процедура должна содержать параметры необходимые для выполняемого события. Например, процедура «ПриИзменении» должна иметь параметр «Элемент».

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

НовыйЭлемент.КнопкаОчистки = Истина;

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

Код для копирования:

&НаСервере

Процедура КЛ_ДополнитьФормуПрограммно()

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

//Новый реквизит Товары.КЛ_ЭтоСборка

НовыйРеквизитФормы = Новый РеквизитФормы(«КЛ_ЭтоСборка»,

           Новый ОписаниеТипов(«Булево»)

           ,»Объект.Товары»

           ,»Это сборка»);

МассивРеквизитовФормы.Добавить(НовыйРеквизитФормы);

//Новый реквизит КЛ_СтатусОбработки

НовыйРеквизитФормы = Новый РеквизитФормы(«КЛ_СтатусОбработки»,

           Новый ОписаниеТипов(«ПеречислениеСсылка.СтатусыДокументовРеализации»)

           ,

           ,»Статус обработки»);

МассивРеквизитовФормы.Добавить(НовыйРеквизитФормы);

ИзменитьРеквизиты(МассивРеквизитовФормы);

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

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

НовыйЭлемент.КнопкаОчистки = Истина;

НовыйЭлемент.УстановитьДействие(«ПриИзменении»,»КЛ_ПриИзмененииСтатусаОбработки»);

НовыйЭлемент = Элементы.Вставить(«КЛ_ЭтоСборка», Тип(«ПолеФормы»),Элементы.Товары,Элементы.ТоварыКоличество);

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

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

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

Кирилл Карцев.

Понравилась статья? Поделить с друзьями:

Другие крутые статьи на нашем сайте:

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

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии