Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 окт 2021, 13:13

Запись и сохранение значений в документе

Автор Alex345, 10 авг 2021, 14:35

0 Пользователей и 1 гость просматривают эту тему.

Alex345

Всем привет, подскажите не знаю как сохранить мои созданные страницы в документе. При добавлении их, у меня успешно создаются страницы и при нажатии кнопки Записать или Провести и закрыть я их не наблюдаю. И почему то внесенные мною данные пропадают.

Вот как выглядит мой код во время события ПриИзменении внося данные в Поле Менеджер по снабжению

&НаСервере
Процедура МенеджерыПоСнабжениюПриИзмененииНаСервере()

    Перем Сч, Страница, Надпись;
   
    //Объект.МенеджерыПоСнабжению.Очистить();
       
   
    Сч = 0;
   
    //проверяю создавали ли страницы (Менеджеров по снабжению) по умолчанию стоит 4 страницы 
    Если ЭтаФорма.Элементы.ГруппаСтраницы.ПодчиненныеЭлементы.Количество() < 5 Тогда
       
       
       
        Для каждого эл_МенеджерыПоСнабжению Из МенеджерыПоСнабжению Цикл
           
            НоваяСтрока = Объект.МенеджерыПоСнабжению.Добавить();
            НоваяСтрока.Менеджер = эл_МенеджерыПоСнабжению.Значение;

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

            //Добавляем новую команду
           
           
            Кмд = ЭтаФорма.Команды.Добавить("Команда1" + Сч);
           
           
            Кмд.Действие = "НажатиеКнопки";
           
           
            Кмд.Заголовок = "Добавить поставщиков";
           
           
           
           
            //Добавляем новую кнопку
           
           
            Элемент2 = Элементы.Добавить("Кнопка1" + Сч, Тип("КнопкаФормы"), Страница);
           
           
            Элемент2.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
           
           
            Элемент2.ИмяКоманды = "Команда1" + Сч;       
           
            Сч = Сч + 1;
           
        КонецЦикла;
    // добавляем к созданным страницам новые
    Иначе

         Для Сч = ЭтаФорма.Элементы.ГруппаСтраницы.ПодчиненныеЭлементы.Количество() - 4 По МенеджерыПоСнабжению.Количество() - 1 Цикл
             
             
            ИмяСтраницы = СтрШаблон("Страница_%1", Формат(Сч, "ЧГ=0"));
           
            Страница = Элементы.Добавить(ИмяСтраницы, Тип("ГруппаФормы"), Элементы.ГруппаСтраницы);
            Страница.Вид = ВидГруппыФормы.Страница;
            Страница.Заголовок = МенеджерыПоСнабжению[Сч].Значение;
           
            ИмяНадписи = СтрШаблон("Надпись_%1", Формат(Сч, "ЧГ=0"));
           
            Надпись = Элементы.Добавить(ИмяНадписи, Тип("ДекорацияФормы"), Страница);
            Надпись.Заголовок = МенеджерыПоСнабжению[Сч].Значение;
           
            //добавление поля ввода
            НоваяСтраница = Элементы.Добавить("СтраницаСнабженец1" + Сч, Тип("ГруппаФормы"), Элементы.ТестовыеСтраницы);
            НоваяСтраница.Вид = ВидГруппыФормы.Страница;
            НоваяСтраница.Заголовок = "Тест";
           
            нРеквизиты = Новый Массив;
            Реквизит = Новый РеквизитФормы("Реквизит1" + Сч, Новый ОписаниеТипов("СписокЗначений"), , "Созданное поле", Истина);
            нРеквизиты.Добавить(Реквизит);
            ИзменитьРеквизиты(нРеквизиты);
           
            ИмяЭлемента = "ПоставщикиСтраницаСнабженец1" + Сч;
           
           
                                 
            Элемент = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), Страница);
            Элемент.Заголовок = "Поставщики";
            Элемент.Вид = ВидПоляФормы.ПолеВвода;
            Элемент.ПутьКДанным = "Реквизит1" + Сч;
           
            ЭтотОбъект[Элемент.ПутьКДанным].ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Партнеры");
           

            //Добавляем новую команду
           
           
            Кмд = ЭтаФорма.Команды.Добавить("Команда1" + Сч);
           
           
            Кмд.Действие = "НажатиеКнопки";
           
           
            Кмд.Заголовок = "Добавить поставщиков";
           
           
           
           
            //Добавляем новую кнопку
           
           
            Элемент2 = Элементы.Добавить("Кнопка1" + Сч, Тип("КнопкаФормы"), Страница);
           
           
            Элемент2.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
           
           
            Элемент2.ИмяКоманды = "Команда1" + Сч;       
           
            Сч = Сч + 1;
           
        КонецЦикла;

    КонецЕсли;   
   
КонецПроцедуры

Вот как выглядит успешный результат ПриИзменении.



А вот что я вижу после записи, когда закрываю окно и потом вновь открываю, где некоторая часть данных сохранилась в поле, но созданные мной страницы пропали



Кажется проблема заключается в том, что я их должен еще как-то сохранить программно, но еще не знаю как. Возможно нужно их хранить где-то в объекте, но не понятно пока. Говорится что виртальные элементы не будут сохраняться в базе, но как тогда поступить в моем случае.


LexaK

абсолютно не понятно ЧТО, а главное ЗАЧЕМ вы это все делаете, ну да ладно.

что бы сохранялись данные в документе, в новые добавляемые элементы необходимо прописать путь именно к данным Объекта (документа)
вот у вас нашел такое описание пути к данным
Элемент.ПутьКДанным = "Реквизит1" + Сч;   
это реквизит формы, с документом ни как не связан (если только программно, перед записью...),
должно быть что-то такое
Элемент.ПутьКДанным = "Объект.Статус";
тогда то что введете в Элементе, Поле формы, сохранится в документе.


 
ответ Понравился? (в смысле пригодился?)

Alex345

@LexaK, Я уже допер нужно было вставить мой процедуру ПриСозданииНаСервере

Alex345

@LexaK, Все же вы правы это не поможет сделать правильное сохранение моего документа и нужно делать через Объект. Я примерно понял что нужно добавлять значение и при новом добавлении в поле мои страницы как бы очищаются и заново пересоздаются страницы при новом добавлении значения.

Я кажется подготовил правильную заготовку для сохранения их в объекте, но не знаю как адаптировать под нее. Возможно ли так это сделать?

Объект.МенеджерыПоСнабжению.Очистить();
   
    Для каждого Строка Из МенеджерыПоСнабжению Цикл
        НоваяСтрока = Объект.МенеджерыПоСнабжению.Добавить();
        НоваяСтрока.Менеджер = Строка.Значение;
    КонецЦикла;

Подготовив правильное дерево конфигурации

LexaK

@Alex345, есть стандартный, общепринятый подход работы с объектами 1С

в конструкторе создается объект, наполняете его реквизитами, создаете форму (или нет, тогда вообще генерится по умолчанию)
на форме (в конструкторе) размещаете реквизиты объекта, возможно что-то дорабатываете в плане автоматизации заполнения, проверок, др.

запускаете 1С и у вас все отлично работает. Вводите данные, изменяете, записываете, все делается автоматически.

то что вы делаете уже не совсем стандартный подход, то что вы простую задачу пытаетесь сделать максимально сложной и запутанной
как говорится не делает вам чести, и тем более не показывает что вы великий программист, раз смогли нагородить такие дебри.

вот самый шик, как раз в другом, когда вы сложную задачу сможете решить с помощью самых простых решений/приемов.
 

ответ Понравился? (в смысле пригодился?)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск