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

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

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


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

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

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

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

Можно ли процедуры привязать к созданным таким образом табличкам?
Их же нужно будет хранить в регистре каком-нибудь..
Ну и допустим автоматический расчет каких то полей таблички, это возможно же?
12 DrZombi
 
гуру
20.05.21
11:32
(7) Не заполняй программно, ты программно ее создай :)
13 DrZombi
 
гуру
20.05.21
11:34
(11) Процедуры должны (на) (А вернее одна или несколько), должны уже быть объявлены ранее.
Можно так же сделать функцию переопределения общего модуля, Менеджера или что там у вас :)
14 JuixyJes
 
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), Тип("ПолеФормы"), Таб);
        Рек.Вид = ВидПоляФормы.ПолеВвода;
        Рек.ПутьКДанным = "Таб"+ИмяДляЭлемента + "."+Ст.Имя;
        Рек.Заголовок = Ст.Заголовок;
    КонецЦикла;
    ЗначениеВРеквизитФормы(ТЗ, "Таб"+ИмяДляЭлемента);

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

При указании значения в колонке Взлив задать значение в колонке Объем
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший