Имя: Пароль:
1C
1С v8
Запись и сохранение значений в документе
0 Alex562035
 
10.08.21
14:41
Всем привет, подскажите не знаю как сохранить мои созданные страницы в документе. При добавлении их, у меня успешно создаются страницы и при нажатии кнопки Записать или Провести и закрыть я их не наблюдаю. И почему то внесенные мною данные пропадают.

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



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

    Перем Сч, Страница, Надпись;
    
    //Объект.МенеджерыПоСнабжению.Очистить();
        
    
    Сч = 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;
            
        КонецЦикла;

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



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

https://skr.sh/i/100821/vwfYdAJ6.jpg?download=1&name=Скриншот 10-08-2021 14:34:25.jpg

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

https://skr.sh/i/100821/LSImjH7R.jpg?download=1&name=Скриншот 10-08-2021 13:51:00.jpg

Кажется проблема заключается в том, что я их должен еще как-то сохранить программно, но еще не знаю как. Возможно нужно их хранить где-то в объекте, но не понятно пока. Говорится что виртальные элементы не будут сохраняться в базе, но как тогда поступить в моем случае.
1 hhhh
 
10.08.21
14:45
(0) на вставить вызов этой процедуры в приСозданииНаСервере()
2 hhhh
 
10.08.21
14:46
(1)+ надо вставить
3 Мультук
 
гуру
10.08.21
14:58
(0)

1) Может ты опишешь, что ты делаешь и зачем ?
2) Можно посмотреть, например,  в сторону документа "Установка цен номенклатуры", который хранить данные в табличной части, а показывает их в дереве
3) Можно еще сначала потренироваться на кроликах - предельно простой документ с одним программного создаваемым реквизитом. Добиться результата, а потом снова строить свою вавилонскую башню
4 Alex562035
 
11.08.21
09:55
Процедура ПриСозданииНаСервере мне не подходит это хоть и сработает, но немного не то. Я хочу чтобы это как-то сохранялось через Объект.

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


Объект.МенеджерыПоСнабжению.Очистить();
    
    Для каждого Строка Из МенеджерыПоСнабжению Цикл
        НоваяСтрока = Объект.МенеджерыПоСнабжению.Добавить();
        НоваяСтрока.Менеджер = Строка.Значение;
    КонецЦикла;
5 SSSSS_AAAAA
 
11.08.21
10:22
(4) "Я кажется подготовил правильную заготовку для сохранения их в объекте"
Ошибаетесь, батенька.
Такая заготовка, то есть место для хранения данных, называется метаданные объекта и они не создаются программным путем. Они создаются в конфигураторе путем мышкокликанья и никак иначе. Вы выбрали какой-то совершенной левый способ работы с объектами 1с, обычно называемый "закат солнца вручную".
6 Alex562035
 
11.08.21
10:27
Ну я ручками сделал вроде - добавив реквизиты и табличные части

https://skr.sh/i/110821/Tk67o1cA.jpg?download=1&name=Скриншот 11-08-2021 10:17:40.jpg
7 SSSSS_AAAAA
 
11.08.21
10:40
(4) "Объект.МенеджерыПоСнабжению.Очистить();
    
    Для каждого Строка Из МенеджерыПоСнабжению Цикл"


А теперь посчитайте количество строк в таблице после очистки и сравните с количеством строк, необходимым для захода в цикл.
8 Иванович Михаил
 
11.08.21
10:42
(4) Каша какая-то.
9 SSSSS_AAAAA
 
11.08.21
10:54
(8) Да просто товарищ никак не уловит, что таблицы могут быть и пустые. И этот вариант никак не учитывает.
10 vova1122
 
11.08.21
11:28
(0) а каким образом ты собираешься хранить данные заполненные на этих страницах?
11 Alex562035
 
11.08.21
12:29
Ну вот я в объект же занес данные они у меня там хранятся значения, которые я записал в Поле Ввода. Тока это не до конца доделанная процедура


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

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

    КонецЦикла;    
12 hhhh
 
11.08.21
12:41
(11) Объект.МенеджерыПоСнабжению.Добавить();   ???

вечный двигатель ваяешь. так ты добавишь внутри цикла тысячи строк.
13 SSSSS_AAAAA
 
11.08.21
14:16
(11) "Для каждого Строка Из МенеджерыПоСнабжению Цикл"
Опять двадцать пять...
Неужели так трудно понять, что при пустой таблице этот цикл не выполнится ни разу?!
14 Иванович Михаил
 
12.08.21
06:12
(13) Он надеется)
15 RomaH
 
naïve
12.08.21
06:53
(12)(13) ничего что
"МенеджерыПоСнабжению" это реквизит формы
а
"Объект.МенеджерыПоСнабжению" - это реквизит реквизита формы
16 RomaH
 
naïve
12.08.21
06:53
тест на чтение чужого кода не пройден
17 RomaH
 
naïve
12.08.21
06:54
(0) - ну так сразу и переписывай МенеджерыПоСнабжению на Объект.МенеджерыПоСнабжению - на хранение в объекте, а не локальные переменные
18 hhhh
 
12.08.21
08:02
(11) в общем задача решается простановкой двух галочек. В форме в свойствах признак Сохранение настроек, поставь Использовать список. и Напротив МенеджерыПоСнабжению поставь галку "Сохранять". Всё. А эту свою белиберду выбрось.