Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 сен 2024, 08:25

Сохранить файл изображения

Автор vvs_1979, 13 сен 2023, 19:19

0 Пользователей и 2 гостей просматривают эту тему.

antoneus

SQL консоль - это консоль запросов, что ли? Вот, запустил.
И в процедуре такая же ошибка?

vvs_1979

А что Вы в &Ном передаёте ?

antoneus

Ссылку на номенклатуру.

vvs_1979

А я просто строку :-(
Я же просто название в функцию передавал.

antoneus

Нет, в приведенном коде передается ссылка. СтрокаТовар.Номенклатура - это ссылка.

vvs_1979

У меня в процедуре строка
Q="ВЫБРАТЬ
|ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла КАК ДвоичныеДанныеФайла
|ИЗ
|    РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
|ГДЕ
|    ДвоичныеДанныеФайлов.Файл.ВладелецФайла = &Ном";

    Запрос.Текст = Q;
    Запрос.УстановитьПараметр("Ном", Имя_Т);               
    файлы=Запрос.Выполнить().Выбрать();

Значение файлы в трассировке показывает значение "ошибка чтения значения" . Не знаете почему ?
Вот поэтому у меня ничего и не работает (скорее всего. Хотя передаётся в процуру:

   Для каждого СтрокаТовар Из Объект.Запасы Цикл
      B=Расш1_Найти(СтрокаТовар.Номенклатура);   
   КонецЦикла;
И в процедуре показывает значение переданного параметра нормально.

fruitella

У меня есть старая обработка, которую я делал когда то. Просто скопируй этот код и все будет выгружаться.
На строке ПолученныйФайл = РаботаСФайлами.ДвоичныеДанныеФайла(Выборка.Ссылка.ФайлКартинки); идет обращение к общему модулю для получения двоичных данных, думаю в рознице он также должен быть. Протестил на УТ и ERP, все работает.
#Область ВзаимодействиеСПользователем

&НаКлиенте
Процедура ВыгрузитьНаДиск(Команда)
Проводник = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
ОбработкаПослеВыбора = Новый ОписаниеОповещения("ПослеВыбораКаталога", ЭтотОбъект);
Проводник.Показать(ОбработкаПослеВыбора);
КонецПроцедуры

&НаКлиенте
Процедура ОповеститьПользователяОбУспешнойВыгрузке()
ПоказатьОповещениеПользователя(
"Обработка выгрузки файлов",,
"Выгрузка файлов завершена",
БиблиотекаКартинок.Информация,
СтатусОповещенияПользователя.Информация
);
КонецПроцедуры

#КонецОбласти

#Область ВыгрузкаФайлов

&НаКлиенте
Процедура ПослеВыбораКаталога(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
Сообщить( "Не выбран путь для сохранения файлов");
Возврат;
Иначе
МассивРасширений = ПолучитьСписокРасширений();
КонецЕсли;

Объект.ПутькКВыбранномуКаталогу = ВыбранныеФайлы[0];
МассивФайлов = ПолучитьСписокФайловИзНоменклатуры();

Для Каждого Файл Из МассивФайлов Цикл
ДанныеФайлов = ПолучитьИзВременногоХранилища(Файл.АдресВХранилище);

Если ТипЗнч(ДанныеФайлов) = Тип("ДвоичныеДанные") Тогда
ПутьКФайлу = Объект.ПутькКВыбранномуКаталогу + "\" + Файл.ИмяФайла + "." + Файл.Расширение;
ДанныеФайлов.Записать(ПутьКФайлу);
ОповеститьПользователяОбУспешнойВыгрузке();
КонецЕсли;
КонецЦикла;

КонецПроцедуры


&НаСервереБезКонтекста
Функция ПолучитьСписокФайловИзНоменклатуры()
МассивФайлов = Новый Массив;

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               | Номенклатура.Наименование КАК Наименование,
               | Номенклатура.Ссылка КАК Ссылка,
               | Номенклатура.ФайлКартинки.Расширение КАК ФайлКартинкиРасширение
               |ИЗ
               | Справочник.Номенклатура КАК Номенклатура
               |ГДЕ
               | Номенклатура.ФайлКартинки <> &ФайлКартинки";

Запрос.УстановитьПараметр("ФайлКартинки", Справочники.НоменклатураПрисоединенныеФайлы.ПустаяСсылка());
Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Количество() = 0 Тогда
Сообщить("В справочнике номенклатура нет ни одного привязанного файла с картинкой");
Возврат Неопределено;
КонецЕсли;


Пока Выборка.Следующий() Цикл
ПолученныйФайл = РаботаСФайлами.ДвоичныеДанныеФайла(Выборка.Ссылка.ФайлКартинки);  //ДвоичныеДанные

Если ПолученныйФайл = Неопределено Тогда
Продолжить;
КонецЕсли;

АдресВХранилище = ПоместитьВоВременноеХранилище(ПолученныйФайл);

//Корректировка названия файла
ИмяФайла = СтрЗаменить(Выборка.Наименование, "/",  "_");
ИмяФайла = СтрЗаменить(ИмяФайла, "\", "_");

СтруктураДанных = Новый Структура();
СтруктураДанных.Вставить("ИмяФайла", Выборка.Наименование);
СтруктураДанных.Вставить("Расширение", Выборка.ФайлКартинкиРасширение);
СтруктураДанных.Вставить("АдресВХранилище", АдресВХранилище);

МассивФайлов.Добавить(СтруктураДанных);
КонецЦикла;

Возврат МассивФайлов;
КонецФункции

#КонецОбласти



vvs_1979

fruitella,
Добавил функцию &НаСервереБезКонтекста
Функция ПолучитьСписокФайловИзНоменклатуры()   
При её  работе :
Запрос = Новый Запрос;   
     Запрос.Текст = "ВЫБРАТЬ
                   |    Номенклатура.Наименование КАК Наименование,
                   |    Номенклатура.Ссылка КАК Ссылка,
                   |    Номенклатура.ФайлКартинки.Расширение КАК ФайлКартинкиРасширение
                   |ИЗ
                   |    Справочник.Номенклатура КАК Номенклатура
                   |ГДЕ
                   |    Номенклатура.ФайлКартинки <> &ФайлКартинки";                       
Запрос.УстановитьПараметр("ФайлКартинки",Справочники.НоменклатураПрисоединенныеФайлы.ПустаяСсылка());
    Выборка = Запрос.Выполнить().Выбрать();
В выборке Ошибка чтения значения , хотя в номенклатуре файлы есть (даже можно сохранить в 1С Предприятие)


antoneus

Так на этом процедура заканчивается или там все-таки что-то дальше есть?

vvs_1979

там как раз в Номенклатура ФайлКартинки везде null.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск