Имя: Пароль:
1C
1С v8
Обращение к открытой форме из обработки.
,
0 posq
 
30.09.11
11:21
Создаю обработку заполнения ТЧ. Встала необходимость обращаться к экспортным переменным модуля формы и элементам формы, т.к. некоторые данные собираются в нужном виде только на форме, а хранятся в разных реквизитах документа.
Как правильно обращаться к форме из которой открыта обработка и как работать с элементами формы?
Попробовал вот так, но результата не получил:
       ФормаВладелец = ОбъектВладелец.ПолучитьФорму("ФормаДокумента");
   //открыта = ФормаВладелец.Открыта();  
   мСоответствиеТиповЦен = ФормаВладелец.мСоответствиеТиповЦен;
   ТаблицаЦен = ФормаВладелец.ТаблицаЦен;
   Для каждого Строка Из ТаблицаЦен Цикл;
       Для каждого Колонка Из Строка Цикл;
           Сообщить("!" + Колонка);
           Сообщить("!");
       КонецЦикла
   КонецЦикла;

И все еще сильно затрудняется невозможностью нормальной работы с отладчиком.
1 butterbean
 
30.09.11
11:22
перенеси все процедуры/функции к себе в обработку
2 posq
 
30.09.11
11:24
(1) Перенес нужную процедуру, но ей необходимы переменные из модуля формы и элементы формы, а не реквизиты документа.
3 posq
 
30.09.11
11:34
Ну все же наверное за неделю обработок заполнения ТЧ штук по 5 пишут. Ни разу не приходилось обращаться к форме?
4 Vladal
 
30.09.11
11:37
Т.е. у тебя есть элементы управления на форме? которые не являются реквизитами документа? Типа каких-то флажочков, полей ввода и т.д.?
5 posq
 
30.09.11
11:48
(4) Да. На Форме Табличное поле(таблица значений) и в ней все хранится. Можно ли обратится к элементу формы?
Или как правильно обратится к экспортной переменной и вызвать экспортную процедуру в модуле формы?
6 Vladal
 
30.09.11
11:52
ТаблицаЗначений - не табличная часть, я так понял.
Вот тогда надо все обработчики , связанные с этой ТЧ перенести в обработку. Или объявить экспортными по всем правилам, чтобы их можно было выызывать из обработки. А то ведь изменится алгоритмя, и ищи, почему в документе так, а в обработке не так.
7 posq
 
30.09.11
12:04
(6)ТаблицаЗначений это не табличная часть, в этом вся и суть. А мне для обработки нужно получить строку из этой ТЗ.

Снова повторюсь:
"Можно ли обратится к элементу формы?
Или как правильно обратится к экспортной переменной и вызвать экспортную процедуру в модуле формы?"
8 Nallama
 
30.09.11
12:31
9 Vladal
 
30.09.11
12:52
Можно

У меня получилось так:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   ПодключаемаяФорма = Обработки.ТестСканера.ПолучитьФорму("Форма");
   ПодключаемаяТЗ = ПодключаемаяФорма.ЭлементыФормы.ТабличноеПоле1.Значение;
   
КонецПроцедуры

Вот после всего этого в переменной ПодключаемаяТЗ содержит все значения и колонки ТЗ на подключенной форме
10 Vladal
 
30.09.11
12:53
Ишо вопрос - форма того документа открыта и ТЗ в ней расчитана?
11 Vladal
 
30.09.11
13:00
Я в открытой форме обработки делал так:

   ТекФорма = ЭтотОбъект.ПолучитьФорму("Форма");
   Если ТекФорма.Открыта() Тогда
       МояТЗ = ТекФорма.ЭлементыФормы.ТаблицаПринтеров.Значение;
       Для каждого СтрокаТЗ Из МояТЗ Цикл
           Сообщить("АдресПринтера " + СтрокаТЗ.АдресПринтера);
           Сообщить("ИмяПринтра " + СтрокаТЗ.ИмяПринтера);
       КонецЦикла;
   КонецЕсли;
12 posq
 
30.09.11
13:14
(11) Спасибо. Я в принципе тоже самое делаю при обращении к документу, но мне возвращается пустой элемент, хотя форма документа открыта.
13 posq
 
30.09.11
13:54
Поделитесь кто нибудь любой обработкой заполнения ТЧ для УТ 10.3 для документа "Установка цен номенклатуры". Я хоть на примере может разберусь. Киньте ссыль если не жалко. Залить можно сюда http://rghost.ru/
14 Nallama
 
30.09.11
14:01
(11), (12) Зачем в подчиненной форме получать форму-владельца, если ее изначально можно передать в качестве параметра?
15 posq
 
30.09.11
14:04
(14) Можно передать или передается?
В обработке ТЧ:
Процедура Инициализировать(Объект,Кнопка,ТабличнаяЧасть)  Экспорт

И больше ничего не имею.
16 vmv
 
30.09.11
14:13
СтруктураЗначенияЗаписи = Новый Структура;       // В эту структуру будем помещать значения колонок строки источника для передачи на сервер, т.к. строка Тз на сервер не передается
   Для каждого Колонка Из ТзВИТаблица.Колонки Цикл
       Колонка.Имя = ВРег(Колонка.Имя);             // ВРег() чтобы не зависеть от регистра символов
       СтруктураЗначенияЗаписи.Вставить(Колонка.Имя);
   КонецЦикла;                                      
   
   // Итерации импорта обходом строк полученной таблицы значений
   #Если Клиент Тогда
       СчетчикИтераций = 0; ДоляПроцента = 100/ТзВИТаблицаКоличество;
   #КонецЕсли
   Для каждого СтрокаТзВИ Из ТзВИТаблица Цикл
       #Если Клиент Тогда
           СчетчикИтераций = СчетчикИтераций + 1; Процентов = Цел(СчетчикИтераций*ДоляПроцента);
       #КонецЕсли
       
       ЗаполнитьЗначенияСвойств(СтруктураЗначенияЗаписи, СтрокаТзВИ);
       СтвПараметрыИмпорта.Вставить("СтруктураЗначенияЗаписи", СтруктураЗначенияЗаписи);
       
       Для ИндексЭлементаСписка = 0 По СпсСинхронизации.Количество()-1 Цикл
           СтвПараметрыИмпорта.Вставить("ИндексЭлементаСписка", ИндексЭлементаСписка);
           Если Не ВыполнитьИмпортЗаписиДляЭлементаСпсСинхронизации(СтвПараметрыИмпорта) Тогда
               Продолжить;
           КонецЕсли;
       КонецЦикла;
       
       #Если Клиент Тогда
           ТекстСостояния = " " + СчетчикИтераций +"("+ТзВИТаблицаКоличество+")" + ", "  +ИсточникИмя+ " >> " +ИсточникТаблицаИмя;
           Состояние(ТекстСостояния, Процентов);
       #КонецЕсли
   КонецЦикла;


делай как я, помещая строку Тз в структуру и передавай куда хочешь, в 82 можно забыть о передаче строк тз, самих тз и тем более элементов формы. лучше сразу это понять
17 vmv
 
30.09.11
14:19
возможность в 8.1 передавать и получать в качестве параметров всякое нетипизированое барахло еще не раз аукнеться тем, кто привык ваять методы через задницу