Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Создание табличных частей документа (элементов на форме)

Создание табличных частей документа (элементов на форме)
Я
   JuixyJes
 
19.05.21 - 10:19
Добрый день, пытаюсь создать элемент новый (таблицу формы)

Но при выполнении кода вылетает ошибка

{Документ.нпПогрузкаСудна.Форма.ФормаДокумента.Форма(747)}: Ошибка при установке значения атрибута контекста (ПутьКДанным)
    Таб.ПутьКДанным = "Объект.Таб"+ИмяДляЭлемента;
по причине:
Недопустимое значение


Таб = Элементы.Добавить("Таб"+ИмяДляЭлемента, Тип("ТаблицаФормы"),НовыйЭлемент);
    Таб.ПутьКДанным = "Объект.Таб"+ИмяДляЭлемента;
    Для Каждого Ст ИЗ Элементы.Резервуар1.ПодчиненныеЭлементы Цикл
        Рек = Элементы.Добавить("Колонка"+ИмяДляЭлемента + Прав(Ст.Имя,СтрДлина(Ст.Имя)-10), Тип("ПолеФормы"), Таб);
        Рек.Вид = ВидПоляФормы.ПолеНадписи;
        Рек.ПутьКДанным = "Объект.Таб"+ИмяДляЭлемента + "." + Ст.Имя;
        Рек.Заголовок = Прав(Ст.Имя,СтрДлина(Ст.Имя)-10);
    КонецЦикла;
 
 Партнерская программа EFSOL Oblako
   RomanYS
 
1 - 19.05.21 - 10:21
У твоего объекта нет такой табличной части, которую ты указываешь источником
   JuixyJes
 
2 - 19.05.21 - 10:28
Давайте распишу, что нужно сделать

У меня есть такая необходимость, создание табличных частей в неопределенном количестве на форме в разных вкладках. Одна тч у меня есть в реквизитах документа, как шаблон для создания остальных, но данные во всех разные должны быть.
   RomanYS
 
3 - 19.05.21 - 10:33
(2) "Табличные части" - они только в метаданных. Добавляй таблицы в <реквизиты формы>, а их потом уже используй как источник для элементов формы.
ИзменитьРеквизиты(...)
   shuhard
 
4 - 19.05.21 - 10:39
(2) это не табличная часть, это таблица значений
   JuixyJes
 
5 - 19.05.21 - 11:57
Оййй, точно...
   JuixyJes
 
6 - 19.05.21 - 14:00
Создать то я создала
А вот заполнять то ее как?
   JuixyJes
 
7 - 19.05.21 - 14:09
Нужно не программное заполнение
   acht
 
8 - 19.05.21 - 14:42
(7) Ну а кто ж написал такой код, что

Рек.Вид = ВидПоляФормы.ПолеНадписи; 

? =)
   shuhard
 
9 - 19.05.21 - 15:33
(7)[Нужно не программное заполнение]
доктора в топик
   PR
 
10 - 19.05.21 - 15:36
(9) Че ты сразу доктора?
Нажимаешь Ins и заполняешь
   JuixyJes
 
11 - 20.05.21 - 10:43
(8) спасибо, не заметила, на улице жара, плавлюсь...

Можно ли процедуры привязать к созданным таким образом табличкам?
Их же нужно будет хранить в регистре каком-нибудь..
Ну и допустим автоматический расчет каких то полей таблички, это возможно же?
   DrZombi
 
12 - 20.05.21 - 11:32
(7) Не заполняй программно, ты программно ее создай :)
   DrZombi
 
13 - 20.05.21 - 11:34
(11) Процедуры должны (на) (А вернее одна или несколько), должны уже быть объявлены ранее.
Можно так же сделать функцию переопределения общего модуля, Менеджера или что там у вас :)
   JuixyJes
 
14 - 20.05.21 - 12:26
&НаСервере
Функция ДобавитьВкладкуНаСервере(ВыбЗнач)
    ИмяДляЭлемента = ОставитьБуквыИЦифры(Строка(ВыбЗнач));
    НовыйЭлемент = Элементы.Добавить("Стр"+ИмяДляЭлемента,Тип("ГруппаФормы"),Элементы.ГруппаВкладкиРезервуаров);
    НовыйЭлемент.Вид = ВидГруппыФормы.Страница;
    НовыйЭлемент.Заголовок = ВыбЗнач;
    ТЗ = Новый ТаблицаЗначений;
    Для Каждого Ст ИЗ Элементы.Резервуар1.ПодчиненныеЭлементы Цикл
        Если Ст.Имя = "Резервуар1НомерСтроки" Тогда
            ЗаголовокКолонки = "№";
            КвалификаторыЧисла =  Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Любой);
            ТипЗначения = Новый ОписаниеТипов("Число",,,КвалификаторыЧисла);
        ИначеЕсли Ст.Имя = "Резервуар1ВидТоплива" Тогда 
            ЗаголовокКолонки =    "Вид топлива";
            ТипЗначения =  Новый ОписаниеТипов("СправочникСсылка.Номенклатура");
        ИначеЕсли Ст.Имя = "Резервуар1Резервуар" Тогда 
            ЗаголовокКолонки =    "Резервуар";
            ТипЗначения =  Новый ОписаниеТипов("СправочникСсылка.нпРезервуары");
        ИначеЕсли Ст.Имя = "Резервуар1Взлив" Тогда 
            ЗаголовокКолонки =    "Взлив, см";
            КвалификаторыЧисла =  Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Любой);
            ТипЗначения =  Новый ОписаниеТипов("Число",,,КвалификаторыЧисла);
        ИначеЕсли Ст.Имя = "Резервуар1Объем" Тогда 
            ЗаголовокКолонки =    "Объем, куб.м.";
            КвалификаторыЧисла =  Новый КвалификаторыЧисла(10, 3, ДопустимыйЗнак.Любой);
            ТипЗначения =  Новый ОписаниеТипов("Число",,,КвалификаторыЧисла);
        ИначеЕсли Ст.Имя = "Резервуар1Плотность15" Тогда 
            ЗаголовокКолонки =    "Плотность при 15 °С";
            КвалификаторыЧисла =  Новый КвалификаторыЧисла(10, 4, ДопустимыйЗнак.Любой);
            ТипЗначения =  Новый ОписаниеТипов("Число",,,КвалификаторыЧисла);
        ИначеЕсли Ст.Имя = "Резервуар1ПлотностьРасчет" Тогда 
            ЗаголовокКолонки =    "Расчетная плотность";
            КвалификаторыЧисла =  Новый КвалификаторыЧисла(10, 4, ДопустимыйЗнак.Любой);
            ТипЗначения =  Новый ОписаниеТипов("Число",,,КвалификаторыЧисла);
        ИначеЕсли Ст.Имя = "Резервуар1Масса" Тогда 
            ЗаголовокКолонки =    "Масса, т";
            КвалификаторыЧисла =  Новый КвалификаторыЧисла(10, 3, ДопустимыйЗнак.Любой);
            ТипЗначения =  Новый ОписаниеТипов("Число",,,КвалификаторыЧисла);
        ИначеЕсли Ст.Имя = "Резервуар1ПлотностьЛаборатория" Тогда 
            ЗаголовокКолонки =    "Плотность лаборатория";
            КвалификаторыЧисла =  Новый КвалификаторыЧисла(10, 4, ДопустимыйЗнак.Любой);
            ТипЗначения =  Новый ОписаниеТипов("Число",,,КвалификаторыЧисла);
        ИначеЕсли Ст.Имя = "Резервуар1ПлотностьЛабораторияРасчет" Тогда 
            ЗаголовокКолонки =    "Расчетная плотность лаборатория";
            КвалификаторыЧисла =  Новый КвалификаторыЧисла(10, 4, ДопустимыйЗнак.Любой);
            ТипЗначения =  Новый ОписаниеТипов("Число",,,КвалификаторыЧисла);
        ИначеЕсли Ст.Имя = "Резервуар1МассаЛаборатория" Тогда 
            ЗаголовокКолонки =    "Масса лаборатория, т";
            КвалификаторыЧисла =  Новый КвалификаторыЧисла(10, 3, ДопустимыйЗнак.Любой);
            ТипЗначения =  Новый ОписаниеТипов("Число",,,КвалификаторыЧисла);
        КонецЕсли;
        ТЗ.Колонки.Добавить("Колонка"+ИмяДляЭлемента + Прав(Ст.Имя,СтрДлина(Ст.Имя)-10),ТипЗначения,ЗаголовокКолонки);
    КонецЦикла;
    Реквизиты = Новый Массив;
    Реквизиты.Добавить(Новый РеквизитФормы("Таб"+ИмяДляЭлемента, Новый ОписаниеТипов("ТаблицаЗначений")));
    Для Каждого Ст ИЗ ТЗ.Колонки Цикл
        Реквизиты.Добавить(Новый РеквизитФормы(Ст.Имя, Ст.ТипЗначения, "Таб"+ИмяДляЭлемента));
    КонецЦикла;
    
    // добавим реквизиты на форму

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

КонецФункции
   JuixyJes
 
15 - 20.05.21 - 12:27
Вот я создала... Таблички создаются, заполнять могу... Но мне нужно сделать следующее:

При указании значения в колонке Взлив задать значение в колонке Объем

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.