Имя: Пароль:
1C
1С v8
Внешняя обработка. Методы, которые необходимо исполнить НаСервере
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) Кажется, проще и в плане отзывчивости / быстроты просто один раз нажать на "Еще"
AdBlock убивает бесплатный контент. 1Сергей