17.08.2020 Максим Федоров 42412
Варианты программного добавления элементов на...

Содержание:

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

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


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


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


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




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

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

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

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

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

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

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

 

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

 

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

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

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

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

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

 

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

 

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

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

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

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

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

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

 


 

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



 

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

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

 

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



 

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


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


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

 

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

 

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

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

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

 

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



 

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

 

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

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



 

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

 

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


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

 

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

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

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

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

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

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

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

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

 


 

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

 

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



 

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


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

 

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

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

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

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

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

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


 

 

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


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

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

Наши проекты

Внедрение ПП "1С:CRM ПРОФ" в ООО «Торговый Дом Факел»
ООО «Торговый Дом Факел»

Отрасль:
Производство

Внедренное типовое решение:
1С:CRM ПРОФ

- Управление отношениями с клиентами (CRM) ...

Доработка конфигурации Заказчика «1С:Управление строительной организацией»
ЗАО «Стройтрансгаз»

Отрасль:
Проектирование

Внедренное типовое решение:
1С:Управление строительной организацией

Взаиморасчеты с поставщиками;
- Оформление заказов поставщикам;
- Склад ...

ООО «Солви Пак»
ООО «Солви Пак»

Отрасль:
Торговля. Производство печати на рулонных материалах

Внедренное типовое решение:
1С:CRM+1С:Комплексная автоматизация

Управление отношениями с клиентами (CRM) ...

Филиал ГлавУпДК при МИД России фирма «Инпредкадры»
Филиал ГлавУпДК при МИД России фирма «Инпредкадры»

Отрасль:
Государственное управление

Внедренное типовое решение:
1С:Бухгалтерия

- Расчеты с контрагентами;
- Управленческий учет;
- Формирование отраслев...

Группа компаний ТМ «Дружба народов»
Группа компаний ТМ «Дружба народов»

Отрасль:
Пищевая промышленность

Внедренное типовое решение:
1С:ERP Управление предприятием 2.1

- Переход на новый релиз 2.1 программы «1С:ERP Управление предприятием»
- Разра...

Автоматизация складских операций на базе «1С:Предприятие 8. WMS Логистика. Управление складом»
ОАО «Фрейт Линк»

Отрасль:
Логистика и грузоперевозки

Внедренное типовое решение:
1С:Управление холдингом

Реализовали разработку уникального модуля «Интернет-магазины» на базе прог...

ЗАО «Ламбумиз»
ЗАО «Ламбумиз»

Отрасль:
Производство картонной упаковки

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

- Маркетинг;
- Продажи;
- Планирование закупок;
- Закупки;
- Регламенти...

ООО "ЛИКАРД" (Лукойл)
ООО "ЛИКАРД" (Лукойл)

Отрасль:
Нефтесервис

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Делопроизводство
• Учет и контроль исполнения поручений
Учет и хранение...

ООО «Фипар»
ООО «Фипар»

Отрасль:

Внедренное типовое решение:
1С:Предприятие 8. ERP Управление предприятием 2

Специалисты «Кодерлайн» внедрили «1С:ERP. Управление предприятием 2» и автома...

ООО «ПЛЮСПЭЙ»
ООО «ПЛЮСПЭЙ»

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

Внедренное типовое решение:
1С:Комплексная автоматизация

- Разработка подсистемы оперативного учета транзакций...

ФГУП «Почта России»
ФГУП «Почта России»

Отрасль:
Почта, доставка

Внедренное типовое решение:
1С:Зарплата и управление персоналом

- Бухгалтерский учет
- Расчет зарплаты и кадровый учет
- Налоговый учет ...

СТС-Медиа
СТС-Медиа

Отрасль:
Медиаиндустрия

Внедренное типовое решение:
1С:Управление холдингом

- Бухгалтерский учет;
- Налоговый учет;
- МСФО (GAAP/управленческий учет);
- ...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение