|   |   | 
| 
 | Динамическое программное добавление табличного документа на УФ. | ☑ | ||
|---|---|---|---|---|
| 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 | 
        кстати что перед ником поставить чтобы он выделился что-то забыл?))     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |