&НаКлиенте
Процедура РМПриИзменении() Экспорт
Для каждого стр из Объект.РабочееМесто Цикл
стр.пометка = Ложь;
КонецЦикла;
ТекущаяСтрока = Элементы.РабочееМесто.ТекущиеДанные;//неправильное обращение
Если НЕ ТекущаяСтрока = Неопределено Тогда
ТекущаяСтрока.Пометка = истина;
УстановитьПараметрСеанса(ТекущаяСтрока.Значение);
Иначе
УстановитьПараметрСеанса("Пусто");
КонецЕсли;
ЗаполнитьСтраницу("Операции");
КонецПроцедуры
Показать полностью
Данная процедура нужня для перезаполнения формы.
&НаСервере
Процедура ЗаполнитьСтраницу(Параметр)
Если Параметр = "РабочиеМеста" Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПользователиРабочихМест.РабочееМесто
|ИЗ
| Справочник.ПользователиРабочихМест КАК ПользователиРабочихМест
|ГДЕ
| ПользователиРабочихМест.ДоступноПользователям.Пользователь = &Пользователь
| И ПользователиРабочихМест.РабочееМесто.РМ_Варки = ИСТИНА";
ЭтотОбъект.РабочееМесто.Очистить();
Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.Пользователь);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НовСтрока = ЭтотОбъект.РабочееМесто.Добавить();//неправильное обращение
НовСтрока.Значение = Выборка.РабочееМесто;
НовСтрока.Пометка = Ложь;
КонецЦикла;
Показать
как ее вызвать из модуля документа? какие дипректиывы прописать?
пишет Поле объекта не обнаружено (ТекущиеДанные)
ТекущаяСтрока = ЭтотОбъект.РабочееМесто.ТекущиеДанные;(вместо элементов пишу ЭтотОбъект)
(12) а остальное надо цеплять к событию элемента формы, когда пользователь там что-то нажимает. Пометку он у тебя ставит, что ли. При заполнении нового это все зачем? Ты новый объект заполнил? заполнил. Его форму пользователю открыл? открыл. Все, новый объект готов к взаимодействию с пользователем, дальше он уже пусть сам нажимает кнопки, тогда и события появятся.
(1) Manticor, все достаточно очевидно. Форма существует только на клиенте. Модуль документа - на сервере. Причем модуль документа может существовать без формы. Документ-объект может не иметь формы, при этом у него будет его собственный модуль.
Это же очевидно?
отсюда следует, что в из модуля документа модуль формы вызвать никак нельзя. Надо сначала создать форму, а только потом вызывать ее модуль.
"Необходимость" такого вызова объясняется неправильной идеологией построения объекта. Надо ее пересматривать, вот это и есть настоящая необходимость.
(3)Да хоть куда ты их помести. У тебя неверный алгоритм в процедуре, находящиейся в модуле документа. Он выполняется НаСервере, и ТекущиеДанные там использовать нельзя. Опиши в чем конкретно задача стоит?
(5) mymyka, (4) starjevschik,
Суть такая: создаю документ путем ввода на основании. Вновь созданный документ является по идее чистой копией ранее сущетсвующего за исключением, что в новом введенном на основании есть конечная дата. Тоесть требуется чтобы введеный на основании документ заполнялся данными из своего "основателя".
В документе основании стоят как раз эти процедуры которые запоняют при разных условиях, а т.к. обработка заполнения идет в модуле документа, то и приходистя их вызывать. Суть такая
(6) Manticor, ну так направление вызова должно быть обратное. У тебя есть форма, из которой вызывается создание нового документа, там надо все заполнить и потом открыть новый док. Все должно вызываться из формы.
(9)Вызывается ОбработкаЗаполнения сама при вводе на основании или использовании метода .Заполнить(). А описана она должна быть в модуле объекта, т.е. в твоем случае в модуле документа.
(9) обработка заполнения делается, естественно, в модуле документа. Но из нее не нужно и невозможно вызывать процедуры модуля формы. Объект заполнил - потом управление переходит в форму - открываешь форму нового объекта.
Конкретно в твоем случае все верно, кроме вызова
РМПриИзменении();
этот вызов должен быть в форме после заполнения объекта.
точнее даже не так. Эта процедура написана неправильно:
&НаКлиенте
Процедура РМПриИзменении() Экспорт
Для каждого стр из Объект.РабочееМесто Цикл
стр.пометка = Ложь;
КонецЦикла;
//эта часть должна быть на сервере в обработке заполнения, она относится к созданию нового объекта
//а все, что ниже, вообще не относится к заполнению нового объекта, а относится к интерактивным действиям пользователя - при заполнении нового объекта эта часть вообще вызываться не должна
ТекущаяСтрока = Элементы.РабочееМесто.ТекущиеДанные;//неправильное обращение
Если НЕ ТекущаяСтрока = Неопределено Тогда
ТекущаяСтрока.Пометка = истина;
УстановитьПараметрСеанса(ТекущаяСтрока.Значение);
Иначе
УстановитьПараметрСеанса("Пусто");
КонецЕсли;
(12) а остальное надо цеплять к событию элемента формы, когда пользователь там что-то нажимает. Пометку он у тебя ставит, что ли. При заполнении нового это все зачем? Ты новый объект заполнил? заполнил. Его форму пользователю открыл? открыл. Все, новый объект готов к взаимодействию с пользователем, дальше он уже пусть сам нажимает кнопки, тогда и события появятся.
Все равно не понимаю для чего нужен ТекущиеДаныне. Перебор строк любой ТЧ организуется одинаково:
Для Каждого Стр из ТчИсходногоДока Цикл
НовСтр = ТчНовогоДока.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр,Стр);
КонецЦикла;
ТекущиеДаныне получает спозиционированную пользователем строку тч. При переборе всех строк эта информация совершенно не нужна.
Офк, если имена колонок различаются, то необходимо заполнять каждую отдельно, вместо краткого ЗаполнитьЗначенияСвойств(типа НовСтр.Товар = Стр.Номенклатура и т.д.).
А вообще стоит разобраться чем отличаются РеквизитыФормы, РеквизитыОбъекта и ЭлементыФормы в УФ. Где они доступны и как/когда к ним обращаться.