Здравствуйте,
Есть обработка которая загружает картинки из каталога в 1С,
Картинки у меня хранятся в папке C:\pic
Вид хранения
Основная картинка
КодДляПоиска
Доп.
КодДляПоиска_1
Доп.
КодДляПоиска_2
и.т.д
Подскажите, что нужно поправить в коде, чтоб загружались картинки _1, _2 с одинаковым кодом, номером и присваивались нужной Номенклатуре.
Сейчас получается выгрузить несколько картинок в одну карточку, только если поменять расширение.
Вот весь код.
Есть обработка которая загружает картинки из каталога в 1С,
Картинки у меня хранятся в папке C:\pic
Вид хранения
Основная картинка
КодДляПоиска
Доп.
КодДляПоиска_1
Доп.
КодДляПоиска_2
и.т.д
Подскажите, что нужно поправить в коде, чтоб загружались картинки _1, _2 с одинаковым кодом, номером и присваивались нужной Номенклатуре.
Сейчас получается выгрузить несколько картинок в одну карточку, только если поменять расширение.
Вот весь код.
&НаКлиенте
Процедура ПапкаСКартинкамиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ВыборКаталога = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
Если ВыборКаталога.Выбрать() Тогда
Объект.ПутьККаталогу = ВыборКаталога.Каталог;
КонецЕсли;
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаСервереБезКонтекста
Функция МассивРасширенийКартинок()
МассивРасширений = Новый Массив;
МассивРасширений.Добавить("*.bmp");
МассивРасширений.Добавить("*.gif");
МассивРасширений.Добавить("*.png");
МассивРасширений.Добавить("*.jpeg");
МассивРасширений.Добавить("*.dib");
МассивРасширений.Добавить("*.rle");
МассивРасширений.Добавить("*.tif");
МассивРасширений.Добавить("*.jpg");
МассивРасширений.Добавить("*.ico");
МассивРасширений.Добавить("*.wmf");
МассивРасширений.Добавить("*.emf");
Возврат МассивРасширений;
КонецФункции
&НаКлиенте
Процедура ЗагрузитьКартинки(Команда)
Каталог = Новый Файл(Объект.ПутьККаталогу);
Если НЕ Каталог.Существует() Тогда
Сообщить("Не верно указан каталог!");
Возврат;
КонецЕсли;
//МассивФайлов = НайтиФайлы(Объект.ПутьККаталогу, "*", Истина);
МассивФайлов = Новый Массив;
МассивРасширений = МассивРасширенийКартинок();
Для каждого ТекРасширение Из МассивРасширений Цикл
цМассивФайлов = НайтиФайлы(Объект.ПутьККаталогу, ТекРасширение, Истина);
Для каждого ТекФайл Из цМассивФайлов Цикл
МассивФайлов.Добавить(ТекФайл);
КонецЦикла;
КонецЦикла;
МассивФайловДляЗагрузки = Новый Массив;
Для каждого Файл Из МассивФайлов Цикл
СтруктураФайла = Новый Структура("КодДляПоиска,Размер,ПолноеИмя,ИмяБезРасширения,Расширение,ВремяИзменения,УниверсальноеВремяИзменения");
СтруктураФайла.КодДляПоиска = СтрЗаменить(Файл.ИмяБезРасширения," ","");
СтруктураФайла.Размер = Файл.Размер();
СтруктураФайла.ПолноеИмя = Файл.ПолноеИмя;
СтруктураФайла.ИмяБезРасширения = Файл.ИмяБезРасширения;
СтруктураФайла.Расширение = Файл.Расширение;
СтруктураФайла.ВремяИзменения = Файл.ПолучитьВремяИзменения();
СтруктураФайла.УниверсальноеВремяИзменения = Файл.ПолучитьУниверсальноеВремяИзменения();
МассивФайловДляЗагрузки.Добавить(СтруктураФайла);
КонецЦикла;
МассивФайловДляЗагрузки = ПроверитьМассивФайловДляЗагрузки(МассивФайловДляЗагрузки);
СоответствиеАдресовВХранилище = Новый Соответствие;
Для Каждого Файл Из МассивФайловДляЗагрузки Цикл
Если ЗначениеЗаполнено(СоответствиеАдресовВХранилище.Получить(Файл.ПолноеИмя)) Тогда
Файл.Вставить("АдресВременногоХранилищаФайла", СоответствиеАдресовВХранилище.Получить(Файл.ПолноеИмя));
Иначе
ДвоичныеДанные = Новый ДвоичныеДанные(Файл.ПолноеИмя);
АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные,ЭтаФорма.УникальныйИдентификатор);
Файл.Вставить("АдресВременногоХранилищаФайла", АдресВременногоХранилищаФайла);
СоответствиеАдресовВХранилище.Вставить(Файл.ПолноеИмя, АдресВременногоХранилищаФайла);
КонецЕсли;
КонецЦикла;
ЗагрузитьКартинкиСервер(МассивФайловДляЗагрузки);
//Сообщить("Загрузка окончена! Добавлено картинок: " + МассивФайловДляЗагрузки.Количество() + " шт.");
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПроверитьМассивФайловДляЗагрузки(МассивФайловДляЗагрузки)
Результат = Новый Массив;
Для каждого Файл Из МассивФайловДляЗагрузки Цикл
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы
| ПО (НоменклатураПрисоединенныеФайлы.ВладелецФайла = Номенклатура.Ссылка)
| И (НоменклатураПрисоединенныеФайлы.Наименование ПОДОБНО &КодДляПоиска)
| И (НоменклатураПрисоединенныеФайлы.ПометкаУдаления = ЛОЖЬ)
| И (НоменклатураПрисоединенныеФайлы.Размер = &Размер)
|ГДЕ
| Номенклатура.КодДляПоиска ПОДОБНО &КодДляПоиска
| И НоменклатураПрисоединенныеФайлы.Ссылка ЕСТЬ NULL ";
Запрос.УстановитьПараметр("КодДляПоиска" , Файл.КодДляПоиска);
Запрос.УстановитьПараметр("Размер" , Файл.Размер);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НовыйФайл = Новый Структура("Номенклатура,КодДляПоиска,Размер,ПолноеИмя,ИмяБезРасширения,Расширение,ВремяИзменения,УниверсальноеВремяИзменения", Выборка.Ссылка);
ЗаполнитьЗначенияСвойств(НовыйФайл, Файл);
Результат.Добавить(НовыйФайл);
КонецЦикла;
КонецЦикла;
Возврат Результат;
КонецФункции // ПроверитьМассивФайловДляЗагрузки()
&НаСервереБезКонтекста
Функция ЗагрузитьКартинкиСервер(МассивФайловДляЗагрузки)
Для Каждого Файл Из МассивФайловДляЗагрузки Цикл
ПрисоединенныйФайл = ПрисоединенныеФайлы.ДобавитьФайл( Файл.Номенклатура,
Файл.КодДляПоиска,
СтрЗаменить(Файл.Расширение, ".", ""),
Файл.ВремяИзменения,
Файл.УниверсальноеВремяИзменения,
Файл.АдресВременногоХранилищаФайла,
Файл.ПолноеИмя,
"");
ТекСпр = Файл.Номенклатура.ПолучитьОбъект();
ТекСпр.ФайлКартинки = ПрисоединенныйФайл;
ТекСпр.Записать();
КонецЦикла;
КонецФункции
ПоказатьПо теме из базы знаний
- Загрузка картинок с FTP (конвертация в jpg)
- Загрузка картинок в справочник Номенклатура УТ10/УПП по артикулу
- Загрузка картинок/изображений в номенклатуру УТ 11 (Управление торговлей 11), Комплексная автоматизация 2 (КА 2) и Розница 2.3 по артикулам
- Загрузка картинок из каталога
- Выгрузка, загрузка картинок / изображений из(в) структуры(у) базы. УТ 11.5.16.68. Розница 2.3.17.22. Универсальный механизм, основанный на БСП
Найденные решения
(4) Это будет работать, только если картинок не больше 9
Для каждого Файл Из МассивФайлов Цикл
СтруктураФайла = Новый Структура("КодДляПоиска,Размер,ПолноеИмя,ИмяБезРасширения,Расширение,ВремяИзменения,УниверсальноеВремяИзменения");
ИмяБезРасширения = Файл.ИмяБезРасширения;
Если Сред(ИмяБезРасширения, СтрДлина(ИмяБезРасширения) - 1, 1) = "_" Тогда
ИмяБезРасширения = Лев(ИмяБезРасширения, СтрДлина(ИмяБезРасширения) - 2);
КонецЕсли;
СтруктураФайла.КодДляПоиска = СокрЛП(ИмяБезРасширения);
// Продолжения цикла ....................................
КонецЦикла;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Я делал это так - шел циклом по каталогу, и искал конкретное имя файла, зная что у него постфикс имеет вид "_ИтерацияЦикла", пока файлы находились, я добавлял их путь в массив, когда файл не нашелся, значит все, иду и добавляю то что в массиве. Здесь важно, чтобы названия были по порядку, и не было сценария, когда есть файл "_3", и нет файла "_2".
(4) Это будет работать, только если картинок не больше 9
Для каждого Файл Из МассивФайлов Цикл
СтруктураФайла = Новый Структура("КодДляПоиска,Размер,ПолноеИмя,ИмяБезРасширения,Расширение,ВремяИзменения,УниверсальноеВремяИзменения");
ИмяБезРасширения = Файл.ИмяБезРасширения;
Если Сред(ИмяБезРасширения, СтрДлина(ИмяБезРасширения) - 1, 1) = "_" Тогда
ИмяБезРасширения = Лев(ИмяБезРасширения, СтрДлина(ИмяБезРасширения) - 2);
КонецЕсли;
СтруктураФайла.КодДляПоиска = СокрЛП(ИмяБезРасширения);
// Продолжения цикла ....................................
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот