Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> ПолеКартинки, что делаю не так?          
onsamuy Подменю пользователя
сообщение 04.03.13, 20:54
Сообщение #1

Оратор
Иконка группы
Группа: Местный
Сообщений: 265
Спасибо сказали: 71 раз
Рейтинг: 0

Платформа 8.2.16.368, имеется форма, на форме имеется поле картинки, также табличное поле ТПСписокФайловКартинокСерфитикатов.
в табличном поле при активизации строки выполняется код:
Процедура ТПСписокФайловКартинокСерфитикатовПриАктивизацииСтроки(Элемент)
    
    Изображение = Новый Картинка(ИмяКаталогаИзображений+"\"+Элемент.Текущаястрока.Файл);
    ЭлементыФормы.ПолеКартинки.Картинка = Изображение;    
    
КонецПроцедуры


то есть, в каталоге ИмяКаталогаИзображений имеются bmp файлы изображений, которые таким образом выводятся в поле картинки. При активизации строки (вывод изображения на поле картинки) увеличивается объем процесса 1сv8.exe на 20 Мб. Таким образом, при переходе по строкам, через минуту объем процесса с 200 Мб вырастает до 1 000 Мб. Почему переменная Изображение не обнуляется? По идее каждый раз при выводе строки она должна сбрасываться?

logist Подменю пользователя
сообщение 04.03.13, 21:45
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2539 раз
Рейтинг: 0

Попробуйте в начале процедуры указать
ЭлементыФормы.ПолеКартинки.Картинка = Неопределено;


Signature
Личные бесплатные консультации не даю, для этого есть форум!

onsamuy Подменю пользователя
сообщение 04.03.13, 22:48
Сообщение #3

Оратор
Иконка группы
Группа: Местный
Сообщений: 265
Спасибо сказали: 71 раз
Рейтинг: 0

Ругается на несоответствие типов. Но даже если я присваиваю
ЭлементыФормы.ПолеКартинки.Картинка = БиблиотекаКартинок.Пустая;
все равно процесс разрастается. Порылся на форумах, похоже это глюк платформы. Можно провести эксперимент, откройте Элемент справочника Номенклатура в УТП, Кликните на картинку номенклатуры, выберите какое либо изображение, даже не сохраняйте, кликните еще раз, выберите изображение. И так повторите раз 10-20. Откройте диспетчер задач, будете "приятно" удивлены размером процесса вашей 1с smile.gif.
Похоже, конструктор
Новый Картинка ("ПутьКФайлу")
при каждом вызове добивает в память, а не обнуляет, даже если картинку присваивать одной и той же переменной.
Пришлось идти через ж..., то есть сначала поднимать все картинки в память, в таблицу значений, и при выводе строки искать картинку в таблице, а не вызывать конструктор новой картинки. То есть когда при выборе каталога читаю список файлов, еще и поднимаю их в таблицу:
Процедура ПрочитатьСписокФайлов()
    
    ТПСписокФайловКартинокСерфитикатов.Очистить();
    НайденныеФайлы = НайтиФайлы(ИмяКаталогаИзображений,"*.bmp");    
    
    мТаблицаИзображений = Новый ТаблицаЗначений;
    мТаблицаИзображений.Колонки.Добавить("Путь");
    мТаблицаИзображений.Колонки.Добавить("Картинка");
    
    Для Каждого Файл Из НайденныеФайлы Цикл
        НоваяСтрока = ТПСписокФайловКартинокСерфитикатов.Добавить();
        НоваяСтрока.Файл = Файл.Имя;
        новаястр = мТаблицаИзображений.Добавить();
        новаястр.Путь     = Файл.Имя;
        новаястр.Картинка = Новый Картинка(Файл.ПолноеИмя);
    КонецЦикла;
    
    Если ТПСписокФайловКартинокСерфитикатов.Количество()>0 Тогда
        ЭлементыФормы.ТПСписокФайловКартинокСерфитикатов.ТекущаяСтрока = ТПСписокФайловКартинокСерфитикатов[0];
    КонецЕсли;
    
КонецПроцедуры


а уж потом при выводе строки присваиваю элементу ПолеКартинки изображение из ТЗ:
Процедура ТПСписокФайловКартинокСерфитикатовПриАктивизацииСтроки(Элемент)

    ЭлементыФормы.ПолеКартинки.Картинка = мТаблицаИзображений.Найти(Элемент.Текущаястрока.Файл,"Путь").Картинка;    
    
КонецПроцедуры


Конечно, метод найти() может вернуть и Неопределено, но пока для отладки это не столь важно smile.gif
И все равно (!!!) при переходе по строкам память забивается. Забивается, пока не перекликаешь все строки smile.gif Когда проходишь строки по второму разу, размер процесса стабилен. И то хорошо, благо, файлов в каталог кладут пока немного, а там, видишь, разрабы исправят баг платформы. Вернее, как они сами выразились, "Это не ошибка.
Особенность поведения кэш 1С предприятия."

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 04.07.25, 1:47
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!