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

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

Я
   НачинающийВ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) Спасибо! Это решило вопрос.

Типовыми средствами, документ «реализация товаров»

вот ты упорный! нет. и главное — зачем??

Ну пока учет получается на связке Номенклатура + Характеристика(4 штуки) + Серия. К номенклатуре можно прикрепить галерею картинок, для выгрузки на сайт. Рассматривается вариант вариативного товара на сайте, то есть к каждой характеристике своя цена и картинки. А к характеристике картинки не прикрепишь, надо тогда клон номенклатуры делать. А если делать клон, тогда вместо серий нагрузку по уникальности можно посадить на характеристики, а сами характеристики пересадить на реквизиты номенклатуры. Требуются дальнейшие пояснения?)

в команде «изменить форму» нет такой возможности? И как это сделать тогда?

Если у тебя УФ (а УТ 11.1 это УФ же) то там можно менять своим «внешним кодом» любые открытые формы…

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

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

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

А характеристики хоть и 4 в одной колонке, но всё же видно сразу.

Почему? Ведь в 8.3 на какой то ляд придумали программное создание реквизитов(!). Так что хз конечно, но не удивлюсь если можно.

Дык повесь как то вызов своего кода на «после открытия формы»

Внешней обработкой это возможно?

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

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

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

для 11.1 приходится снять с поддержки, чтобы изменить режим совместимости с 8.3.4 на 8.3.6, тогда можно использовать расширения. А для более новых версий УТ похоже таким способом можно будет изменить шрифт, не снимая с поддержки. Интересно как на практике эти расширения ведут себя для более сложных задач.

Не зависают ли обновления и прочее?

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

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

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

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

Тэги: 1С 8

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

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

Содержание

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

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

Задача

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Автор beztrud, 23 дек 2011, 15:40

0 Пользователей и 1 гость просматривают эту тему.

Здравствуйте. Есть справочник Фурнитура с реквизитами Наименование и ЕдиницаИзмерения-СправочникСсылка.ЕдиницыИзмерения. И есть документ с табличной частью Фурнитура и реквизитами Наименование — СправочникСсылка.Фурнитура и ЕдиницаИзмерения -СправочникСсылка.Фурнитура. Необходимо, чтобы в документе при выборе фурнитуры подставлялась единица измерения из справочника Фурнитура. Пишу:

&НаКлиенте
Процедура ФурнитураНаименованиеПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Фурнитура.ТекущиеДанные;
СтрокаТабличнойЧасти.ЕдиницаИзмерения = ПолучитьЕдиницу(СтрокаТабличнойЧасти.ЕдиницаИзмерения);
КонецПроцедуры

&НаСервере
Функция ПолучитьЕдиницу(Фурнитура)
Возврат Фурнитура.ЕдиницаИзмерения;
КонецФункции

Ошибки не выдает, но и значение не подставляет. :dfbsdfbsdf:


ну у вас ЕдиницаИзмерения в табличной части «Фурнитура» имеет значение СправочникСсылка.Фурнитура. Т.е. получается, исходя из кода, что вы пытаетеся в тип СправочникСсылка.Фурнитура добавить значение реквизита с типом СправочникСсылка.ЕдиницыИзмерения.

С уважением,
Андрей Федотов
Future IT Solutions


Но если в табличной части Фурнитура сделать реквизит ЕдиницаИзмерения строкой, то выдает ошибку


ПолучитьЕдиницу(СтрокаТабличнойЧасти.ЕдиницаИзмерения);
Что это за параметр????

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


&НаКлиенте
Процедура ФурнитураНаименованиеПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Фурнитура.ТекущиеДанные;
СтрокаТабличнойЧасти.ЕдиницаИзмерения = ПолучитьЕдиницу(Фурнитура);
КонецПроцедуры

&НаСервере
Функция ПолучитьЕдиницу(Фурнитура)
Возврат Фурнитура.ЕдиницаИзмерения;   
КонецФункции

Пишет:

{Документ.ЗаказКвартира.Форма.ФормаДокумента.Форма(57,57)}: Переменная не определена (Фурнитура)
СтрокаТабличнойЧасти.ЕдиницаИзмерения = ПолучитьЕдиницу(<<?>>Фурнитура); (Проверка: Тонкий клиент)


&НаКлиенте
Процедура ФурнитураНаименованиеПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Фурнитура.ТекущиеДанные;
СтрокаТабличнойЧасти.ЕдиницаИзмерения = ПолучитьЕдиницу(СтрокаТабличнойЧасти.Номенклатура); //Или товар, или Фурнитура, хз как она там у тебя называется
КонецПроцедуры

&НаСервереБезКонтекста     //Не нужно форму гонять на сервер из за одного реквизита...
Функция ПолучитьЕдиницу(Фурнитура)
Возврат Фурнитура.ЕдиницаИзмерения;   
КонецФункции

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


Вот верный код:


&НаКлиенте
Процедура ФурнитураНаименованиеПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Фурнитура.ТекущиеДанные;
СтрокаТабличнойЧасти.ЕдиницаИзмерения = ПолучитьЕдиницу(СтрокаТабличнойЧасти.Наименование);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьЕдиницу(Фурнитура)
Возврат Фурнитура.ЕдиницаИзмерения;
КонецФункции

Спасибо большое.


Содержание:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

Понравилась статья? Поделить с друзьями:
  • Как ввести реквизиты карты на госуслугах для начисления пенсии
  • Как вернуть через страховую компанию деньги за лекарства через
  • Как весело провести новогодний корпоратив в маленькой компании
  • Как взять выписку по карте сбербанка в банкомате с реквизитами
  • Как взять деньги на малый бизнес у государства какие документы