Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

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

Запись и сохранение значений в документе
Я
   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

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

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

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

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

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

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


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

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

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

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

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

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.