Управляемые формы - это по сути веб-приложение. Верно?
Меня заинтересовал "теоретический" вопрос.
Хочется лучше понять и разобраться с "внутренней" структурой (архитектурой), на основе которой построено это 1С-веб-приложение (управляемая форма).
На какой веб-архитектуре реализована работа управляемых форм?
В чем отличие управляемых форм от веб-приложения?
Ведь у УФ есть клиент и есть сервер. По сути это очень похоже на веб-приложение, в котором есть клиентская часть (браузер + фронт-енд) и серверная часть (бэк-енд).
Ведь у УФ есть клиент и есть сервер. По сути это очень похоже на веб-приложение, в котором есть клиентская часть (браузер + фронт-енд) и серверная часть (бэк-енд).
Ложная аналогия подобна котенку с дверцей.
Вот у тебя есть SQL сервер и Management Studio. Ну или Oracle и SQL Developer. Клиент-сервер? Клиент-сервер, да еще какой. Веб-приложение что ли?
Вот у тебя есть SQL сервер и Management Studio. Ну или Oracle и SQL Developer. Клиент-сервер? Клиент-сервер, да еще какой. Веб-приложение что ли?
Я готов согласиться с тем, что УФ это не клиент-сервер.
Но хотел бы услышать аргументы.
Как внутри "устроено" взаимодействие клиентской и серверной части УФ? По каким критериям УФ отличается от веб-приложения?
Вот когда будет понимание по этим вопросам, тогда можно будет судить чем является УФ.
Думаю, что понимание "внутреннего" устройства УФ поможет правильно использовать и писать код.
Кривое и косое нечто, которое научились как-то с горем пополам тренслировать в тонкий клиент и вебку. В вебке 1С-ный язык транслируется в джаваскрипт, ну или может намутили онлайн-интерпретатор на вебасме, но что-то сомневаюсь.
Суть УФ - данные форм вместо таблиц и прочих серверных штук. Они в контекстных вызовах перемещаются между клиентом и сервером, чем доставляют пользователям неудобства ожиданием. Совсем дикие 1С-неги умудряются сто раз сервер дернуть за один клиентский вызов, чем еще сильнее неудобствами портят жись пользователей, но "опытные" ловят лулзы на этом, заморачиваясь часто куда больше, чем следовало бы. Наверное в целом это все, что можно знать про УФ.
В вебке 1С-ный язык транслируется в джаваскрипт, ну или может намутили онлайн-интерпретатор на вебасме, но что-то сомневаюсь.
Ну теперь включай свою бурную фантазию и выдумывай объяснения как оно работает с клиентскими модулями, поставляемыми без исходного кода, сомневающийся.
Ну значет там на джаваскрепте напилено что-то типа интерпретатора байт-кода, как в мобильном приложении. Может в вебасм скомпилили, о чем я выше, кстати, говорил, хоть и с сомнениями (до сих пор сомневаюсь, т.к. в вебасме джамп есть, а в 1С-е его из веб-клиента выпилили).
PS:
В языке JavaScript имеется возможность помечать инструкции именами, благодаря чему в операторах break и continue можно явно указывать, к какому циклу или к какой другой инструкции они относятся.
(29) Так если бы и ты не был ленивым, то прочитал бы это:
Реализация всего вышеописанного на JavaScript – дело непростое. Возможно, веб-клиент 1С – одно из самых больших client-side приложений, написанных на JavaScript – около 450.000 строк. Мы активно используем в коде веб-клиента объектно-ориентированный подход, упрощающий работу с таким большим проектом.
О чем, собственно,, я и говорил.
ЗЫ: статья 16-го года - 8 лет назад. 1С ничего не поменяла? Вряд ли. Так что статья устаревшая.
(31) И что тебя так обрадовало? То, что я изначально говорил, что они транслятор или интерпретатор написали на джаваскрипте? Или ты первое сообщение прочитал на тот 1%, который не попал в прочитанную тобой статью, написанную 8 лет назад? Прям вот чувствуется этодроугинчик с либеральным следом.
(1) Есть статья "Как работает серверный вызов в 1С" – https://infostart.ru/1c/articles/682305/ для описания работы управляемой формы тоже подходит. Там используется хорошая аналогия с выдачей книг в библиотеке.
Есть статья "Как работает серверный вызов в 1С"....
Хорошая статья, спасибо.
Там описывается клиент-серверное взаимодействие на "высоком уровне".
Кроме этого, меня интересует еще и "внутреннее" устройство управляемой формы, то есть более подробное взаимодействие на более низком уровне.
Например, в этой статье никак не отражен тот факт, что форма присутствует и на стороне клиента и на стороне сервера.
Хотелось бы увидеть описание\схему, которая подробнее раскрывает взаимодействие этих двух "частей" управляемой формы, а также другие подробности.
(5) Да, 1С скрывает низкоуровневое устройство клиент-серверного взаимодействия УФ, но оно и не нужно. Достаточно концептуально понимать как управляемая форма работает и следовать стандартам. Например, минимизировать количество серверных вызовов, использовать бесконтекстные вызовы там, где это возможно.
форма присутствует и на стороне клиента и на стороне сервера.
На стороне сервера она присутствует только в момент серверного контекстного вызова.
На стороне сервера она присутствует только в момент серверного контекстного вызова.
Управляемая форма имеет данные, которые недоступны на клиенте, но доступны при серверных вызовах.
Кроме того, она "умеет" отслеживать изменения в данных, чтобы при серверном вызове передавать только изменения.
Чтобы эти два пункта можно было реализовать, для этого (мне кажется) на сервере нужно хранить какие-то данные. Получается, что на сервере все-таки есть "что-то", связанное с открытой формой.
Скорее всего, какие-то данные формы хранятся на сервере.
Управляемая форма имеет данные, которые недоступны на клиенте
Хорошо, какие это данные. Давайте их озвучим. Кроме ПутьКДанным элемента формы не могу вспомнить.
Кроме того, она "умеет" отслеживать изменения в данных
Вот это мы не знаем наверняка. Это как раз низкий уровень, в который 1С нам не советует лезть. Да, там есть оптимизация миграции данных клиент → сервер: вроде бы не все данные с клиента уходят на сервер, а только те, которые используются в серверном вызове (не помню уже где это читал, но больше похоже на домыслы). Безусловно, на сервере "что-то" остается после серверного вызова, это подтверждает практика, но концептуально мы должны исходить из того, что после серверного вызова на сервере ничего нет. Отталкиваться нужно от этого, так как встроенный язык не предоставляет никаких возможностей найти серверный контекст формы вне ее собственного вызова.
Просто игнорируйте это знание, считайте, что, когда управление переходит на клиент, сервер ничего не хранит о форме (кроме УИД, конечно).
(13) это Объект (СправочникОбъект, ДокументОбъект и т.д.) удаляется после создания формы на сервере и создается вновь при записи.
Серверная форма живет пока жива форма.
Пример данные, не доступные на клиенте, которые хранит только северная форма: Реквизит формы типа "ДокументОбъект" и т.д.
Данные в элемент ТаблицаФормы могут подгружаться на клиент. Именно по этому не рекомендуется использовать на клиент НайтиСтроки.
Пример данные, не доступные на клиенте, которые хранит только северная форма: Реквизит формы типа "ДокументОбъект" и т.д.
Объясните подробнее, что такое ДокументОбъект в контексте УФ и почему по-вашему, он доступен только на сервере? Это про прикладной объект? – нет, он не существует вне вызова. И какой вообще смысл хранить что-то на сервере, если на клиенте всё может сильно поменяться?
Особенности работы формы с данными
Любая управляемая форма предназначена для отображения и изменения некоторых данных. Такие данные, как правило, хранятся в реквизитах формы. Совокупность этих данных (значения реквизитов формы) называется данными формы.
Т.к. данные формы доступны и на клиенте и на сервере, то основным хранилищем всех данных выступает сервер, просто потому что взаимодействие клиента и сервера инициируется только с клиента. Это означает, что в момент работы в памяти сервера находятся все данные формы, и доступ к ним осуществляется напрямую. На клиенте же имеется в общем случае частичное представление этих данных, при необходимости подгружаемое с сервера. При дальнейшей работе с формой изменения данных могут передаваться туда и/или обратно для синхронизации состояний клиента и сервера.
Для табличных частей, алгоритм работы платформы другой – изначально передается только часть строк. Далее, при обращении к остальным строкам табличных частей, они будут постепенно подчитываться с сервера. Это значит, что при открытии формы все подготовительные действия с табличными частями желательно производить на сервере. Если же аналогичные действия мы попытаемся выполнить на клиенте, то это приведет к тому, что все данные табличной части будут переданы на клиента, хотя они не требуются для отображения в форме.
(20) Хорошо, вот из приложенных цитат можно сделать вывод, что данные формы хранятся на сервере, пока форма ничего не делает? Если ответ "Да", какие возможности это вам даёт?
UPD: я в курсе, что сервер в некотором роде сохраняет версию/кеш формы, но для программирования эта информация ничтожна.
(21) а это тут причем? Об этом ничего и не было сказано.
Она как минимум хранит данные, которых нет на клиенте. Тот же СправочникОбъект. Да и доступный на клиенте реквизит формы, но который не вынесен на форму и не включен флаг "использовать всегда". Но, которые могут понадобиться для вычислений на сервере.
(22) К сожалению, пока не могу проверить. Но я уверен, что серверный вызов не создает прикладные объекты, соответствующие реквизитам формы. Я признаю, что сервер, что-то хранит, вне вызова, но это низкоуровневая оптимизация, от которой нам, как программистам, ни холодно ни жарко.
(23) да. тут может быть путаница из-за терминологий.
Что такое серверная форма? Если под ней понимать Данные формы, то именно так и происходит, как я описывал.
Если под ней понимать разметку для создания клиентской разметки, то это возможно и не хранится на сервере. Но про это я не скажу.
Среда существования формы
Форма существует и на сервере, и на клиенте. Связь элементов формы с данными информационной базы осуществляется с помощью реквизитов формы (данные формы). Все данные, которые планируется отображать или редактировать в форме, должны быть обязательно описаны в виде реквизитов.
Процесс создания и открытия формы, отображающей объектные данные (у формы определен основной реквизит), выглядит так:
Объект считывается из базы данных на сервере.
Объект конвертируется в данные формы (создание формы на сервере).
Объект удаляется из памяти.
Данные формы передаются на клиент (создание формы на клиенте).