Имя: Пароль:
1C
1С v8
Обращение к добавленному реквизиту
0 The_ka6a4ok
 
16.12.20
18:26
добрых дней. коротко опишу проблему: количество добавляемых страниц мне неизвестно, для решения я добавил "нумератор", но в реквизиты документа, костыль как по мне, но как иначе.
<code>

&НаСервере
Процедура НовыйПеревозчикНаСервере()
    НовыйПеревозчик = Элементы.Добавить("НовыйПеревозчик" + Объект.Нумератор, Тип("ГруппаФормы"), Элементы.Страницы);
    НовыйПеревозчик.Вид = ВидГруппыФормы.Страница;
    НовыйПеревозчик.Заголовок = "Информация про перевозчика" + Строка(Объект.Нумератор);
    ПеревозчикГруппы = Элементы.Добавить("ПеревозчикГруппы" + Объект.Нумератор, Тип("ГруппаФормы"), Элементы.Найти("НовыйПеревозчик" + Объект.Нумератор));
    
    ДобавляемыеРеквизиты = новый Массив();
    ТипРеквизита = Новый ОписаниеТипов("СправочникСсылка.Контрагенты");//("Строка");
    РеквизитФормы = Новый РеквизитФормы(
        "Перевозчик" + Объект.Нумератор,  //Имя реквизита формы
        ТипРеквизита,     //Тип
        "",               //Путь  (Пусто, "Объект", ИмяТЧ)
                          // например "Объект.Товары"    
        "Перевозчик");//Заголовок
    ДобавляемыеРеквизиты.Добавить(РеквизитФормы);    
    
    ТипРеквизита = Новый ОписаниеТипов("СправочникСсылка.ДоговорыКонтрагентов");
    РеквизитФормы = Новый РеквизитФормы(
        "Договор" + Объект.Нумератор,  //Имя реквизита формы
        ТипРеквизита,     //Тип
        "",               //Путь  (Пусто, "Объект", ИмяТЧ)
                          // например "Объект.Товары"    
        "Договор");//Заголовок
    ДобавляемыеРеквизиты.Добавить(РеквизитФормы);
    //Заставляем форму создать новые реквизиты
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);
    
    ПолеВвода = Элементы.Добавить("Перевозчик" + Объект.Нумератор, Тип("ПолеФормы"), Элементы.Найти("НовыйПеревозчик" + Объект.Нумератор));
    ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
    ПолеВвода.ПутьКДанным = "Перевозчик"+Объект.Нумератор;
    ПолеВвода.УстановитьДействие("ПриИзменении", "КомпанияПеревозчик1");
    
    ПолеВвода = Элементы.Добавить("Договор" + Объект.Нумератор, Тип("ПолеФормы"), Элементы.Найти("НовыйПеревозчик" + Объект.Нумератор));
    ПолеВвода.Вид = ВидПоляФормы.ПолеВвода;
    ПолеВвода.ПутьКДанным = "Договор"+Объект.Нумератор;
    
    //ПеревозчикГруппы.ГоризонтальноеПоложение();
    НовыйЭлемент2 = Элементы.Добавить("НоваяНадпись" + Объект.Нумератор,Тип("ДекорацияФормы"),НовыйПеревозчик);
    НовыйЭлемент2.Заголовок = "НоваяНадпись";
    
КонецПроцедуры

&НаКлиенте
Процедура КомпанияПеревозчик1()
    Договор1 = ПолучитьДоговорПоУмолчанию(Объект.Ссылка, Объект.Перевозчик, Объект.Организация, Объект.ВидОперации, Истина);
    ЭтаФорма.Элементы.Найти("Договор" + Строка(Число(Объект.Нумератор) - 1)).Имя = Договор1; //При такой записи ошибка записи
        //ЭтаФорма.Договор0 = Договор1;  //при такой записи нужный договор находит и вставляет
    ОбработатьИзменениеДоговора();
КонецПроцедуры

&НаКлиенте
Процедура НовыйПеревозчик(Команда)
    НовыйПеревозчикНаСервере();  
    Попытка
        Проверка = Элементы.Найти("НовыйПеревозчик" + Объект.Нумератор).Имя;
        Сообщить(Проверка);
    Исключение
        Сообщить("Дорр");
    КонецПопытки;
    Объект.Нумератор = Объект.Нумератор + 1;
КонецПроцедуры

</code>
первая процедура добавляет первую страницу, и неограниченное кол-во страниц далее, то есть таким образом создание реквизитов типа "Реквизит0", "Реквизит1" и тд возможно, ладно. проблема во второй процедуре, по задумке она должна редактировать поле "Договор0" при изменении другого поля(я знаю, что при нумераторе n, я не смогу добавить нужный договор, поэтому страницы будут создаваться поочередно, чтобы нумератор не забился), вопрос заключается в следующем: как это можно реализовать по-другому или как обратиться к реквизиту формы?
1 SadrArt
 
16.12.20
19:01
(0) чо?
2 acht
 
16.12.20
19:02
(0) ЯННП, предположу что ты хочешь получить ЭтотОбъект[ИмяРеквизита]
3 The_ka6a4ok
 
16.12.20
19:06
(2) нет, мне нужно получить объект, но сделать это как-то с извращением, так как ссылку на него я буду лепить из двух значений: первое - "Договор", а второе - значение нумератора, и к этому объекту мне нужно обратиться, чтобы задать значение
4 acht
 
16.12.20
19:09
(3) Ты попробуй, тебе понравится.

ЗначениеРеквизита = ЭтотОбъект["Договор" + ЗначениеНумератора];
5 The_ka6a4ok
 
16.12.20
19:20
(4) блин, я не знал что так можно, теперь знаю, спасибо