Имя: Пароль:
1C
1С v8
Не уникальное имя программно создаваемого элемента формы
,
0 skupidom
 
24.08.17
11:54
Управление производственным предприятием, редакция 1.2 (1.2.26.1)
В цикле создаю новые элементы формы - поля табличного документа:

СтраницыПанели = ЭлементыФормы.Панель2;
        Лево = 6;
        Верх = 6;
        Низ  = СтраницыПанели.Высота;
        ШиринаТаблицы = СтраницыПанели.Ширина;
                  
        Для каждого Сп Из СписокПроектовОтбор Цикл
            
            СписокГруппПроектов = НОвый СписокЗначений;
            
            ГруппаПроектов = Сп.Значение;
            
            ЗапросПроектыГРуппы = Новый Запрос;
            ЗапросПроектыГРуппы.Текст =
            "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
            |    Проекты.Ссылка как Пр
            |ИЗ
            |    Справочник.Проекты КАК Проекты
            |ГДЕ
            |    Проекты.Родитель = &Группа";
            ЗапросПроектыГРуппы.УстановитьПараметр("Группа",ГруппаПроектов);
            ВыборкаЭлПроектов = ЗапросПроектыГРуппы.Выполнить().Выбрать();
            Пока ВыборкаЭлПроектов.Следующий() Цикл
                СписокГруппПроектов.Добавить(ВыборкаЭлПроектов.Пр);
            КонецЦикла;                
            
            // Вывод
            ИмяСтраницы = "ГП" + Строка(Н);
            ИмяПоля = "СПоле" + Строка(Н);
            ПроверкаДубляЭФ = ЭлементыФормы.Найти(ИмяПоля);
            Если ПроверкаДубляЭФ = Неопределено Тогда
                 ИмяПоля = "СПоле" + Строка(Н);
             Иначе
                 ИмяПоля = "СПоле" + Строка(Н) + "Уник";        
            КонецЕсли;
            // Создаем ТабПоле
            НовСтраница = СтраницыПанели.Страницы.Добавить(ИмяСтраницы,Строка(ГруппаПроектов));
            ЭлементыФормы.Панель2.ТекущаяСтраница = НовСтраница;
            НовПоле = ЭлементыФормы.Добавить(Тип("ПолеТабличногоДокумента"),ИмяПоля,Истина,СтраницыПанели);    
        
        КонецЦикла;    

{ВнешняяОбработка.рар_АнализДанныхБюджетов.Форма.Форма.Форма(92)}: Ошибка при вызове метода контекста (Добавить)
            НовПоле = ЭлементыФормы.Добавить(Тип("ПолеТабличногоДокумента"),ИмяПоля,Истина,СтраницыПанели);
по причине:
Недопустимое значение параметра (параметр номер '2') (Не уникальное имя! (СПоле1))
1 mistеr
 
24.08.17
11:59
(0) Что мешает сделать уникальным? Например Н = Н + 1
2 skupidom
 
