|
Получить форму и объектом пользоваться на УФ, да чтоб пользователь видел. | ☑ | ||
---|---|---|---|---|
0
bolobol
27.04.15
✎
11:58
|
Доброго времени суток!
Подскажите, пожалуйста, по УФ. Необходимо по имеющейся ссылке открыть форму объекта и ещё и менять реквизиты объекта, отображая изменения в форме. Без УФ - эта задача не представляла сложности, но как с УФ?: На клиенте имею ссылку. На сервере получаю объект. Как же форму объекта полученного открыть? |
|||
1
mikecool
27.04.15
✎
11:59
|
открытьформу, смотреть параметры
|
|||
2
GROOVY
27.04.15
✎
12:00
|
Парам = Новый Стркутура;
Парам.Вставить("Ключ", Ссылка); ОткрытьФОрму("Документ.Имя.ФОомаОбъекта", Парам); Все на клиенте. Еще есть ОткрытьЗначение(Ссылка), но что то не работает. |
|||
3
bolobol
27.04.15
✎
12:04
|
Объект-то на сервере, как его на клиент получить?
|
|||
4
mikecool
27.04.15
✎
12:05
|
(3) открой форму, она будет содержать данные объекта, будь мужиком!
|
|||
5
GROOVY
27.04.15
✎
12:07
|
(3) Объект на клиенте не получить, а для открытия формы он нафиг ненужен, нужна ссылка.
|
|||
6
bolobol
27.04.15
✎
12:18
|
Форма документа РТУ получена. Нужно добавить строку в документ. Строка добавляется тогда, когда пользователь на форме жмёт что-то - откуда обратно получить форму?
|
|||
7
AntonH851
27.04.15
✎
13:41
|
(6) Есть объект, открываем на клиенте форму, пользователь жмет кнопку на форме, в документ добавляется строка, форма у нас уже открыта, зачем ее опять получать? Пользователь жмет кнопку не на форме документа?
|
|||
8
bolobol
27.04.15
✎
15:21
|
Пример:
Об1 = Ссылка1.ПолучитьОбъект(); Об2 = Ссылка1.ПолучитьОбъект(); Об1.ТЧ.ДобавитьСтроку(); Итог: Об1.ТЧ.Количество() <> Об2.ТЧ.Количество() А всё с одной ссылки! ------ Получил форму, открыл, жду... пользователь что-то нажал, на открытой форме должна появиться новая строка, которую программно нужно добавить, но объект открытой формы на клиенте мне некуда сохранить, а значит - я его потерял и могу только заново "ОткрытьФорму". Не, ну если это единственный правильный подход... ------ И в открытой форме я только с клиента могу данные править программно? Сбегал за очередным данным на сервер, вернулся, добавил, снова сбегал? Не верю! |
|||
9
DrShad
27.04.15
✎
15:25
|
(8) не ну если очень надо, то извратиться можно, но лучше поменять подход - пусть не форма документа открывается, а некий АРМ ввода наладных
|
|||
10
Garykom
гуру
27.04.15
✎
15:29
|
Прикинь, можно не только открыть форму и реквизиты менять...
но и добавлять/удалять реквизиты у объекта заодно с расположением на форме |
|||
11
Defender aka LINN
27.04.15
✎
15:29
|
(0) ПолучитьФорму
|
|||
12
bolobol
27.04.15
✎
15:45
|
(11) И вам - Здравствуйте! ))
(10) Америка не раскрыта. Мой вопрос только в сохранении объекта, форма которого была открыта. (9) Подхода нет - есть вопрос. Если решение вопроса ограничено технологически, то, как обычно - ответ: нет возможности, патамушта... - меня устроит. |
|||
13
DrShad
27.04.15
✎
15:47
|
(12) возможность есть всегда, но часто она сопряжена со всякого рода извращениями, а по-сему решайте целесообразны ли данные извращения для вас
|
|||
14
bolobol
27.04.15
✎
16:45
|
(13) Чтобы что-то решить - нужен вариант ответа, коего ещё нет
|
|||
15
DrShad
27.04.15
✎
16:46
|
(14) чем (9) не устраивает?
|
|||
16
Defender aka LINN
27.04.15
✎
16:47
|
(14) Ответ тебе уже даден. Лично мной лично в руки.
|
|||
17
DrShad
27.04.15
✎
16:50
|
(16) а сам пробовал? в контексте сабжа?
|
|||
18
bolobol
27.04.15
✎
16:59
|
(16) А ты смешной) Как "на сервере" в объект открытой формы добавить строку в ТЧ? "ОткрытьФорму"? ))
(15) В (9) не ответ, там предложение что-то поменять. Вопрос до "поменять" ещё не дошёл. Истина где-то рядом, но ещё не нашюпал(проверочное слово парашют). |
|||
19
DrShad
27.04.15
✎
17:01
|
(18) там то как раз ответ и утверждение что будет сопряжено с извращениями
|
|||
20
Defender aka LINN
27.04.15
✎
22:35
|
(17) Пробовал
(18) Купи у ДенисЧ СП, а я тебе за отдельные деньги буду оттуда цитаты рассказывать. За еще более отдельные - еще и комментировать. |
|||
21
Котокот
27.04.15
✎
22:51
|
(8) РеквизитФормыВЗначение("Объект") - получаешь объект документа, делаешь на нем все что хочешь на сервере программно, потом обратно ЗначениеВРеквизитФормы.
|
|||
22
DrShad
27.04.15
✎
23:35
|
(21) это в пределах одной формы, а когда у человека несколько форм одного объекта одновременно
|
|||
23
AntonH851
28.04.15
✎
04:57
|
(22) Есил несколько форм открыто у одного пользователя в одном сеансе, то может Оповестить() подойдет?
|
|||
24
Cyberhawk
28.04.15
✎
05:26
|
Все не читал, но может http://catalog.mista.ru/public/236382/ поможет
|
|||
25
rphosts
28.04.15
✎
06:51
|
(0) в УФ эта задача не представляет сложности, начинайте курить УФ.
|
|||
26
Fedor-1971
28.04.15
✎
09:12
|
(8) по ходу происходит следующее:
Об1 = Ссылка1.ПолучитьОбъект(); - Об1=новый Объект(Ссылка1); Об2 = Ссылка1.ПолучитьОбъект(); - Об2=новый Объект(ссылка1); т.е в памяти создаются два разных объекта, заполненных данными из Ссылка1, потому при добавлении строки в один из них и получается Об1.ТЧ.Количество() <> Об2.ТЧ.Количество(), поскольку ты добавил строку в один из объектов. К стати, от вида форм это не зависит. |
|||
27
Fedor-1971
28.04.15
✎
09:22
|
26+ Касательно остального:
Пользователь "что-то нажал" - что? Кнопку - есть обработчик нажатия в нём и делай с формой что тебе нужно. Если пытается добавить строку в ТЧ, опять же события ТЧ ПередДобавлением и делай всё что тебе вздумалось. По поводу беготни Клиент-Сервер-Клиент: ты всё равно не сможешь полностью рулить этим процессом, да и собственно незачем. Реализуй логику работы в терминах "Открыта форма нужно сделать в ней вот это", а не в "Я что-то подтянул и хочу оное предложить пользователю для работы под моим контролем" - инструмент один и тот же Форма, но ты пытаешься ею рулить вместо 1С, дай платформе дышать и она тебя отблагодарит, а будешь её сильничать, она тебе ответит Большими глюками. |
|||
28
bolobol
28.04.15
✎
15:44
|
По сути вопроса-то есть что сказать?
|
|||
29
bolobol
28.04.15
✎
15:46
|
(23) Оповестить() - кого и о чём?
(24) Там про открытие формы разного рода. Про работу с объектом открытой формы на сервере - ни слова. А ссылочку-то я себе сохраню))) Спасибо! |
|||
30
AntonH851
28.04.15
✎
16:12
|
(29) В форме, которая меняет данные вызываешь функцию Оповестить() а в остальных, которые нужно обновить пишешь обработчик ОбработкаОповещения()
|
|||
31
Fedor-1971
28.04.15
✎
18:11
|
(28) По сути какого вопроса?
Попробуй понять различие: 1 Объект в БД, т.е., например, документ он живёт только на сервере 2 Объект Формы - какое-то представление Объекта из п.1 в объект под названием ДанныеФормы и он живёт и на сервере и на клиенте, собственно и изменяется в обеих местах как программно так и интерактивно, при записи сохраняется в объект из п.1. По началу на УФ это различие вызывало путаницу, вроде открываешь разные формы одного и того же документа и ожидаешь увидеть текущее состояние, а данные в них разные. В плане прояснения работы УФ есть книга "Разработка управляемого интерфейса", достаточно нормально описаны УФ. |
|||
32
bolobol
28.04.15
✎
19:02
|
(31) У меня этот вопрос уже есть. Как раз из-за описанного "различия".
Именно из-за описанного различия, когда доступ к объекту требуется иметь и на клиенте и на сервере, придумали временное хранилище и навигационные ссылки, например. Придумали "ЗначениеВ Реквизит или Данные Формы". Но куда сохранить открытую форму объекта между сессиями связи с ней из другой формы? И как передать сие на Сервер, как контекст собственной формы передаётся... Чтобы воспользоваться, например: "РеквизитФормыВЗначение("МноюОткрытаяЛеваяФорма.Объект")" |
|||
33
bolobol
28.04.15
✎
19:03
|
(30) Не могу в конечном объекте править. Разве что потом вызвать ему что-то типа "МноюОткрытаяЛеваяФорма.ОбновитьДанныеНаФормыИзменённыеСерверомВОбъектеФормы"...
|
|||
34
Fragster
гуру
28.04.15
✎
19:05
|
вообще вот это "нельзя менять объект данных формы" и костыль СкопироватьДанныеФормы бесит, если честно
|
|||
35
Fragster
гуру
28.04.15
✎
19:11
|
Если Элементы.ТаблицаСДанными.ТекущаяСтрока <> Неопределено Тогда
КопироватьДанныеФормы(ЗагрузитьТаблицуРасшифровки(ТаблицаРасшифровки, Элементы.ТаблицаСДанными.ТекущиеДанные.ПараметрДляРасшифровки), ТаблицаРасшифровки); КонецЕсли; |
|||
36
bolobol
28.04.15
✎
19:26
|
(35) Оп-па... Я такое впервые вижу. Это чтобы... для чего такое?, не пойму.
|
|||
38
Fragster
гуру
28.04.15
✎
19:32
|
(36) ну короче, получаешь форму, передаешь Форма.Объект в серверную процедуру. получаешь болт ("нельзя менять объект данных формы"). Добавляешь у параметра процедуры Знач. Всё вроде работает, но получаешь болт (сам объект не меняется, хотя при такой же работе, но БЕЗ перехода клиент-сервер по ссылке объект меняется). Тогда ты переделываешь процедуру на функцию, примерно так:
Функция Парам(Знач ДанныеФормыТвоей) Объект = ДанныеФормыВЗначение(); Тут мы меняем Объект Возврат ЗначениеВДанныеФормы(Объект); КонецФункции И уже результат этой функции запихиваешь с помощью КопироватьДанныеФормы в свою ОткрытаяФорма.Объект ну, или еще куда там тебе надо (в моем случае - в реквизит формы таблицу значений) Проклинаешь разработчиков УФ за костыли вместо нормального программирования |
|||
39
Fragster
гуру
28.04.15
✎
19:37
|
а всё ради неконтекстного вызова. ну, или если контекст - не тот (как в случае с открытой формой) :)
|
|||
40
DmitrO
28.04.15
✎
19:38
|
(38) тут суть в том что платформу они написали так что на сервере в одном потоке выполнения всегда может быть только одна форма.
|
|||
41
Fragster
гуру
28.04.15
✎
19:40
|
(40) ну так пусть там будет ДРУГАЯ форма. Почему в &НаСервереБезКонтекста нельзя передать, а потом вернуть реквизит формы - таблицу значений?
|
|||
42
DmitrO
28.04.15
✎
19:41
|
Т.е. сервер в одном потоке кода может обслуживать контекст только одной формы
Почему так сделано не понятно на самом деле, но это действительно не удобно. |
|||
43
Cyberhawk
28.04.15
✎
19:42
|
(38) Я правильно понял, что:
- если на клиенте менять Форма.Объект, то будет профит сразу же и заморачиваться не надо - если на сервере менять Форма.Объект, переданный туда по значению, то потом после этого на клиенте нужно обновить Форма.Объект через КопироватьДанныеФормы ? |
|||
44
Fragster
гуру
28.04.15
✎
19:42
|
(43) что-то типа того
|
|||
45
Fragster
гуру
28.04.15
✎
19:43
|
(42) почему так, как в (38) надо извращаться, если тебе надо поменять что-то из контекста, но ты не хочешь гнать на сервер весь контекст, а только нужные объекты?
|
|||
46
Fragster
гуру
28.04.15
✎
19:44
|
(43) еще ты забыл про лучики любви в сторону разработчиков платформы
|
|||
47
Fragster
гуру
28.04.15
✎
19:46
|
еще, например, бесит то, что у объекта есть обработчик заполнения, но нельзя открыть форму документа с переданным параметром в обработку заполнения. Надо сделать как в (38) и на сервере вызвать "Заполнить(Параметр)". Ну и обработчик заполнения будет вызван два раза - для пустого значения, и уже для нужного.
|
|||
48
Fragster
гуру
28.04.15
✎
19:48
|
но зато у формы есть параметр "ЗначенияЗаполнения", который по именам заполняет элементы формы...
|
|||
49
DmitrO
28.04.15
✎
19:50
|
(45) да потому что все объекты типа данные формы это хитроzhoпые объекты которые могут иметь лишь частичную передачу на клиента в данный момент (как заявляется), а в полном составе они живут только на сервере.
|
|||
50
Fragster
гуру
28.04.15
✎
19:50
|
(48)+ почему было не сделать единообразно? Нужные значения у элементов формы не сложно и руками заполнить, а вот вызвать обработку заполнения с нужным параметром при создании формы - вполне себе полезная функция.
|
|||
51
Fragster
гуру
28.04.15
✎
19:53
|
(49) не так. контекст формы живет на клиенте, но может содержать не все данные формы. На сервер он приезжает в полном составе в момент контекстного вызова, и уезжает обратно при его завершении.
Состав контекста меняется только на сервере в момент изменения/применения настроек формы, например. |
|||
52
Fragster
гуру
28.04.15
✎
19:54
|
из-за этого очень криво реализуются всякие прогресс-бары - надо либо пихать весь контекст, либо изголяться
|
|||
53
Fragster
гуру
28.04.15
✎
19:56
|
хотя казалось бы - реализовать асинхронную модель на сообщениях с эмуляцией однопоточности через блокирование интерфейса. С сервера всякие "Состояние" и "Сообщить" шли сколько угодно, и сразу отображай на клиенте...
|
|||
54
Fragster
гуру
28.04.15
✎
19:56
|
а та асинхронность, которая сейчас делается - это ужас же.
|
|||
55
DmitrO
28.04.15
✎
20:38
|
(54) это да. И какие только умники решили что все всегда в браузере это хорошо. Лишь на том основании что браузер это везде.
|
|||
56
bolobol
29.04.15
✎
15:18
|
Мысль, кагбэ, уловил, понимаю одно - это надо тестировать-пробовать. А там уже более конкретные вопросы, может, появятся.
Спасибо! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |