![]() |
![]() |
![]() |
|
Тонкий клиент. Где хранятся данные реквизитов формы? | ☑ | ||
---|---|---|---|---|
0
Lex_Liven
08.05.12
✎
08:35
|
Создаю форму в тонком клиенте, создаю реквизит формы типа "ТаблицаЗначений".
Где хранятся данные этой таблицы? На клиенте или на сервере? Если я делаю поиск в этой таблице, происходит два вызова сервера (видно в информационном окошке) с довольно большой задержкой. Это нормально? |
|||
1
vmv
08.05.12
✎
08:44
|
в памяти
|
|||
2
Lex_Liven
08.05.12
✎
08:46
|
(1) Да вы что! А я-то думал, что в мышке!
В памяти сервера или клиента? |
|||
3
vmv
08.05.12
✎
08:48
|
(2) и в памяти сервера и в памяти клиента, ведь экземляров формы как раз два - на сервере и на клиенте.
давай драцца, а то скучно - все бухие, а я даже не подлечился |
|||
4
Lex_Liven
08.05.12
✎
08:50
|
(3) Тогда вторая часть вопроса.
При поиске строки два вызова сервера. Обмен данными? Зачем, если я выполняю только поиск, без изменения данных, причем в процедуре &НаКлиенте? И откуда задержка в 2-3 секунды, если в таблице чуть больше ста строк на 10 колонок? |
|||
5
vmv
08.05.12
✎
09:08
|
(4) не ври мне, Метод НайтиСтроки() типа "ТаблицаЗначений" в режиме тонкого клиента может быть выполненен только в вызове серверного метода.
я полагаю, что задержка инициализации указанного метода вызвана смещение ващего пространственно-временного континниума, который обусловлен физическим расположением сервера около массивной черной дыры - будь осторожен |
|||
6
vmv
08.05.12
✎
09:12
|
ну или выражайся грамотно, например так
"Я выполняю поиск посредством метода НайтиСтроки() относительно ДанныеФормыКоллекция и очень негодую по поводу вызова сервера - памагити" |
|||
7
experimentator76
08.05.12
✎
10:47
|
(0) всю работу надо максимально реализовывать на сервере
найтистроки() на клиенте работает медленно в идеале сделать поиск строк и обработку поиска на сервере еще идеальнее если не требуется обработка таблицы обратиться к ней запросом |
|||
8
Lex_Liven
08.05.12
✎
10:51
|
(5) не вру
&НаКлиенте Процедура ПриИзмененииЭлементаФормы(Элемент, Знач АвтоОпределениеСотовогоПровайдера = Ложь) Отбор = Новый Структура("ИдПровайдера",ВыбПровайдер); Если ТабПровайдеров.НайтиСтроки(Отбор).Количество()>0 Тогда СтрокаПоискаТЗПровайдеров = ТабПровайдеров.НайтиСтроки(Отбор)[0]; КонецЕсли; <...> КонецПроцедуры; (7) у меня обратная задача - максимально вынести данную обработку на клиент, чтобы к серверу обращалось только за созданием документа. |
|||
9
experimentator76
08.05.12
✎
10:52
|
(8) у него бодун
|
|||
10
experimentator76
08.05.12
✎
10:53
|
(8) так у тебя два раза обращение и идет
а так как требуются актуальные данные то видимо идет обращение к серверу два раза |
|||
11
Lex_Liven
08.05.12
✎
10:54
|
(9) он же сказал "давай драцца". Вот я и машу, чем могу. В данном случае - кодом.
Кстати, если данный фрагмент воняет - можете подсказать, не обижусь :) |
|||
12
experimentator76
08.05.12
✎
10:54
|
неоптимально
тебе отлично подойдет запрос к ТЗ на сервере с возвратом результата серверной функции |
|||
13
experimentator76
08.05.12
✎
10:56
|
хотя что там за <...> ?
|
|||
14
Lex_Liven
08.05.12
✎
10:57
|
(13) там уже вывод данных и обработка других случаев
Если Элемент=Элементы.Поле3 Тогда ... |
|||
15
experimentator76
08.05.12
✎
10:59
|
(11) хотя бы так
Отбор = ТабПровайдеров.НайтиСтроки(Новый Структура("ИдПровайдера",ВыбПровайдер)); Если Отбор.Количество()>0 Тогда СтрокаПоискаТЗПровайдеров = Отбор[0]; КонецЕсли; |
|||
16
experimentator76
08.05.12
✎
11:02
|
(14) то есть по сути именно СтрокаПоискаТЗПровайдеров как строка ТЗ не используется ?
тогда если нужны данные из строки на чтение то оптимально запрос на сервере к ТЗ и возврат полученного результата то есть еще раз - максимально все обработчики данных делать на сервере |
|||
17
Lex_Liven
08.05.12
✎
11:04
|
(15) Разница, я так вижу, только в том, что структура Отбор не создается и не хранится в памяти.
(16) Ой мама... Я попробую, но таких вызовов в обработке уйма, пересмотреть все займет время. Не теряйте меня и, желательно, не теряйтесь сами. |
|||
18
experimentator76
08.05.12
✎
11:05
|
"у меня обратная задача - максимально вынести данную обработку на клиент, чтобы к серверу обращалось только за созданием документа."
в контексте 8.2 гоонокод получается, извини ты ж сам видишь что все равно одноэс обращается на сервак за актуализацией данных так что придется делать как рекомендует сама одноэс то есть все на сервак |
|||
19
experimentator76
08.05.12
✎
11:07
|
(17) разница еще в том что ты ищешь строки ТОЛЬКО ОДИН раз - это оптимально
придется пересмотреть ПОДХОД - иначе в контексте 8.2 будет сложно переучиваться я это наблюдаю на коллеге который застрял в 8.1 )) у него в голове только толстый клиент |
|||
20
vmv
08.05.12
✎
11:08
|
(16) с какого перепугу нагибать сервер если это данные исключительно формы, Тз - чисто виртуальная сущность представленная на форме, хрена соваться с ней на сервак без острой необходимости, просвети.
Агрумент, мол, НайтиСтроки() для данных формы коллекции работает медленно - ваще неадекватен, ога) |
|||
21
experimentator76
08.05.12
✎
11:08
|
если вызов к той же ТЗ то вообще все можно одним запросом реализовать
в разумных рамках помогу но если надо переписывать всю конфу то это дорого )) |
|||
22
Lex_Liven
08.05.12
✎
11:09
|
А какая разница "&НаСервере" и "&НаСервереБезКонтекста"?
Когда лучше использовать один и когда второй? |
|||
23
vmv
08.05.12
✎
11:09
|
(19) ты я вижу здорава переучился и лихо насмотрелся г-кода в первых типовых на УФ, какого-только бреда там не встретишь)
|
|||
24
Lex_Liven
08.05.12
✎
11:10
|
Вот сейчас пишу функцию, которая получит из ТЗ данные строки и передаст мне, как структуру.
Мне нужен контекст? |
|||
25
vmv
08.05.12
✎
11:10
|
в методы с директивой
НаСервереБезКонтекста выносят аглоритмы которым не нужны данные формы, пример расчет факториала) |
|||
26
experimentator76
08.05.12
✎
11:11
|
(20) это ты неадекватен) а только на днях подобное обращение переписывал из-за тормозов
|
|||
27
Lex_Liven
08.05.12
✎
11:12
|
(25) Например вот эти три я точно могу без контекста делать, так? ДатаСервера = функция глобального модуля.
&НаСервереБезКонтекста Функция ДатаСервераТК() Возврат ДатаСервера(); КонецФункции //ДатаСервераТК &НаСервереБезКонтекста Функция ЗначениеИзСтрокиВнутрТК(Значение) Возврат ЗначениеИзСтрокиВнутр(Значение); КонецФункции &НаСервереБезКонтекста Функция ЗначениеВСтрокуВнутрТК(Значение) Возврат ЗначениеВСтрокуВнутр(Значение); КонецФункции |
|||
28
vmv
08.05.12
✎
11:13
|
(26) попахивает кривым проектированием тогда)
|
|||
29
experimentator76
08.05.12
✎
11:14
|
(22) в идеале всегда насерверебезконтекста и передавать нужное параметрами процедуры\функции - ЭТО ОПТИМАЛЬНЕЕ
просто насервере - когда тебе надо передать весь контекст формы по каким-то причинам (чаще от лени)) форма есть на сервере и на клиенте - между ними качаются ее данные |
|||
30
fisher
08.05.12
✎
11:15
|
(0) По-хорошему - ненормально.
(22) Всегда, когда возможно - второй (когда нет работы с данными формы напрямую). Тогда идет "легкий" серверный вызов без прогонки синхронизации данных формы. |
|||
31
experimentator76
08.05.12
✎
11:15
|
(23) мало ориентировался на типовые ибо когда начинал сыро там было
все по книжкам и методами проб\ошибок в книжках кстати рекомендации и были |
|||
32
experimentator76
08.05.12
✎
11:17
|
(24) пригодится
|
|||
33
experimentator76
08.05.12
✎
11:18
|
(28) ну дык не без этого)) сам насгал - сам убрал)
|
|||
34
experimentator76
08.05.12
✎
11:19
|
когда начинал некоторые места переписывал по десять раз пока не понял как именно надо
|
|||
35
experimentator76
08.05.12
✎
11:20
|
(27) а дата сервера что делает?
|
|||
36
fisher
08.05.12
✎
11:21
|
(30) + Хотя вру. Это нормально, ибо фича документирована: "Вызов метода выполняет обращение к серверу."
|
|||
37
experimentator76
08.05.12
✎
11:22
|
(30) аха вот чувствуется опыт)
у меня недавно вот с этими строками на клиенте тормоз получился всего на паре сотен строк вроде бы тоже - пустяк |
|||
38
experimentator76
08.05.12
✎
11:23
|
(27) если насерверебезконтекста работает без ошибок то можно применять ))
|
|||
39
fisher
08.05.12
✎
11:24
|
(37) Я не про опыт, а про то, как это должно быть в идеале. Поиск в клиентской структуре на стороне клиента не должен вести к серверным вызовам. Но раз документировали, то ладно :)
|
|||
40
Lex_Liven
08.05.12
✎
11:26
|
(27) (35) Тупо получает текущую дату на сервере, чтобы послать умников, переводящих часы на клиенте.
&НаСервере Функция ДатаСервера() Экспорт Возврат ТекущаяДата(); КонецФункции Ее приходится вызывать по цепочке: на клиенте ДатаСервераТК() на сервере в форме - уже ДатаСервера() |
|||
41
experimentator76
08.05.12
✎
11:28
|
(40) если дата нужна для документа при создании то присваивай в процедуре присозданиинасервере
сэкономишь на вызовах сервера |
|||
42
Lex_Liven
08.05.12
✎
11:28
|
Можете сэкономить время на поиск, как в запросе обратиться к реквизиту формы?
ВЫБРАТЬ | * |ИЗ | ТабПровайдеров //?????????????? |ГДЕ | ИдПровайдера = &Ид |
|||
43
experimentator76
08.05.12
✎
11:29
|
(39) это было бы идеально да
но мы живем в одинэсе ) |
|||
44
Lex_Liven
08.05.12
✎
11:29
|
(41) она тогда и вызывается. там еще нужно несколько вызовов, я ее для примера привел.
|
|||
45
fisher
08.05.12
✎
11:29
|
(42) Окстись. Запросы, они к БД. Можно, конечно, во временную таблицу загнать. Но зачем??
|
|||
46
experimentator76
08.05.12
✎
11:30
|
(44) для чего нужны другие вызовы ?
|
|||
47
Lex_Liven
08.05.12
✎
11:31
|
(46) Для передачи даты налево. Это обработка по приему платежей в ОСМП. Это не так важно, забейте.
|
|||
48
experimentator76
08.05.12
✎
11:31
|
(45) учится человек)
(42) во временную заворачивай реквизит скорее всего выгрузить надо будет в параметр запроса |
|||
49
Lex_Liven
08.05.12
✎
11:33
|
(48) реквизит типа ТаблицаЗначений на сто строк - в параметр запроса длиной в пять строк???
Я начинаю сомневаться в такой оптимизации. |
|||
50
experimentator76
08.05.12
✎
11:33
|
(47) ну я учусь в общем-то вместе с тобой) только учусь переваривая подходы других людей
когда бывает мозг замыливается чужие подходы иногда полезны весьма )) |
|||
51
experimentator76
08.05.12
✎
11:34
|
(49) не сомневайся - делай )
|
|||
52
experimentator76
08.05.12
✎
11:35
|
такой подход позволит безболезненно пережить расширение нагрузки в десятки раз
не на этой базе так на других к которым ты приложишь руку не живи одним днем ) |
|||
53
fisher
08.05.12
✎
11:36
|
(52) О да. Перегрузка туда-сюда сотен тысяч строк - чудеса масштабирования.
|
|||
54
experimentator76
08.05.12
✎
11:37
|
впрочем дело хозяйское - я показал уже в (15) как уменьшить расходы вдвое )
в 8.2 надо быть плюшкиным в кубе ) |
|||
55
experimentator76
08.05.12
✎
11:38
|
(53) у меня уже такая ситуация - на момент внедрения не планировался бурный рост количества заказчиков
сейчас лезу в более чем годичный свой код с оптимизациями ) |
|||
56
experimentator76
08.05.12
✎
11:38
|
понимая что сейчас бы переписал все иначе совершенно
|
|||
57
fisher
08.05.12
✎
11:40
|
(55) Я о том, что для локального поиска в таблице значений по простым критериям - глупо использовать временные таблицы. Если упрется в производительность - индексы добавит и всё. Это гораздо более правильное и масштабируемое решение будет.
|
|||
58
vmv
08.05.12
✎
11:41
|
(53) сервак же резиновый и все сделает - у него голова большая.
это ж в каких книжках рекомендуют такую чушь? |
|||
59
experimentator76
08.05.12
✎
11:41
|
(57) меня бесит что просто Найти похерили на клиенте
вот ее бы могли бы оставить + без обращения к серверу |
|||
60
experimentator76
08.05.12
✎
11:42
|
(57) для локального поиска Сtrl+F ))
|
|||
61
Lex_Liven
08.05.12
✎
11:43
|
странная полемика пошла.
А давайте каждый напишет, как он бы переделал фрагмент (8) и разберем код каждого? |
|||
62
experimentator76
08.05.12
✎
11:43
|
тут я думаю автору надо другое - он же писал что структуру с данными будет получать
|
|||
63
fisher
08.05.12
✎
11:44
|
(59) Велика беда. Для легких поисков можно и без него обойтись - тупым обходом.
Я тяжелые поиски сам бог велел на сервер выносить. |
|||
64
experimentator76
08.05.12
✎
11:44
|
(58) для хорошего сервака плевое дело
|
|||
65
experimentator76
08.05.12
✎
11:44
|
(61) извини - это дорого )
|
|||
66
Lex_Liven
08.05.12
✎
11:45
|
(62) автор я.
У меня есть таблица с 20-ю полями. Мне нужно найти в ней одну строку и получить все значения полей из нее. |
|||
67
fisher
08.05.12
✎
11:45
|
(64) Вот только не надо тогда лапшу на уши вешать про масштабируемость, если вся твоя масштабируемость упирается в железо, которое сроет все твои косяки.
|
|||
68
experimentator76
08.05.12
✎
11:46
|
(63) ну нафиг - циклы это отрыжка какая-то
хотя... если именно сэкономить сервер |
|||
69
fisher
08.05.12
✎
11:47
|
(66) Если речь о сотне строк и перебор не ведет в серверным вызовам (я просто в УФ не настоящий сварщик) - я бы просто перебрал на клиенте. Должно быть очень быстро, если 1С еще где-то не потоптались.
|
|||
70
experimentator76
08.05.12
✎
11:48
|
(66) по быстрому (15) - на будущее - запрос
хз какие в будущем условия будут - в найти ты только равенства можешь отобрать |
|||
71
experimentator76
08.05.12
✎
11:49
|
(67) нет блин - надо всю работу на клиент переложить причем с голимой встроенной синхронизацией с серваком
+ еще за вариант с обходом в цикле надо сразу к стенке по хорошему ставить )) |
|||
72
vmv
08.05.12
✎
11:51
|
мой вариант (8)
&НаКлиенте Процедура ПриИзмененииЭлементаФормы(Элемент, Знач АвтоОпределениеСотовогоПровайдера = Ложь) // Отбор для ДанныеФормыКоллекции ОтборДфк = Новый Структура("ИдПровайдера", ВыбПровайдер); мДфЭлКол = ТабПровайдеров.НайтиСтроки(ОтборДфк); Если мДфЭлКол.Количество() Тогда СтрокаПоискаТЗПровайдеров = мДфЭлКол[0]; КонецЕсли; КонецПроцедуры; |
|||
73
fisher
08.05.12
✎
11:51
|
(71) У нас с вами разные представления об оптимальности и масштабируемости. Настолько разные, что делают спор бессмысленным.
|
|||
74
experimentator76
08.05.12
✎
11:51
|
(69) ты реально не понимаешь что тонкий может на самом лажевом железе крутиться ?
а если еще в идеале эту конфу завести на веб-клиенте который на телефоне запущен... будем двуядерные смартфоны советовать как платформу? |
|||
75
Lex_Liven
08.05.12
✎
11:52
|
Я поржал. Над собой, не парьтесь. Тему можно закрывать.
Решение проблемы оказалось в том, что затронули слегка и чисто случайно. В (27) указаны две процедуры, которые и давали задержку. Они вызываются просто немерено в обработке, и после указания "&НаСервереБезКонтекста" они стали выполняться неизмеримо быстрее. |
|||
76
experimentator76
08.05.12
✎
11:52
|
(72) баня) (15)
|
|||
77
experimentator76
08.05.12
✎
11:52
|
баня=баян
|
|||
78
experimentator76
08.05.12
✎
11:54
|
(73) вероятно) потом как-нибудь пересечемся еще )) когда повсеместно будет 8.2
|
|||
79
Lex_Liven
08.05.12
✎
11:54
|
(76) ошибаетесь. Отличия от моего кода:
В (15) структура отбора не хранится. В (72) только то, что нет сравнения на >0. |
|||
80
fisher
08.05.12
✎
11:54
|
(74) Простой перебор небольшой коллекции даже убитую нокию не затормозит.
|
|||
81
experimentator76
08.05.12
✎
11:56
|
(79) накуа отбор хранить? он сразу дематериализуется когда становится ненужен
сравнения нет - наверное описка |
|||
82
fisher
08.05.12
✎
11:56
|
(80) + А вот накладные расходы на серверные вызовы и синхронизацию контекста могут быть весьма ощутимые.
|
|||
83
experimentator76
08.05.12
✎
11:57
|
(80) хз надо пробовать
я просто все время намекаю что небольшая коллекция легким движением руки может стать большой то есть не нужно имхо затачиваться на относительные понятия маленький\большой |
|||
84
vmv
08.05.12
✎
11:58
|
(76) я же сказал мой вариант, очевидно, что логика там не может быть другой - задачча простейшая, но я не экономлю на переменных отборов и подмножествах отбора, ведь
в // .... ... они могут пригодиться, не могут убиваю сразу |
|||
85
Lex_Liven
08.05.12
✎
11:59
|
(84) В данном случае Экспериментатор прав - отбор хранить не нужно, он не используется позже.
|
|||
86
experimentator76
08.05.12
✎
11:59
|
(84) хотя раз пригодились? )
обычно понятно в каком контексте производится отбор и получать его составляющие мало смысла да и оптимально выполнить отбор по структуре надо один раз |
|||
87
experimentator76
08.05.12
✎
12:01
|
(85) вообще старайся чтобы логический блок кода располагался на одном экране (запросов не касается)
если логический блок кода не влезает на экран значит надо оптимизировать еще |
|||
88
experimentator76
08.05.12
✎
12:02
|
(84) кстати как убиваешь структуру? переприсвоением?
|
|||
89
Lex_Liven
08.05.12
✎
12:02
|
(87) экраны разные бывают) По этому правилу для 1024х768 задолбаешься оптимизировать.
|
|||
90
experimentator76
08.05.12
✎
12:02
|
(0) ТС - потом если сделаешь померяй отладчиком что быстрее на объеме найтистроки или запрос ?
хотя я думаю выбор ты уже сделал) |
|||
91
experimentator76
08.05.12
✎
12:03
|
(89) конечно 1920х1080
|
|||
92
fisher
08.05.12
✎
12:04
|
(83) Я тоже х.з, ибо на тонком клиенте опыт небольшой. Но предыдущий опыт подсказывает, что заведомо легкие вещи нет смысла гнать на сервер. Надо взвешенно подходить в каждом случае. Перестраховка на каждом углу она ведь тоже не даром - увеличение латенси на простейших вещах из-за лишних серверных вызовов плохо сказывается на юзабилити. О производительности клиента думать конечно надо, но не надо забывать и о качестве канала. Это сплошь и рядом играет более важную роль.
|
|||
93
vmv
08.05.12
✎
12:04
|
(83) проектировать форму нужно так, чтобы порции данных расположенных на ней тз были относительно небольшими, т.е. количство строи и состав колонок позволяли использовать клиенткие методы тз на самом убитом клиенте без тормозов.
Если вы в УФ используете тз, именно тз или дз с тысячами строк и более, а не тч, дсписок - то это ваше кривое понимание и кривое проектирование формы, которое вынуждает вас заставлять сервер обрабатывать виртуальные данные формы, а не таблиц БД. |
|||
94
vmv
08.05.12
✎
12:08
|
(90) вопрос не в скорости в этом случае, а теперь представь, что юзеров пара сотен и все они сношают сервер, качая солидные данные тз с форм и сделай куммулятивные замеры, если сервер вообще будет отвечать)
|
|||
95
experimentator76
08.05.12
✎
12:13
|
(94) дык все равно сношают сервер )
я уже говорил что запрос к ТЗ имеет смысл если планируются сложные отборы на больших объемах данных на самом деле смотреть надо задачу более широко - возможно ТС вообще неправильный подход к решению избрал |
|||
96
experimentator76
08.05.12
✎
12:17
|
(93) УФ лишь средство помогающее реализовать потребности бизнеса
когда средств становится недостаточно - потребности реализуются другими доступными способами каждый судит по своему опыту и со своей колокольни |
|||
97
vmv
08.05.12
✎
12:25
|
(95) кратко опиши мне задачу в условных терминах(Справочник.Дыни например) для которой необходимо разполагать на УФ таблицу значений с объемом данных в тысячи или десятки тысяч строк.
Естественно на таких объемах слабый клиент будет подтормаживать на поисках и отборах строк. Но ведь таблица значений в 8.2. фактически стала не элементом данных, а элементом управления. В этом контексте нужно ее рассматривать как некие небольшие множества данных и гонять ее на сервер, чтобы запросом обработать большой объем - это глупость. Так опишешь задачу? |
|||
98
Lex_Liven
08.05.12
✎
12:29
|
(97) Справочник есть справочник. Он хранится в базе, держится естественно на сервере. Вы лучше представьте себе таблицу, которая получается с левого сервера в интернете при начале сеанса работы, и от нее уже отталкивайтесь.
Вы же не будете каждый раз справочник заполнять/очищать? |
|||
99
experimentator76
08.05.12
✎
12:31
|
(97) например задача из логистики, когда клиенту надо выбрать из множества доступных ему точек доставки с сопутствующими сведениями из разных таблиц базы данных
причем количество доступных точек доставки непредсказуемо и может варьироваться от 0 до нескольких тысяч |
|||
100
experimentator76
08.05.12
✎
12:31
|
+(99) правда критерии отбора клиент делает заранее до вывода результат в ТЗ но это только сужение поиска
|
|||
101
experimentator76
08.05.12
✎
12:33
|
(97) как я понимаю все же одинэс не такие глюпые и выясняют модифицированность данных формы
так что осталось решить только как оптимальнее делать отбор данных из ТЗ |
|||
102
experimentator76
08.05.12
✎
12:35
|
(98) )) я ж говорил ему что задачи бизнеса бывают разные
таблицы только хранят данные а вот выборка по ним может быть весьма витиеватая ) |
|||
103
vmv
08.05.12
✎
12:40
|
99 точки доставки должны быть некими классификаторм в БД и его состав всегда конечен при создании формы.
идем далее - этот классификатор можно сделать иерархическим идем далее - на форме располагаем дспсок "Точки доставки", который будет выступать мастер-таблицей для отборов тз, минимизируя ее данные на форме, да и сами данные можно сделать отчетными(макетными, графическими), в том числе и на форме. Грузить же массу данных в некую мифическую тз на форме и потом чесать репу как в ней что-то найти - кривое проектирование) |
|||
104
vmv
08.05.12
✎
12:41
|
который будет выступать мастер-таблицей для заполнения тз прежде всего
|
|||
105
Lex_Liven
08.05.12
✎
12:42
|
(103) О чем вообще спор? Классификатор, справочник - какая разница? Из них даже ежик будет запросом данные тягать!
Речь идет именно о том, как оптимизировать выборку из ТЗ. Почему использованы ТЗ, я тоже уже объяснил. |
|||
106
vmv
08.05.12
✎
12:43
|
(102) вы кроме 1С работали с таблицами БД, сейчас на 8.2. можно представить дсписок произвольным запросом как комбинацию таблиц ТБ, строковых, числовых констант и т.д.,
т.е. одим запросом построить тот же вид пользовательских даныых с которым вы извращаетесь помещая его в тз) |
|||
107
experimentator76
08.05.12
✎
12:45
|
(103) ДС проходили - тормозит
в ТЗ клиенту предоставляется информация о городе доставки, точке доставке, грузополучателе и договоре с клиентом все это разные таблицы БД отбор клиент осуществляет быстро вводя различные свойства этих условно говоря колонок иерархия долго и непонятно для клиента - клиент ОЧЕНЬ разный и его уровень мне не интересен - важен заказ |
|||
108
vmv
08.05.12
✎
12:46
|
(105) способ оптимизации очень прост - минизировать данные тз, я не поверю, что если я вижу на форме тз с тысями строк, то не было другого способа пердстваления вида.
|
|||
109
experimentator76
08.05.12
✎
12:47
|
(103) идея вывести критерии отбора в отдельные ТЗ была но сейчас уж пусть как работает так работает )
начнут жаловаться на тормоза надо будет думать |
|||
110
experimentator76
08.05.12
✎
12:48
|
(106) где это обосновано там используется ДС - но у него свои выкрутасы
|
|||
111
Lex_Liven
08.05.12
✎
12:50
|
(108) нет способа оптимизации данной ТЗ. Вся таблица целиком получается от сервера при начале сеанса работы. Всю таблицу приходится держать в памяти, потому что для ее повторного получения нужно завершить сеанс и начать его заново. Выводить ее на форму или нет - дело десятое, но есть необходимость найти в ней любую строку в любой момент.
|
|||
112
vmv
08.05.12
✎
12:50
|
(107) иерархия просто и понятно для клиента если ее показать просто и наглядно.
в вашем случае играет роль привычка заказчика к ексель, где все в отдной таблице и он щелкает на автофильтр. вы там все в таблицу вывалили и текстовые солидной длины и ссылки небось торчат вместо представления, картиночки и прочие прелести, неудивительно если тормоза будут на сотне строк) |
|||
113
vmv
08.05.12
✎
12:52
|
(111) в вашей задаче подход изначально неверен - для нее нужен вебсервис, тогда и проблема с громадной тз отпадает
|
|||
114
experimentator76
08.05.12
✎
12:52
|
(112) кстати вспомнил что просили эту таблицу еще штатно выгружать в таблицу
вот почему пришлось там оптимизировать плоский список |
|||
115
Lex_Liven
08.05.12
✎
12:53
|
(113) расскажите это ОСМП. С ее десятью миллионами терминалов.
|
|||
116
vmv
08.05.12
✎
12:54
|
(115) тгда другого пути у вас не будет, обсуждаемый костыл рано или поздно станет не эффективен
|
|||
117
GROOVY
08.05.12
✎
12:57
|
(0) Данные ТЗ хранятся на сервере в данных сеанса. Для отображения данных ТЗ у клиента, они конвертируются в ДанныеФормы и передаются клиенту. ДанныеФормы <> ТЗ. Обращение к ДаннымФормы (на клиенте) для их перебора или поиска однозначно приведет к серверному вызову.
|
|||
118
Lex_Liven
08.05.12
✎
12:57
|
(116) другого пути - это какого? Господи, задача ограничена:
Факт = Есть ТЗ. Факт = Есть необходимость найти в ней строку. Цель - сделать это самым оптимальным способом. Все! Нет справочников, нет классификаторов и иерархических списков! |
|||
119
experimentator76
08.05.12
✎
12:59
|
(112) тормозов нет касательно именно этой таблицы - по крайней мере жалоб от клиентов не поступает
неожиданные тормоза стали на подобном в (0) случае когда найтистроки на клиенте вызывали тормоз на паре сотен строк в ТЧ документа вообще наверное меня можно не принимать всерьез так как УФ используются во всех видах клиентов + отладка сервера включена но в идеале надо чтобы не тормозило во всех видах клиентов чтоб наступило всеобщее счастие )) |
|||
120
GROOVY
08.05.12
✎
13:00
|
(118) Оптимальный способ это вызов контекстной серверной процедуры, поиска в ней данных.
|
|||
121
vmv
08.05.12
✎
13:00
|
118.
Решение задачи в следующей вашей постановки "Вы лучше представьте себе таблицу, которая получается с левого сервера в интернете при начале сеанса работы, и от нее уже отталкивайтесь" Есть факт, что тз на 8.2. - это уже элемент управления данными, а не элемент данных |
|||
122
fisher
08.05.12
✎
13:06
|
(120) А если достаточно данных формы? Разве я не могу без вызова сервера обойти представление данных (ДанныеФормыКоллекция)?
|
|||
123
Lex_Liven
08.05.12
✎
13:08
|
(121) Честно признаюсь, я не понимаю, что такое элемент данных и элемент управления данными.
|
|||
124
experimentator76
08.05.12
✎
13:08
|
доля истины есть
если нужна только одна строка с данными то ее лучше получить сразу чем весь объем данных (хлам) а потом в ней искать ТС может представить исходные данные как внешний источник данных в 8.2 и по нему уже делать хоть ДС хоть что ?? |
|||
125
experimentator76
08.05.12
✎
13:10
|
ТабПровайдеров как получается ?
|
|||
126
GROOVY
08.05.12
✎
13:10
|
(122) И это приведет к серверному вызову, так как на стороне клиента ДанныеФормы могут являться лишь частью данных реквизита формы. Для ТЗ это особенно актуально, так как ее данные могли быть изменены и уже не равны ДаннымФормы.
|
|||
127
Lex_Liven
08.05.12
✎
13:11
|
(125) одним ответом сервера ОСМП. Вся сразу. В виде XML, из которого собирается таблица.
|
|||
128
experimentator76
08.05.12
✎
13:16
|
(127) большая судя по всему ?
|
|||
129
experimentator76
08.05.12
✎
13:19
|
наверное
я бы заполнял некий регистр сведений этими данными чтобы избежать многократных созданий временных таблиц для запросов к ТЗ запрос по регистру будет быстр далее как представить этот регистр на клиенте - дело фантазии разработчика |
|||
130
Lex_Liven
08.05.12
✎
13:23
|
(128) примерно 100 строк, 20 колонок. я уже говорил.
(129) Эта таблица уникальна у каждого пользователя, а порой - и при каждом запуске. Кроме этой таблицы есть еще порядка 20 похожих списков от 5 до 500 записей. |
|||
131
Lex_Liven
08.05.12
✎
13:23
|
(129) И да, пользователей около 100.
|
|||
132
GROOVY
08.05.12
✎
13:24
|
(131) Таблицу надо пользователю показывать? Или только выборку из таблицы?
|
|||
133
Lex_Liven
08.05.12
✎
13:26
|
(132) при настройке - надо. При повседневной работе - нет.
|
|||
134
experimentator76
08.05.12
✎
13:35
|
юзай пока (15) а потом при необходимости перепишешь
|
|||
135
experimentator76
08.05.12
✎
13:36
|
или тоже лаг большой ?
|
|||
136
Lex_Liven
08.05.12
✎
13:39
|
(135) Лаг давно ушел, см (75).
Просто спор уже на принцип пошел - как оптимальнее. |
|||
137
fisher
08.05.12
✎
13:57
|
(126) То есть, отображение ТЗ в тонком клиенте идет порционно, подкачивая данные по мере необходимости так же, как и для динамических списков? Понятно, что динамические списки еще и из БД порционно выбирают. Я в части клиент-серверного взаимодействия интересуюсь.
|
|||
138
experimentator76
08.05.12
✎
18:00
|
(136) )) не поверишь я только сейчас этот пост заметил - так увлекся )
|
|||
139
experimentator76
08.05.12
✎
18:01
|
(137) по моим наблюдениям ТЗ целиком попадает на клиент
|
|||
140
0xFFFFFF
08.05.12
✎
18:21
|
(20) "с какого перепугу нагибать сервер если это данные исключительно формы, Тз - чисто виртуальная сущность представленная на форме, хрена соваться с ней на сервак без острой необходимости, просвети."
Я вот тоже не пойму. Нет, я вот в 8.2 пока не силен. Но ТЗ (данные которой используются чисто в форме) - обрабатывать тоже на сервере надо? Мой моск сломан. |
|||
141
experimentator76
08.05.12
✎
18:45
|
(140) одинэс походу решил воплотить триединство в УФ
клиент, сервер и отображение )) |
|||
142
experimentator76
08.05.12
✎
18:46
|
"чисто формы" нету - матрикс хаз ю )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |