Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   УТ, форма списка Реализации, как прикрутить колонку, чтоб не тормозило? (http://forums.kuban.ru/f1040/ut_forma_spiska_realizacii_kak_prikrutit-_kolonku_chtob_ne_tormozilo-3344674.html)

EarlyBird 23.11.2012 18:17

УТ, форма списка Реализации, как прикрутить колонку, чтоб не тормозило?
 
Всем привет!
Столкнулся с задачей, упрощённо выглядит так:
Есть некий регистр сведений (называется, допустим, "СтатусыДокументов"). Непериодический.
В регистре измерение "Документ" и ресурс "Статус".
Нужно добавить колонку в форму списка документа РеализацияТоваровИУслуг, в колонке отражать текущий статус документа (взятый из регистра).
Как это реализовать, избежав сильного торможения при обновлении формы?

МимохожийОднако 23.11.2012 18:30

Добавь в документ реквизит Статус.

EarlyBird 23.11.2012 18:48

нет

VZ 23.11.2012 18:55

Выводи результат запроса.

EarlyBird 23.11.2012 19:00

выводить результат запроса - это блестящий совет, в десятку!
осталось мелочь, решить 2 момента:
1) каким образом получить список документов, который нужно запихать в запрос (не тянуть же весь РС, за всю историю базы)
2) в какой момент (при каком событии) выполнять запрос?

EarlyBird 23.11.2012 19:01

или ты предлагаешь выполнять отдельный запрос при выводе каждой строки?

Чучундер 23.11.2012 19:08

(2) да.

Чучундер 23.11.2012 19:10

не надо из списка документов делать отчет..

Чучундер 23.11.2012 19:11

какая положительная инфа если виден список документов ну 20 cтрок, а вних статусы..? ведь статус 21 дока - он тоже есть, но его не видно!! авария!

lalex23 23.11.2012 19:16

извратов много может быть...
вариант с реквизитом - самое эффективное в плане быстродействия
вариант "При получении данных" - самое простое, но будет подтормаживать
на первое время я бы вторым вариантом обошелся - на первый перейти никогда не поздно

Reaper 23.11.2012 19:49

эк все повелись дружно...

EarlyBird 23.11.2012 19:52

(10) а по делу?

EarlyBird 23.11.2012 20:03

(10) между прочим, пример не из пальца высосан.
знакомо, нет?
это писали те самые программисты Всея Руси
стандартная библиотека ЭДО
регистр сведений называется СостоянияЭД
колонка в форме списка дока РеализацияТоваровУслуг называется СостояниеЭД.
заполнение колонки реализовано примерно как в (5)
встроили эту шнягу в УТ 10.3, получили ощутимое торможение в списке Реализаций.
вот сижу думаю, как оптимизировать

EarlyBird 23.11.2012 20:18

ладно, всем спасибо
уже придумал, чо
при открытии списка запросом получу из регистра набор данных по всем реализациям, попадающим в период журнала
(при интерактивном изменении периода, буду запросом перезаполнять набор)
а в обработчике ПриПолученииДанных буду заполнять реквизит, используя этот набор

EarlyBird 23.11.2012 20:20

таким образом, запрос к регистру сведений будет выполняться только один раз, при открытии формы списка
а не каждый раз при скроллинге

bma1 23.11.2012 20:46

2(14) А если глупый манагер поменяет период в журнале?

EarlyBird 23.11.2012 21:26

(14) читай внимательно, всё предусмотрено
[quote=Ирли Бёрд;27848870]при интерактивном изменении периода, буду запросом перезаполнять набор[/quote]
отловлю событие интерактивного изменения периода, и выполню запрос с новым периодом

VZ 23.11.2012 21:31

13-Ирли Бёрд > Молодца... И сарказм продемонстрировал, и взял очевидное.

EarlyBird 23.11.2012 21:33

(17) да ладно
это не так уж очевидно
было бы очевидно - давно бы реализовали в типовых решениях

VZ 23.11.2012 22:42

18-Ирли Бёрд > Правда, штоль? А что в (3) было написано?

EarlyBird 24.11.2012 00:46

(19) может ты считаешь, там написано великое откровение?

VZ 24.11.2012 01:10

20-Ирли Бёрд > Банальность: "тормоза" есть врожденное свойство БД такого типа, что у 1С. Конструкция такая.
При малых размерах БД преодолевается "железом", "влоб", при средних - фокусами типа временных таблиц (запросами), но всегда есть предел, после которого ничего не поможет.
И именно в "типовых решениях" этот порог ниже.

Gary Zyryanov 26.11.2012 07:20

(0) Как вариант. Я делал так (настырный клиент попался)
Завел кэш (соответствие)
В процедуре ПриПолученииДанных в этот кэш добавляю значения.
В процедуре ПриВыводеСтроки данные беру из кэша.

Из минусов - изменение сосояния отображалось только при переоткрытии формы, зато со скоростью проблем не было никаких.

EarlyBird 26.11.2012 10:54

(22) на данный момент, более-менее правоверный вариант заполнения я нашёл в БП (смотрел 2.0.40.11).
Там в обработчике [b]ПриПолученииДанных()[/b] сначала формируется массив документов, затем [u][b]ОДНИМ ЗАПРОСОМ[/b][/u] мы получаем состояния этих доков, и затем заполняем колонку. Элегантно, [filolog]бля[/filolog]!

Соответствие = Новый Соответствие;
МассивДляОтбора = Новый Массив;

Для Каждого Строка Из ОформленияСтрок Цикл
МассивДляОтбора.Добавить(Строка.ДанныеСтроки.Ссылка);
Соответствие.Вставить(Строка.ДанныеСтроки.Ссылка, Строка);
КонецЦикла;

ТекстыСостоянияЭД = ЭлектронныеДокументы.ПолучитьТекстСостоянияЭДПоВладельцам(МассивДляОтбора);

Для Каждого ТекЭл Из ТекстыСостоянияЭД Цикл
Соответствие.Получить(ТекЭл.Ключ).Ячейки.СостояниеЭД.УстановитьТекст(ТекЭл.Значение);
КонецЦикла;

Reaper 26.11.2012 13:23

23-Ирли Бёрд > А что, в какой-то из типовых это не так? Блин у нас этот прием уже года 3 как отработан, руки сами код пишут. Я думал тебя он и не устроил...


Текущее время: 22:43. Часовой пояс GMT +3.