Управляемые формы-- вызов функции из модуля формы в модуле документа

1. Manticor 66 13.11.12 09:14 Сейчас в теме
Пришлось столкнуться с синтаксисом 8.2.

В модуля формы есть такая процедура
Код
&НаКлиенте
Процедура РМПриИзменении() Экспорт 
    Для каждого стр из Объект.РабочееМесто Цикл
        стр.пометка = Ложь;
    КонецЦикла;
    
    ТекущаяСтрока = Элементы.РабочееМесто.ТекущиеДанные;//неправильное обращение
    Если НЕ ТекущаяСтрока = Неопределено Тогда
        ТекущаяСтрока.Пометка = истина;
        УстановитьПараметрСеанса(ТекущаяСтрока.Значение);
    Иначе
        УстановитьПараметрСеанса("Пусто");
    КонецЕсли;
   
    ЗаполнитьСтраницу("Операции");
КонецПроцедуры
Показать полностью

Данная процедура нужня для перезаполнения формы.

&НаСервере
Процедура ЗаполнитьСтраницу(Параметр)
	Если Параметр = "РабочиеМеста" Тогда
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ
		               |	ПользователиРабочихМест.РабочееМесто
		               |ИЗ
		               |	Справочник.ПользователиРабочихМест КАК ПользователиРабочихМест
		               |ГДЕ
		               |	ПользователиРабочихМест.ДоступноПользователям.Пользователь = &Пользователь
		               |	И ПользователиРабочихМест.РабочееМесто.РМ_Варки = ИСТИНА";
					   
		ЭтотОбъект.РабочееМесто.Очистить();
		Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.Пользователь);
		Выборка = Запрос.Выполнить().Выбрать();
		Пока Выборка.Следующий() Цикл
			НовСтрока = ЭтотОбъект.РабочееМесто.Добавить();//неправильное обращение
			НовСтрока.Значение = Выборка.РабочееМесто;
			НовСтрока.Пометка = Ложь;
		КонецЦикла;
Показать


как ее вызвать из модуля документа? какие дипректиывы прописать?
пишет Поле объекта не обнаружено (ТекущиеДанные)
ТекущаяСтрока = ЭтотОбъект.РабочееМесто.ТекущиеДанные;(вместо элементов пишу ЭтотОбъект)
Вознаграждение за ответ
Показать полностью
Найденные решения
13. starjevschik 13.11.12 10:20 Сейчас в теме
(12) а остальное надо цеплять к событию элемента формы, когда пользователь там что-то нажимает. Пометку он у тебя ставит, что ли. При заполнении нового это все зачем? Ты новый объект заполнил? заполнил. Его форму пользователю открыл? открыл. Все, новый объект готов к взаимодействию с пользователем, дальше он уже пусть сам нажимает кнопки, тогда и события появятся.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. starjevschik 13.11.12 09:24 Сейчас в теме
(1) Manticor, все достаточно очевидно. Форма существует только на клиенте. Модуль документа - на сервере. Причем модуль документа может существовать без формы. Документ-объект может не иметь формы, при этом у него будет его собственный модуль.
Это же очевидно?
отсюда следует, что в из модуля документа модуль формы вызвать никак нельзя. Надо сначала создать форму, а только потом вызывать ее модуль.
"Необходимость" такого вызова объясняется неправильной идеологией построения объекта. Надо ее пересматривать, вот это и есть настоящая необходимость.
2. mymyka 13.11.12 09:20 Сейчас в теме
ТаблицаФормы (FormTable)
ТекущиеДанные (CurrentData)
Использование:

Только чтение.
Описание:

Тип: ДанныеФормыСтруктура; ДанныеФормыЭлементКоллекции; ДанныеФормыЭлементДерева.
Представляет доступ к текущим данным (данным текущей строки).

Доступность:

Тонкий клиент, веб-клиент, толстый клиент.
3. Manticor 66 13.11.12 09:21 Сейчас в теме
(2) mymyka, может эти процедуры в отдельный модуль поместить, мне их нужно просто еще раз вызвать но из модуля дока))
5. mymyka 13.11.12 09:25 Сейчас в теме
(3)Да хоть куда ты их помести. У тебя неверный алгоритм в процедуре, находящиейся в модуле документа. Он выполняется НаСервере, и ТекущиеДанные там использовать нельзя. Опиши в чем конкретно задача стоит?
6. Manticor 66 13.11.12 09:32 Сейчас в теме
(5) mymyka, (4) starjevschik,
Суть такая: создаю документ путем ввода на основании. Вновь созданный документ является по идее чистой копией ранее сущетсвующего за исключением, что в новом введенном на основании есть конечная дата. Тоесть требуется чтобы введеный на основании документ заполнялся данными из своего "основателя".
В документе основании стоят как раз эти процедуры которые запоняют при разных условиях, а т.к. обработка заполнения идет в модуле документа, то и приходистя их вызывать. Суть такая
8. starjevschik 13.11.12 09:42 Сейчас в теме
(6) Manticor, ну так направление вызова должно быть обратное. У тебя есть форма, из которой вызывается создание нового документа, там надо все заполнить и потом открыть новый док. Все должно вызываться из формы.
9. Manticor 66 13.11.12 09:53 Сейчас в теме
(8) starjevschik,

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.РегистрацияВарки") Тогда
		// Заполнение шапки
		Исполнитель = ДанныеЗаполнения.Исполнитель;
		Комментарий = ДанныеЗаполнения.Комментарий;
		НомерВарки 	= ДанныеЗаполнения.НомерВарки;
		Операция    = ДанныеЗаполнения.Операция;
		
		Для Каждого ТекСтрокаРабочееМесто Из ДанныеЗаполнения.РабочееМесто Цикл
			НоваяСтрока = РабочееМесто.Добавить();
			НоваяСтрока.Значение = ТекСтрокаРабочееМесто.Значение;
			НоваяСтрока.Пометка = ТекСтрокаРабочееМесто.Пометка;
			РМПриИзменении();
		КонецЦикла;
Показать

тоесть мне ОбработкаЗаполнения делать не в модуле объекта а в модуле формы?
10. mymyka 13.11.12 09:59 Сейчас в теме
(9)Вызывается ОбработкаЗаполнения сама при вводе на основании или использовании метода .Заполнить(). А описана она должна быть в модуле объекта, т.е. в твоем случае в модуле документа.
11. starjevschik 13.11.12 10:00 Сейчас в теме
(9) обработка заполнения делается, естественно, в модуле документа. Но из нее не нужно и невозможно вызывать процедуры модуля формы. Объект заполнил - потом управление переходит в форму - открываешь форму нового объекта.
Конкретно в твоем случае все верно, кроме вызова
РМПриИзменении();
этот вызов должен быть в форме после заполнения объекта.
точнее даже не так. Эта процедура написана неправильно:
&НаКлиенте
Процедура РМПриИзменении() Экспорт
Для каждого стр из Объект.РабочееМесто Цикл
стр.пометка = Ложь;
КонецЦикла;

//эта часть должна быть на сервере в обработке заполнения, она относится к созданию нового объекта

//а все, что ниже, вообще не относится к заполнению нового объекта, а относится к интерактивным действиям пользователя - при заполнении нового объекта эта часть вообще вызываться не должна
ТекущаяСтрока = Элементы.РабочееМесто.ТекущиеДанные;//неправильное обращение
Если НЕ ТекущаяСтрока = Неопределено Тогда
ТекущаяСтрока.Пометка = истина;
УстановитьПараметрСеанса(ТекущаяСтрока.Значение);
Иначе
УстановитьПараметрСеанса("Пусто");
КонецЕсли;

ЗаполнитьСтраницу("Операции");

КонецПроцедуры
12. Manticor 66 13.11.12 10:09 Сейчас в теме
(11) starjevschik,
тоесть у меня в модуле формы есть проц-ра
&НаКлиенте Процедура РМПриИзменении() Экспорт
я ее меняю на &НаСервере и оставляю только

Для каждого стр из Объект.РабочееМесто Цикл
стр.пометка = Ложь;
КонецЦикла;
а все остальное куда толкать?)))
13. starjevschik 13.11.12 10:20 Сейчас в теме
(12) а остальное надо цеплять к событию элемента формы, когда пользователь там что-то нажимает. Пометку он у тебя ставит, что ли. При заполнении нового это все зачем? Ты новый объект заполнил? заполнил. Его форму пользователю открыл? открыл. Все, новый объект готов к взаимодействию с пользователем, дальше он уже пусть сам нажимает кнопки, тогда и события появятся.
14. Manticor 66 13.11.12 23:48 Сейчас в теме
(13) starjevschik, как ни странно, но до банальности все так и нужно было))
а вот как доступность в ТЧ убрать можно?
http://forum.infostart.ru/forum26/topic74233/
7. mymyka 13.11.12 09:36 Сейчас в теме
Все равно не понимаю для чего нужен ТекущиеДаныне. Перебор строк любой ТЧ организуется одинаково:
Для Каждого Стр из ТчИсходногоДока Цикл
    НовСтр = ТчНовогоДока.Добавить();
    ЗаполнитьЗначенияСвойств(НовСтр,Стр);
КонецЦикла;

ТекущиеДаныне получает спозиционированную пользователем строку тч. При переборе всех строк эта информация совершенно не нужна.
Офк, если имена колонок различаются, то необходимо заполнять каждую отдельно, вместо краткого ЗаполнитьЗначенияСвойств(типа НовСтр.Товар = Стр.Номенклатура и т.д.).
А вообще стоит разобраться чем отличаются РеквизитыФормы, РеквизитыОбъекта и ЭлементыФормы в УФ. Где они доступны и как/когда к ним обращаться.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот