Имя: Пароль:
   
1C
1С v8
С каких пор стало можно вызывать не экспортные процедуры модуля формы?
0 Киборг
 
21.06.17
19:06
обнаружил в БСП в модуле УправлениеКонтактнойИнформациейКлиент такой код:

Форма.Подключаемый_ОбновитьКонтактнуюИнформацию(Результат);

в самой форме процедура написана так:

&НаСервере
Процедура Подключаемый_ОбновитьКонтактнуюИнформацию(Результат)  
    УправлениеКонтактнойИнформацией.ОбновитьКонтактнуюИнформацию(ЭтотОбъект, Объект, Результат);
КонецПроцедуры

и это работает!

как такое возможно?
1 Киборг
 
21.06.17
19:08
Причем, из клиентского модуля клиентскую неэкспортную процедуру формы нельзя вызвать, из серверного модуля серверную - тоже нельзя.
2 mistеr
 
21.06.17
19:19
Вероятно, открыли лазейку специально для БСП.
Иначе внедрение подсистем, как КИ, превратилось бы в полный кошмар.
3 PR
 
21.06.17
19:21
(1) Чет похоже на гон
4 youalex
 
21.06.17
19:23
модули же разные.
УправлениеКонтактнойИнформациейКлиент
УправлениеКонтактнойИнформацией
5 Lexey_
 
21.06.17
19:28
(0) форма не та?
6 Киборг
 
21.06.17
19:31
(2) так достаточно добавить Экспорт у процедуры и она будет вызываться откуда угодно и вопросов к такому коду не будет

(3) ты про что?
ситуация элементарно моделируется на новой конфигурации, проверить это можно за 5 минут

(5) да не, форма та, по шагам проверял - выполнение переходит в модуль формы в эту неэкспортную процедуру, можешь сам попробовать, добавь новую КИ, например телефон
7 PR
 
21.06.17
19:36
(6) Я про то, что клиентскую нельзя вызвать — это нормально, происходит-то все на сервере.
А вот про серверную что-то не верится, с чего бы нельзя?
8 PR
 
21.06.17
19:37
+(7) А, блин, перепутал ситуацию с той, когда берется объект обработки и вызывается ее функция.
9 jsmith82
 
21.06.17
19:46
Недокументированные возможности 1С?
Щас проверю
10 PR
 
21.06.17
19:48
(9) Ты наизусть помнишь доку по 1С?
11 Киборг
 
21.06.17
19:52
(2) кстати, возможно ты прав
В требованиях сертификации кажется есть условие, чтобы код формы не содержал экспортных процедур, кроме оповещений. Поэтому БСП не может использовать Экспорт у процедур модуля формы.
12 jsmith82
 
21.06.17
19:53
(10) Ты про то, что это документировано?
13 PR
 
21.06.17
19:54
(12) Да, возможно
14 jsmith82
 
21.06.17
19:58
А может это какое-то хитрое замыкание?
15 jsmith82
 
21.06.17
19:59
На событие накидывается оповещение. В оповещении в доп. параметрах сама форма.

Тут такой коммент еще есть


// Контекстный вызов
Процедура ОбновитьКонтактнуюИнформациюФормы(Форма, Результат)

    Форма.Подключаемый_ОбновитьКонтактнуюИнформацию(Результат);
    
КонецПроцедуры
16 jsmith82
 
21.06.17
20:05
Нет. Всё работает и по обычному без оповещений.
17 youalex
 
21.06.17
20:06
На пустой конфе тоже работает, подтверждаю.
18 jsmith82
 
21.06.17
20:07
Но клиентскую процедуру вызвать нельзя
19 jsmith82
 
21.06.17
20:07
Ну всё равно хорошо. Теперь можно во внешних обработках обращаться к серверным процедурам перезаполнения цен и проч. без лишнего гемора
20 H A D G E H O G s
 
21.06.17
20:48
Это фича была уже описана в одном бложеге.
21 Волшебник
 
модератор
21.06.17
21:28
(20) Это документированная фича или багофича?
22 H A D G E H O G s
 
21.06.17
21:51
(21) Пытаюсь найти статью. Видел пару лет назад.
23 yzimin
 
21.06.17
22:04
Подтверждаю, работает.

Создал внешнюю обработку заполнения объекта, вызвал серверную процедуру модуля формы

    ВладелецФормы.УдалитьТоварыБезИзмененныхЦенНаСервере();
24 Волшебник
 
модератор
21.06.17
22:24
(23) Формы на сервере? Ну что за бред?
25 yzimin
 
21.06.17
22:28
(24) читай внимательно
26 Киборг
 
21.06.17
22:48
(20) Ну это точно не багофича, раз она используется в БСП. А вот насчет документированности самому интересно, поэтому собственно и тема поднята. Но наверно уже можно считать, что это и не документированная фича.
27 Новиков
 
21.06.17
22:50
(22) >>Пытаюсь найти статью. Видел пару лет назад.
https://habrahabr.ru/post/273155/

ТС, о чудный мир тебе открылся дружище! Ты "переоткрыл" изюм, ажна спустя несколько лет. Поздравления и маковные булочки тебе!
28 Киборг
 
21.06.17
23:03
(27) Не понял сарказма. Я же не за лаврами сюда пришел с этой темой. Я тут не настолько известен. :)

В статье, кстати, тоже ничего не говорится о причинах такого поведения платформы. Автор этой статьи явно ошибается считая ее багофичей.

Надо будет проверить завтра будут ли "видны" на клиенте изменения в форме сделанные таким вызовом.
29 yzimin
 
21.06.17
23:15
(28) какая версия конфигурации?

у меня все процедуры такие
Процедура Подключаемый_ОбновитьКонтактнуюИнформацию(Результат) Экспорт
30 Киборг
 
21.06.17
23:58
(29) Версия БСП 2.3.4.x кажется, завтра точнее cмогу сказать. Версия платформы 8.3.10.х
А у тебя какая версия БСП? Впрочем надо посмотреть последнюю версию БСП.
31 Киборг
 
21.06.17
23:59
(29) В любом случае в инструкции БСП нашей версии написано, что надо в модуль формы добавить процедуру без слова Экспорт
32 yzimin
 
22.06.17
00:12
(30) 2.3.5.65
33 Новиков
 
22.06.17
11:52
(28) >>В статье, кстати, тоже ничего не говорится о причинах такого поведения платформы.

Причина такого поведения такая - "патамушта" (с). Твой вопрос уже задавался на партнерке, мне ленно искать пруф туда, сам поищи. Обсуждение там закончилось, буквально - ничем. Ответа нет. Бага это или фича - решает каждый вновь-переоткрыватель ее. Юзай фичу, пока можно, и "не думай об этом" (с)
34 youalex
 
22.06.17
12:07
(33) >Юзай фичу, пока можно, и "не думай об этом" (с)
Главное, не думать о том, что эту "фичу" могут закрыть, как баг)
35 Киборг
 
22.06.17
12:41
(33) нашел, там по сути нет обсуждения, два партнера перекинулись парой фраз по теме и все, представители 1С темой не заинтересовались :)

Юзать страшно :) Фича не документирована, а значит нет гарантий, что она не будет устранена в одном из следующих релизов, хотя ее использование в БСП намекает о том, что фича будет "живучей". :)

И вот кстати совершенно непонятно зачем БСП ее использует- конструкция в первом сообщении вполне может быть оформлена через описание оповещения. Практическая пригодность этой фичи на мой взгляд заключается только в возможности использовать серверные процедуры в модулях форм, находящихся на поддержке, да и то ограниченно - вызывая их исключительно из клиентского контекста.
36 yzimin
 
22.06.17
13:35
(35) в БСП одна рекомендация, а в типовых процедуры эти экспортные
37 Киборг
 
22.06.17
13:50
(36) в Бух 3.0.44.188 процедура неэкспортная везде, кроме справочника Организации, а кое-где она к тому же и нестандартная или переделана на функцию. В типовых вольно подходят к рекомендациям БСП :)
38 тарам пам пам
 
22.06.17
14:12
Попробую ткнуть пальцем в небо - из-за клиент-серверного разделения формы клиентская часть формы считается "внешней" по отношению к серверной, поэтому, чтобы клиент видел серверную часть формы, все процедуры с директивой &НаСервере считаются по-умолчанию экспортными.

Кстати, возник вопрос - а с &НаКлиентеНаСервереБезКонтекста не получится ли вызывать и клиентскую процедуру?