Управляемые формы. Как программно выполнить процедуры и обработ. событий формы? #590273


#0 by Mr_Best
Здравствуйте Уважаемые коллеги. Столкнулся с задачей выполнить процедуру управляемой формы, но что-то как-то не получается. Коротко: в УТ11 создается программно элементы справочника вид цен. И все бы хорошо, только вот этот вид цен работать не будет до тех пор, пока элемент не откроешь в программе вручную, а затем нажмешь "Записать и закрыть". Объекты создаются на сервере. Проверял в отладчике, события формы элемента естественно не выполняются(при создании и записи). Пробывал создовать объекты на сервере, затем по ссылке открывать формы на клиенте, все равно обработчики событий не срабатывают! На сервере создаются так: &НаСервере Процедура СоздатьВидЦен(КоллекцияАтрибутов, БазовыйВидЦен = Неопределено) Вообще это все пишется для обработки переноса данных из писаной-переписанной семерки в УТ11. Так сказать, одноразовая обработка, лишь бы перебросить данные )))) Вопрос: как программно эмулировать открытие формы и нажатие кнопки "Записать и закрыть" в управляемом приложении, так что бы выполнились все стандартные обработчики соответствующих событий формы? Желательно, что бы пользователь не наблюдал открытия и закрытия формы, но необязательно.
#1 by vmv
КонецПроцедуры надеюсь, пояснения не нужны
#2 by Mr_Best
я был бы признателен, если бы Вы указали хотя бы директиву компиляции процедуры. Будте любезны, немножко поподробнее.
#3 by vmv
в модуле менеджера она смысла не имеет, пердавать данные объекта при загрузке в методы менеджера можно структурами. посмотрите функционал модулей менеждеров объектов в новых конфах на УФ. Конечно, можно еще придумать нечто что будет позволять использовать методы ФОРМЫ в условном "глобальном" контексте, но именно перенос общего функционала форм и загрузчиков в модуль менеджера считаю правильным. Все остальное от лукавого
#4 by KindLion
Для начала - постарайтесь выяснить, отработки какой функции вы, все же, добиваетесь. При нажатии кнопки формы "Записать и закрыть" отрабатывают не только функции модуля формы, но и ряд функций объекта. Например "ПриЗаписи". Если, все же, необходимые вам функции находятся именно в модуле формы, то у них должна быть приписка - ЭКСПОРТ. И тогда в коде пишите что-то типа: ФормаОбъекта = ПолучитьФорму(....); ФормаОбъекта.ИмяНужнойПроцедуры; - вызываете нужную вам процедуру.
#5 by toypaul
у меня есть какой-то перенос из ТиС в УТ
#6 by toypaul
перенос справочников. в загрузке просто повторяешь весь код из формы справочника и все. делов-то.
#7 by Mr_Best
Очень жаль, что все не так как в обычном приложении ((( В обычном приложении можно было бы сделать так: или к процедурам-событиям экспорт и все. Делов то было бы на пару минут, все выполнилось по стандартным алгаритмам, причем кодом написаным во внешней обработке. И не че менять в форме не надо! Вот как то так можно? Или без гемороя не обойтись?
#8 by Mr_Best
Без разницы где это делать, на клиенте или на сервере. Так же без разницы интерактивно или нет.
#9 by Mr_Best
вверх!
#10 by 1с-кин
вообще-то, именно открытие и закрытие формы вы будете наблюдать при выполнении такого кода...
#11 by Mr_Best
совершенно верно! Только между таким программным способом открытия / закрытия и "ручным способом" есть весьма существенная разница! Выполняются не все обработчики, конкретно: ПриСозданииНаСервере - выполняется как программно, так и вручную. ПередЗаписьюНаСервере - выполняется только "вручную". Т.е. я поставил в двух этих обработчиках точки останова. При программном открытии / закрытии срабатывает только точка останова в обработчике "ПриСозданииНаСервере". А при "ручном" открытии / закрытии того же справочника "ВидЦен" точки останова срабатывают в обоих обработчиках событий, и в "ПриСозданииНаСервере", и в "ПередЗаписьюНаСервере"! Почему? Я кодом в внешней обработке создаю более 100 элементов справочника, и не хочится открывать и закрывать вручную каждый элемент. Как программно их открыть и закрыть, что бы выполняли все обработчики событий которые должны выполнится при при открытии и последующем закрытии формы справочника? Ну, что не кто не знает? Или я непонятно изложил вопрос?
#12 by Mr_Best
ну очень нужно ... вверх!
#13 by 5 Элемент
Что-то сомневаюсь что для записи видов цен нужно открывать форму.
#14 by 1с-кин
а зачем именно события открытия-закрытия понадобились? вытащите оттуда нужное и запускайте отдельно.
#15 by Mr_Best
вытаскивать очень много надо!!!! Легче открыть и закрыть, делов то на две менуты.
#16 by Mr_Best
Ведь как то же можно!
#17 by Mr_Best
- запись проходит успешно, но не расчитываюся влияющие и базовые типы цен в объекте!
#18 by Mr_Best
А если открыть и закрыть форму, то расчитываются!
#19 by Defender aka LINN
Потому что ты записываешь объект. А его, между прочим, в управляемой форме даже нет. Ну и получать форму при крограммной записи - это уже верх идиотизма
#20 by 5 Элемент
А как ты записываешь? надо через Записать формы Расширение управляемой формы для справочника (Managed form extension for catalogs) Записать (Write) Синтаксис: Записать(<ПараметрыЗаписи>) Описание: Записывает объект.
#21 by Mr_Best
- этот способ не выдаст ошибку про интерактивные операции.
#22 by Mr_Best
- это на клиенте?
#23 by 5 Элемент
открой СП наконец таки Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент.
#24 by 5 Элемент
а вот за это надо разработчикам руки оторвать
#25 by 1с-кин
сделайте дубляж процедур-обработчиков событий, и вызывайте их принудителдьно.
#26 by 5 Элемент
лучше перенеси код формы в свою обработку. открытие формы все же неправильно.
#27 by Mr_Best
Ура!!! ЩА выложу правильный код.
#28 by Mr_Best
- целиком и полностью согласен!
#29 by Mr_Best
Привык доверять контекстной подсказки через точку, а там почему то метода записать нету ((((( Вот и мучался, а делов то: !!!!!!
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С