Имя: Пароль:
1C
 
Программное добавление страниц в управляемой форме 8.3
0 Deahianaianyrto
 
22.07.16
11:24
Не подскажет ли кто-нибудь, как программно добавить страницу в управляемой форме 8.3?
1 Горогуля
 
22.07.16
11:30
изменить реквизиты
2 Deahianaianyrto
 
22.07.16
11:32
Нов каждой странице надо прописать элементы цправления и обработчики событий.
Может кто-то даст ссылку, где посмотреть?
3 Cyberhawk
 
22.07.16
11:33
ВсеЭлементыФормы.Вставить (FormAllItems.Insert)
ВсеЭлементыФормы (FormAllItems)
Вставить (Insert)
Синтаксис:

Вставить(<Имя>, <ТипЭлемента>, <Родитель>, <Элемент>)
Параметры:

<Имя> (обязательный)

Тип: Строка.
Уникальное имя добавляемого элемента.
<ТипЭлемента> (обязательный)

Тип: Тип.
Тип добавляемого элемента.
<Родитель> (необязательный)

Тип: ГруппаФормы; ТаблицаФормы; УправляемаяФорма.
Родитель для добавляемого элемента.
Если не указан, то вставляется на верхний уровень.
<Элемент> (необязательный)

Тип: ДекорацияФормы; ГруппаФормы; КнопкаФормы; ТаблицаФормы; ПолеФормы.
Элемент, перед которым должен быть вставлен новый элемент. Если не указан, то элемент будет вставлен в конец.
Возвращаемое значение:

Тип: ДекорацияФормы; ГруппаФормы; КнопкаФормы; ТаблицаФормы; ПолеФормы.

Описание:

Вставляет элемент в коллекцию элементов.

Доступность:

Сервер.
4 Горогуля
 
22.07.16
11:34
(3) о как
(2) добавить обработчик
5 Deahianaianyrto
 
22.07.16
11:40
А как в новой странице прописать элемент формы, скажем поле html-документа и обработчик (ПриНажатии)?
6 Горогуля
 
22.07.16
11:41
(5) а сам-то как думаешь?
7 Deahianaianyrto
 
22.07.16
11:48
Вот ещё проблемка, может кто подскажет, или кинет ссылку:
Если я генерю страницы со сгенерированными идентификаторами, а на странице поле html документа, то как мне обратиться к элементу формы страницы по сгенерированному идентификатору, который у меня есть в виде строковой переменной.

    Элементы.ПолеHTMLРезультат.Документ.url = "http://api-laravel-dev.1clicom.ru/1s/search?facetype=7&sess_id="; + Объект.PHPSESSID;

То есть как обратиться к некоему ПолеHTMLРезультатXXX? Где XXX - порядковый номер сгененрированного идентификатора элемента формы.
8 Горогуля
 
22.07.16
11:49
внезапно Элементы.ПолеHTMLРезультатXXX
9 Mauser
 
22.07.16
11:50
(7) []
10 Deahianaianyrto
 
22.07.16
12:08
Но так же не получиться, то есть у меня есть строка "ПолеHTMLРезультатXXX", а надо обратиться по идентификатору.
Может кто-то знает?
Элементы. а дальше?
11 Горогуля
 
22.07.16
12:15
Элементы["ПолеHTMLРезультат"+XXX]
12 Deahianaianyrto
 
22.07.16
12:15
А как прописать Тип "Страница" в Группе формы?
13 Deahianaianyrto
 
22.07.16
12:15
(11) Спасибо!
14 Горогуля
 
22.07.16
12:16
это ж группа
15 Deahianaianyrto
 
22.07.16
12:18
Надо добавить Группу с Видом "Страница"
16 Горогуля
 
22.07.16
12:19
(15) и чего там в СП пишут?
17 Deahianaianyrto
 
22.07.16
12:20
Там все очень не подробно, без примеров. Можете пример дать? Создать Группу с Видом "Страница"
18 Горогуля
 
22.07.16
12:23
(17) хочешь, чтобы я за тебя сходил в СП, почитал там, понял, переварил, сделал ВнешнююОбработку1, накидал туда пару строк, запустил проверить, а потом тебе ещё и разжевал? не, лениво
19 Deahianaianyrto
 
22.07.16
12:33
&НаКлиенте
Функция СоздатьСтраницуНаФорме(Заголовок)
    ИдентификаторСтраницы = СгенерироватьИдентификатор();
    ВсеЭлементыФормы.Вставить(ИдентификаторСтраницы,Тип("ГруппаФормы"),Элементы.ВкладкиОКонтрагентах);
    
    
    
    Возврат ИдентификаторСтраницы;
КонецФункции



Почему-то даёт ошибку:

ВнешняяОбработка.LicBusinessUP_2_2_1_8beta_expert.Форма.Форма.Форма(4347,2)}: Переменная не определена (ВсеЭлементыФормы)
    <<?>>ВсеЭлементыФормы.Вставить(ИдентификаторСтраницы,Тип("ГруппаФормы"),Элементы.ВкладкиОКонтрагентах); (Проверка: Тонкий клиент)
20 Горогуля
 
22.07.16
12:34
не почему-то, а потому что &НаКлиенте
21 aleks_default
 
22.07.16
12:36
ВсеЭлементыФормы = Элементы
22 Deahianaianyrto
 
22.07.16
12:36
&НаСервере
Функция СоздатьСтраницуНаФорме(Заголовок)
    ИдентификаторСтраницы = СгенерироватьИдентификатор();
    ВсеЭлементыФормы.Вставить(ИдентификаторСтраницы,Тип("ГруппаФормы"),Элементы.ВкладкиОКонтрагентах);
    
    
    
    Возврат ИдентификаторСтраницы;
КонецФункции


{ВнешняяОбработка.LicBusinessUP_2_2_1_8beta_expert.Форма.Форма.Форма(4347,2)}: Переменная не определена (ВсеЭлементыФормы)
    <<?>>ВсеЭлементыФормы.Вставить(ИдентификаторСтраницы,Тип("ГруппаФормы"),Элементы.ВкладкиОКонтрагентах); (Проверка: Сервер)
23 Горогуля
 
22.07.16
12:37
видать, эта платформа так не умеет
24 Deahianaianyrto
 
22.07.16
12:38
А сейчас пишет при работе:

{ВнешняяОбработка.LicBusinessUP_2_2_1_8beta_expert.Форма.Форма.Форма(4347)}: Ошибка при вызове метода контекста (Вставить)
    Элементы.Вставить(ИдентификаторСтраницы,Тип("ГруппаФормы"),Элементы.ВкладкиОКонтрагентах);
по причине:
Изменение состава элементов недоступно
25 aleks_default
 
22.07.16
12:46
Элементы.ВкладкиОКонтрагентах - это что за элемент формы?
26 aleks_default
 
22.07.16
12:48
И попробуй не Вставить(), а Добавить()
27 Горогуля
 
22.07.16
12:53
от такая галка есть у формы: Разрешить пользовательскую настройку формы
28 Deahianaianyrto
 
22.07.16
13:00
&НаСервере
Функция СгенерироватьИдентификатор()
    Возврат "001";    
    
    
    
КонецФункции


&НаСервере
Функция СоздатьСтраницуНаФорме()
    Счетчик = СгенерироватьИдентификатор();
    ИдентификаторСтраницы = "Группа"+Счетчик;
    ИдентификаторПоляHTML = "ПолеHTMLРезультат"+Счетчик;
    
    Элементы.Добавить(ИдентификаторСтраницы,Тип("ГруппаФормы"),Элементы.ВкладкиОКонтрагентах);
    Элементы[ИдентификаторСтраницы].Вид=ВидГруппыФормы.Страница;
    Элементы[ИдентификаторСтраницы].Видимость = Истина;
    Элементы[ИдентификаторСтраницы].Доступность = Истина;
    Элементы.Добавить(ИдентификаторПоляHTML,Тип("ПолеФормы"),Элементы[ИдентификаторСтраницы]);
    Элементы[ИдентификаторПоляHTML].Вид=ВидПоляФормы.ПолеHTMLДокумента;
    Элементы[ИдентификаторПоляHTML].Видимость = Истина;
    Элементы[ИдентификаторПоляHTML].Доступность = Истина;

    Возврат ИдентификаторСтраницы;
КонецФункции



&НаСервере
Процедура ЗагрузитьHTML(Команда)
    
    ИдентификаторСтраницы = СоздатьСтраницуНаФорме();
    
    //Элементы[ИдентификаторСтраницы].Документ.url = "http://api-laravel-dev.1clicom.ru/1s/search?facetype=7&sess_id="; + Объект.PHPSESSID;
    
КонецПроцедуры

Не появляется ни страница, ни полеHTMLдокумента в ней.
29 aleks_default
 
22.07.16
13:01
млять
ЭлементСтраница = Элементы.Добавить(ИдентификаторСтраницы,Тип("ГруппаФормы"),Элементы.ВкладкиОКонтрагентах);
30 Deahianaianyrto
 
22.07.16
14:03
&НаСервере
Функция СоздатьСтраницуНаФорме()
    Счетчик = СгенерироватьИдентификатор();
    ИдентификаторСтраницы = "Группа"+Счетчик;
    ИдентификаторПоляHTML = "ПолеHTMLРезультат"+Счетчик;
    
    ЭлементСтраница = Элементы.Добавить(ИдентификаторСтраницы,Тип("ГруппаФормы"),Элементы.ВкладкиОКонтрагентах);
    ЭлементСтраница.Вид=ВидГруппыФормы.Страница;
    ЭлементСтраница.Видимость = Истина;
    ЭлементСтраница.Доступность = Истина;
    ЭлементПолеHTML = Элементы.Добавить(ИдентификаторПоляHTML,Тип("ПолеФормы"),Элементы[ИдентификаторСтраницы]);
    ЭлементПолеHTML.Вид=ВидПоляФормы.ПолеHTMLДокумента;
    ЭлементПолеHTML.Видимость = Истина;
    ЭлементПолеHTML.Доступность = Истина;

    Возврат Счетчик;
КонецФункции


Страница и HTML-поле не появляются! Кто-нибудь не знает в чем дело?
31 aleks_default
 
22.07.16
14:21
Надо указать путь к данным. Без привязки к данным элементы не отображаются.
Для этого создай реквизит формы с типом строка

РеквизитФормы (FormAttribute)
Основной
Синтаксис:

Новый РеквизитФормы(<Имя>, <Тип>, <Путь>, <Заголовок>, <СохраняемыеДанные>)
Параметры:

<Имя> (обязательный)

Тип: Строка.
Имя реквизита.
<Тип> (обязательный)

Тип: ОписаниеТипов.
Тип реквизита.
<Путь> (необязательный)

Тип: Строка.
Путь к создаваемому реквизиту. Не включает имя реквизита.
Значение по умолчанию: Пустая строка
<Заголовок> (необязательный)

Тип: Строка.
Содержит отображаемый текст реквизита.
Значение по умолчанию: Пустая строка
<СохраняемыеДанные> (необязательный)

Тип: Булево.
Реквизит содержит сохраняемые данные.
Истина - сохраняеый реквизит формы.
Значение по умолчанию: Ложь
Описание:

Создает описание реквизита управляемой формы на основе переданных параметров.
32 aleks_default
 
22.07.16
14:24
потом добавить этот реквизит в форму

УправляемаяФорма (ManagedForm)
ИзменитьРеквизиты (ChangeAttributes)
Синтаксис:

ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>)
Параметры:

<ДобавляемыеРеквизиты> (необязательный)

Тип: Массив.
Массив, содержащий объекты типа РеквизитФормы.
Добавлять можно реквизиты верхнего уровня и вложенные реквизиты, являющиеся колонками.
К добавленным реквизитам верхнего уровня из модуля можно обращаться только с помощью конструкции ЭтаФорма.<Имя реквизита>.
<УдаляемыеРеквизиты> (необязательный)

Тип: Массив.
Массив, содержащий строки, описывающие пути к удаляемым реквизитам.
Удалять можно только ранее программно добавленные реквизиты.
Описание:

Изменяет структуру реквизитов формы.
Сначала выполняется удаление реквизитов. Таким образом массивы добавляемых и удаляемых реквизитов могут содержать реквизиты с одинаковым путём.

Доступность:

Сервер.
33 aleks_default
 
22.07.16
14:25
Залезь уже куда-нибуль в типовую и посмотри.
34 Deahianaianyrto
 
22.07.16
15:01
&НаСервере
Функция СоздатьСтраницуНаФорме()
    Счетчик = СгенерироватьИдентификатор();
    ИдентификаторСтраницы = "Группа"+Счетчик;
    ИдентификаторПоляHTML = "ПолеHTMLРезультат"+Счетчик;
    
    ЭлементСтраница = Элементы.Добавить(ИдентификаторСтраницы,Тип("ГруппаФормы"),Элементы.ВкладкиОКонтрагентах);
    ЭлементСтраница.Вид=ВидГруппыФормы.Страница;
    ЭлементСтраница.Видимость = Истина;
    ЭлементСтраница.Доступность = Истина;
    ЭлементПолеHTML = Элементы.Добавить(ИдентификаторПоляHTML,Тип("ПолеФормы"),Элементы[ИдентификаторСтраницы]);
    ЭлементПолеHTML.Видимость = Истина;
    ЭлементПолеHTML.Доступность = Истина;
    ЭлементРеквизитФормы = Новый РеквизитФормы(ИдентификаторПоляHTML+"РеквизитФормы", Тип("Строка"),,,);
    ЭлементПолеHTML.ПутьКДанным = Объект[ИдентификаторПоляHTML+"РеквизитФормы"];
    ЭлементПолеHTML.Вид=ВидПоляФормы.ПолеHTMLДокумента;
    Возврат Счетчик;
КонецФункции




Ошибка:

{ВнешняяОбработка.LicBusinessUP_2_2_1_8beta_expert.Форма.Форма.Форма(4357)}: Ошибка при вызове конструктора (РеквизитФормы)
    ЭлементРеквизитФормы = Новый РеквизитФормы(ИдентификаторПоляHTML+"РеквизитФормы", Тип("Строка"),,,);
по причине:
Недопустимое значение параметра (параметр номер '2')
35 Горогуля
 
22.07.16
15:05
так влом руками добавить?
36 Deahianaianyrto
 
22.07.16
15:06
А не предсказуемо сколько их будет
37 КоньЛапчатый
 
22.07.16
15:08
Вот пример:

//добавляем страницу
        НСтраница = Элементы.Добавить("Вопрос" + Строка(ш), Тип("ГруппаФормы"), Элементы.Страницы);
        НСтраница.Вид = ВидГруппыФормы.
        
//добавляем реквизит формы с нужными параметрами
        ДобавляемыеРеквизиты = Новый Массив;
        Реквизит = Новый РеквизитФормы("Вопрос" + Строка(ш), Новый ОписаниеТипов("Строка"),,, Ложь);
        ДобавляемыеРеквизиты.Добавить(Реквизит);
        ИзменитьРеквизиты(ДобавляемыеРеквизиты);
        
//Для добавленногореквизита создаем элемент на нашей странице
        НЭлемент = Элементы.Добавить("ТекстВОпроса" + Строка(ш), Тип("ПолеФормы"), НСтраница);
        НЭлемент.Вид = ВидПоляФормы.ПолеНадписи;
        НЭлемент.ПутьКДанным = "Вопрос" + Строка(ш);
        НЭлемент.АвтоМаксимальнаяШирина = Ложь;
        НЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
        
//добавленному реквизиту присваиваем значение
        ЭтаФорма[Реквизит.Имя] = СтрТЗВопр.Вопрос;
38 Горогуля
 
22.07.16
15:08
ничего, сейчас ты поймёшь, что у второго параметра недопустимое значение, и всё исправишь
39 Deahianaianyrto
 
22.07.16
15:12
А как прописать ПутьКДАнным по строковому идентификатору реквизита?
40 Горогуля
 
22.07.16
15:13
(39) а какие варианты ответа вообще?
41 Deahianaianyrto
 
22.07.16
15:14
{ВнешняяОбработка.LicBusinessUP_2_2_1_8beta_expert.Форма.Форма.Форма(4371)}: Ошибка при установке значения атрибута контекста (ПутьКДанным)
    ЭлементПолеHTML.ПутьКДанным = ЭтаФорма[ИдентификаторПоляHTML+"РеквизитФормы"];
по причине:
Недопустимое значение
42 Горогуля
 
22.07.16
15:15
(41) путь к данным - это строка
43 Горогуля
 
22.07.16
15:16
тяжко вслепую, понимаю. вот бы где-то был на свете сборник описаний всех свойств и методов...
44 КоньЛапчатый
 
22.07.16
15:17
(41) посмотри внимательно на мой пример, там всё есть.
45 Deahianaianyrto
 
22.07.16
15:37
Вот ещё проблемка: как прописать Обработчик ПриНажатии:
ПолеHTMLРезультатПриНажатии()
46 Горогуля
 
22.07.16
15:39
ну не добавить же обработчик в конце-то концов
47 aleks_default
 
22.07.16
15:42
(45)
ЭлементПолеHTML.УстановитьДействие("ПриИзменении", "ПриИзмененииПоляHTML")
48 aleks_default
 
22.07.16
15:46
Ну или
ЭлементПолеHTML.УстановитьДействие("ПриНажатии", "ЕслиЖамкнуть")
49 aleks_default
 
22.07.16
15:49
Ну и процедуру соответсвенно прописываешь

&НаКлиенте
Процедура ЕслиЖамкнуть(Элемент)
// бла-бла-бла
КонецПроцедуры
50 Deahianaianyrto
 
22.07.16
17:09
Спасибо!