Имя: Пароль:
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 передавать и получать в качестве параметров всякое нетипизированое барахло еще не раз аукнеться тем, кто привык ваять методы через задницу
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший