|
Как лучше всего передать колонку ТЧ с клиента на сервер | ☑ | ||
---|---|---|---|---|
0
bahtik
28.05.15
✎
09:47
|
Здравствуйте!
Простой, наверное вопрос, но не могу правильно его решить. Задача следующая. Управляемая форма, на ней ТЧ с колонкой "Услуга". У услуг в справочнике есть реквизит "ВремяВыполнения". Вот мне нужно подсчитать общее время выполнения услуг, входящих в ТЧ. Для этого создаю процедуру, выполняемую на сервере без контекста, которая должна пройтись по списку услуг и просуммировать их время выполнения. Но возник вопрос, каким образом передать список услуг в эту процедуру? Метод ПереченьУслуг.Выгрузить(,"Услуга") на клиенте не работает. Можно, конечно, самому пройтись в цикле по строкам таблицы и сформировать список значений, но может быть есть более корректный путь? |
|||
93
Господин ПЖ
28.05.15
✎
11:26
|
попадание на сервер вместе с формой по сути ничего не решает
те же яйцы... ибо изначально решаемая задача "хорошего решения" просто не имеет - в силу изначальной кривизны |
|||
94
bahtik
28.05.15
✎
11:39
|
(93) Твоим извилинам немного кривизны бы не помешало. Куда ты собрался на сервер вместе с формой? Сиди лучше на месте и никуда не ходи. )
|
|||
95
Heckfy
28.05.15
✎
11:42
|
(94) Ты чё??? А куда еще с формой? Или ты думаешь, что форма на клиенте отрабатывается?? Форма - это первая составляющая серверной части.
|
|||
96
bahtik
28.05.15
✎
11:44
|
(95) Ты че??? ))) А что значит директива "НаСервереБезКонтекста", не догадываешься? ))
|
|||
97
hhhh
28.05.15
✎
11:48
|
(96) ну уж явно она не для твоей задачи. Ты вручную при помощи 100 команд через задницу пытаешься затащить контекст на сервер. Вместо того, чтобы написать одну строчку &НаСервере.
|
|||
98
Heckfy
28.05.15
✎
11:52
|
(96) Блин, форма образуется на сервере. А на клиент только картинка передается.
|
|||
99
Любопытная
28.05.15
✎
11:57
|
(98) Вы говорите о разных вещах. Спор ни о чем. ТС считает, что собирать массив значений колонки тч циклом эффективнее, чем просто сходить на сервер с контекстом. Это его право.
Оптимизация должна быть умеренной, об этом говорилось не раз. Мы вырвали маленькую задачку из контекста общей конфигурации и пытаемся на ее основе оценить что-то теоретическое... Бессмысленная трата времени. |
|||
100
Cube
28.05.15
✎
11:58
|
Сотка
|
|||
101
bahtik
28.05.15
✎
12:00
|
(97) (98) Вы белины объелись, что ли? Какая к чертям форма? Я с самого начала о том и говорю, что она мне на фиг не нужна. (97) Какие 100 команд? Вот тебе мой код:
.... СписокУслуг = Новый Массив; Для каждого СтрокаПеречняУслуг Из Объект.ПереченьУслугМойки Цикл СписокУслуг.Добавить(СтрокаПеречняУслуг.Услуга); КонецЦикла; ВремяВыполненияМойки = СерверРассчитатьВремяВыполненияРаботПоКаждойУслуге(СписокУслуг); .... &НаСервереБезКонтекста Функция СерверРассчитатьВремяВыполненияРаботПоКаждойУслуге(СписокУслуг) ОбщееВремяВыполненияУслуг = 0; Для каждого Услуга Из СписокУслуг Цикл ОбщееВремяВыполненияУслуг = ОбщееВремяВыполненияУслуг + Услуга.ВремяВыполнения; КонецЦикла; Возврат ОбщееВремяВыполненияУслуг; КонецФункции Он работает. Без контекста формы. Почему "она явно не для твоей задачи"? |
|||
102
18_plus
28.05.15
✎
12:04
|
(101) "Он работает"
сюда ты зачем пришёл? и начни оптимизацию с этого кода Для каждого СтрокаПеречняУслуг Из Объект.ПереченьУслугМойки Цикл СписокУслуг.Добавить(СтрокаПеречняУслуг.Услуга); КонецЦикла; и прежде чем учить других, почитай книжки. |
|||
103
hhhh
28.05.15
✎
12:04
|
(101) ну вот это
Для каждого Услуга Из СписокУслуг Цикл ОбщееВремяВыполненияУслуг = ОбщееВремяВыполненияУслуг + Услуга.ВремяВыполнения; КонецЦикла; это запрос в цикле Услуга.ВремяВыполнения быдлокод. Он съест времени в 10 раз больше, чем твоя передача контекста. |
|||
104
Timon1405
28.05.15
✎
12:06
|
(102) Если вы про "Объект.ПереченьУслугМойки", то его закэширует платформа
|
|||
105
18_plus
28.05.15
✎
12:07
|
(104) я вообще-то про выгрузку колонки в массив.
|
|||
106
Heckfy
28.05.15
✎
12:08
|
(101) Форма образуется в ПриСозданииНаСервере
|
|||
107
Любопытная
28.05.15
✎
12:09
|
Слушайте, это все лирика. Мне другое интересно - вытащила я в ТЧ реквизит Услуга.ВремяВыполнения. Но я ж до него не могу никак на клиенте дотянуться? Получается, что он исключительно информативный?
|
|||
108
Бубка Гоп
28.05.15
✎
12:13
|
(107) почему не можешь то?
|
|||
109
Любопытная
28.05.15
✎
12:13
|
(108) Не получается) Научите?
|
|||
110
Любопытная
28.05.15
✎
12:14
|
(108) Учитывая то, что это просто колонка на форме, а не реквизит таб части документа
|
|||
111
Бубка Гоп
28.05.15
✎
12:16
|
(109) сейчас сам попробую, интересно какая там может быть проблема
|
|||
112
bahtik
28.05.15
✎
12:16
|
(103) Чушь
|
|||
113
Timon1405
28.05.15
✎
12:17
|
(105) Так там ващета не ТЗ а данныеформыколлекция, а метод выгрузить доступен только на сервере
|
|||
114
bahtik
28.05.15
✎
12:18
|
(104) Ничего кэшироваться не будет - все и так на клиенте. Объект - это же реквизит формы.
|
|||
115
Любопытная
28.05.15
✎
12:19
|
(111) нету ее) ни через Элементы, ни тем более через Объект. На форме колонка есть, а достать ее нельзя
|
|||
116
Drac0
28.05.15
✎
12:19
|
(110) Ну, сделайте эту колонку реквизитом формы, а не документа.
|
|||
117
bahtik
28.05.15
✎
12:19
|
(100) До второй дойдет?
|
|||
118
Господин ПЖ
28.05.15
✎
12:20
|
(112) гы
|
|||
119
Drac0
28.05.15
✎
12:21
|
(112) Чо? Он самый и есть.
|
|||
120
Любопытная
28.05.15
✎
12:22
|
(116) Ну так я о том и говорю - сделала реквизит формы, он прекрасно выводится, но я до него дотянуться не могу, чтобы, к примеру, по нему что-то посчитать. А так можно было бы прям тут, на клиенте, посчитать общую сумму и прекратить весь этот базар-вокзал
|
|||
121
Господин ПЖ
28.05.15
✎
12:22
|
бегать у ужасе от накладных расходов от передачи на сервер и тут же беззастенчиво лупить по базе запросом в цикле ради одного реквизита...
|
|||
122
Бубка Гоп
28.05.15
✎
12:23
|
(110) ну как то так
&НаСервере Процедура ЗаполнитьКолонкуСервер() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 100 | Номенклатура.Наименование КАК Колонка |ИЗ | Справочник.Номенклатура КАК Номенклатура"; Результат = Запрос.Выполнить(); Таблица.Загрузить(Результат.Выгрузить()); КонецПроцедуры &НаКлиенте Процедура ВыполнениеНаКлиенте(Команда) Для Каждого Стр Из Таблица Цикл Сообщить(Стр.Колонка); КонецЦикла; КонецПроцедуры |
|||
123
Господин ПЖ
28.05.15
✎
12:23
|
причем если память не изменяет читая весь объект...
|
|||
124
Drac0
28.05.15
✎
12:23
|
(120) Нет, вы сделали Элемент формы, а надо реквизит :)
|
|||
125
Господин ПЖ
28.05.15
✎
12:24
|
а как всё гордо начиналось - тупые 1с-ники не читали книг о программировании
|
|||
126
Drac0
28.05.15
✎
12:24
|
(123) Ага, с табличными частями. Лепота там вообще.
|
|||
127
Любопытная
28.05.15
✎
12:24
|
(124) Ок, допустим реквизит будет. Как мы в него засунем значение?
|
|||
128
Любопытная
28.05.15
✎
12:25
|
(122) Ничего не поняла) Таблица это ху?
|
|||
129
Бубка Гоп
28.05.15
✎
12:25
|
(128) реквизит формы
|
|||
130
Drac0
28.05.15
✎
12:29
|
(127) ПриЧтенииНаСервере.
|
|||
131
Бубка Гоп
28.05.15
✎
12:33
|
(128) теперь получилось дотянуться или все еще нет? :)
|
|||
132
bahtik
28.05.15
✎
12:37
|
(121) Во-первых, это временный вариант кода, в котором запрос не использовался чисто по причине чтоб по быстрому написать и проверить. Потом, естественно, я бы заменил на запрос. Но не смотря на это, к твоему сведению то, что ты называешь "беззастенчивым луплением по базе", в данном случае вызовет ЗАМЕТНО меньше тех самых накладных расходов, т.к. и объект не такой большой и количество итераций небольшое. Но это уже так, к слову.
|
|||
133
bahtik
28.05.15
✎
12:38
|
(126) Там обращение к элементу справочника "Услуги", у которого всего то четыре реквизита. Так что никаких ТЧ. Ну и см (132).
|
|||
134
bahtik
28.05.15
✎
12:42
|
(127) О, вот наконец настает понимание проблемы подвала с итогом. Колонка есть, реквизит есть, а как мы засунем в него значение? Засовывать, понятное дело, нужно с сервера (т.к. необходимые данные у нас на сервере). Но проблема то в том, что на сервере этой колонки нет! ))) Так что надо либо извращаться и возвращать данные каким-то параметром, или что-то еще, но в любом случае выигрыша по сравнению с тем кодом, что я написал - ноль целых ноль десятых. Вернее, даже хуже. Теперь понятно?
|
|||
135
bahtik
28.05.15
✎
12:43
|
(125) На вот, почитай, умник: http://its.1c.ua/db/metod81u#content:8020500:hdoc
|
|||
136
Drac0
28.05.15
✎
12:43
|
(133) Дадада. А потом, через годик, когда этот справочник повесят чуть больше атрибутов и пару ТЧ и проведут документ на пару сотен строк, посмотрят на это чудо 5-10 минут и скажут: "Ваша 1С г*вно!".
|
|||
137
Господин ПЖ
28.05.15
✎
12:44
|
(132, 133) ты ж.пой то не виляй... в начале усердно рассуждал не о конкретном примере, а о сферическом коне в вакууме
|
|||
138
Господин ПЖ
28.05.15
✎
12:46
|
а у "сферического коня" в таком справочнике может быть 50 ТЧ
у упоротых хохлов так принято писать - я гарантирую |
|||
139
Drac0
28.05.15
✎
12:46
|
(134) Как нет этой колонки на сервере? Кто украл?! У меня все есть.
|
|||
140
Бубка Гоп
28.05.15
✎
12:46
|
(136) и тут он, не слезая с белого коня, перепишет код на нормальный
|
|||
141
bahtik
28.05.15
✎
12:47
|
(137) А если о сферическом коне в вакууме, то почитай еще про кэширование, и ты поймешь, что в реальности без запроса обращения к базе вообще может не быть, т.е. работать это самое "лупление по базе" будет еще быстрее, чем запрос.
|
|||
142
Господин ПЖ
28.05.15
✎
12:47
|
>Как нет этой колонки на сервере? Кто украл?! У меня все есть.
+100500 |
|||
143
Drac0
28.05.15
✎
12:48
|
(140) Ага, "Я этот кусок кода потом перепишу оптимально" будет, пожалуй, даже покруче, чем "Я с понедельника начну бегать по утрам" :)
|
|||
144
bahtik
28.05.15
✎
12:49
|
(143) см (141), если тебе не нравится переписывание.
|
|||
145
Господин ПЖ
28.05.15
✎
12:50
|
>то почитай еще про кэширование, и ты поймешь, что в реальности без запроса обращения к базе вообще может не быть
для того чтобы кэширование появилось значение надо сначала получить... и потом - кэш протухает через 20 мин |
|||
146
Drac0
28.05.15
✎
12:50
|
(141) Ты думаешь 1С кэширует всю базу данных? ))))))))))))))))))
ТЫ когда профайлер скульный в последний раз открывал? |
|||
147
Бубка Гоп
28.05.15
✎
12:50
|
(141) на кэш надейся, но и сам не плошай ;)
|
|||
148
bahtik
28.05.15
✎
12:51
|
(138) Вообще-то я не хохол и не украинец, и вообще из другой страны. А вот ты своими высказываниями уже дал знать, какая ты гнидная безмозглая натура )))
|
|||
149
Господин ПЖ
28.05.15
✎
12:52
|
дурак-казах в стране 404... это вообще адская смесь
|
|||
150
bahtik
28.05.15
✎
12:52
|
(145) А как ты думаешь, если мы добавляем в ТЧ строки, будет кэширование элемента, который входит в эту строку?
|
|||
151
Господин ПЖ
28.05.15
✎
12:54
|
(150) формально нам от него кроме guid и полей формирующих представление ссылки ничего не надо
|
|||
152
bahtik
28.05.15
✎
12:54
|
(149) И даже не казах, не мучай свой бестолковый мозг.
|
|||
153
bahtik
28.05.15
✎
12:55
|
(146) см (150)
|
|||
154
Господин ПЖ
28.05.15
✎
12:55
|
(152) да мне пофиг... тут ключевое слово - дурак
|
|||
155
Drac0
28.05.15
✎
12:55
|
(150) Нет :)
|
|||
156
Одинесю
28.05.15
✎
12:55
|
Хрум-хрум...
|
|||
157
bahtik
28.05.15
✎
12:56
|
Ну то, что ты дурак, это с самого начала было видно, зачем еще раз всем об этом сообщать? Это уже в кэше есть.
|
|||
158
Господин ПЖ
28.05.15
✎
12:56
|
(155) не разрывай шаблон дятлу
|
|||
159
bahtik
28.05.15
✎
12:56
|
(155) А на самом деле да.
|
|||
160
Любопытная
28.05.15
✎
12:57
|
(134) Мне уже давно все понятно, я вообще не с вами разговариваю, если вы не заметили
|
|||
161
Drac0
28.05.15
✎
12:57
|
(159) А на самом деле нет. Из БД подтягивает только ГУИД и поля, по которым сервер 1С генерит представление.
|
|||
162
Господин ПЖ
28.05.15
✎
12:57
|
(159) выдыхай уже...
|
|||
163
Бубка Гоп
28.05.15
✎
12:58
|
(160) с таблицей то получилось? ато я прям переживаю теперь
|
|||
164
Любопытная
28.05.15
✎
12:59
|
(163) Ну как бы... я ушла коммерческое писать, мне не до таблицы было)) Сейчас попытаюсь разобраться, что у меня не получается и как с этим бороться)
|
|||
165
bahtik
28.05.15
✎
13:00
|
(161) А ты не поленись, сделай тестовую конфу и посмотри в отладчике вызовы сервера. А потом рассказывай.
|
|||
166
ЧеловекДуши
28.05.15
✎
13:04
|
(4) В модуле формы пишешь "&НаСервере" и там уже можешь обращаться к реквизитам формы
|
|||
167
Бубка Гоп
28.05.15
✎
13:05
|
(166) ТС не приемлет контекстные вызовы, как я понял
|
|||
168
Любопытная
28.05.15
✎
13:05
|
(163) событие ПриЧтенииНаСервере в какой момент возникает?
Вот конкретная задача - есть реквизит формы, точнее - колонка реквизита формы. Она к объекту не имеет никакого отношения, она только у формы есть. При добавлении строки я хочу в эту колонку записать значение реквизита одного из полей добавляемой строки. В каком событии я могу это сделать? |
|||
169
Drac0
28.05.15
✎
13:07
|
(165) А при чем тут вызовы сервера? 0_о Когда ты УЖЕ на сервере.
|
|||
170
Drac0
28.05.15
✎
13:09
|
(168) ПриЧтенииНаСервере возникает при чтении объекта из БД. При создании новых, естественно, не возникает. Нам так и нужно для решения подобной задачи.
|
|||
171
Бубка Гоп
28.05.15
✎
13:10
|
(168) во, уже проблема другая. Ну, если прям никакого не имеет, то ПриИзменении таблицы объекта, например, полностью загружать колонку формы. хотя это как то не красиво, проще там же считать сумму и не лохматить бабушку
|
|||
172
Любопытная
28.05.15
✎
13:11
|
(170) Там же это где?
|
|||
173
bahtik
28.05.15
✎
13:12
|
(170) ПриЧтенииНаСервере вообще-то это событие формы и возникает либо при открытии формы, либо повторном ее считывании (например, по команде "Перечитать"). Так что тут это вообще ни к месту.
|
|||
174
Бубка Гоп
28.05.15
✎
13:12
|
(172) в ПриИзменении, само собой. если в конечном счете интересует сумма, зачем отдельная таблица?
|
|||
175
Drac0
28.05.15
✎
13:14
|
(172) Я не дочитал про добавление строки :) Если колонка зависит от одного из полей строки, то стоит повесить заполнение этого поля на ПриИзменении этого поля.
|
|||
176
Drac0
28.05.15
✎
13:15
|
(173) Ты на (169) ответь, уникум.
|
|||
177
Любопытная
28.05.15
✎
13:15
|
(171) Это изначальная проблема ТС, с которой он справился тем способом, которым справился. Я бы не стала заморачиваться и ковыряться с контекстом, но и пересчитывать этот самый итог либо при записи, либо по отдельной команде.
(174) ПриИзменении на клиенте нет доступа к реквизитам ссылки, это значит хождение на сервер, пусть и без контекста, при каждом изменении каждой строки. Если эта сумма - единственное, что при этом надо получить, то (имхо конечно) структура данных некорректна и стоит что-то поменять в монастыре) |
|||
178
Drac0
28.05.15
✎
13:15
|
(174) Сумма может быть интересна в разных разрезах :)
|
|||
179
bahtik
28.05.15
✎
13:18
|
(169) Да, тут я не то написал, ошибся. Подразумевал обращение к БД.
|
|||
180
Любопытная
28.05.15
✎
13:18
|
(178) если она так интересна, может добавить колонку в ТЧ документа и не парить мозги окружающим?
|
|||
181
bahtik
28.05.15
✎
13:18
|
(180) Гениально!!! Я даже не сомневался, что до этого дойдет )))
|
|||
182
Drac0
28.05.15
✎
13:18
|
(177) Про сумму я уже говорил, что ее проще положить в шапке. А если логика работы формы строится на этих данных которые не надо фиксировать в объекте, а не только на их сумме, то заполнять эту строку безконтекстным вызовом - единственный вариант. Кстати, совсем не страшный :)
|
|||
183
Drac0
28.05.15
✎
13:19
|
(179) Я смотрел. А ты?
|
|||
184
Любопытная
28.05.15
✎
13:19
|
(181) Я не с вами общаюсь, если вы не заметили. Свои восторги оставьте при себе
|
|||
185
Drac0
28.05.15
✎
13:21
|
(180) Вообще, я изначально был за это :) Но тут могут быть нюансы в зависимости от логики. Например, нужны текущие данные, а не те, что были на момент заполнения документа.
|
|||
186
fakeyou
28.05.15
✎
13:21
|
&НаСервере
Процедура СчитаемУслуги() Если НеЗначениеЗаполнено(ВремяВыполненияУслуг) Тогда Для Каждого СТР из Объект.Услуги Цикл ВремяВыполненияУслуг = Стр.ВремяВыполнения+ВремяВыполненияУслуг КонецЦикла Объект.ВсегоВремяУслуг = ВремяВыполненияУслуг; конецесли КонецПроцедуры |
|||
187
Любопытная
28.05.15
✎
13:21
|
(182) Да нестрашный конечно, не спорю. Просто я из библии вынесла для себя мысль о том, что желательно максимально сократить количество хождений туда-сюда. Это мой личный бзик :)
|
|||
188
Drac0
28.05.15
✎
13:23
|
+(185) Но это уже немного из области фантастики :)
|
|||
189
Drac0
28.05.15
✎
13:24
|
(187) Сократить, но не убрать же совсем :)
|
|||
190
bahtik
28.05.15
✎
13:25
|
(184) Так и я не с тобой общаюсь. На хрен ты мне сдалась то? Отстань же от меня уже наконец, ну ёлы-палы!
|
|||
191
Любопытная
28.05.15
✎
13:25
|
(189) Вы правы)
|
|||
192
Господин ПЖ
28.05.15
✎
13:26
|
еще немного до 200
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |