🔥 Горящие вакансии
Все статьи

Программное добавление элементов форм и реквизитов в 1С УФ

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

Предположим, что хотим добавить на форму таблицу ПоляПоиска с колонками, заданными в массиве структур МассивПоляПоиска – массив структур с полями Имя (имя колонки таблицы ПоляПоиска), Тип (тип колонки).

Описание текста процедуры модуля формы для программного добавления реквизитов и элементов:

1. Заполняем массив реквизитов формы к удалению (на случай, если на форме уже есть реквизит с именем ПоляПоиска, удалим его). ВНИМАНИЕ! Для удаления реквизита формы – «колонки таблицы» нужно указать «ИмяТаблицы.ИмяКолонки», для удаления реквизита формы – «таблицы» нужно указать «ИмяТаблицы».

2. Добавляем в массив новых реквизитов элемент: имя — ПоляПоиска, тип — ТаблицаЗначений.

3. В цикле для каждого элемента массива МассивПоляПоиска создаем реквизит формы (колонку таблицы значений ПоляПоиска) и добавляем в массив новых реквизитов.

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

5. Если на форме уже есть элемент с именем ПоляПоиска, то удаляем его колонки (ПодчиненныеЭлементы), иначе добавляем на форму элемент ПоляПоиска с типом ТаблицаФормы в группу ГруппаПоляПоиска.

6. Добавляем элементы формы – колонки таблицы ПоляПоиска.

 

&НаСервере
Процедура СформироватьРеквизитыИЭлементыФормы(МассивПоляПоиска)
                МассивДобавляемыхРеквизитов = Новый Массив;
                МассивУдаляемыхРеквизитов = Новый Массив;
               
                Если НЕ НовыйРеквизитФормы("ПоляПоиска", ЭтаФорма) Тогда
                               МассивУдаляемыхРеквизитов.Добавить("ПоляПоиска");
                КонецЕсли;
               
                МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ПоляПоиска", Новый ОписаниеТипов("ТаблицаЗначений")));          
                Для Каждого ЭлементПоляПоиска Из МассивПоляПоиска Цикл
                               МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ЭлементПоляПоиска.Имя, ЭлементПоляПоиска.Тип, "ПоляПоиска"));
                КонецЦикла;
               
                ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов, МассивУдаляемыхРеквизитов);
               
                ЭлементФормыПоляПоиска = Элементы.Найти("ПоляПоиска");
                Если ЭлементФормыПоляПоиска <> Неопределено Тогда
                               МассивЭлементовКУдалению = Новый Массив;
                              
                               Для Каждого ЭлементКУдалению Из ЭлементФормыПоляПоиска.ПодчиненныеЭлементы Цикл
                                               МассивЭлементовКУдалению.Добавить(ЭлементКУдалению);
                               КонецЦикла;
                              
                               Для Каждого ЭлементКУдалению Из МассивЭлементовКУдалению Цикл
                                               Элементы.Удалить(ЭлементКУдалению);
                               КонецЦикла;
                Иначе
                               ЭлементФормыПоляПоиска = Элементы.Добавить("ПоляПоиска", Тип("ТаблицаФормы"), Элементы.ГруппаПоляПоиска);
                               ЭлементФормыПоляПоиска.ПутьКДанным = "ПоляПоиска";
                               ЭлементФормыПоляПоиска.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;   
                КонецЕсли;                      
                              
                Для Каждого ЭлементПоляПоиска Из МассивПоляПоиска Цикл
                               ЭлементФормыКолонкаТаблицы = Элементы.Добавить("ПоляПоиска" + ЭлементПоляПоиска.Имя, Тип("ПолеФормы"), Элементы.ПоляПоиска);
                               ЭлементФормыКолонкаТаблицы.Вид = ВидПоляФормы.ПолеВвода;
                               ЭлементФормыКолонкаТаблицы.ПутьКДанным = "ПоляПоиска." + ЭлементПоляПоиска.Имя;        
                КонецЦикла;   
КонецПроцедуры
&НаСервере
Функция НовыйРеквизитФормы(ИмяРеквизита, СтруктураФормы) Экспорт                             
                ПроверкаРеквизитаФормы = Новый УникальныйИдентификатор;
                СтруктураДляПроверки = Новый Структура(ИмяРеквизита, ПроверкаРеквизитаФормы);
               
ЗаполнитьЗначенияСвойств(СтруктураДляПроверки, СтруктураФормы);
               
Если СтруктураДляПроверки[ИмяРеквизита] = ПроверкаРеквизитаФормы Тогда                     
Возврат Истина;
                Иначе
                               Возврат Ложь;
                КонецЕсли;      
КонецФункции

 

Оставить коментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Раз в квартал — дайджест достойный внимания

Вести с полей 1С, кейсы работы с заказчиками и вакансии на удалёнке

Image

Отправить резюме

    Я согласен на обработку персональных данных в соответствии
    со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

    Отправить резюме

      Я согласен на обработку персональных данных в соответствии
      со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

      Pекомендовать друга

        Отправьте контактные данные вашего друга и предупредите его, что мы с ним свяжемся. Когда друг успешно отработает 3 месяца, вы получите 20 000 ₽.


        Выбрать вакансию
        • Ведущий аналитик 1С
        • Программист 1С
        • Консультант-аналитик 1С
        • Проекты для команды специалистов 1С
        • Проекты для специалистов 1С
        • Стажёр-программист 1С
        • Bitrix-разработчик
        Я согласен на обработку персональных данных в соответствии
        со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

        Pекомендовать друга

          Отправьте контактные данные вашего друга и предупредите его, что мы с ним свяжемся. Когда друг успешно отработает 3 месяца, вы получите 20 000 ₽.


          Выбрать вакансию
          • Ведущий аналитик 1С
          • Программист 1С
          • Консультант-аналитик 1С
          • Проекты для команды специалистов 1С
          • Проекты для специалистов 1С
          • Стажёр-программист 1С
          • Bitrix-разработчик
          Я согласен на обработку персональных данных в соответствии
          со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

          Спасибо!

          Мы получили ваше резюме. Менеджер свяжется с вами в течение трех дней

          Горящие вакансии