Имя: Пароль:
1C
1С v8
ошибка "не хватает памяти"
, ,
0 LEXA232
 
26.02.12
15:19
Процедура КнопкаВыполнитьНажатие(Кнопка)
МассивНайденных = НайтиФайлы(Путь, "*.jpg");
счетчик = 1;

ЗапросКартинок = Новый Запрос;
ЗапросКартинок.Текст =
"ВЫБРАТЬ
|    ХранилищеДополнительнойИнформации.Ссылка,
|    ХранилищеДополнительнойИнформации.Наименование,
|    ХранилищеДополнительнойИнформации.ВидДанных,
|    ХранилищеДополнительнойИнформации.ИмяФайла,
|    ХранилищеДополнительнойИнформации.Объект,
|    ХранилищеДополнительнойИнформации.Хранилище,
|    ХранилищеДополнительнойИнформации.ТекстФайла,
|    ХранилищеДополнительнойИнформации.Представление
|ИЗ
|    Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации";
Результат = ЗапросКартинок.Выполнить().Выгрузить();
Отбор = Новый Структура;

СчетчикСозданных = 0;
код = "";
Для Каждого Файл из МассивНайденных Цикл
   Состояние("обрабатывается объект " + Строка(счетчик) + " из " + Строка(МассивНайденных.Количество()));
   счетчик = счетчик + 1;
   Позиция = Найти(Файл.Имя , "_" );
   Если Позиция <> 0 Тогда
       код = Сред(Файл.Имя, 1, Позиция - 1);
       Если СОКРЛП(Справочники.Номенклатура.НайтиПоКоду(код).Код) = код Тогда
           Отбор.Вставить("ИмяФайла" ,Файл.Имя);
           Массив = Результат.НайтиСтроки(Отбор);

           Если Массив.Количество() = 0 Тогда
               Номенклатура = Справочники.Номенклатура.НайтиПоКоду(код).ПолучитьОбъект();
               Справочник = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент();
               Справочник.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
               Справочник.ИмяФайла = Файл.Имя;
               Справочник.Наименование = Файл.Имя;
               Справочник.Объект = Номенклатура.Ссылка;
               Справочник.Хранилище = Новый ХранилищеЗначения(Новый Картинка(Файл.ПолноеИмя),Новый СжатиеДанных);
               Справочник.Записать();
               СчетчикСозданных = СчетчикСозданных + 1;
               
               Если Найти(Файл.Имя , "v01_s" ) <> 0 и Номенклатура.ОсновноеИзображение.ИмяФайла = "" Тогда
                   Номенклатура.ОсновноеИзображение = Справочник.Ссылка;
                   Номенклатура.Записать();
               ИначеЕсли Найти(Файл.Имя , "v02_s" ) <> 0 и Номенклатура.ОсновноеИзображение.ИмяФайла = "" Тогда
                   Номенклатура.ОсновноеИзображение = Справочник.Ссылка;
                   Номенклатура.Записать();
               ИначеЕсли Найти(Файл.Имя , "v03_s" ) <> 0 и Номенклатура.ОсновноеИзображение.ИмяФайла = "" Тогда
                   Номенклатура.ОсновноеИзображение = Справочник.Ссылка;
                   Номенклатура.Записать();
               ИначеЕсли Найти(Файл.Имя , "v04_s" ) <> 0 и Номенклатура.ОсновноеИзображение.ИмяФайла = "" Тогда
                   Номенклатура.ОсновноеИзображение = Справочник.Ссылка;
                   Номенклатура.Записать();
               ИначеЕсли Найти(Файл.Имя , "v05_s" ) <> 0 и Номенклатура.ОсновноеИзображение.ИмяФайла = "" Тогда
                   Номенклатура.ОсновноеИзображение = Справочник.Ссылка;
                   Номенклатура.Записать();
               ИначеЕсли Найти(Файл.Имя , "v06_s" ) <> 0 и Номенклатура.ОсновноеИзображение.ИмяФайла = "" Тогда
                   Номенклатура.ОсновноеИзображение = Справочник.Ссылка;
                   Номенклатура.Записать();
               КонецЕсли;
               
           Иначе
               
           КонецЕсли;
           
           
       Иначе
       КонецЕсли;
   КонецЕсли;
КонецЦикла;
Сообщить("обработано " + Строка(МассивНайденных.Количество()) + " картинок и создано " + строка(СчетчикСозданных));
КонецПроцедуры
1 Grusswelle
 
26.02.12
15:22
Неудивительно. Попробуй поставить условия в запросе - уменьшить объём результата.
2 DrShad
 
26.02.12
15:22
(0) а что собственно удивляет?
3 Нуф-Нуф
 
26.02.12
15:23
ужаснах
4 Wobland
 
26.02.12
15:24
(2) это он хвастается
5 LEXA232
 
26.02.12
15:26
Неудивительно. Попробуй поставить условия в запросе - уменьшить объём результата

не могли бы подсказать как это сделать
6 DrShad
 
26.02.12
15:27
(5) пилять, ручками - чем же еще
7 LEXA232
 
26.02.12
15:29
даже если одну картинку загружаю
8 DrShad
 
26.02.12
15:35
(7) тем более если одну, накуя весь справочник со всеми полями в память загонять?
9 Нуф-Нуф
 
26.02.12
15:35
оставь в запросе только
"ВЫБРАТЬ
|    ХранилищеДополнительнойИнформации.Ссылка,
|ИЗ
|    Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации";

да и вообще, от поиска по коду можно избавиться если соединять хранилище и номенклатуру в запросе
10 Нуф-Нуф
 
26.02.12
15:36
и на будущее, не стоит в запросе выбирать те поля, которые ты не собираешься использовать. тем более когда касается дело ХранилищеДополнительнойИнформации.Хранилище
11 LEXA232
 
26.02.12
16:41
спасибо большое помогло уменьшить запрос
12 LEXA232
 
26.02.12
17:04
подскажите а как сделать так чтобы программа при запуски если указанна папка открывала все папки внутри и пробигала по каждой папке в поиске изображения
13 LEXA232
 
26.02.12
17:08
Процедура ПутьНачалоВыбора(Элемент, СтандартнаяОбработка)
   
   СтандартнаяОбработка = Ложь;
   
   РезультатВыбора = РаботаСФайлами.ВыбратьКаталог(Элемент.Значение);
   
   
КонецПроцедуры
Закон Брукера: Даже маленькая практика стоит большой теории.