Имя: Пароль:
1C
 
УФ ТЗ на форме(данные колелкция) с картинками
,
0 samozvanec
 
08.08.16
15:37
есть управляемая форма, на ней табличка с картинками в строках. все бы ничего, да вот тормозит это дело. в тестовом варианте строк десяток-другой, а в продакшене и до тысячи может дойти.
картинки обжимаем до 15-30кб. такое ощущение, что он их при пролистывании считывает каждый раз.
платформа 8.2.19.106, толстый клиент управляемое приложение.

можно ли как-то это дело ускорить?

http://radikal.ru/lfp/s019.radikal.ru/i640/1608/16/eae08f2497bb.png/htm
1 Nuobu
 
08.08.16
15:40
Как картинку выводишь?
2 DmitrO
 
08.08.16
15:40
А в тонком?
3 Ёпрст
 
08.08.16
15:40
ну разве что вебстраничку показывать, а не 1с-ый контрол
4 Lexey_
 
08.08.16
15:42
(0) "...такое ощущение, что он их при пролистывании считывает каждый раз" т.е. отладчику ты не доверяешь?
5 samozvanec
 
08.08.16
15:42
(1) адрес временного хранилища сую
(2) а в тонком это дело не заведется, да и потребности нет. сделал бы на обычных, но не получилось картинку в строки (3) это как? пользователь все это дело вводит/редактирует, какой тут еще контрол может быть?
6 samozvanec
 
08.08.16
15:43
(4) отладчик никуда не заходит, поэтому и ощущение. ощущения присутствия платформенных механизьмов
7 Nuobu
 
08.08.16
15:44
(6) что значит "никуда не заходит"? Есть точки останова, есть замер производительности. Что замер говорит?
8 DmitrO
 
08.08.16
15:44
(5)т.е. все картинки сначала во временное хранилище опускаются? однако..
9 Fragster
 
гуру
08.08.16
15:46
(0) смирись. 1с по одной эти картинки получает, даже если у них адрес одинаковый.
вариант только сделать коллекцию или html документ со встроенными через dataurl картинками
10 Fragster
 
гуру
08.08.16
15:47
и в 8.3.8 также тормозит
11 samozvanec
 
08.08.16
15:50
(7) значит не останавливается на точках останова при прокрутке. и в замере пусто.

тормоза при прокрутке списка, кстати)
(8) пользюк выбирает картинку, она в обжатом и необжатом варианте кладется в хранилище
(9) пичалька. " сделать коллекцию или html документ со встроенными через dataurl картинками" я так понимаю, работать как с 1сными контролами в таком варианте нельзя, только для просмотра?
12 Ёпрст
 
08.08.16
15:51
(11) будешь так же ловить клик на странице и обрабатывать действия
13 Nuobu
 
08.08.16
15:53
Не сталкивался, но можно попробовать сделать порционный вывод. Типо по 100-200 штук.
14 Fragster
 
гуру
08.08.16
15:55
(11) ну вот я договорился, что с префиксом v8: запизиваю навигационные ссылки, с префиксом tel: телефоны (1с звонит у меня), получилось так:
    Адрес = ДанныеСобытия.Href;
    Если Не ЗначениеЗаполнено(Адрес) Тогда Возврат; КонецЕсли;
    СсылкаТелефон = "tel:";
    СсылкаЭлемент = "v8:";
    
    Если Найти(Адрес, СсылкаЭлемент) = 1 Тогда
        ПерейтиПоНавигационнойСсылке(Сред(Адрес, СтрДлина(СсылкаЭлемент) + 1));
    ИначеЕсли Найти(Адрес, СсылкаТелефон) = 1 Тогда
        Если сфпФормаТелефон <> Неопределено Тогда
            сфпФормаТелефон.НабратьНомерКИ(Партнер, Сред(Адрес, СтрДлина(СсылкаТелефон) + 1));
        КонецЕсли;
    Иначе
        ЗапуститьПриложение(Адрес);
        //СтандартнаяОбработка = Истина;
    КонецЕсли;

также можно придумать префиксы со стандартными командами и их подобным образом обрабатывать.
15 Fragster
 
гуру
08.08.16
15:55
договорился сам с собой
16 Fragster
 
гуру
08.08.16
15:57
а вот штука, которая получает dataurl:

&НаСервереБезКонтекста
Функция ПолучитьDataUrlКартинки(Знач Картинка)
    Если Картинка = Неопределено Тогда
        Картинка = Новый Картинка;
    КонецЕсли;
    Стр = Base64Строка(Картинка.ПолучитьДвоичныеДанные());
    Стр = СтрЗаменить(Стр, Символ(10), "");
    Стр = СтрЗаменить(Стр, Символ(13), "");
    Возврат Стр;
КонецФункции
17 Fragster
 
гуру
08.08.16
15:58
а так оно в макете в блоке со стилями (подставляется через стрзаменить):

            .mark_bg {
                height: 16px;
                width: 16px;
                background-image: url("data:image/png;base64,&_КартинкаПометок");
            }
18 Fragster
 
гуру
08.08.16
15:59
только там есть какое-то ограничение на размер, может и не прокатить. в таком случае можно класть в общедоступное место и через src= у img указывать прямую ссылку. тогда тоже намного быстрее, чем стандартный 1с вариант работает
19 samozvanec
 
08.08.16
15:59
(14) ой погоди, это у тебя в поле хтмл документа такая байда и ты клики по ссылкам перехватываешь?
20 Fragster
 
гуру
08.08.16
16:00
(19) да
21 samozvanec
 
08.08.16
16:03
(20) ох... ща переварю) а сам контрол ты по шаблону рисуешь? типа хтмл страничка каждый раз генерится? со стилями - с CSS?
22 Nuobu
 
08.08.16
16:05
(19) То есть можно отловить нажатие на гиперссылку в поле ХТМЛ?
23 DmitrO
 
08.08.16
16:09
(18)слушай, я тут недавно выяснил что в поле html вполне нормально отображаются картинки по внутренним навигационным ссылкам 1С, поэтому перекладывать картинку в inplace не обязательно вроде как..
24 Fragster
 
гуру
08.08.16
16:18
(23) только тормозит, как и в (0)
25 Fragster
 
гуру
08.08.16
16:21
(21) типа того. получается что-то типа того: https://i.imgur.com/1UDgupB.png
26 samozvanec
 
08.08.16
16:27
(25) о как. а нажатие на ссылку как ловишь? " Адрес = ДанныеСобытия.Href; " это в onclick происходит?
27 Fragster
 
гуру
08.08.16
16:27
да
28 Nuobu
 
08.08.16
16:29
(27) Можешь ссылкой кинуть, где ты про всё это узнал?
29 samozvanec
 
08.08.16
16:29
(27) понял. спасибо за идею! теперь надо взвесить, насколько оно мне надо) может и фиг с ним, что тормозит, на тысяче строк надо потестить. а так вообще прикольно, таким образом я еще не извращался)
30 Fragster
 
гуру
08.08.16
17:40
(28) про что?
31 Nuobu
 
08.08.16
17:42
(30) Про то, как из HTML отлавливать событие клика. Или разжевать для меня, пожалуйста.
32 Fragster
 
гуру
08.08.16
17:43
(31) Расширение поля формы для поля HTML документа.ПриНажатии (Form extension for a HTML document field.OnClick)
Расширение поля формы для поля HTML документа (Form extension for a HTML document field)
ПриНажатии (OnClick)
Синтаксис:

ПриНажатии(<ДанныеСобытия>, <СтандартнаяОбработка>)
Параметры:

<ДанныеСобытия>

Тип: ФиксированнаяСтруктура.
Параметр заполняется фиксированной структурой со свойствами (всегда английского написания):
Anchor - Неопределено или элемент А, если нажали на ссылку;
Element - элемент, на который нажали;
Button - Неопределено или элемент input c типом button или элемент button, если нажали на кнопку;
Event - передается информация о событии, специфичная для используемого браузера;
Document - документ, являющийся владельцем элемента, на котором было произведено нажатие;
Href - Неопределено или значение поля Href элемента А. При этом, если в событии браузера используется ссылка с закодированными символами, не являющимися символами латинского алфавита, то в данном свойстве строка будет содержать раскодированные символы.
При использовании свойств и методов этих объектов, в связи с особенностями объектных моделей различных браузерах, их написание необходимо приводить в соответствии с требованиями конкретной модели.
Свойство Element всегда заполняется объектом, на который непосредственно нажали.
Свойства Anchor и Button, заполняются только тогда, когда нажатие произошло на ссылке или кнопке.
Например, ссылка, тег А может иметь вид <a href=”about:blank”> <b>bold anchor text</b> normal anchor text </a>.
После нажатия на normal anchor text, фиксированная структура заполнится следующим образом:
Данные.Anchor = ЭлементА;
Данные.Element = ЭлементА;
Данные.Button = Неопределено;
Данные.Document = ЭлементА.document/ЭлементА.ownerDocument;
Данные.Href = decodeURI(ЭлементА.Href).
А после нажатия на bold anchor text, то структура заполнится:
Данные.Anchor = ЭлементА;
Данные.Element = ЭлементB;
Данные.Button = Неопределено;
Данные.Document = ЭлементА.document/ЭлементА.ownerDocument;
Данные.Href = decodeURI(ЭлементА.Href).

В режимах запуска "Толстый клиент" и "Тонкий клиент" свойства Anchor, Element, Button, Event и Document содержат значения типа COMОбъект.
В режиме запуска "Веб-клиент" свойства Anchor, Element, Button, Event и Document содержат значения типа ВнешнийОбъект.

На мобильной платформе свойства Anchor, Element, Button, Event, Document всегда Неопределено; Href – содержит адрес перехода.
<СтандартнаяОбработка>

Тип: Булево.
В данный параметр передается признак выполнения стандартной (системной) обработки события. Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет. Отказ от стандартной обработки не отменяет действие.
Значение по умолчанию: Истина.
Описание:

Возникает при нажатии (клике мышью или с помощью клавиатуры) на любом элементе внутри окна ПоляHTMLДокумента.
Примечание:

На мобильной платформе возникает только при попытке перехода на другую страницу.
--------------------------------------------------------------------------------

     Методическая информация
33 Nuobu
 
08.08.16
17:44
(32) Ух ты, спасибо.
Программист всегда исправляет последнюю ошибку.