Имя: Пароль:
1C
1С v8
Динамическое программное добавление табличного документа на УФ.
, , ,
0 байт
 
08.06.15
07:23
Доброго времени суток, коллеги, с УФ не так часто вожусь в связи с чем такой вопрос динамически формируются табличные документы(печатные формы), они размещаются постранично на форму их может быть 10, 15 и т.д, не удается мне программно это реализовать, на форме уже размещено 10 табличных документов, если их не хватает нужно добавить программно, может кто поможет? Это мои попытки дописки:

    Колво = КоллекцияПечатныхФорм.Количество();
    
    Для Сч = 1 По Колво Цикл
        //Если Сч > Колво Тогда
        //    ЭтаФорма["Таб" + Сч] = Неопределено;
        //    Элементы["Группа" + Сч].Видимость = Ложь;
        //    Элементы["Копии"  + Сч].Видимость = Ложь;
        //Иначе
            СтрМакета = КоллекцияПечатныхФорм[Сч-1];
            //МНач
            Попытка
                ЭтаФорма["Таб" + Сч] = СтрМакета.ТабличныйДокумент;
                Элементы["Группа" + Сч].Видимость = Истина;
                Элементы["Группа" + Сч].Заголовок = СтрМакета.СинонимМакета;
                Элементы["Копии"  + Сч].Видимость = Истина;
                Элементы["Копии"  + Сч].Заголовок = СтрМакета.СинонимМакета;
                
                Если Сч <= КоличествоКопийДляПечати.Количество() Тогда
                    ЭтаФорма["Копии" + Сч] = КоличествоКопийДляПечати[Сч-1];
                Иначе
                    ЭтаФорма["Копии" + Сч] = СтрМакета.Экземпляров;
                КонецЕсли;
                
                ЭтаФорма["Таб" + Сч].КоличествоЭкземпляров = ЭтаФорма["Копии" + Сч];
            Исключение
                //НовГруппа = Элементы.Добавить("Группа" + Сч,Тип("ГруппаФормы"),ЭтаФорма.Элементы.Страницы);  
                //НовПоле = Элементы.Добавить("Таб" + Сч,Тип("ПолеФормы"),НовГруппа);
                //НовТаблФормы = Элементы.Добавить("Таб" + Сч,Тип("таблицаформы"));
                //НовПоле.ПутьКДанным = НовТаблФормы;
                //НовТаблФормы = СтрМакета.ТабличныйДокумент;
                Элементы.Добавить("Группа" + Сч,Тип("ГруппаФормы"),ЭтаФорма.Элементы.Страницы);
                //Элементы.Добавить("Копии"  + Сч,Тип("Число"),ЭтаФорма.Элементы.ГруппаКопии);
                //ЭтаФорма["Таб" + Сч] = СтрМакета.ТабличныйДокумент;
                Элементы["Группа" + Сч].Видимость = Истина;
                Элементы["Группа" + Сч].Заголовок = СтрМакета.СинонимМакета;
                //Элементы["Копии"  + Сч].Видимость = Истина;
                //Элементы["Копии"  + Сч].Заголовок = СтрМакета.СинонимМакета;
                //
                //Если Сч <= КоличествоКопийДляПечати.Количество() Тогда
                //    ЭтаФорма["Копии" + Сч] = КоличествоКопийДляПечати[Сч-1];
                //Иначе
                //    ЭтаФорма["Копии" + Сч] = СтрМакета.Экземпляров;
                //КонецЕсли;
                
                //ЭтаФорма["Таб" + Сч].КоличествоЭкземпляров = ЭтаФорма["Копии" + Сч];
            КонецПопытки;
            //МКон
            ИменаТабДокументов.Добавить(Сч, СтрМакета.СинонимМакета);
            
            Если НЕ ПустаяСтрока(СтрМакета.ПолныйПутьКМакету) Тогда
                МакетыПечатныхФорм.Добавить(СтрМакета.ПолныйПутьКМакету);
            КонецЕсли;
        //КонецЕсли;
    КонецЦикла;
не могу я пока совладать с УФ формами))
1 байт
 
08.06.15
08:12
подниму )
2 байт
 
08.06.15
08:24
хотел просто для теста чтобы появились хотя бы закладки, но он и их не выводит что делаю не так?

                НовГруппа = Элементы.Добавить("Группа" + Сч,Тип("ГруппаФормы"),Элементы.Страницы);
                НовПоле = Элементы.Добавить("Таб" + Сч,Тип("ПолеФормы"),НовГруппа);
                НовПоле.Вид = ВидПоляФормы.ПолеТабличногоДокумента;
                Элементы["Группа" + Сч].Заголовок = СтрМакета.СинонимМакета;
