|
Внешняя обработка. Методы, которые необходимо исполнить НаСервере | ☑ | ||
---|---|---|---|---|
0
PiotrLoginov
15.10.18
✎
18:15
|
Часто замечаю, что разработчики сейчас, реализуя во внешней обработке какой-то функционал, которого нет в конфигурации, и который никак нельзя туда вставить, обходятся модулем формы этой внешней обработки.
Даже самые сложные куски кода, которые исполняются на сервере (потому что в этих кусках есть методы платформы, доступные лишь НаСервере (даже не в толстом клиенте) или потому, что там идет обращение к сторонним механизмам, доступным лишь на серверной машине) пихают в модуль формы, заполняя его (модуль формы) хитросплетениями функций и процедур. Казалось бы, мучайте вы модуль ОБЪЕКТА вашей внешней обработки! А в модуле формы оставьте лишь код, обслуживающий интерактивные "дела". НО! С другой стороны, обработку ведь можно открыть в толстом клиенте. И если в модуле объекта был расчет, что код будет исполняться на серверной машине, произойдет мерзкий пшик. А вот в модуле формы пшик не произойдет, потому что в модуле формы есть директивы компиляции. Какие есть рекомендации вендора по этой части? Ткните меня, плз. И вообще, стоит ли страховаться в начале модуля объекта так, как страхуется вендор в модулях менеджеров (#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда) ?? Спасибо всем, кого этот принципиальный теоретический вопрос не оставит равнодушным. |
|||
44
PiotrLoginov
16.10.18
✎
11:03
|
(43) какой-никакой, а пруф. Засчитано ) . Спасибо. На выходных еще поковыряюсь там. Может, и найду по теме.
|
|||
45
Franchiser
гуру
16.10.18
✎
11:16
|
Да не вижу разницы. Иногда удобно писать код в модуле формы, иногда в модуле объекта, везде есть свои плюсы. Например, когда пишешь в модуле формы, то нужно часто писать реквизитформывзначение() и обратно, часто нужно обращаться к реквизитам через объект.ххх. В модуле объекта не нужно писать директиву Насервере, не нужно писать объект.ххх, это иногда более удобно. При переходе с обычных форм удобнее все процедуры оставлять именно в модуле объекта, в таком варианте они не меняются. Иногда модуль объекта внешней обработки я использую как хранилище серверных методов: это удобно когда нужно выполнять код по COM, вызывая процедуры из текущей или COM базы из соответствующей внешней обработки.
|
|||
46
hhhh
16.10.18
✎
11:18
|
(45) это раньше было реквизитформывзначение(), сейчас в новых платформах всё реже и реже.
|
|||
47
Franchiser
гуру
16.10.18
✎
11:25
|
(46) ну не скажи, вот недавно смотрел примеры внешних обработок от 1С, демонстрирующих написание их для одобрения в сервисе 1С фреш, вот они там используют такие вызовы
|
|||
48
Franchiser
гуру
16.10.18
✎
11:33
|
Еще пример: есть внешний отчет, который активно использует модуль менеджера этого отчета, куда переносить его?
ответ очевиден: удобнее перенести в модуль объекта, а в модуле формы настроить перенаправление вызовов на модуль объекта. |
|||
49
RomanYS
16.10.18
✎
11:59
|
Вернусь к (11).
(38) Не понимаю, откуда такие опции. Серверные методы не могут быть экспортными, точнее их нельзя вызвать не из формы (или я ошибаюсь?). Поэтому весь внешний серверный "интерфейс" обработки может быть только в модуле обработки. Если такой интерфейс не нужен, то весь код может быть в модуле формы. |
|||
50
singlych
16.10.18
✎
12:54
|
ИМХО модуль объекта обработки - это практически артефакт, в котором почти нет смысла. Случай, когда тебе прям нужно получать объект обработки и что-то там с ним делать, довольно специфический. У объекта обработки нет событий, которые можно было бы как-то переопределить (ну, кроме обработки проверки заполнения). Так что в приватном интерфейсе модуля обработки в общем случае смысла нет, а для использования экспортного придется каждый раз создавать объект обработки. В форме находится то, что нужно только для работы формы, а для каких-то общих обработчиков существует модуль менеджера, в обоих случаях объект не дергается. Модуль объекта нужен, только если без него не обойтись, что случается нечасто.
|
|||
51
hhhh
16.10.18
✎
12:59
|
(50) во внешней обработке не бывает модулей менеджера.
|
|||
52
singlych
16.10.18
✎
13:08
|
(51) Для внешней и в общих обработчиках смысла нет, кто их будет использовать кроме нее самой?
Ну разве что если у нее там разные формы, использующие одинаковый функционал. Но так-то он может быть и клиентский, и там уже нужно думать, может придется извращаться с использованием специальной формы в качестве общего модуля. |
|||
53
RomanYS
16.10.18
✎
13:13
|
(52) (50) стандартная интеграция в БСП для внешних обработок для серверных вызовов естественно использует модуль объекта. Альтернатив (предоставляемых платформой) просто нет.
|
|||
54
Franchiser
гуру
16.10.18
✎
13:14
|
(49) Из другой формы можно вызвать экспортные клиентские и серверные методы этой формы.
|
|||
55
Franchiser
гуру
16.10.18
✎
13:20
|
(49) пример выгрузка регламентированной отчетности в xml
|
|||
56
singlych
16.10.18
✎
13:21
|
(53) Я и говорю, "модуль объекта нужен, только если без него не обойтись". Использование обработки в качестве дополнительной - это специальный случай.
|
|||
57
Cyberhawk
16.10.18
✎
13:22
|
(56) Использование внешней обработки в качестве "дополнительной" (подключаемой) - можно сказать уже единственно оставшийся случай, а не "специальный"
|
|||
58
RomanYS
16.10.18
✎
13:26
|
(55) в какой конфе? конкретный вызов?
(54) экспортный серверный метод вызывается с клиента? что делать если надо с сервера? если можно вызвать с сервера, то как туда (на сервер) попадет форма? |
|||
59
singlych
16.10.18
✎
13:28
|
(57) Лишь потому, что в типовых есть БСП, и это удобная хрень. Я имею в виду сферическую обработку в сферической конфе.
|
|||
60
Franchiser
гуру
16.10.18
✎
13:30
|
(55)
БП 3.0, РегламентированныйОтчетНДС, ФормаОчтета2017Кв1 ФормаВыгрузкиРеглОтчета = ПолучитьФорму("Документ.ВыгрузкаРегламентированныхОтчетов.Форма.ФормаДокумента", , ЭтаФорма); СпДокОсн = Новый СписокЗначений; СпДокОсн.Добавить(СтруктураРеквизитовФормы.мСохраненныйДок); ФормаВыгрузкиРеглОтчета.Проверить(СпДокОсн); |
|||
61
RomanYS
16.10.18
✎
13:32
|
(60) лень конфу искать. Я правильно понимаю, что метод Проверить серверный, но вызывается с клиента? И никакой возможности его вызвать с сервера (кроме контекста самой формы) нет?
|
|||
62
Franchiser
гуру
16.10.18
✎
13:34
|
(61) В данном случае Проверить это Экспортная процедура с директивой &НаКлиенте, но может быть вызвана также и экспортная процедура с директивой &НаСервере
|
|||
63
Franchiser
гуру
16.10.18
✎
13:38
|
(61) с сервера вызвать клиентскую процедуру точно нельзя, серверную точно не скажу.
|
|||
64
RomanYS
16.10.18
✎
13:41
|
(63) я так понимаю, что нельзя. Т.к. получить эту форму на сервере или передать её туда невозможно. Или ошибаюсь?
|
|||
65
ptiz
16.10.18
✎
14:04
|
А еще говорят, что под УФ программировать легче. Да-да, вижу :)
1С даже модулем менеджера обделила внешние обработки - вот это вообще ни в какие ворота. |
|||
66
Новиков
16.10.18
✎
14:13
|
(60) тут вкусовщина похоже, т.к. ничто не мешало, сначала уйти в ОМ, выполнить эту проверку, и уже далее чотатама делать. Т.е. если задаться целью, этот кусок можно переписать. Хотя, если работает и чувакам пофик, то можно и не переписывать, но ТС болеет за прекрасное ж.
|
|||
67
Franchiser
гуру
16.10.18
✎
16:00
|
(64) Да, ПолучитьФорму() на сервере не сработает (т.к. на сервере метод не доступен), но можно передать Форму в Серверную процедуру выполнив внеконтекстный серверный вызов.
|
|||
68
Franchiser
гуру
16.10.18
✎
16:02
|
(66) да там много таких процедур которые лезут в форму Документ.ВыгрузкаРегламентированныхОтчетов.Форма.ФормаДокумента. Это я для примера показал.
|
|||
69
Йохохо
16.10.18
✎
16:34
|
(68) они хотят эти места легко обновлять, имхо это другая мотивация и другие ценности организации кода
|
|||
70
Cyberhawk
16.10.18
✎
16:34
|
(67) "можно передать Форму в Серверную процедуру выполнив внеконтекстный серверный вызов" // Что ты называешь "серверным вызовом"? Походу ты какое-то свое понятие этого словосочетания используешь.
|
|||
71
RomanYS
16.10.18
✎
16:48
|
(67) как раз "передать Форму в Серверную процедуру" по-моему невозможно, будет ошибка отображения или что-то подобное
|
|||
72
Cyberhawk
16.10.18
✎
17:03
|
(71) Он пади под "серверным вызовом" подразумевает просто вызов серверного метода из северного метода ))
|
|||
73
Cyberhawk
16.10.18
✎
17:03
|
*серверного
|
|||
74
unregistered
16.10.18
✎
17:08
|
(0) > стоит ли страховаться в начале модуля объекта так, как страхуется вендор в модулях менеджеров (#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда) ?
Да, стоит. Ветку можно закрывать. Потому что правильная конфигурация должна работать без ошибок, стабильно и предсказуемо в любых режимах и на всех видах клиентов. На форме следует размещать только код, обслуживающий работу формы (интерактив). Код модификации, получения и обработки данных должен размещаться в модуле объекта и/или менеджера. ИМХО. |
|||
75
RomanYS
16.10.18
✎
17:10
|
(72) именно это невозможно: находясь на сервере вне контекста формы нельзя вызвать что-либо из формы вообще (включая экспортные серверные методы).
|
|||
76
Cyberhawk
16.10.18
✎
17:10
|
(75) Хз о чем ты и почему мне что-то пишешь
|
|||
77
RomanYS
16.10.18
✎
17:15
|
(76) потому что ты пишешь в (72): "просто вызов серверного метода из северного метода". Это невозможно если вызываемый серверный метод в другой форме.
|
|||
78
Cyberhawk
16.10.18
✎
17:19
|
Я хз что ты там видишь в написанном мною, но заявлять что "именно это невозможно" на твоем месте как-то поспешно
|
|||
79
RomanYS
16.10.18
✎
17:31
|
(78) на самом деле я об этом заявляю во всех постах в этой ветке. Но никто не пытается это опровергнуть или согласиться, все игнорируют)). Ты первый, если я не прав, то как это сделать?
Если это сделать нельзя (как я считаю), то весь вопрос (0) ниочём: при необходимости использовать обработку с сервера код придется размещать в модуле обработки и никак иначе. |
|||
80
Cyberhawk
16.10.18
✎
17:38
|
Я вроде ничего не опровергал. У сообщений есть цифры-ссылки, рекомендую на них обращать внимание.
|
|||
81
RomanYS
16.10.18
✎
17:40
|
(80) пока нет)), но ты в (78) говоришь "на твоем месте как-то поспешно", я жду продолжения, но возможно зря)
|
|||
82
Cyberhawk
16.10.18
✎
17:51
|
Я же привел цитату. Найди это свое сообщение и разверни цепочку до самого начала (с учетом моего участия в ней)
|
|||
83
RomanYS
16.10.18
✎
18:09
|
(82) Да вижу я всю цепочку и (70). Однако хочется обсуждения сути. При этом "на твоем месте как-то поспешно" - твой посыл мне, а по сути вопроса ты не отвечаешь(я без претензий;)), только увиливаешь.
Ещё раз вопрос для всех: есть ли способ, находясь на сервере, вызвать серверный экспортный метод какой-либо формы (пусть будет форма внешней обработки)? Мой ответ: Нет. |
|||
84
Cyberhawk
16.10.18
✎
18:14
|
Что значит "еще раз"? Укажи пост, где ты этот вопрос или предположение уже выскащывал.
|
|||
85
RomanYS
16.10.18
✎
18:42
|
(84)
утверждение было в (49) формулировка немного неточная, не сказано про вызов с сервера, в (53) "альтернатив нет", в (58) "что делать если надо с сервера?", в (64) "получить эту форму на сервере или передать её туда невозможно. Или ошибаюсь?", весь пост (75), в (77): "Это невозможно если вызываемый серверный метод в другой форме." Достаточно? По сути все посты одном (в вопросительной или утвердительной форме), в (83) "вопрос ребром" |
|||
86
Cyberhawk
16.10.18
✎
19:50
|
(85) Ну вот видишь, а Я-то на (71) тебе отвечал
|
|||
87
Franchiser
гуру
16.10.18
✎
21:33
|
(70) передаешь в качестве параметра ЭтаФорма
Чтобы сделать это в рамках модуля текущей формы нужно использовать директиву НаСервереБезКонтекста |
|||
88
RomanYS
16.10.18
✎
21:37
|
(86) Вижу, опять оправдываешься). Зачем, не пойму. Никто к тебе не "цепляется", интересно мнение.
Просто ответь на вопрос (для всех) из (83): да(как?)/нет/не знаю. (87)Куда передаешь? Форму вроде нельзя передать на сервер. |
|||
89
Franchiser
гуру
16.10.18
✎
21:54
|
(88) проверю ещё раз, насколько помню помогала директива НаСервереБезКонтекста при передаче формы в качестве параметра
|
|||
90
RomanYS
16.10.18
✎
22:02
|
(89) Проверь. Вообще НаСервереБезКонтекста как раз отключает передачу контекста(=формы), НаСервере - передает текущую(!) форму на сервер. Передать на сервер (не текущую) форму вроде нельзя никак, как и создать её на сервере.
|
|||
91
Franchiser
гуру
16.10.18
✎
22:48
|
(90) Проверил, работает:
&НаСервере Процедура Команда1НаСервере() // Вставить содержимое обработчика. ПроцНаСервереБезК(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура Команда1(Команда) Команда1НаСервере(); КонецПроцедуры &НаСервереБезКонтекста Процедура ПроцНаСервереБезК(УФ) УФ.ЭкспортнаяПроцедураНаСервере(); КонецПроцедуры &НаСервере Процедура ЭкспортнаяПроцедураНаСервере() Экспорт Сообщить("111"); КонецПроцедуры |
|||
92
RomanYS
16.10.18
✎
22:53
|
(91) так у тебя Команда1НаСервере() уже на сервере и в контексте текущей формы.
Найди способ вызвать ЭкспортнаяПроцедураНаСервере() с сервера вне контекста формы. Например, из другой формы но с сервера. |
|||
93
Franchiser
гуру
16.10.18
✎
23:03
|
ПроцНаСервереБезК(УФ) без контекста текущей формы же, я в ней вызываю экспортный метод переменной УФ
|
|||
94
Franchiser
гуру
16.10.18
✎
23:07
|
Так лучше? :
&НаКлиенте Процедура Команда1(Команда) ПроцНаСервереБезК(ЭтаФорма); КонецПроцедуры &НаСервереБезКонтекста Процедура ПроцНаСервереБезК(УФ) УФ.ЭкспортнаяПроцедураНаСервере(); КонецПроцедуры &НаСервере Процедура ЭкспортнаяПроцедураНаСервере() Экспорт Сообщить("111"); КонецПроцедуры |
|||
95
RomanYS
16.10.18
✎
23:11
|
(94) гораздо, то что нужно!
Только не работает: {Обработка.Обработка2.Форма.Форма.Форма(6)}: Ошибка при вызове метода контекста (ПроцНаСервереБезК) ПроцНаСервереБезК(ЭтаФорма); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}param по причине: Ошибка отображения типов: Отсутствует отображение для типа 'УправляемаяФорма' |
|||
96
Franchiser
гуру
16.10.18
✎
23:15
|
Чем первый вариант не устроил, из серверной процедуры я вызвал серверную процедуру Без Контекста куда передал форму как параметр, а в ней вызвал экспортную процедуру из переданного параметра.
Это не ответ на вопрос? Что с сервера без контекста можно обращаться к экспортным процедурам переданной формы? |
|||
97
RomanYS
16.10.18
✎
23:19
|
(96) ты взял ЭтаФорма на сервере, это можно сделать (на сервере) только изнутри формы. Извне это сделать нельзя.
|
|||
98
Franchiser
гуру
16.10.18
✎
23:24
|
(97) ок, но согласись твой вопрос не корректный, чисто формально я ответил: в каком то смысле это работает
|
|||
99
Franchiser
гуру
16.10.18
✎
23:54
|
Форму можно передать с клиента на клиент, и с сервера на сервер, а с клиента на сервер нельзя.
|
|||
100
RomanYS
16.10.18
✎
23:59
|
(98) Да я уже не знаю как его сформулировать корректно)) В моем понимании естественно, что если в вопросе звучит "вызов метода какой-либо формы", подразумевается что мы не находимся в контексте этой самой формы.
(99) Именно так. Поэтому ответ на (0) сводится к (11) без каких-либо красиво/некрасиво и рекомендаций вендора. |
|||
101
Cyberhawk
17.10.18
✎
07:58
|
(88) Хз о чем ты
|
|||
102
Cyberhawk
17.10.18
✎
08:00
|
(87) Это не серверный вызов, это с сервера на сервер. Ну т.е. как Я и говорил ты называешь вещи не своими именами.
|
|||
103
Rovan
гуру
17.10.18
✎
09:18
|
(0) "что разработчики сейчас,"...кто ???
- Это сама 1С ? - Известные партнеры 1С - просто обычные франчи - какие-то НоНэйм программисты ? - студенты-практиканты ? |
|||
104
PiotrLoginov
17.10.18
✎
14:09
|
(103) думал, тут уже все успокоились :)
>>- Это сама 1С ? >> >>- Известные партнеры 1С >>- просто обычные франчи >> >>- какие-то НоНэйм программисты ? >>- студенты-практиканты ? Кажется, примеры внешних обработок с кучей серверного функционала прямо в модуле формы валяются на каждом углу. Но дабы не быть голословным, я могу сейчас скачать первую попавшуюся крутую обработину с инфостарта и возопить победоносно "а что я говорил?". |
|||
105
PiotrLoginov
17.10.18
✎
14:15
|
Тут еще, оказывается, затронули вопрос вызова экспортного серверного метода формы. В общем-то, рабочий способ давно активно практикуется в типовых: создаем форму на клиенте, а затем на сервере из формы вызываем нужный метод БСП. В качестве параметра передаем в метод БСП саму форму. И всё.
БСП может долго делать что-то, непосредственно связанное с интерактивом нашей формы, или вообще обрабатывать какие-то сторонние данные, держа переданную ч/з параметр форму под боком и пользуясь, при необходимости, её экспортными серверными методами. |
|||
106
Franchiser
гуру
17.10.18
✎
15:52
|
(105)
"создаем форму на клиенте, а затем на сервере из формы вызываем нужный метод БСП" Вроде как пришли к выводу, что передать на сервер форму с клиента нельзя, форму можно передать с клиента на клиент и с сервера на сервер. |
|||
107
Cyberhawk
17.10.18
✎
17:17
|
1. "затронули вопрос вызова экспортного серверного метода формы"
2. "на сервере из формы вызываем нужный метод БСП" Ты что-то напутал, неужели для тебя не очевидно, что ты говоришь о каких-то разных вещах? |
|||
108
Cyberhawk
17.10.18
✎
17:18
|
(106) "передать на сервер форму с клиента нельзя" // Можно если серверный вызов контекстный, т.е. в "пределах" одной и той же формы
|
|||
109
Cyberhawk
17.10.18
✎
17:20
|
+(107) А, не дочитал до конца, пардон.
3. "БСП ... держа переданную ч/з параметр форму под боком и пользуясь, при необходимости, её экспортными серверными методами" // Можешь показать пример код в БСП, который так делает? |
|||
110
Franchiser
гуру
17.10.18
✎
23:09
|
(108) речь о внеконтекстном вызове и когда форма не текущая, т.е. получена методом ПолучитьФорму() (не ЭтаФорма())
|
|||
111
Franchiser
гуру
17.10.18
✎
23:12
|
3. "БСП ... держа переданную ч/з параметр форму под боком и пользуясь, при необходимости, её экспортными серверными методами"
Есть такие примеры, но не на сервере, а передается форма с клиента в клиентский общий модуль или в экспортную клиентскую процедуру, откуда-то уже дёргаются клиентские или серверные методы экспортные текущей формы. Пример выгрузка и формирование регламентированной отчётности. |
|||
112
PiotrLoginov
18.10.18
✎
18:30
|
(107) 1. "затронули вопрос вызова экспортного серверного метода формы"
2. "на сервере из формы вызываем нужный метод БСП" это разные вещи, кто ж спорит. >>"затронули вопрос вызова экспортного серверного метода формы" >>... и пользуясь, при необходимости, её экспортными серверными методами - вот вещи совсем не разные. Прекрасный пример использования экспортных серверных методов формы. (109) , (111) ну почему же не на сервере. Вот пример - использование на сервере экспортных методов ЗаполнитьНастройкамиПоУмолчанию() и ЗаполнитьНастройкамиПоУмолчанию() формы бухгалтерского отчета Отчеты.АнализСубконто.ФормаОтчета: //В модуле формы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) БухгалтерскиеОтчетыВызовСервера.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка); <...> КонецПроцедуры //<...> &НаСервере Процедура ИзменениеСхемыКомпоновкиДанныхНаСервере() Экспорт Схема = ПолучитьИзВременногоХранилища(СхемаКомпоновкиДанных); ПараметрыОС = Новый Структура("ИндексСубконто, ЗаголовокСубконто", 0, ""); ПараметрыНМА = Новый Структура("ИндексСубконто, ЗаголовокСубконто", 0, ""); ПараметрыФизЛица = Новый Структура("ИндексСубконто, ЗаголовокСубконто", 0, ""); // Изменение представления и наложения ограничения типа значения. "Отчет" - это реквизит формы Для Каждого ВидСубконто Из Отчет.СписокВидовСубконто Цикл <...> КонецЦикла; <...> КонецПроцедуры //<...> &НаСервере Процедура ЗаполнитьНастройкамиПоУмолчанию(ЗаполняемыеНастройки) Экспорт Перем ЗаполнятьКоллекцию; //<...> Если ЗаполняемыеНастройки.Свойство("Показатели", ЗаполнятьКоллекцию) И ЗаполнятьКоллекцию Тогда // Управление показателями. //<..> КонецЕсли; Если ЗаполняемыеНастройки.Свойство("Группировка", ЗаполнятьКоллекцию) И ЗаполнятьКоллекцию Тогда // Добавление группировок с соответствии с выбранным счетом. //<...> КонецЕсли; Если ЗаполняемыеНастройки.Свойство("Отбор", ЗаполнятьКоллекцию) И ЗаполнятьКоллекцию Тогда // Добавление неактивных отборов по субконто в соответствии с выбранным счетом. //<...> КонецЕсли; //<...> КонецПроцедуры //в модуле БухгалтерскиеОтчетыВызовСервера Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт Отчет = Форма.Отчет; Параметры = Форма.Параметры; РеквизитыФормы = РеквизитыФормы(Форма); ИнициализацияФормыОтчета(Отчет, РеквизитыФормы, Форма); Если Параметры.Свойство("ОткрытьРасшифровку") И Параметры.ОткрытьРасшифровку Тогда СтандартнаяОбработка = Ложь; ИнициализацияРасшифровкиПоНастройкам(Отчет, Параметры, РеквизитыФормы, Форма); ИначеЕсли Параметры.Свойство("ВидРасшифровки") Тогда СтандартнаяОбработка = Ложь; ИнициализацияРасшифровкиПоВиду(Отчет, Параметры, РеквизитыФормы, Форма); КонецЕсли; КонецПроцедуры //<...> Процедура ИнициализацияРасшифровкиПоНастройкам(Отчет, Параметры, РеквизитыФормы, Форма) Отчет.РежимРасшифровки = Истина; ИмяОтчета = БухгалтерскиеОтчеты.ИмяОтчета(Форма); //<...> Если БухгалтерскиеОтчетыКлиентСервер.ОтчетПоддерживаетУниверсальныеНастройки(ИмяОтчета) Тогда Форма.ИзменениеСхемыКомпоновкиДанныхНаСервере(); НастройкиКоторыеНужноЗаполнитьПоУмолчанию = БухгалтерскиеОтчетыКлиентСервер.РазделыНастроекСтандартногоОтчета(); <...> Форма.ЗаполнитьНастройкамиПоУмолчанию(НастройкиКоторыеНужноЗаполнитьПоУмолчанию); КонецЕсли; <...> КонецПроцедуры |
|||
113
PiotrLoginov
18.10.18
✎
18:35
|
Другое дело, что в этих примерах, чтобы передать в качестве параметра форму, содержащую экспортные серверные методы, процедуры, использующие эти методы, вызываются, собственно, из этой формы.
но возможен другой сценарий, когда форма создается на клиенте (на сервере управляемую форму не создашь, тут уж без вариантов), а потом управление (и форма) передается на сервер, где совершаются необходимые действия, в том числе с использованием экспортных серверных методов переданной формы. Доводилось использовать такой сценарий в моих поделках. Работает. |
|||
114
Cyberhawk
18.10.18
✎
19:00
|
(112) А, ну ясно - в самой форме, экспортные серверные методы которой хотим дергать, должна быть в серверном контекстом методе предусмотрена передача объекта формы вовне.
Универсально - т.е. "полностью" извне - нельзя вызвать любой экспортный серверный метод произвольной управляемой формы. |
|||
115
Franchiser
гуру
18.10.18
✎
19:33
|
(113) "управление (и форма) передается на сервер, где совершаются необходимые действия, в том числе с использованием экспортных серверных методов переданной формы. Доводилось использовать такой сценарий в моих поделках. Работает."
Ну покажи пример с использованием на клиенте ПолучитьФорму() и передачи формы на сервер. |
|||
116
Franchiser
гуру
18.10.18
✎
19:34
|
(112) с ЭтаФорма все понятно, пример без ЭтаФорма покажи
|
|||
117
Cyberhawk
18.10.18
✎
19:47
|
(116) Да нет такого примера, что-то ты докопался :) См. (114)
|
|||
118
Сергиус
18.10.18
✎
20:22
|
(0)[НО! С другой стороны, обработку ведь можно открыть в толстом клиенте]
Можно, но тут вопрос - а зачем так делать? Обычно, каждая конфа используется в своем режиме - УФ или по-старинке ОФ(обычные толстые формы). Соответственно, ты для конкретной конфы пишешь свою обработку. Зачем закладывать что-то общее и универсальное для, по сути, разнонаправленных решений? |
|||
119
Franchiser
гуру
18.10.18
✎
22:58
|
(117) не ну может человек способ знает. Раньше ведь может и было можно, пока дыру не прикрыли. Сейчас пробовал форму запихать в структуру, в ней ещё структура и т.д. аналогично с массивом. Может есть какой ещё баг который не известен.
|
|||
120
tesseract
19.10.18
✎
00:36
|
>>Универсально - т.е. "полностью" извне - нельзя вызвать любой экспортный серверный метод произвольной управляемой формы.
Серверные методы формы давно пора удалить к хренам. Только путают контекст. Вызвать таки можно, но только если упрформа имеет обработчики и сама запустила ПодклчитьОбработчикОжидания/ПодключитьОбработчикОповещения. В толстом клиенте кстати можно было через шаманство с событиями от оборудования. |
|||
121
Cyberhawk
19.10.18
✎
10:21
|
(120) Еще к требованию "универсально" можно добавить, что изначально с сервера нельзя в принципе поиметь форму и любые ее методы, даже если в этой форме предусмотреть интерфейс для передачи самой себя куда-то вовне.
Ну т.е. если какой-то алгоритм есть _только_ в серверном метдоде формы (ЗУП таким славится?), и путь он экспортный, и пусть удалось получить форму на сервере (форма предоставляет такую возможность), а мы не имеем возможность вернуться на клиента, то ждет нас облом. |
|||
122
bvb
19.10.18
✎
11:45
|
Можно я вброшу поутру :
Я вот не могу своим разумом осилить почему Сообщить() может спокойно вызываться на сервере. |
|||
123
Вафель
19.10.18
✎
11:50
|
(122) ибо сообщить - это не только вывод текста на экран, то и передача между процессами
|
|||
124
bvb
19.10.18
✎
12:31
|
Стеснюсь спросить : а предупреждения так нельзя было сделать ?
А то приходится ваять вот такую красоту : &НаКлиенте Процедура ПредупреждениеОбОшибках(ТекстПредупреждения) Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияПредупреждение", ЭтотОбъект); ПоказатьПредупреждение( Оповещение, ТекстПредупреждения, // предупреждение 0, // (необ.) таймаут в секундах "Это предупреждение." // (необ.) заголовок ); КонецПроцедуры &НаКлиенте Процедура ЗаполнитьСводнуюСпецификацию(Команда) ЕстьОшибки = ЛОЖЬ; ТекстПредупреждения = ""; ЧетТамНаСервере(ЕстьОшибки, ТекстПредупреждения); Если ЕстьОшибки Тогда ПредупреждениеОбОшибках(ТекстПредупреждения); |
|||
125
Cyberhawk
19.10.18
✎
12:38
|
(124) Сообщения после серверного вызова всплывают все сплошняком и особо не мешают.
Представь что было бы если бы предупреждения все разом вываливались и пользователь жмакал бы "ОК" тыщу раз. |
|||
126
bvb
19.10.18
✎
12:43
|
(125) Ну так не делай предупреждения же в цикле !
Я о том что : если можно передавать сообщения между процессами то можно передавать и текст предупреждения с вызовом модального окна предупреждения В КОНЦЕ серверной процедцуры на клиенте. |
|||
127
bvb
19.10.18
✎
12:48
|
Еще жутко не хватает ОбработкапрыванияПользователя() циклы обработки данных крутятся на сервере.
|
|||
128
Cyberhawk
19.10.18
✎
12:54
|
(126) Могу только порекомендовать перечитать написнное в моем предыдущем сообщении
|
|||
129
bvb
19.10.18
✎
13:14
|
(128)Перечитал.
Предупреждение - это исключительная ситуация зачем его вызывать сотни раз ? Мы же непишем предупреждение в модуле проведения. |
|||
130
RomanYS
19.10.18
✎
13:31
|
(124) Есть программа, есть документация. Зачем спрашивать "зачем", если ПО работает как положено?
У 1С есть реально бредовые решения. Пример? "Ошибка целостности" - почему просто не написать "нарушение условий лицензирования..."? |
|||
131
Вафель
19.10.18
✎
13:34
|
(129) у тебя проблемы с пониманием клиент-серверного взаимодействия.
|
|||
132
bvb
19.10.18
✎
13:44
|
(130) Чтобы пользователь обосрался что у него база грохнулась а не бежал искать эмулятор
(131) Я думаю врядли Упрощенно на пальцах что придумали в УФ: туда сюда гоняется контекст по сути в XML На клиенте и и сервере его нужно запарсить/распарсить пока серверная обработка процедуры - запроса не закончится на клиенте результата не получишь НО Особенность работы 1С не в УФ. Что нужны всякие хохряшки вызываемые в процессе обработки данных на рантайме а с этим в УФ таки проблемы. Допустим иду я обработкой по стокам ТЗ и после обработки КАЖДОЙ строки нужно что то визуализировать и такое нужно тоже |
|||
133
Вафель
19.10.18
✎
13:45
|
(132) но он же в гугл побежит, а там все разжевано.
Это работало только первую неделю |
|||
134
Cyberhawk
19.10.18
✎
13:49
|
(129) Хз почему ты меня об этом спрашиваешь
|
|||
135
bvb
19.10.18
✎
13:54
|
(133) Может запаниковать
Вы мне лучше объясни чем думали разработчики конф на УФ если открыв форму дока ты не знаешь проведен он или нет ? или удален ? Нет , я знаю что нужно вытащить на форму кнопку отмены проведения и если она неакитивна - то таки документ не проведен. Но работают с доками не я а юзеры |
|||
136
Cyberhawk
19.10.18
✎
14:29
|
А зачем им это знать?
|
|||
137
RomanYS
19.10.18
✎
14:30
|
(135) В БП3 вижу пиктограмму рядом с датой, а ты про какие типовые?
|
|||
138
Cyberhawk
19.10.18
✎
14:32
|
(137) Так это в форме списка пади. Он про форму объекта.
|
|||
139
Cyberhawk
19.10.18
✎
14:33
|
||||
140
RomanYS
19.10.18
✎
14:33
|
(138) я тоже про форму документа
|
|||
141
Cyberhawk
19.10.18
✎
14:34
|
Ну значит разрабы БП такое сделали. В линейке ЕРП такого нет.
|
|||
142
bvb
19.10.18
✎
14:41
|
У меня УТ 11.4.1.261 нет не фига
Менеджер из открывает движения чтобы понять проведен или нет или в форму списка проваливается |
|||
143
Cyberhawk
19.10.18
✎
14:57
|
(142) Кажется, проще и в плане отзывчивости / быстроты просто один раз нажать на "Еще"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |