Имя: Пароль:
1C
 
Инициировать открытие формы на сервере
,
0 trey1
 
17.11.22
06:57
Всем привет! Такой вопрос, требуется в документе на сервере произвести определенные действия, весь механизм по сути описан в обработке, который инициируется с передачей параметра в неё. Пока нет времени и желания переносить весь функционал "при создании" обработки, требуется вызов именно с сервера. Возможны ли какие то варианты?
1 Мимохожий Однако
 
17.11.22
07:00
Да
2 trey1
 
17.11.22
08:19
(1) подскажешь?
3 Галахад
 
гуру
17.11.22
08:51
Через OLE открыть экземпляр базы с блекджеком и формами... ))
4 trey1
 
17.11.22
08:54
(3) Мне нужен быстрый и простой вариант)
5 Мимохожий Однако
 
17.11.22
08:54
(2) Сними покровы тайн с кода и задачи. С утра трудно понять контекст
6 trey1
 
17.11.22
09:04
(5) есть обработка вшитая в конфу, которая при передаче параметра (ссылки на док) при создании на сервере заполняет ТЧ (объект обработки) по своим алгоритмам. Задача состоит в том, чтобы вызвать её создание на сервере, я ей передаю ссылку параметром и она заполняет ТЧ и я эту ТЧ забираю
7 Kassern
 
17.11.22
09:15
(6) Отвязывайте бизнес-логику от форм. Перенесите это дело, либо в модуль объекта, либо в менеджер в зависимости от задачи. Тогда вы просто создаете программно обработку на сервере и вызываете ее экспортную функцию/процедуру.
8 Мимохожий Однако
 
17.11.22
09:16
У сервера нет глазок. Поэтому открыть форму обработки можно только на клиенте. Если код выполняется на клиенте, то его можно разместить в модуле менеджера обработки.
9 Kassern
 
17.11.22
09:17
И все будет быстро и красиво. Если вы загляните в типовую торговлю например, то увидите, что пересчет ТЧ происходит не на форме при изменении, а в общем модуле, куда передаются параметры заполнения и строка.
10 FirstLine Support
 
17.11.22
09:23
(7) пока нет времени и желания этим заниматься
11 Kassern
 
17.11.22
09:26
(10) Так пробовали?
ФормаГдеЧтоТоНужное = ПолучитьФорму("Обработки.НужнаяОбработка.НужнаяФорма");
ФормаГдеЧтоТоНужное.НужныйЭкспортныйМетод();
12 Kassern
 
17.11.22
09:30
Если посмотреть старую обработку от Диадока, то там как раз модульность организовывалась через формы обработки.
13 Галахад
 
гуру
17.11.22
09:44
(11) На сервере?
14 НафНаф
 
17.11.22
09:46
(9) только ОбработатьСтрокуТЧ в этих модулях ни разу не красиво и противоречит принципу расширяемости функционала
15 Kassern
 
17.11.22
09:55
(14) С чего это противоречит расширяемости? У вас множество форм с однотипными ТЧ. Завтра нужно добавить новое поле для расчетов, например скидку. Достаточно будет просто передать параметр "РассчитатьСкидку" и в одном месте, в общем модуле добавить логику расчета. Все красиво и опционально. Если бы логика расчета была на форме, то пришлось бы все формы ковырять и дублировать код. Так же были бы проблемы в программном создании документов в разрезе заполнения тч и т.д.
16 НафНаф
 
17.11.22
10:05
(15) это они молодцы - согласен, а теперь надо добавить новое действие, что будем делать? будем менять код этой процедуры, вот и противоречие принципу
вообще какого черта оно вызывает все подряд методы действий?
почему я не могу управлять порядком вызовов этих методов? а если нужно вызвать действие до другого действия и повторно после него?
17 Kassern
 
17.11.22
10:08
(16) " надо добавить новое действие" ->Добавляйте в общий модуль, а необходимость его выполнения передавайте через структуру действий с формы.
"вообще какого черта оно вызывает все подряд методы действий?" -> "Оно" вызывает только те действия, который вы передали в структуре.
18 Kassern
 
17.11.22
10:09
"почему я не могу управлять порядком вызовов этих методов" - если есть необходимость, можете этот момент доработать, передав порядок выполнения и доработав общий модуль.
19 НафНаф
 
17.11.22
10:10
(17) 1. то есть метод ОбработатьСтрокуТЧ придется править
2. тем не менее вызываются ВСЕ методы, просто в каждом из них анализируются входящие параметры и если не подходит, то игнорируется, ну так себе идея
20 НафНаф
 
17.11.22
10:11
(18) постоянно читаю "доработав общий модуль"
об этом противоречии и говорю

если что я об этом https://ru.wikipedia.org/wiki/Принцип_открытости/закрытости
21 Kassern
 
17.11.22
10:13
(20) Ну так, если этим модулем пользуется множество объектов, то наверное правильно доработать общий модуль, чем доработать 100500 копипастов кода в каждой форме, вы не находите?
22 Kassern
 
17.11.22
10:14
мы же сейчас говорим за ОбработатьТЧ, как вы видите правильную реализацию данного метода? Без общего модуля и все в каждой форме?
23 НафНаф
 
17.11.22
10:23
(22) в 1С это маловероятно, нет вложенной модульности

в целом форма передает в ОбработатьТЧ массив объектов, поддерживающих единый интерфейс ОбработчикТЧ (например со своим методом ОбработатьТЧ)
общий модуль проходит по массиву и вызывает метод этих объектов-обработчиков
нужно вам новое действие - создали новый обработчик, лишь бы он соответствовал интерфейсу
просто в форме поместите его в массив
хотите вызвать обработчик дважды - поместите его в массив сколько угодно раз

в итоге - текущий код мы не правим, а только расширяем новым кодом
24 Kassern
 
17.11.22
10:26
(23) "в 1С это маловероятно" -> но мы тут как раз 1с обсуждаем, а не прочие языки
25 Kassern
 
17.11.22
10:27
Я примерно понимаю, что вы имеете в виду, что нужно создавать новые классы с функционалом и ими расширять функционал не правя общий модуль.
26 НафНаф
 
17.11.22
10:31
(24) (25) да, когда я увидел в УТ текущую реализацию - я понял, что разработчики сделали, что смогли в рамках платформы )))
27 Kassern
 
17.11.22
10:36
(26) Ждите Элемент, там вроде можно будет свои классы создавать)
Закон Брукера: Даже маленькая практика стоит большой теории.