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