Обрабатываю объект - Приходный ордер. Могу ли я во внешней обработке запускать обработчики Приходного ордера

1. AlexGoldT 10.01.22 18:34 Сейчас в теме
Стоит задача создать (модифицировать) из внешней обработки запись (объект) приходного ордера (пример). Не хочу повторять логику работы документа (его бизнес логику). У формы приходного ордера уже есть свои обработчики формы и обработчики полей формы.
Как их запускать в 1С из внешней обработки?
Работал на другой платформе - там поступали просто:
1. Создавали экземпляр формы
2. В объект экземпляра формы записывали данные (последовательно по полям)
3. На поля запускали обработчики прямо из экземпляра класса формы - (экземпляр формы).обработчик
Это позволяло глубоко не лезть в бизнес логику и не отслеживать изменение кода обработчиков событий этой формы.

А в 1С такое возможно? Если да - то как?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. glek 119 10.01.22 19:00 Сейчас в теме
(1) Насколько я знаю, можно. Кстати, здесь (на инфостарте) попадалась статья, как использовать экземпляр формы. Тут только один нюанс: форма документа работает с объектом, который не связан с объектом данных. Т.е. здесь надо копировать данные формы.
4. AlexGoldT 10.01.22 20:04 Сейчас в теме
(2) Печалька. Было очень удобно...

(3) Для разрешения коллизии объект формы-объект данных существует специальная обработка ПриСчитыванииНаСервере (не помню ее точное название). Сужу по аналогии с тем с чем имел дело (не 1С) - там для бланка редактора записи есть обработчик события ПриСчитывании, который фактически в экземпляр формы переносит объект записи и заполняет все элементы формы... А в составе свойств экземпляра формы записывается свойство Record, содержащее ссылку на объект записи
5. glek 119 10.01.22 20:11 Сейчас в теме
(4) Ищите КопироватьДанныеФормы.
2. starjevschik 10.01.22 18:43 Сейчас в теме
1с и ООП это противоположные концы Вселенной. Никаких шансов. Все эти обработчики переписываешь в свою обработку, плюс все глобальные обработчики туда же, заменяя в них форму-параметр данными...
6. Oldsad 11.01.22 03:19 Сейчас в теме
Тут есть важный нюанс, речь об обычных формах или управляемых?
1. Обычные формы. Без проблем создаете объект, заполняете поля, вызываете обработчики изменения данных (как правило они в экспортном виде либо самом объекте/менеджере, либо в общих модулях)
2. Управляемые формы. Внешняя обработка исполняется на клиенте. С танцем бубном и кузькиной матью все решаемо.
3. Управляемые формы. Внешняя обработка исполняется на сервере. Без шансов. Для сервера не существует кода помеченного как исполняемый на клиенте.
7. SlavaKron 11.01.22 12:52 Сейчас в теме
Проблема, думается, вовсе не в копировании данных формы – это не сложно, просто открываем форму, указывая в параметрах ключ (ссылку на объект) и после открытия нам доступен объект формы на клиенте. То есть работаем с объектом открытой формы только на клиенте (попутно, конечно можем получать необходимые данные для заполнения с сервера). Проблема в вызове обработчиков полей ввода и таблиц. Есть древняя тема https://infostart.ru/1c/articles/16985/ посвященная этой задаче. Но с тех пор много воды утекло. Вроде бы для того, чтобы обработчики вызывались, форма должна быть обязательно открыта, а не только получена. Гарантии, что это будет работать должным образом, нет.
8. AlexGoldT 11.01.22 13:37 Сейчас в теме
По идее форма должна быть создана только в виде экземпляра из класса формы, открывать (я так понимаю что подразумевается открыть на экране) совершенно для этого не нужно. Есть ли в 1С возможность создать форму, но не открыть, и при обращении экземплярФормы.МетодОбработки исполнить этот метод с объектными данными экземпляра формы... Да, этот подход будет не быстр, но на небольших объемах корректировок базы позволил бы проводить корректировки без глубокого анализа бизнес логики данных...
9. SlavaKron 11.01.22 13:47 Сейчас в теме
(8)
Есть ли в 1С возможность создать форму, но не открыть, и при обращении экземплярФормы.МетодОбработки исполнить этот метод с объектными данными экземпляра формы
Да, при условии, что процедура обработчика будет клиентской и экспортной. Но на практике такое встречается крайне редко.
В 1С на клиенте есть 2 глобальных метода ОткрытьФорму и ПолучитьФорму. Первый получает и открывает форму "на экране", второй – только получает. Между ними нет особой разницы и в быстродействии вы не сильно потеряете, если откроете форму.
10. AlexGoldT 11.01.22 13:55 Сейчас в теме
(9)
Да, при условии, что процедура обработчика будет клиентской и экспортной.

Не понимаю - это ограничение 1С? Если я получил экземпляр формы с загруженными в нее объектными данными, то обращаясь к методу этого экземпляра формы как ЭкзеплярФоры.Метод я же не обращаюсь к методу извне - я же исполняю метод ВНУТРИ экземпляра формы. Зачем мне Экспорт на данном методе? Или 1С так не умеет?
11. SlavaKron 11.01.22 15:09 Сейчас в теме
(10) Если честно, я не знаю почему так. Контекст формы объекта является внешним по отношению к контексту формы обработки, если можно так сказать, поэтому для вызова ее процедур, нужно чтобы они были экспортными. До какой-то версии платформы, кстати, можно было вызывать серверные неэкспортные процедуры произвольной формы. Наверно это такая концепция безопасности – только сама форма решает, что из ее методов можно запускать извне.
12. AlexGoldT 11.01.22 15:56 Сейчас в теме
Теория и то как работает в иной системе в которой был опыт работы. У нас есть контекст (экземпляр) формы документа и контекст формы обработки. Понятно что обмен между ними не возможен если свойства или методы данного экземпляра формы документа не описаны как внешние (как экспорт). Обмен в данном варианте (нет внешних ) возможен только путем модификации объекта записи который создает форма в своем описании (запись базы данных) - считали объект записи в обработку и засунули его назад в базу. Далее обработка просто передает управление объекту формы документа и уже форма документа сама внутри себя обрабатывает свои методы использую данные объекта записи и свои внутренние свойства.

Ладно, в принципе пока оставлю все это... Думал будет проще...
Оставьте свое сообщение

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