Имя: Пароль:
1C
1С v8
УФ копировать ТЧ из одной формы в другую
,
0 prostovityaz
 
23.05.16
10:43
Добрый день!
Начал обучение по УФ.
Есть внешняя обработка. В ней 2 формы. На каждой из них по 1 ТЧ.
ТЧ1 на Форма1 заполнена данными.
На Форма2 есть кнопка, по нажатию которой из ТЧ1 заполняются данные в ТЧ2.

Я вот ни как не разберусь, как скопировать данные из ТЧ1 формы1 в ТЧ2 формы2.
После открытия формы2 у меня моя ТЧ1 якобы пустая.

Что я уже не пробовал...
1 Nuobu
 
23.05.16
10:46
Ну, показывай уже код.
2 prostovityaz
 
23.05.16
10:52
Открытие формы2
&НаКлиенте
Процедура ЗапускФормы(Команда)
    если Объект.ТЧ1.Количество()>0 Тогда
        ПолучитьФорму("ВнешняяОбработка.МояОбработка.Форма.ФормаЗапускаУправляемая").Открыть();
    иначе
        Предупреждение("Нет ни одного события в списке!");
    конецесли;
КонецПроцедуры

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

&НаКлиенте
Процедура ЗаполнитьТаблицу(Команда)
    ЗаполнитьТаблицуНаСервере();                                                                                          
КонецПроцедуры
3 Nuobu
 
23.05.16
10:57
&НаСервере
Процедура ЗаполнитьТаблицу2()
Если Объект.ТЧ1.Количество() = 0 Тогда
Сообщить("Таблица пустая");
КонецЕсли;

Для каждого СтрокаТЧ1 из Объект.ТЧ1 Цикл
НоваяСтрока = Объект.ТЧ2.Добавить();
НоваяСтрока.Реквизит1 = СтрокаТЧ1.Реквизит1;
КонецЦикла;


// что такое "ОбъектДанных" и как он связан с Объект.ТЧ1?
КонецПроцедуры
4 prostovityaz
 
23.05.16
10:58
(3) это я вот так пробовал, просто закоментил случайно
ОбъектДанных = РеквизитФормыВЗначение("Объект.ТЧ")
5 lodger
 
23.05.16
11:00
(3) говорят выгрузить\загрузить пошустрее как-то.
6 prostovityaz
 
23.05.16
11:03
(5) вот сделал всё как в (3), таблица у меня пустая, как я и говорил...

вот так я заполняю свою ТЧ1 на форме1. данный код в модуле обработки.
            НоваяСтрока=ТЧ1.Добавить();
            НоваяСтрока.ДатаСобытия=ДатаСобытия;
            НоваяСтрока.ПредставлениеДанных=ПредставлениеДанных;
            НоваяСтрока.Пользователь=Справочники.Пользователи.НайтиПоНаименованию(Пользователь);
            НоваяСтрока.Событие= НазвСобытие;
            НоваяСтрока.Транзакция = ТранзID;
            НоваяСтрока.УникIDПользователя = Новый УникальныйИдентификатор(УникIDПользователя);
            НоваяСтрока.УникальныйИдентификатор = Новый УникальныйИдентификатор(УИД);
            
            Если Найти(метаданныеэлемента, "Document")>0 тогда
                МетаданныеДокумента = СтрЗаменить(метаданныеэлемента, "Document.", "");
                Ссылка=Документы[МетаданныеДокумента].ПолучитьСсылку(Новый УникальныйИдентификатор(УИД));
                НоваяСтрока.Ссылка=Ссылка;
                НоваяСтрока.ТипМетаданного = "Документ";
                ДатаОбъекта=Ссылка.Дата;
                НоваяСтрока.Имя = Метаданные.Документы[МетаданныеДокумента].Имя;
                НоваяСтрока.ДатаОбъекта=ДатаОбъекта;                                                                                            
                Если ДатаОбъекта <> Дата("00010101") Тогда
                    НоваяСтрока.РазностьДат=Окр((ДатаСобытия-ДатаОбъекта)/86400);
                КонецЕсли;
            Иначеесли Найти(метаданныеэлемента, "Catalog")>0 тогда
                метаданныесправочника = СтрЗаменить(метаданныеэлемента, "Catalog.", "");
                Ссылка=Справочники[метаданныесправочника].ПолучитьСсылку(Новый УникальныйИдентификатор(УИД));
                НоваяСтрока.Ссылка=Ссылка;
                НоваяСтрока.ТипМетаданного = "Справочник";
                НоваяСтрока.Имя = Метаданные.Справочники[метаданныесправочника].Имя;
            Конецесли;
7 prostovityaz
 
23.05.16
11:04
(6) *в модуле объекта обработки
8 prostovityaz
 
23.05.16
11:10
Тип ТЧ1 ДанныеФормыКоллекция.
После открытия формы2 ТЧ1 пустая.
9 RomanYS
 
23.05.16
11:10
(0) посмотри ближе к концу
Не основная форма обработки и содержимое реквизитов объекта
может твоя проблема решится
10 prostovityaz
 
23.05.16
11:20
(9)
Добавил параметр ВладельцаФормы для открываемой Формы2
&НаКлиенте
Процедура ЗапускФормы(Команда)
    если Объект.ТЧ1.Количество()>0 Тогда
        ПолучитьФорму("ВнешняяОбработка.МояОбработка.Форма.ФормаЗапускаУправляемая",,ЭтаФорма).Открыть();
    иначе
        Предупреждение("Нет ни одного события в списке!");
    конецесли;
КонецПроцедуры

и сделал вот так:
&НаКлиенте
Процедура ЗаполнитьТаблицу(Команда)
    КопироватьДанныеФормы(ЭтаФорма.ВладелецФормы.Объект.ТЧ1, Объект.ТЧ2);
КонецПроцедуры

Всё получилось. От души тебе, спасибо большое за помощь (9)!
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс