[РЕШЕНО] Программно добавить элементы управляемой формы (1С 8.3)

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем ExtreMe, 13 сен 2014.

  1. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    Задача: создать программно в форме документа элементы формы и прописать для них действия, что бы не переносить каждый раз при обновлениях

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

    Вопрос: почему если я захожу в документ ставлю флажок, выбираю контрагента и сохраняю документ, закрываю его, открываю заново - флажок и контрагент пустые! как правильно сделать сохранение? что бы при открытии документа оставались введённые ранее данные.
    Последнее редактирование: 14 сен 2014
  2. TriviumFan
    Offline

    TriviumFan Опытный в 1С Заблокирован

    Регистрация:
    19 мар 2013
    Сообщения:
    92
    Симпатии:
    15
    Баллы:
    29
    Может потому, что у тебя реквизит формы, а не объекта?:D
    --- Объединение сообщений, 13 сен 2014 ---
    реквизит формы - всего лишь временный "контейнер" для хранения/представления инфо на протяжении жизни формы
  3. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    так, куда моё сообщение удалил? О_о
    кто нибудь может рабочий код написать?
    Последнее редактирование: 15 сен 2014
  4. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.773
    Симпатии:
    509
    Баллы:
    204
    Бесплатно писать рабочий код :) ?
  5. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    да, банально указать как сделать что бы введённые данные в элементы форы сохранялись при закрытии
  6. Thelearning
    Offline

    Thelearning Профессионал в 1С Команда форума

    Регистрация:
    9 сен 2010
    Сообщения:
    701
    Симпатии:
    72
    Баллы:
    54
    Посмотри в обработке. Делал примеры для себя, в целом разобраться можно.

    Вложения:

    ExtreMe нравится это.
  7. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    спасибо, попробую поразбираться
  8. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    Дак тоже самое, только у меня процедурой сделано, а у тебя всё расписано для каждого элемента
    решил расписать тоже, мош перетерается что то, результат то же
    форма открывается, элементы формы там где надо, заполняю значениями, сохраняю, закрываю, открываю снова - элементы пустые.
  9. Thelearning
    Offline

    Thelearning Профессионал в 1С Команда форума

    Регистрация:
    9 сен 2010
    Сообщения:
    701
    Симпатии:
    72
    Баллы:
    54
    Значит реквизит формы не подвязан к реквизиту объекта. Скорее всего так и есть, т.е. ты создаешь просто реквизит формы с каким-либо типом, а нужно чтобы он был именно подвязан к реквизиту объекта (например добавляешь у документа реквизит "БлаблаРеквизит" и с ним связываешь реквизит формы.)
  10. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    вот блин, так если добавить реквизит объекта он же при обновлении выскочит, и вся затея с программным добавлением не к чему получается
  11. Thelearning
    Offline

    Thelearning Профессионал в 1С Команда форума

    Регистрация:
    9 сен 2010
    Сообщения:
    701
    Симпатии:
    72
    Баллы:
    54
    Не выскочит. При обновлении ставите галку "Показывать дважды измененные" и все нормально. Добавленные реквизиты затираться не будут.
  12. TopicStarter Overlay
    ExtreMe
    Offline

    ExtreMe Опытный в 1С

    Регистрация:
    13 сен 2014
    Сообщения:
    76
    Симпатии:
    7
    Баллы:
    29
    понял свою ошибку :)
    я реквизиты добавлял в редакторе формы и обращался к ним
    Код:
                НовыйЭлемент.ПутьКДанным        = "РекБулево";
    
    а надо было реквизиты создать в дереве конфцигурации и обращаться к ним
    Код:
                НовыйЭлемент.ПутьКДанным        = "Объект.РекБулево";
    
    vxxsas и Ann_S нравится это.

Поделиться этой страницей