Волшебная процедура 1с УФ

Волшебная процедура для управляемой формы. Добавляет колонки в табличную часть

&НаСервере
Процедура СобратьТаблицуТоваровПоРазмерам(ПоТаблицеТоваров=Истина)

    БылоКолонок = Макс(ЭтаФорма.Элементы.ТаблицаТоваровПоРазмерам.ПодчиненныеЭлементы.Количество()-4, 0);
    НадоКолонок = СколькоНадоКолонок(ПоТаблицеТоваров);

    Если БылоКолонок >= НадоКолонок Тогда
        Возврат;
    КонецЕсли;

    КЧ = Новый КвалификаторыЧисла(7, 3);
    Массив = Новый Массив;

    Массив.Добавить(Тип("СправочникСсылка.ХарактеристикиНоменклатуры"));
    ОписаниеХар = Новый ОписаниеТипов(Массив);

    Массив.Очистить();
    Массив.Добавить(Тип("Число"));
    ОписаниеКол = Новый ОписаниеТипов(Массив,, КЧ);


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

    Для i=БылоКолонок По НадоКолонок Цикл

        ИмяЭлемента = "Характеристика_" + Строка(i);
        НовыйРеквизит = Новый РеквизитФормы(ИмяЭлемента, ОписаниеХар, "ТаблицаТоваровПоРазмерам", "Размер", Истина);
        ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);

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

    КонецЦикла;

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

    Попытка
        ЭтаФорма.Элементы.Удалить(ЭтаФорма.Элементы.ТаблицаТовароПоРазмерамКоличество);
        ЭтаФорма.Элементы.Удалить(ЭтаФорма.Элементы.ТаблицаТовароПоРазмерамЦена);
        ЭтаФорма.Элементы.Удалить(ЭтаФорма.Элементы.ТаблицаТовароПоРазмерамСумма);
    Исключение
    КонецПопытки;

    Для i=БылоКолонок По НадоКолонок Цикл

        ИмяЭлемента = "Группа_" + Строка(i);
        НовыйЭлементГруппы = ЭтаФорма.Элементы.Добавить(ИмяЭлемента, Тип("ГруппаФормы"), ЭтаФорма.Элементы.ТаблицаТоваровПоРазмерам);
        НовыйЭлементГруппы.Вид  = ВидГруппыФормы.ГруппаКолонок;
        НовыйЭлементГруппы.Ширина = 20;
        НовыйЭлементГруппы.РастягиватьПоГоризонтали = Ложь;

        ИмяЭлемента = "Характеристика_" + Строка(i);
        НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), НовыйЭлементГруппы);//ЭтаФорма.Элементы.ТаблицаТоваровПоРазмерам);
        НовыйЭлемент.ПутьКДанным = "ТаблицаТоваровПоРазмерам." + ИмяЭлемента;
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ТолькоПросмотр = Истина;
        НовыйЭлемент.ЦветФона = Новый Цвет(255, 239, 213);

        ИмяЭлемента = "Количество_" + Строка(i);
        НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), НовыйЭлементГруппы);//ЭтаФорма.Элементы.ТаблицаТоваровПоРазмерам);
        НовыйЭлемент.ПутьКДанным = "ТаблицаТоваровПоРазмерам." + ИмяЭлемента;
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.УстановитьДействие("ПриИзменении", "ТаблицаТовароПоРазмерамПодключаемыйКоличество");

    КонецЦикла;

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

    ИмяЭлемента = "ТаблицаТовароПоРазмерамЦена";
    НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ЭтаФорма.Элементы.ТаблицаТоваровПоРазмерам);
    НовыйЭлемент.ПутьКДанным = "ТаблицаТоваровПоРазмерам.Цена";
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ТолькоПросмотр = Истина;

    ИмяЭлемента = "ТаблицаТовароПоРазмерамСумма";
    НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ЭтаФорма.Элементы.ТаблицаТоваровПоРазмерам);
    НовыйЭлемент.ПутьКДанным = "ТаблицаТоваровПоРазмерам.Сумма";
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ТолькоПросмотр = Истина;

КонецПроцедуры

Добавить комментарий