helpf.pro
Регистрация

v8: ТаблицаЗначенй Клиент

Bell
07.08.2014 13:43Прочитано: 3511

Здравствуйте

Подскажите как можно грамотно сдлеать общую форму с таблицей значений и передать туда данные запроса ..Прилогаю ДТ файл

Yandex
Возможно, вас также заинтересует
Реклама на портале
Bell
07.08.2014 13:44Ответ № 1

TZ.dt

E_Migachev
07.08.2014 22:16Ответ № 2

просто через параметр, а если управляемая то черех хранилище, как с картинками

Bell
08.08.2014 09:46Ответ № 3

Так я так и все передаю (Вариант №1), но тогда приходится всегда описывать оформление Таблицы значений (Именя колонокк, их ширину ). Хочется сделать универсальную общую форму что бы колонки в таблице занчений создавались програмно (//ФТЗ.ЭлементыФормы.ТаблицаТЗ.СоздатьКолонки();) как в обычном приложении (Вариант №2). через общую форму код подборв минимален. Удобств больше и проблем соформлением нет серьезных... 

E_Migachev
08.08.2014 12:56Ответ № 4

Столкнулся с проблемой отсутствия такой функции, как СоздатьКолоноки() в 1С8.2. и нормального описание функции ИзменитьРеквизиты()

Задача такая:

Есть динамически заполняемая таблица значений, надо ее отображать на форме.

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

Вот собственно сама процедура:

Код 1C v 8.2 УП
 //*********************************

Процедура СоздатьТаблицуФормы(Знач ИмяПоляТаблицыФормы, Знач ИмяРеквизитаДанныеФормыКоллекция, Знач ТаблицаЗначений)

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

Для Каждого РеквизитУдаления Из РеквизитыДляУдаления Цикл
УдаляемыеРеквизиты.Добавить(ИмяРеквизитаДанныеФормыКоллекция+"."+РеквизитУдаления.Имя);

// Удаляем элементы формы
Элементы.Удалить(Элементы[ИмяПоляТаблицыФормы+РеквизитУдаления.Имя]);
КонецЦикла;

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

ИзменитьРеквизиты(ДобавляемыеРеквизиты,УдаляемыеРеквизиты);

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

ЗначениеВРеквизитФормы(ТаблицаЗначений, ИмяРеквизитаДанныеФормыКоллекция);
КонецПроцедуры
//*********************************

Описание передаваемых параметров:

1) ИмяПоляТаблицыФормы - Имя элемента на форме Таблица, или существующего или который надо создать, не важно. (Пример как у меня "ТаблицаФормы")

2) ИмяРеквизитаДанныеФормыКоллекция - Имя реквизита формы, его надо создать, пример настройки на картинке (имя должно отличаться от имени элемента формы, желательно) (Пример как у меня "Таблица")

3) ТаблицаЗначений - Собственно сама таблица с данными из-за которой все это и делалось.)

Ну вот и все. На 1С8 Обычные формы это выглядело бы так:

Код 1C v 8.х
 ИмяРеквизитаДанныеФормыКоллекция = ТаблицаЗначени;
ЭлементыФормы.ИмяПоляТаблицыФормы.СоздатьКолонки();
E_Migachev
08.08.2014 12:57Ответ № 5

и еще

Код 1C v 8.2 УП
 // *******************************************************************************************
// ПРИМЕЧАНИЕ: 
//        Эту процедуру можно разместить в общем модуле, для дальнейшего вызова из любого места
//        Для отображения таблицы необходиом чтобы на форме предварительно был создан реквизит типа "таблица значений",
//            и чтобы он был размещен среди элементов формы (по аналогии, как в этой форме)
//
// ОПИСАНИЕ: 
//         Создает и отображает на управляемой форме (8.2) таблицу значений, переданную в качестве параметра 
//         Дополнительно может подключить обработчики событий для таблицы
//
// ПАРАМЕТРЫ:
//        УФ - управляемая форма, на которую нужно вывести ТЗ
//        ТЗ - таблица значений, которую нужно отобразить на форме
//      ТЗОбработчиковСобытий - таблица со структурой данных, описывающих обработчики событий. Не обязательна.
//            Процедура обработки события должна именоваться как <ИмяЭлемента + ИмяСобытия>
//
&НаСервере
Процедура ВывестиТаблицуНаФорму(УФ,ИмяТЗНаФорме,ТЗ, ТЗОбработчиковСобытий = Неопределено) Экспорт
    
    // СОЗДАНИЕ РЕКВИЗИТОВ ФОРМЫ
 
    МассивДобавляемыхРеквизитов = Новый Массив; 
    
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,ИмяТЗНаФорме ,Колонка.Заголовок));    
    КонецЦикла; 
    
    МассивУдаляемыхРеквизитов = УФ.ПолучитьРеквизиты(ИмяТЗНаФорме);
    МассивИменУдаляемыхРеквизитов = Новый Массив;
    
    Для каждого Элемент Из МассивУдаляемыхРеквизитов Цикл
        МассивИменУдаляемыхРеквизитов.Добавить(ИмяТЗНаФорме + "." + Элемент.Имя);
    КонецЦикла; 
    
    УФ.ИзменитьРеквизиты(МассивДобавляемыхРеквизитов,МассивИменУдаляемыхРеквизитов); 
    
    // СОЗДАНИЕ ЭЛЕМЕНТОВ ФОРМЫ
 
    Для каждого Элемент Из МассивУдаляемыхРеквизитов Цикл
        УдаляемыйЭлемент = УФ.Элементы.Найти(ИмяТЗНаФорме + Элемент.Имя);
        УФ.Элементы.Удалить(УдаляемыйЭлемент);
    КонецЦикла; 
    
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        НоваяКолонка = УФ.Элементы.Добавить(ИмяТЗНаФорме + Колонка.Имя, Тип("ПолеФормы"), УФ.Элементы[ИмяТЗНаФорме]); 
        НоваяКолонка.Заголовок = Колонка.Заголовок; 
        НоваяКолонка.ПутьКДанным = ИмяТЗНаФорме + "." + Колонка.Имя;
        НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода; 
        НоваяКолонка.РежимРедактирования = РежимРедактированияКолонки.ВходПриВводе;    
    КонецЦикла;     
    
    УФ[ИмяТЗНаФорме].Загрузить(ТЗ);
    
    // Привязка обработчиков событий
 
    Если ТЗОбработчиковСобытий = Неопределено Тогда
        Возврат;
    КонецЕсли;    
    
    Для Каждого Строка Из ТЗОбработчиковСобытий Цикл
        УФ.Элементы[Строка.ИмяЭлемента].УстановитьДействие(Строка.ИмяСобытия, Строка.ИмяЭлемента + Строка.ИмяСобытия); 
    КонецЦикла;    
    
КонецПроцедуры
Подсказка: Для редактирования своего ответа щелкните по значку (справа)
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.