Вход | Регистрация
    1  2  3   

Написал хотелку по передаче формы с клиента в серверный общий модуль.

Написал хотелку по передаче формы с клиента в серверный общий модуль.
Я
   Гений 1С
 
02.09.21 - 18:08
Сюда написал (не спортлото, чай)? https://github.com/SeiOkami/OneS/issues/86
А вы что скажете, вот текст иссью:

В 1С на УФ можно из серверного кода формы передать форму как параметр в серверный общий модуль. И далее из серверного общего модуля в другой серверный общий модуль.
Но из клиенского кода формы и из клиентского модуля невозможно передать форму в серверный общий модуль.
Можно передать форму только из клиентского кода формы в серверный код формы.

Для решения проблемы из клиентского кода формы или клиентского общего модуля вызывают серверный метод формы, который уже передает форму в серверный общий модуль.

Это крайне ужасное решение, которое провоцирует весь код писать в форме, не разнося ее по модулям. Нужно как можно скорее убрать это противоречивое ограничение.
   Новый1сник2
 
1 - 02.09.21 - 18:14
(0) практическое применение какое?
   Beduin
 
2 - 02.09.21 - 18:14
ПриСозданииФормыНаСервере() А тут тебе чего не хватает?
   Гений 1С
 
3 - 02.09.21 - 18:15
(1) не осилил о чем? я думаю, 80% сталкивались с этой проблемой.
(2) это о другом
   Новый1сник2
 
4 - 02.09.21 - 18:16
(3) откуда статистика ?
   Новый1сник2
 
5 - 02.09.21 - 18:17
(2) присоединяюсь?
   Гений 1С
 
6 - 02.09.21 - 18:20
(5) ну вот ты написал некую серверную процедуру Процедура(Форма) в общем модуле МойСервер.

А теперь хочешь эту процедуру вызывать из общего модуля Клиент, куда управление попадает из формы.

и получаешь ошибку невозможности передать форму на сервер.
   Новый1сник2
 
7 - 02.09.21 - 18:22
(6) в чем проблема написать этот модуль в форме?
   Andreyyy
 
8 - 02.09.21 - 18:24
В этот раз соглашусь с ТС !
Вот ни разу невнятное ограничение. Чем общий модуль хуже серверной процедуры формы ... Геноцид.
   RomanYS
 
9 - 02.09.21 - 18:24
(6) на ОФ же как-то жили с невозможность передачи мутабельных значений, и здесь переживём
   Новый1сник2
 
10 - 02.09.21 - 18:26
(8) может и так, но как часто это нужно?
   Andreyyy
 
11 - 02.09.21 - 18:29
(10) Нечасто. Но попадалось здоровые штуки делать, и это нелепое (на первый взгляд) ограничение неприлично нервов попортило.
   Жан Пердежон
 
12 - 02.09.21 - 18:30
контекстный серверный вызов и так передает форму
с чем должны были сталкиваться в (3) не ясно
зачем нужен лисапед в (0)?
   Andreyyy
 
13 - 02.09.21 - 18:30
(9) С таким "оптимизмом" на лошадей недолго пересесть.
   H A D G E H O G s
 
14 - 02.09.21 - 18:35
(0) Нахрен не нужно.
   Гений 1С
 
15 - 02.09.21 - 18:36
//=== Форма ===


&НаКлиенте
Процедура Тест()
    Сервер.Обработка(ЭтаФорма);//Так не работает

    ТестНаСервере();//Так работает

КонецПроцедуры

&НаСервере
Процедура ТестНаСервере()
    Сервер.Обработка(ЭтаФорма);//Так работает

КонецПроцедуры

//=== Общий модуль Клиент ===


Процедура Обработка(Форма) Экспорт
    Сервер.Обработка(ЭтаФорма);//Так не работает

КонецПроцедуры

//=== Общий модуль Сервер ===


Процедура Обработка(Форма) Экспорт
    //Тут желаемая обработка формы

КонецПроцедуры
   Василий Алибабаевич
 
16 - 02.09.21 - 18:42
Опять ТС взял квадратные колеса и героически толкает свой лисапед по дороге?
   PuhUfa
 
17 - 02.09.21 - 18:43
Передавать всю форму с клиента на сервер... фу таким быть -)
   polosov
 
18 - 02.09.21 - 18:48
(0) Ты еще Объект.Товары передай в серверный метод.
Тебе из спортлото плевок прилетит.
   Новый1сник2
 
19 - 02.09.21 - 18:48
(0) может в каком то частном случае это и нужно, но пока не сталкивался с таким, проблем написать в модуле формы нету
   Ненавижу 1С
 
20 - 02.09.21 - 18:50
Иногда неудобно, согласен.
Но тут думаю вопрос в целом такой - сложные объекты не передать туда/обратно.
Каждый раз вызывая серверные етоды мы передаем туда весь контекст формы!(а  не только ссылку на нее)
Предположим, что можно и передадим две формы
На сервере вторая форма пусть получит первую как реквизит (или переменную модуля) 

ВтораяФорма.РеквизитСудногоДня = ПерваяФорма;

теперь первая форма на клиенте закрылась. Если на клиенте нет на нее ссылок, то 1С имеет право ее положить в мусор. Не бегать же за подсчетом ссылок на сервер?
Теперь вызывает так:

ВтораяФорма.ПолучитьРеквизитСудногоДня().Обновить(); //простите что? оно же в мусоре!
   Ненавижу 1С
 
21 - 02.09.21 - 18:52
+(20) именно поэтому всякие массивы передаются с клиента на сервер как копии своих значений, чтобы не заниматься подсчетом ссылок
   Гений 1С
 
22 - 02.09.21 - 18:58
(17) как будто у тебя это при каждом серверном вызове не происходит? гггг
В общем, написал статью на эту тему: https://geniy1s.ru/nevozmozhnost-peredachi-formy-s-klienta-na-server/
   Гений 1С
 
23 - 02.09.21 - 18:59
(20) в статье я описал, что при вынесении кода в общие модули с этой проблемой встретишься гарантированно. Это не неудобство, это БЕДА 1С
   Жан Пердежон
 
24 - 02.09.21 - 19:03
обычно думаешь, как бы оптимизировать: где несколько вызовов в один объединить, где по значению передавать, где без контекста, а то и без серверного вызова
тс думает, как бы сделать, чтобы говнокодить было проще
   Гений 1С
 
25 - 02.09.21 - 19:05
(24) если кодить проще, то результат лучше получается. Для этого 1с и была задумана, чтобы доступно и всерьез.
как видишь, из-за этой шняги все пишут формы не разбивая ее по модулям.
   Гений 1С
 
26 - 02.09.21 - 19:06
Что вредит читаемости, повторному использованию кода и т.п.
обрати внимание, что в формах на ОФ было принято использовать модуль формы, в УФ это рудиментом стало.
   H A D G E H O G s
 
27 - 02.09.21 - 19:08
Автор грешит контекстными вызовами. Стыд и срам.
   Гений 1С
 
31 - 02.09.21 - 19:15
(27) при рефакторинге формы это нормально
   BeerHelpsMeWin
 
32 - 02.09.21 - 20:18
(0) Да уж, какую х-ню только люди не придумают, чтобы не писать нормальный код.
   Гений 1С
 
33 - 02.09.21 - 20:30
(32) я вот все хочу посмотреть на этот "нормальный код", но все скрывают, приходится самому статьи писать, просвещать дремучих
   Guk
 
34 - 02.09.21 - 21:06
а ведь у этого "специалиста" какие-то клиенты есть ;) жалко их, чесслово...
   acht
 
35 - 02.09.21 - 22:32
Боженьки, Геня пишет письма в спортлото против мутабельных объектов. Какая прелесть.
   Вафель
 
36 - 02.09.21 - 22:34
(35) но формально то платформа это умеет
   acht
 
37 - 02.09.21 - 22:37
(36) Неа. Это не передача на сервер, а синхронизация контекстов.
   dangerouscoder
 
38 - 02.09.21 - 23:03
(34) жадные клиенты должны страдать
   Гений 1С
 
39 - 03.09.21 - 07:44
(36) вот именно.
   Гений 1С
 
40 - 03.09.21 - 07:44
(38) наблюдаю "стокгольмский синдром"
   Mort
 
41 - 03.09.21 - 08:12
Мда уж. "Гении" не пытаются разобраться/почитать мануалы, они сразу, по своим поверхностным представлениям выдают шедевры космической глупости.

Вот пара предложений с ИТС из которых открывается вся абсурдность фантазий про "взять клиентскую форму и отправить в параметре на сервер":

"Т.к. данные формы доступны и на клиенте и на сервере, то основным хранилищем всех данных выступает сервер, просто потому что взаимодействие клиента и сервера инициируется только с клиента. Это означает, что в момент работы в памяти сервера находятся все данные формы, и доступ к ним осуществляется напрямую. На клиенте же имеется в общем случае частичное представление этих данных, при необходимости подгружаемое с сервера. При дальнейшей работе с формой изменения данных могут передаваться туда и/или обратно для синхронизации состояний клиента и сервера."
   Ненавижу 1С
 
42 - 03.09.21 - 08:20
(40) я тебе проблему в (20) описал, но ты не вчитывался
   Гений 1С
 
43 - 03.09.21 - 09:07
(41) и? любая существующая на клиенте форма существует на сервере. В параметре передается просто ссылка на эту форму. В чем парадокс? Почему эту ссылку нельзя передать с клиента на сервер? Алле? Что за отрицание реальности?
   Гений 1С
 
44 - 03.09.21 - 09:09
(20) а в чем проблема? Если форма не закрыта, она существует на сервере и следовательно, на нее существует ссылка на клиенте. Даже если все ссылки на клиенте закрыты, если форма открыта, она существует и ее можно получить через коллекцию форм. Проблема надумана и отсосана из пальца
   Гений 1С
 
45 - 03.09.21 - 09:09
любая ссылка на форму - это ссылка на контекст формы (на клиенте и на сервере). Пока форма жива, эта ссылка имеет смысл, после закрытия формы она обращается в ничто.
   Ненавижу 1С
 
46 - 03.09.21 - 09:10
(44) ты вообще не читаешь, а если она закрыта и ссылок на нее нет на клиенте?
   Ненавижу 1С
 
47 - 03.09.21 - 09:11
(45) в ничто, на клиенте закрыли форму - ее можно уничтожить? а ссылка на сервере есть...
   Гений 1С
 
48 - 03.09.21 - 09:12
(47) при вызове команды закрытия формы она фактически закрывается (т.е. в интерфейсе закрывается). И все ссылки на клиенте и сервере обращаются в Неопределено. В чем проблема?
   Гений 1С
 
49 - 03.09.21 - 09:13
(47) если ты именно про ссылки на созданные формы, то если форма создана и явно не уничтожена, она должна храниться в памяти. Она будет доступна в коллекции форм, если что.
   Гений 1С
 
50 - 03.09.21 - 09:13
это будет избавлять от неряшливого кодирования.
   Гений 1С
 
51 - 03.09.21 - 09:14
т.е. пока форма не уничтожена, она хранится в памяти, не вижу проблем.
   Ненавижу 1С
 
52 - 03.09.21 - 09:15
(48) во первых это не так, никто не будет оббегать все объекты в поисках ссылок, это дорого
во-вторых, для этого понадобилось внезапно бы лезть еще раз на сервер

(49) внезапно мнение поменялось

ты вообще знаешь как устроены системы с управляемой памятью и сборщиком мусора?
   Гений 1С
 
53 - 03.09.21 - 09:15
Способ вызывать форму из клиента через функцию-посредник формы есть. значит, платформа может это делать, но не делает.
В итоге провоцируется длинный монокод формы.
   Гений 1С
 
54 - 03.09.21 - 09:16
(52) ты что-то не уловил. Никакого подсчета ссылок. Нет явной команды уничтожения формы - форма хранится.
(52) как сборщики мусора устроены. знаю. Теперь расскажи, как ты это применяешь для форм.
   Ненавижу 1С
 
55 - 03.09.21 - 09:17
(53) да, но только в контексте одной формы, ты войдешь в этом контексте на сервере и выйдешь из него в нем же, другие формы на сервере ты так не изменишь
   acht
 
56 - 03.09.21 - 09:17
(54) Геня. У тебя доступ на партнерский есть?
   Гений 1С
 
57 - 03.09.21 - 09:18
(56) нету. (55) ошибаешься, в любой форме, где есть такая процедура-затычка
   Cyberhawk
 
58 - 03.09.21 - 09:19
Подключили на форме 2 обработчика ожидания. В них передаем форму в разные методы (или даже модули) на сервер. Там параллельно с формой что-то делается.
Как синхронизировать потом на клиенте эти изменения?
   acht
 
59 - 03.09.21 - 09:19
(57) > нету
А ты делал что нибудь, для его получения, клоун?
   Гений 1С
 
60 - 03.09.21 - 09:20
(58) платформа стандартно все делает, в чем проблема? Для тебя удивительно, что все формы синхронизируются на клиенте и сервере.
Мы передаем не форму, а ссылку на нее. Форма всегда есть на клиенте и сервере.
 
 
   acht
 
61 - 03.09.21 - 09:21
(59) + Вот это вот твоё отсутсвие доступа очень хорошо характеризует твое истинное желание что-то понять и исправить.

Ггг, в айти кризис.
   acht
 
62 - 03.09.21 - 09:25
(60)
&НаКлиенте
Перем МойНаборДанных Экспорт


Удачи в синхронизации
   Гений 1С
 
63 - 03.09.21 - 09:32
(61) там доступ платный. И особого смысла не вижу. Обычно там хоронят проблемы
   Гений 1С
 
64 - 03.09.21 - 09:32
(62) изивини, твой пассаж не понял
   acht
 
65 - 03.09.21 - 09:36
(63) > И особого смысла не вижу
Браво.
   Гений 1С
 
66 - 03.09.21 - 09:38
(65) ну может ты мне его откроешь? 1С не заинтересована в обратной связи, она анально огорожена от критики, даже конструктивной. даже от багов.
   Ненавижу 1С
 
67 - 03.09.21 - 09:39
(60) "Мы передаем не форму, а ссылку на нее"
это прям ошибка-ошибка, мы синхронизируем формы, а не просто ссылки передаем
при передачи других объектов на сервер - мы делаем копию объекта, а не ссылку передаем

Вот пример для демонстрации:



&НаКлиенте
Процедура Команда1(Команда)
    Массив = Новый Массив;
    МассивНаКлиенте(Массив);
    Сообщить(Массив.Количество());  // 1

    
    Массив = Новый Массив;
    МассивНаСервере(Массив);
    Сообщить(Массив.Количество());  // 0

КонецПроцедуры

&НаКлиенте
Процедура МассивНаКлиенте(Знач Массив)
    Массив.Добавить(42);
КонецПроцедуры

&НаСервере
Процедура МассивНаСервере(Знач Массив)
    Массив.Добавить(42);
КонецПроцедуры
   Asmody
 
68 - 03.09.21 - 09:58
(60) [Форма всегда есть на клиенте и сервере] - с каких это пор "форма всегда есть на сервере"?
   Конструктор1С
 
69 - 03.09.21 - 10:03
(25) нет, 1с была задумана не для говнокодинга, как бы тебе этого не хотелось
   Конструктор1С
 
70 - 03.09.21 - 10:04
(26) >>Что вредит читаемости, повторному использованию кода 

Читаемости вредит твоя манера делать наркоманскую архитектуру
   Dmitrii
 
71 - 03.09.21 - 10:22
(34) >> у этого "специалиста" какие-то клиенты есть ;) жалко их, чесслово.

Мало того. У него наверняка и последователи есть, которые читают его статьи и пользуются этими "откровениями".
   lodger
 
72 - 03.09.21 - 10:39
(25) это совершенно нормальная архитектура К-С взаимодействия. и точка перехода контекста формы в самой форме, это тоже совершенно нормально. а ТС наркоман и расписывается в этом тут (22)
   lodger
 
73 - 03.09.21 - 10:40
(71) надо пошерстить его ресурс, вычленить кей-поинты и спрашивать у соискателей что они про это думают. легкий способ отсеять говнокодеров и коекакеров.
   Конструктор1С
 
74 - 03.09.21 - 10:44
(71) самое досадное, что этот рукозад объявил себя в домике, и ничего слышать не хочет
   acht
 
75 - 03.09.21 - 11:11
(66) > она анально огорожена от критики

Чой-то ржу. Ты на себя-то давно смотрел, родной? =)
   Гений 1С
 
76 - 03.09.21 - 11:18
(68) что-то не так?
   Гений 1С
 
77 - 03.09.21 - 11:19
(72) ты забываешь, что заплаткой я получаю желаемый результат, проблема не в архитектуре КС, а в искусственных ограничениях. Наблюдаю стокгольмский синдром, когда программисты восхваляют свои цепи
   Ненавижу 1С
 
78 - 03.09.21 - 11:26
(77) наблюдаю выборочный подход к ответам на поставленные вопросы по существу
   BeerHelpsMeWin
 
79 - 03.09.21 - 11:28
(73) Я уже неоднократно говорил, что его сайт отлично подходит для собеседований. Берешь любую статью, показываешь соискателю и спрашиваешь, что сделано не так и как надо сделать правильно. Мало где в интернете есть такое количество говнорешений в открытом доступе.
   ildary
 
80 - 03.09.21 - 11:33
(79) Опасная идея - соискатель рискует лопнуть от смеха и фейспалма.
   VladZ
 
81 - 03.09.21 - 11:40
Я так и не понял, зачем это автору.
   Mort
 
82 - 03.09.21 - 11:43
(81) Любой плохой код рано или поздно натыкается на какие-то платформенные/логические ограничения. Гена вместо приведения кода к логике, хочет сломать эти ограничения.
   Гений 1С
 
83 - 03.09.21 - 12:10
(82) логика простая - нужно сделать рефакторинг. Иногда нужно передавать форму целиком, чтобы настроить ее элементы, например. Вопросы, юнга?
   Конструктор1С
 
84 - 03.09.21 - 12:11
(77) вся история развития программирования связана с ограничениями. Изобрели XML - по сути ограничение, зажимает в использование текстового формата определенной структуры, на деле - огромный прорыв. Без XML различные системы с трудом обменивались информацией, ибо каждый городил кто во что горазд, с XML смогли обмениваться данными самые разношерстные системы. Изобрели реляционные БД, SQL, они зажимают в структурирование данных до таблиц, на деле - огромный прорыв. Без РБД данные хранили кто во что горазд, было почти невозможно достигнуть многопользовательской работы с данными... Также и платформа 1С - кладезь полезных ограничений.
Но вот выбежал рукожоп с горы, и давай рассуждать про вред ограничений
   Гений 1С
 
85 - 03.09.21 - 12:11
(78) какие вопросы остались не отвеченными. Подсчет ссылок не нужен. Еще вопросы?
   Гений 1С
 
86 - 03.09.21 - 12:11
(81) ну например, чтобы вынести код формы в общие модули. простейшее
   Гений 1С
 
87 - 03.09.21 - 12:12
(84) да, но это ограничение абсолютно искусственно, просто кому-то из архитекторов было лень почесаться в итоге имеем ягодицы.
   lodger
 
88 - 03.09.21 - 12:13
(86) выноси, плохому танцору сам знаешь что мешает.
   Maniac
 
89 - 03.09.21 - 12:18
Суть глобальных модулей это выносить код который используется многократно во множестве модулей.
А не для того чтобы ты какую то сраную форму выносил.
   Конструктор1С
 
90 - 03.09.21 - 12:19
(86) скажи спасобо всем этим ограничениям. Благодаря им твои поделия хотя бы запускаются. Пусти тебя в чистое поле, наперевес с языком программирования общего назначения, ты такую аритектурную наркоманию нагородишь, которая даже не сможет запуститься. Благодаря "ограничениям" программировать могут даже такие рукозады, как ты
   Maniac
 
91 - 03.09.21 - 12:21
(90) у Гени нет подделок даже. за 10 лет только куча никому не нужного мусора.
   Гений 1С
 
92 - 03.09.21 - 12:21
(90) стокгольмский синдром детектед.
(91) а они должны быть?
   Mort
 
93 - 03.09.21 - 12:23
Допустим Гена стал главным разработчиком платформы и решил всё-таки запилить передачу формы из клиента в параметрах. Сейчас покажу как он обломается.

Пример1:

Форма.Реквизит1 = 10;
СерверныйМодуль.МояПроцедура(Форма); 

Гена предлагает на сервере поймать ID формы или как он пишет "Ссылку". Но тогда все клиентские изменения не попадут на сервер (вот это: Форма.Реквизит1 = 10;), т.е. если платформа видит передачу формы параметром, она должна сначала её синхронизировать с объектом формы на сервере. И это мы ещё не передали массив или структуру с формами внутри.

Дальше, в общем модуле:

Процедура МояПроцедура(Форма)

 Форма.Реквизит1 = 30;

КонецПроцедуры

Форма на сервере изменилась, а когда эти изменения попадут в клиентскую форму? т.е. платформа должна проводить синхронизацию и при возвращении?

И таких вопросов полно. Только Гений их не видит. Глаза заплыли "гениальностью" ))
   Гений 1С
 
94 - 03.09.21 - 12:24
(93) Ошибка "т.е. если платформа видит передачу формы параметром, она должна сначала её синхронизировать с объектом формы на сервере"
При передаче ссылки на форму с клиента на сервер происходит синхронизация клиентской и серверной формы. Дальше не читал.
   Гений 1С
 
95 - 03.09.21 - 12:24
Еще раз, чтобы не было домыслов - уже сейчас все это прекрасно работает через заплатку. Речь только о том, чтобы это работало без костыля
   Конструктор1С
 
96 - 03.09.21 - 12:25
(92) наркоман детектед
   acht
 
97 - 03.09.21 - 12:27
(93) Процедура МояПроцедура(Знач Форма) =)
   Mort
 
98 - 03.09.21 - 12:28
(95) Кстати да, насчет заплатки. Я думал там действительно гениальное решение по передаче данных формы на сервер или какой-нибудь грязный хак для работы с экземпляром формы на сервере в обход. А там тупо обычный контекстный переход на сервер срущий в модуль формы. Если можно писать в модуль формы, надо туда не это говно запихивать, а нормальный код по работе с формой на сервере с её логикой.
   Конструктор1С
 
99 - 03.09.21 - 12:28
Нормальные программисты всегда стремятся к порядку, единообразию. Ты стремишься к анархии. Таким не место в программировании
   Конструктор1С
 
100 - 03.09.21 - 12:33
(95) твоя проблема в том, что ты задачи решаешь ректально. Если бы до тебя дошел архитектурный принцип, согласно которому бизнес-логика не должна зависить от интерфейса, то надобность в проталкивании формы через анус отпала бы сама собой
  1  2  3   

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.