|
Как заполнить ТЗ формы на НаСервереБезКонтекста или нельзя изменять поле, содержащее объект? | ☑ | ||
---|---|---|---|---|
0
ИС-2
naïve
18.05.20
✎
09:20
|
Пытаюсь заполнить ТЗ которая есть на УФ на СервереБезКонтекста. Вылетает с ошибкой "Нельзя изменять поле, содержащее объект данных формы"
Какие есть варианты заполнить таб значений, так чтобы не передавать всю форму на сервер? &НаКлиенте Функция ОтобразитьЦветаНаПанелиКнопкокНаКлиенте(ПараметризированнаяНоменклатураИлиНоменклатура,цветДляОтображения) ... // ЗаполнитьТаблицуДоступныхЦветов выполняется НаСервереБЕЗКонтектеста // НаСервереБЕЗКонтектеста сделано специально для минимизации обмена между клиентом и сервером // я могу вынести полностью код НаСервер, но в этом случае будет большой обмен м/ж клиентом и серверов // суть процедуры - заполнить и вернуть в форму ТЗ_ЦветаИКнопки ЗаполнитьТаблицуДоступныхЦветов(ПараметризированнаяНоменклатура,ТЗ_ЦветаИКнопки); КонецЕсли; ... Конецфункции |
|||
1
Cthulhu
18.05.20
✎
09:29
|
т.е. ты хочешь без контекста получить доступ к части контекста - я правильно понимаю?.. глаз ничего не режет?...
|
|||
2
fisher
18.05.20
✎
09:43
|
Есть недокументированный способ заюзать ТЗ на клиенте (но я его вечно забываю, так как не юзаю). Тогда вероятно можно такое провернуть. Но даже не учитывая этот момент - это оверинжениринг. Не стоит так делать. Платформу допиливают для уменьшения трафика в таких случаях (чтобы не передавались части контекста, которые не менялись). Ты же хочешь это заоптимизировать руками. Городить огород стоит только при наличии реальной проблемы. Да и то, трижды взвесив все за и против на конкретных тестах.
|
|||
3
fisher
18.05.20
✎
09:46
|
Да и толку большого в этом нет. Суммарный трафик это не уменьшит. Ведь рано или поздно тебе придется засунуть эти данные в контекст. А значит, рано или поздно эти данные будут синхронизированы обратно на сервер. И ничего в конечном счете ты не выиграешь.
|
|||
4
dezss
18.05.20
✎
09:57
|
Есть один грязный хак)))
Кажись так это делается. Точно не помню уже, давно не пользовался. ТЗ_ЦветаИКнопки1 = ТЗ_ЦветаИКнопки; ЗаполнитьТаблицуДоступныхЦветов(ПараметризированнаяНоменклатура,ТЗ_ЦветаИКнопки1); КопироватьДанныеФормы(ТЗ_ЦветаИКнопки1,ТЗ_ЦветаИКнопки); |
|||
5
Cthulhu
18.05.20
✎
10:03
|
(4): нет, не так. вот так:
ОписаниеТипа = Новый ОписаниеТипов("ТаблицаЗначений"); ТЗ = Новый(ОписаниеТипа.Типы()[0]); |
|||
6
Cthulhu
18.05.20
✎
10:07
|
(1)+: по любому придется время терять на то, чтобы на клиенте предварительно преобразовать ТЗ на форме в сериализуемый тип данных для передачи его на сервер в параметре - а потом результат из параметра в тз обратно. больше времени потеряешь чем сэкономишь.
|
|||
7
dezss
18.05.20
✎
10:09
|
(5) Сейчас покопался в старом коде.
Именно так, как написано в (4) у нас работало с ТЗ, которая является реквизитом формы. |
|||
8
Василий Алибабаевич
18.05.20
✎
10:14
|
(6) ТЗ на клиенте не существует. Она живет только на сервере. Перед вызовом ЗаполнитьТаблицуДоступныхЦветов ТЗ нужно положить во временное хранилище (на сервере), адрес вернуть на клиента и передать его параметром в ЗаполнитьТаблицуДоступныхЦветов. И все это абсолютно без контекста.
|
|||
9
fisher
18.05.20
✎
10:39
|
(6) Таки да. Не взлетает. Даже если захачить как в (5), то при передаче на сервер ругается про отсутствие отображения типов.
|
|||
10
Cyberhawk
18.05.20
✎
10:40
|
Знач
|
|||
11
fisher
18.05.20
✎
10:49
|
(10) Фига себе! Век живи - век учись.
|
|||
12
fisher
18.05.20
✎
10:55
|
А главное - абсолютно логично и штатно. А я думал, что ДанныеФормыКоллекция вообще никак вне контекста на сервере не получить. У него даже конструктора нет.
|
|||
13
Cthulhu
18.05.20
✎
16:19
|
(7): на форме и так работает. (4) - костыльное создание полнофункциональной ТЗ на клиенте.
(8): иногда лучше жевать чем говорить ну или внимательнее прочитать прежде чем отвечать. 1) и автор и я изначально имеют ввиду ТЗ на форме - которая вопреки вашему категоричному поучению - прекрасно существует на клиенте (да-да. все тут в курсе того, что это "не совсем ТЗ", но именно так она называется) 2) кроме того, на клиенте тоже можно "костылем" создавать полноценную ТЗ - см.(5)+(6). (9): это как раз и есть оно самое - см.(6) - эти данные просто не сериализуются. (10): сам-то пробовал? и что конкретно получилось? |
|||
14
fisher
18.05.20
✎
17:56
|
(13) Я пробовал. Получилось передать на сервер без контекста таблицу на форме в ДанныеФормыКоллекция.
|
|||
15
Cthulhu
19.05.20
✎
00:35
|
(14): ы. https://its.1c.ru/db/v8std#content:636:hdoc
2. Контекстную передачу управления следует использовать в случаях когда: платформа 1С:Предприятие самостоятельно оптимизирует объем передаваемых данных между клиентом и сервером (в обоих направлениях). Прежде всего, это реквизиты формы с табличными документами и коллекции элементов (ДанныеФормыКоллекция, ДанныеФормыСтруктураСКоллекцией, ДанныеФормыДерево). См. также: Использование объекта ДанныеФормыКоллекция. и при этом затраты ресурсов сервера на инициализацию контекста формы оправдываются существенным снижением трафика между клиентом и сервером и снижением числа вызовов сервера. В остальных случаях рекомендуется использовать внеконтекстную передачу управления с клиента на сервер. 3. При передаче управления с клиента на сервер недопустимо использовать объекты типов ДанныеФормыСтруктура, ДанныеФормыКоллекция, ДанныеФормыСтруктураСКоллекцией, ДанныеФормыДерево и ТабличныйДокумент в качестве параметров функции, передаваемых по значению. При передаче таких типов по значению с клиента на сервер всегда передается полная копия объекта, а не только измененные данные. |
|||
16
fisher
19.05.20
✎
09:10
|
(15) > При передаче таких типов по значению с клиента на сервер всегда передается полная копия объекта, а не только измененные данные.
На другое никто и не рассчитывал. Не хватало еще, чтобы только измененные данные прилетели. |
|||
17
ИС-2
naïve
19.05.20
✎
13:15
|
(1) это издержки привычки прогрммировать на обычных формах
(10) знач тоже пробовал, но обратно на клиент измененную форму не вернуло. У меня проблема как вернуть с сервера на клиент ТЗ с измененными данными |
|||
18
palsergeich
19.05.20
✎
13:21
|
(17) Возвращай массив структур, и его уже помещай в ДФК на клиенте.
Азы УФ. |
|||
19
palsergeich
19.05.20
✎
13:21
|
(18) Даже есть ОбщегоНазначения.ТаблицуВМассив
|
|||
20
palsergeich
19.05.20
✎
13:22
|
Но на клиенте уже придется немного потанцевать с бубуном. но и это решается
|
|||
21
sitex
naïve
19.05.20
✎
13:29
|
(17) Честно признаюсь или я не правильно понял вопрос или вообще не чего не понял. Но с клиента передал &НаСервереБезКонтекста в Знач ДанныеФормыКоллекция , там выгрузил и скопировал ТЗ. Изменил что нужно далее в ДанныеФормыКоллекция -> Загрузить(ТЗ) вренул на Клиента и КопироватьДанныеФормы и все данные изменены.
|
|||
22
sitex
naïve
19.05.20
✎
13:32
|
(17) И все эти бессмысленные эксперименты через расширение.
|
|||
23
Cyberhawk
19.05.20
✎
14:12
|
(17) "обратно на клиент измененную форму не вернуло" // Я тебе описал, как избежать ошибки, описанной в нулевом посте. Остальное уже к теме не относится.
|
|||
24
dezss
20.05.20
✎
10:13
|
(17) Да сделай уже как в (4) написано. Проверено, работает.
|
|||
25
ИС-2
naïve
27.05.20
✎
09:30
|
(4) спасибо помогло. Чудеса да и только.
Сейчас другая ерунда. Надо заполнить программно подсказки у 30 кнопок. То, что разработчиков чудесная логика и подсказку они вынесли на уровень команд еще можно им простить (только для чего мне 30 команд). Но, то что подсказка не доступна на клиенте это мягко выражаясь не логично... Как т.к Свойство подсказка недоступно на клиенте, то надо передавать на сервер опять всю форму. Не хочу делать просто на сервере т.к на форме у меня куча таблиц с большим кол-вом строк Можно ли заполнит подсказку команды на серверебезконтекста? |
|||
26
Cyberhawk
27.05.20
✎
09:40
|
(25) "Изменение свойства на клиенте требует обращения к серверу".
Так что как ни крути, а одного серверного вызова не избежать. А какие проблемы заполнить подсказки при создании формы на сервере? |
|||
27
ИС-2
naïve
27.05.20
✎
14:07
|
(26) оно должны формироваться динамически. Взависимости от активной строки динамического списка
|
|||
28
Cyberhawk
27.05.20
✎
14:30
|
(27) Рисуй скрытые элементы и заполняй их заранее данными ДС. Потом уже при активизации строки изменяй видимость - начиная с ~8.3.7 изменение видимости не приводит к серверному вызову, но с оговорками. Возможно так у тебя прокатит.
|
|||
29
Cyberhawk
27.05.20
✎
14:31
|
+(28) Скрытые элементы-подсказки имею в виду в виде собственных декораций, без использования платформенных подсказок
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |