20.01.2017

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

Автор: Белозерских Евгений

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

Реквизит формы с типом таблица значений

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

"Рисуем" колонки на управляемой форме 1С 8.3

     Ниже представлена процедура, которая отображает на управляемой форме содержимое таблицы значений переданное ей в качестве параметра.
&НаСервере
Процедура СформироватьКолонкиТаблицы(ТаблицаРезультат)
	
	// Удалим колонки таблицы перед обновление
	Таблица = РеквизитФормыВЗначение("ДанныеТаблицы");
    МассивРеквизитов = Новый Массив;

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

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

Заключение

     Очень полезный пример. Готовый файл обработки можно скачать здесь

     Подписывайтесь на ERPSTAT ВКонтакте
     

Другие статьи

Функция вычисления контрольной цифры для штрихкода EAN-13 (EAN-8)

    Рабочая функция для вычисления контрольной цифры в штрихкоде формата EAN-13 или EAN-8

Чтение текстового файла в 1С

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

Чтение (Загрузка) данных из MXL в 1С 8.3

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

Открыть форму выбора 1С 8.3

    Пример кода для открытия окна выбора элемента справочника, без использования модальных вызовов

Чтение и загрузка DBF в 1С 8.3

    Пример программного кода для чтения и/или записи файлов в формате DBF

Выгрузка объекта «1С» в XML и загрузка объекта из XML файла

    Пример выгрузки объекта информационной базы (СправочникОбъект, ДокументОбъект) «1С» в XML файл, и пример обратной загрузки объекта из XML файла

Выгрузка и загрузка XML через DOM

    Полезный пример того, как можно выгрузить в XML данные и загрузить обратно через DOM. Обработка осуществляется при помощи таких объектов как: ЗаписьXML, ЧтениеXML, ЗаписьDOM, ДокументDOM, ПостроительDOM.

HTTP запрос в 1С средствами «WinHttpRequest»

    Пример реализации HTTP запроса в 1С, средствами «WinHttpRequest» 

Программное изменение расписания фонового задания 1С 8.3

   Пример программного кода, для редактирования расписания выполнения фонового задания в 1С 8.3 в режиме отказа использования модальных вызовов

Оформление строк табличной части 1С 8.3

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

Обработка заполнения табличной части в 1С 8.3

    В статье рассматривается разработка обработки заполнения табличной части на примере конфигурации 1С:ERP
 

Запрос к таблице значений 1С 8.3

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

Динамическое создание колонок в таблице на форме 1С (Обычное приложение)

     Практический пример того, каким образом в таблице на форме (в режиме обычного приложения 1С), можно динамически создавать необходимое количество колонок, с возможностью установки обработки событий (например "ПриИзменении" в ячейке таблицы)

Чтение (загрузка) данных в 1С 8.3 из Excel

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

Сохранение и восстановление настроек 1С 8.3

    Пример работы с хранилищем настроек 1C, для программного сохранения и получения сохраненных настроек

Внешняя печатная форма 1С 8.3

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

Определение даты создания ссылки в 1С

Определяем дату создания ссылки по уникальному идентификатору объекта 1С

Программное создание команды и кнопки на форме 1С 8.3

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

Открыть форму созданного объекта (Справочник, документ в 1С 8.2, 8.3)

Создаем новый объект, НЕ записываем его в базу, и открываем форму