24.08.17
12:01
СписокПроектовОтбор = ПередаваемыеНастройкиВОтчет();
        Н = 1;
        
        СтраницыПанели = ЭлементыФормы.Панель2;
        Лево = 6;
        Верх = 6;
        Низ  = СтраницыПанели.Высота;
        ШиринаТаблицы = СтраницыПанели.Ширина;
                  
        Для каждого Сп Из СписокПроектовОтбор Цикл
            
            СписокГруппПроектов = НОвый СписокЗначений;
            
            ГруппаПроектов = Сп.Значение;
            
            ЗапросПроектыГРуппы = Новый Запрос;
            ЗапросПроектыГРуппы.Текст =
            "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
            |    Проекты.Ссылка как Пр
            |ИЗ
            |    Справочник.Проекты КАК Проекты
            |ГДЕ
            |    Проекты.Родитель = &Группа";
            ЗапросПроектыГРуппы.УстановитьПараметр("Группа",ГруппаПроектов);
            ВыборкаЭлПроектов = ЗапросПроектыГРуппы.Выполнить().Выбрать();
            Пока ВыборкаЭлПроектов.Следующий() Цикл
                СписокГруппПроектов.Добавить(ВыборкаЭлПроектов.Пр);
            КонецЦикла;                
            
            // Вывод
            ИмяСтраницы = "ГП" + Строка(Н);
            ИмяПоля = "СПоле" + Строка(Н);
            ПроверкаДубляЭФ = ЭлементыФормы.Найти(ИмяПоля);
            Если ПроверкаДубляЭФ = Неопределено Тогда
                 ИмяПоля = "СПоле" + Строка(Н);
             //Иначе
             //    ИмяПоля = "СПоле" + Строка(Н) + "Уник";
            
            
            КонецЕсли;    
        
            // Создаем ТабПоле
            НовСтраница = СтраницыПанели.Страницы.Добавить(ИмяСтраницы,Строка(ГруппаПроектов));
            ЭлементыФормы.Панель2.ТекущаяСтраница = НовСтраница;
            НовПоле = ЭлементыФормы.Добавить(Тип("ПолеТабличногоДокумента"),ИмяПоля,Истина,СтраницыПанели);
                                        
            Стр = СтраницыПанели.Страницы.Найти(ИмяСтраницы);
            Если Стр <> Неопределено Тогда
                Стр.Видимость = Истина;
                Стр.Заголовок = Строка(Сп.Значение);
                // Ищем таб.поле
                ТабПоле = ЭлементыФормы.Найти(ИмяПоля);
                Если ТабПоле <> Неопределено Тогда                     
                    // Отбор построителя по каждой группе проекта
                    ОтборКоличество = Построитель.Отбор.Количество();
                    Для Н = 1 По ОтборКоличество Цикл
                        Построитель.Отбор.Удалить(ОтборКоличество - Н);
                    КонецЦикла;
                    Если Построитель.Отбор.Найти("Проект")=Неопределено Тогда
                        Отбор=Построитель.Отбор.Добавить("Проект",,"Проект");
                        Отбор.Использование=Истина;
                        Отбор.ВидСравнения=ВидСравнения.ВСписке;
                        Отбор.Значение = СписокГруппПроектов;
                    КонецЕсли;        
                    //
                    СформироватьОтчет(НовПоле,СписокГруппПроектов);
                    
                    // Установим параметры Табличного документа
                    НовПоле.Лево = Лево;
                    НовПоле.Верх = Верх;
                    НовПоле.Ширина = ШиринаТаблицы;
                    НовПоле.Высота = Низ - Верх;
                    НовПоле.УстановитьПривязку(ГраницаЭлементаУправления.Право, СтраницыПанели, ГраницаЭлементаУправления.Право);
                    НовПоле.УстановитьПривязку(ГраницаЭлементаУправления.Низ,СтраницыПанели, ГраницаЭлементаУправления.Низ);
                    
                КонецЕсли;        
            КонецЕсли;        
            Н = Н + 1;    
        КонецЦикла;
3 skupidom
 
24.08.17
12:02
делаю, все равно не уникально
4 catena
 
24.08.17
12:24
Для Н = 1 По ОтборКоличество Цикл
                        Построитель.Отбор.Удалить(ОтборКоличество - Н);
КонецЦикла;


Буквы в алфавите закончились?
5 skupidom
 
24.08.17
12:52
у меня ? по уникальности создаваемого элемента формы
6 skupidom
 
24.08.17
12:56
как задать точно уникальное имя элементу формы?
7 Вафель
 
24.08.17
12:57
не вижу где задается переменная Н
8 Тихий омут
 
24.08.17
13:01
(0) думай, голова, думай, шапку куплю:) два вложенных цикла...
9 Segate
 
24.08.17
13:05
(9) И запрос внутри... все по канонам xD
10 skupidom
 
24.08.17
13:31
Вопрос закрыт, разобрался, всем спасибо за участие и поддержку