Имя: Пароль:
1C
1С v8
Слишком много ПриВыводеСтроки
0 FiftyStars
 
26.12.11
12:31
Вобщем жесткий трабл у меня =(
Есть ТП с ТЗ внутри
Сначала запросом туда заносятся заказы(Ссылки на них, номера и т.д)
Затем в событии ПриВыводеСтроки вызывается процедура, которая составляет запросики для вывода связанной с заказами информации(счета,реализации,закрытия и т.п.)ну и все это заносится в ту строку заказа,которая выводится в данный момент.
НО почему то при тестовых 11 заказах событие ПриВыводеСтроки вызывается несколько тысяч раз...
Пробовал комментировать код заполнения - все нормально...11 вызовов
ИТАК ВОПРОС: какие команды могут спровоцировать это событие?
1 mikecool
 
26.12.11
12:32
обновление формы?
2 aleks-id
 
26.12.11
12:32
потому что шарканье мышкой вызывает перерисовку
3 mikecool
 
26.12.11
12:34
не выполнять запросики в при выводе строки
использовать при получении данных - в начале обработчика получить данные для всего набора, нарисовать куда нужно
4 aleks-id
 
26.12.11
12:35
а мне вот интересно, нельзя разве в первом запросе получить все данные? или мусье джойнить не умеет?
5 Fish
 
26.12.11
12:37
(4) Видимо можно, но запросы в ПриВыводеСтроки гораздо интереснее :)))
6 mikecool
 
26.12.11
12:37
(5) +1 их же так много - таких классных запросиков...
7 hhhh
 
26.12.11
12:39
(0) может вы при выводе строки данные меняете? И строка опять выводится.
8 Fish
 
26.12.11
12:41
(7) Естественно меняет: "Затем в событии ПриВыводеСтроки вызывается процедура, которая составляет запросики для вывода связанной с заказами информации(счета,реализации,закрытия и т.п.)ну и все это заносится в ту строку заказа,которая выводится в данный момент. " :)))
9 hhhh
 
26.12.11
12:45
(8) ну тогда это нормально. Непонятно почему ТС переживает.
10 FiftyStars
 
26.12.11
12:47
(1) нет
(2) нет
(3) как узнать что все 10...15...20...и тд строк вывелось?
(4) Заказы в списке должны быть все, а чтобы лишнюю инфу не хранить(ее на каждый заказ около 20 колонок), инфу эту я получать должен при выводе строк на экран...
(5) это нормально если база большая, и чтобы показывать пользователю  информацию только по тем заказам которые он видит а не по всем что есть(их же могут быть тысячи)
допустим у меня 1000 заказов....25 параметров у каждого...25 000 ячеек заполнять нужно чтоли?
11 FiftyStars
 
26.12.11
12:49
(7) вобще то в этом событии параметр есть ДанныеСтроки...он и служит для того чтобы менять ДанныеСтроки...так что бред
12 Inform
 
26.12.11
12:52
(0) ПриВыводеСтроки() оставлен для совместимости с 8.0, везде для таких случаев в 8.1 необходимо использовать обработчик ПриПолученииДанных():

Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки;
...
КонецЦикла;
13 FiftyStars
 
26.12.11
12:53
(7)кстати если так, то вызов события не должен никогда прекращаться...так как изменение данных текущей строки по этой логике должно вызывать Еще один вызов события ПриВыводеСтроки, и снова это повторяется и снова и снова и по идее должно зациклиться...но ведь через несколько тысяч итераций все таки это сумашествие прекращается
14 FiftyStars
 
26.12.11
12:54
(12)спасибо =) хоть что то дельное)
Щас попробую, отпишусь))
15 Inform
 
26.12.11
12:58
(14) ну обрабатываем данные естественно скопом как тут и сказали, а не для каждой строки делаем запрос, не забывай
16 FiftyStars
 
26.12.11
13:07
(15)да я сам хотел это сделать....но че то не знал как получить только те строки которые вывелись
то есть
из 1000 заказов пользователь видит только 15
с 15 по 29ую
и вот как отловить момент когда вывелась 29строка я даже не предполагал
Спасибо=)Учуууусь жЭ =)
17 mikecool
 
26.12.11
13:11
(10) как узнать что все 10...15...20...и тд строк вывелось?  - ОформленияСтроки это коллекция выведенных строк
18 FiftyStars
 
26.12.11
13:21
(17) я уже понял, просто раньше думал что ОформлениеСтроки это ОФОРМЛЕНИЕ строки...вобщем чувствую скоро нужно будет покупать переводчик "РУССКИЙ - 1С"...просто описания 1Совцев теряют смысл постепенно....походу они разрабатывают на английском а потом переводят всё автопереводчиком... скоро наверное будет так - "Справочник сохранять значения где делать like"...
Сбивают с толку названия методов и т.д., да и справку писал сумашедший турок с тремя классами образования,живущий на помойке и питающийся отбросами
19 FiftyStars
 
26.12.11
13:22
:DDD
20 FiftyStars
 
26.12.11
13:24
СПЕЦСИМВОЛ = ESCAPE
На каком языке?
21 FiftyStars
 
26.12.11
13:25
так примерчик)
22 Reset
 
26.12.11
13:37
Ты себя сильно переоцениваешь. То, что ты не понимаешь, это просто ты глуповат, а не термины.
23 kosts
 
26.12.11
13:49
(18) содержание ОформленияСтрок как раз соответствуют своему наименованию.
ведь табличное поле - это визуальное представление таблицы значений (почти синоним "оформление ТЗ").
24 vmv
 
26.12.11
14:37
(0) УФ форму используй и динамический список - толку больше будет, ПриВыводеСтроки() - метод-паразит, соблазняющий неокрепшие умы
25 FiftyStars
 
26.12.11
18:10
(24) УФ нельзя
(22) сосамба чупа чупс, молчать, я б тебя назвал в ответ кем нибудь да не пропустит фильтр...че я тебя за живое задел?обоспрал твою прелесть "1С"...и че...в каждой вещи есть кал и че теперь все тупые а ты СВЕРХБОГ мегакрутой и мегахороший?ты просто дятел и ничтожество задроченое
(23) Ну дак оформление строк относится больше к ТП а ДанныеСтроки - к ТЗ =)) ну вобщем по логике оформление это визуальная часть, к данным отношения не должна иметь)))Можно в ячейке к примеру картинку члена нарисовать, но значение ячейки может у не иметь отношения к половым органам =))хех

ВОБЩЕМ БЕДА
Сделал все в событии ПриПолученииДанных и все равно 4 с половиной тыщи вызовов события...
26 FiftyStars
 
26.12.11
18:17
Хотя стало заметно быстрее работать
При том варианте что был на 10ти записях начинались огромные тормоза при работе Конфигурации
27 vmv
 
26.12.11
18:53
(26) если уж и использовать ПриПолученииДанных() и ПриВыводеСтроки(), то важно соблюдать простое правило

ДЛЯ КАЖДОГО модифицируемого поля табличного поля в этих обработчиках нужно ставить условия примерно такого вида

УстановитьЗначение = ВыборкаЗапроса.ЗначениеРющки;
Если Строка.ПолеРющки <> ПриПолученииДанных Тогда
Строка.ПолеРющки = УстановитьЗначение;
КонецЕсли;
.....
УстановитьЗначение = ВыборкаЗапроса.ЗначениеФиндиклющки;
Если Строка.Финдиклющки <> УстановитьЗначение Тогда
Строка.Финдиклющки = УстановитьЗначение;
КонецЕсли;


Казалось бы кода станет больше, но вызовы обработчика резко упадут до мизера, если четко следовать правилу ДЛЯ КАЖДОГО
28 vmv
 
26.12.11
18:54
Если Строка.ПолеРющки <> УстановитьЗначение Тогда
Строка.ПолеРющки = УстановитьЗначение;
КонецЕсли;

там так
29 QLgKR
 
26.12.11
19:16
(25) пример кода можно
30 QLgKR
 
26.12.11
19:21
(18)
> походу они разрабатывают на английском а потом переводят всё автопереводчиком...
Бинго! На каком же языке им еще разрабатывать?! Пишут же на С++.

> Сбивают с толку названия методов и т.д., да и справку писал сумашедший турок с тремя классами образования,живущий на помойке и питающийся отбросами
Думаю, что с образованием и питанием у него гораздо лучше многих
Ошибка? Это не ошибка, это системная функция.