3 butterbean
 
08.06.15
08:26
(0) УФ не показывает пустые элементы, т.е. группы без вложенных элементов, элементы не привязанные к данным и т.п.
у тебя поле формы не связано с данными, поэтому ничего нет
4 байт
 
08.06.15
08:27
(3) хорошо как связать?
5 SeraFim
 
08.06.15
08:27
А вид группы разве не надо задавать?
Что-то типа: НовГруппа.Вид = ВидГруппыФормы.Страница;
6 байт
 
08.06.15
08:29
(5) добавил не помогло.
7 YurAnt
 
08.06.15
08:29
Могу ошибаться... но как насчет Выполнить(Код) ?
рисуешь в макете строку, формируешь динамически столько раз сколько нужно

"они размещаются постранично на форму их может быть 10, 15 и т.д,"

пихаешь всё в "Код"
исполняешь, выводишь
8 YurAnt
 
08.06.15
08:30
самый простой вариант - взглянуть как это реализовано в типовых варинатах
9 байт
 
08.06.15
08:36
(7) не вкурил???
10 байт
 
08.06.15
08:37
у меня уже сформированы табличные документы их осталось только вывести на эту Управляемую форму??
11 DmitrO
 
08.06.15
08:49
Поле формы на УФ никогда не отобразится пока не задашь путь к данным:
НовПоле.ПутьКДанным = ...
12 YurAnt
 
08.06.15
08:54
посмотри в гугле  "программно добавить элемент формы" 2я ссылка
там про кнопку и поле ввода, но суть надо полагать одна и та же
13 байт
 
08.06.15
09:07
(11) да ты прав, подсунул туда таб10, теперь как туда запихнуть мою таблицу, в данном случае я сослался на реквизит формы попытался присваивать значение в цикле к реквизиту не взлетело?

                НовГруппа = Элементы.Добавить("Группа" + Сч,Тип("ГруппаФормы"),Элементы.Страницы);
                НовГруппа.Вид = ВидГруппыФормы.Страница;
                НовГруппа.Заголовок = СокрЛП(СтрМакета.СинонимМакета);
                НовПоле = Элементы.Добавить("Таб" + Сч,Тип("ПолеФормы"),НовГруппа);
                НовПоле.Вид = ВидПоляФормы.ПолеТабличногоДокумента;
                Таб10 = СтрМакета.ТабличныйДокумент;
                НовПоле.ПутьКДанным ="Таб10";
14 SeraFim
 
08.06.15
09:08
Нужно создавать реквизиты формы =)
15 DmitrO
 
08.06.15
09:11
(14) ну не обязательно создавать, может он уже есть )
16 байт
 
08.06.15
09:12
(14)реквизит = Новый РеквизитФормы так чтоли?
17 DmitrO
 
08.06.15
09:14
(16)или, например так:
НовПоле.ПутьКДанным ="СписокЗначенийСЭмыкселинами[0].Значение";
18 байт
 
08.06.15
09:15
(15) на форме есть 10 реквизитов Таб1, Таб2,....,(тип ТабличныйДокумент) я просто хочу взять любой из них присвоить туда макет и вывести как выше но не взлетело.
19 SeraFim
 
08.06.15
09:43
"Динамическое программное добавление табличного документа на УФ." <> "на форме есть 10 реквизитов Таб1, Таб2,....,(тип ТабличныйДокумент)"

Или
1. у тебя 10 реквизитов Таб1, Таб2... и 10 страниц с уже созданными полями табличного документов. Тогда просто загружаешь данные в Таб1, Таб2... и не паришься. Но 11-ый ТабДок ты уже не выведешь.
Или
2. У тебя нету ни реквизитов, ни страниц с полями табличного документов. Тогда ты каждый раз программно создаешь реквизиты Таб1, Таб2... и создаешь страницы с полями табличного документов. И тогда ты сможешь выводить сколько угодно ТабДоков.
20 байт
 
08.06.15
09:45
(18) а совместить эти варианты разве нельзя?
21 SeraFim
 
08.06.15
09:46
а все... Дошло. У тебя 10 реквизитов, но страниц с полями табличного документов у тебя нет.
22 байт
 
08.06.15
09:48
(21) есть нарисованные 10 страниц и 10 табДоков к ней, в случае если не хватает создаю программно и вывожу.
23 байт
 
08.06.15
09:56
(17) делаю так выводит просто имя табличныйДокумент вместо макета что делаю не так?

                НовГруппа = Элементы.Добавить("Группа" + Сч,Тип("ГруппаФормы"),Элементы.Страницы);
                НовГруппа.Вид = ВидГруппыФормы.Страница;
                НовГруппа.Заголовок = СокрЛП(СтрМакета.СинонимМакета);
                НовПоле = Элементы.Добавить("Таб" + Сч,Тип("ПолеФормы"),НовГруппа);
                НовПоле.Вид = ВидПоляФормы.ПолеТабличногоДокумента;
                НовПоле.ПутьКДанным ="ИменаТабДокументов["+СокрЛП(сч-1)+"].Значение";
24 байт
 
08.06.15
09:57
Хотя в отладке табличный документ.
25 байт
 
08.06.15
10:42
реквизит = Новый РеквизитФормы("Таб" + Сч,новый ОписаниеТипов("ТабличныйДокумент"));
                //реквизит.СохраняемыеДанные
                НовГруппа = Элементы.Добавить("Группа" + Сч,Тип("ГруппаФормы"),Элементы.Страницы);
                НовГруппа.Вид = ВидГруппыФормы.Страница;
                НовГруппа.Заголовок = СокрЛП(СтрМакета.СинонимМакета);
                НовПоле = Элементы.Добавить("Таб" + Сч,Тип("ПолеФормы"),НовГруппа);
                НовПоле.Вид = ВидПоляФормы.ПолеТабличногоДокумента;
                НовПоле.ПутьКДанным = "Таб" + Сч;
вываливается ошибка

{ОбщаяФорма.ПечатьДокументов.Форма(90)}: Ошибка при установке значения атрибута контекста (ПутьКДанным)
                НовПоле.ПутьКДанным = "Таб" + Сч;
по причине:
Недопустимое значение
Недопустимое значение
26 байт
 
08.06.15
10:43
реквизит создается.
27 байт
 
08.06.15
10:59
Честно говоря до конца не пойму программное создание реквизита как это вообще работает?
28 DmitrO
 
08.06.15
11:03
(25)это потому что сначала надо вызвать у формы ИзменитьРеквизиты(), а потом уже назначать путь полям формы.
29 байт
 
08.06.15
11:19
(28) спасибо очень помог)))
30 байт
 
08.06.15
11:23
вот Итог работающего кода может кому пригодится, @DmitroO еще раз спасибо:


            ИменаТабДокументов.Добавить(СтрМакета.ТабличныйДокумент,СтрМакета.СинонимМакета);
            Попытка
                ЭтаФорма["Таб" + Сч] = СтрМакета.ТабличныйДокумент;
                Элементы["Группа" + Сч].Видимость = Истина;
                Элементы["Группа" + Сч].Заголовок = СтрМакета.СинонимМакета;
                Элементы["Копии"  + Сч].Видимость = Истина;
                Элементы["Копии"  + Сч].Заголовок = СтрМакета.СинонимМакета;
                
                Если Сч <= КоличествоКопийДляПечати.Количество() Тогда
                    ЭтаФорма["Копии" + Сч] = КоличествоКопийДляПечати[Сч-1];
                Иначе
                    ЭтаФорма["Копии" + Сч] = СтрМакета.Экземпляров;
                КонецЕсли;
                
                ЭтаФорма["Таб" + Сч].КоличествоЭкземпляров = ЭтаФорма["Копии" + Сч];
            Исключение
                реквизит = Новый РеквизитФормы("Таб" + Сч,новый ОписаниеТипов("ТабличныйДокумент"));
                МассивРекв = Новый Массив;
                МассивРекв.Добавить(реквизит);
                ЭтаФорма.ИзменитьРеквизиты(МассивРекв);
                НовГруппа = Элементы.Добавить("Группа" + Сч,Тип("ГруппаФормы"),Элементы.Страницы);
                НовГруппа.Вид = ВидГруппыФормы.Страница;
                НовГруппа.Заголовок = СокрЛП(СтрМакета.СинонимМакета);
                НовПоле = Элементы.Добавить("Таб" + Сч,Тип("ПолеФормы"),НовГруппа);
                НовПоле.Вид = ВидПоляФормы.ПолеТабличногоДокумента;
                НовПоле.ПутьКДанным = "Таб" + Сч;
                ЭтаФорма["Таб" + Сч] = СтрМакета.ТабличныйДокумент;
            КонецПопытки;
            //МКон
31 байт
 
08.06.15
11:26
кстати что перед ником поставить чтобы он выделился что-то забыл?))
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn