|
Сохранить файл изображения | ☑ | ||
---|---|---|---|---|
0
vvs79
13.09.23
✎
19:22
|
1С Розница 3.
В справочнике Номенклатура есть ссылка на справочник НоменклатураПрисоединенныеФайлы. В котором, в свою очередь, есть поле ФайлХранилище (список). Но подскажете, как програмно сохранить файл из этого списка на диск ? Читал все советы по такой задаче, ничего не помогло. (или расскажите где почитать про такое). |
|||
1
lubitelxml
13.09.23
✎
19:34
|
(0) там вроде была кнопка сохранить, посмотри как работает, и воспроизведи
|
|||
2
vvs79
13.09.23
✎
19:43
|
Пункт всплывающего меню.
"посмотри как работает, и воспроизведи" везде про такое читаю, но не знаю как (начал программить на 1С 2-ве недели назад). Не подскажете где написано как это делать. Или сами расскажите. |
|||
3
mikecool
13.09.23
✎
19:52
|
показывай, что уже сделал
|
|||
4
vvs79
13.09.23
✎
20:09
|
Добавил кнопку на форму расходной накладной и описал событие нажатия:
&НаСервере Функция Расш1_Найти(Имя_Т) Запрос = Новый Запрос; Q="ВЫБРАТЬ | НоменклатураПрисоединенныеФайлы.Ссылка КАК Ссылка, | НоменклатураПрисоединенныеФайлы.ПутьКФайлу КАК ПутьКФайлу, | НоменклатураПрисоединенныеФайлы.ТипХраненияФайла КАК ТипХраненияФайла, | НоменклатураПрисоединенныеФайлы.Том КАК Том, | НоменклатураПрисоединенныеФайлы.ФайлХранилище КАК ФайлХранилище |ИЗ | Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы |ГДЕ | НоменклатураПрисоединенныеФайлы.ВладелецФайла.Ссылка = &ном" ; Запрос.Текст = Q; Запрос.УстановитьПараметр("ном", Имя_Т); файлы=Запрос.Выполнить().Выбрать(); n=0; Пока файлы.Следующий() Цикл сообщить("P:="+файлы.ПутьКФайлу); сообщить(файлы.ТипХраненияФайла); сообщить(файлы.Том); сообщить(файлы.ФайлХранилище); Выборка = Справочники.НоменклатураПрисоединенныеФайлы.Выбрать(); Пока Выборка.Следующий() Цикл ВладелецФайла = Выборка.ВладелецФайла ; Если ВладелецФайла=Имя_Т ТОГДА Сообщить(" найдено"); АдресХранилища=ПоместитьВоВременноеХранилище(Выборка.ФайлХранилище); ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища); //ДвоичныеДанные.Записать("c:\111.jpg"); КонецЕсли; КонецЦикла; n=n+1; конеццикла; КонецФункции Вот ДвоичныеДанные.Записать("c:\111.jpg"); говорит нет функции записать. |
|||
5
vvs79
13.09.23
✎
20:28
|
Ну и на клиенте вызов:
&НаКлиенте Процедура Расш1_всТоварыОчиститьПосле(Команда) Для каждого СтрокаТовар Из Объект.Запасы Цикл N=СтрокаТовар.Номенклатура; А="Название: "+СтрокаТовар.Номенклатура+" Цена: "+СтрокаТовар.Цена+" Количество: "+СтрокаТовар.Количество; B=Расш1_Найти(СтрокаТовар.Номенклатура); КонецЦикла; ФайлTXT= Новый ТекстовыйДокумент; A="<html><BODY BGCOLOR=""yellow""><font size=""6""color=""red"" face=""Arial"">" + Символы.ПС; ФайлTXT.ДобавитьСтроку(A); ФайлTXT.ДобавитьСтроку("<head>"); A="<img src=""logo.jpg"" width=""75"" height=""75""<br />"; ФайлTXT.ДобавитьСтроку(A); НС=0; ФайлTXT.ДобавитьСтроку("<table width=""100%"" cellspacing=""0"" cellpadding=""5"">"); ФайлTXT.ДобавитьСтроку("<tr> "); ФайлTXT.ДобавитьСтроку("<td width=""200"" valign=""top""><img src=""2c.jpg"" width=""250"" height=""600""<br /></td><td valign=""top"">"); ФайлTXT.ДобавитьСтроку("<table>"); ФайлTXT.ДобавитьСтроку("<tr>"); ФайлTXT.ДобавитьСтроку("<th BGCOLOR=""white"" colspan=""2"" width=""75%"" align=""left""><font size=""6"">НАИМЕНОВАНИЕ</font></th><th BGCOLOR=""white"" width=""25%""><font size=""6"">КОЛ-ВО</font></th>"); ФайлTXT.ДобавитьСтроку("</tr>"); Для каждого СтрокаТовар Из Объект.Запасы Цикл КодВозврата=""; А="Название: "+СтрокаТовар.Номенклатура+" Цена: "+СтрокаТовар.Цена+" Количество: "+СтрокаТовар.Количество; НС=НС+1; ФайлTXT.ДобавитьСтроку("<TR>"); ФайлTXT.ДобавитьСтроку("<td BGCOLOR=""white"" width=""5%"" align=""center""><font size=""6"">"+НС+"</font></td><td BGCOLOR=""blue"" width=""65%"" align=""center""><font COLOR=""white"" size=""6"">"+СтрокаТовар.Номенклатура+"</font></td><td BGCOLOR=""blue"" width=""25%"" align=""center""><font COLOR=""white"" size=""6"">"+СтрокаТовар.Количество+"</font></td>"); ФайлTXT.ДобавитьСтроку("</TR>"); КонецЦикла; ФайлTXT.ДобавитьСтроку("<p>"+"</p>"); ФайлTXT.ДобавитьСтроку("<p>"+"</p>"); ФайлTXT.ДобавитьСтроку("<p>"+"</p>"); ФайлTXT.ДобавитьСтроку("<p>"+"</p>"); ФайлTXT.ДобавитьСтроку("<font size=""12"">"); ФайлTXT.ДобавитьСтроку("<TR>"); I="Итого: "+Объект.Запасы.Итог("сумма")+" р."; ФайлTXT.ДобавитьСтроку("<td colspan=""3""><font size=""12"">"+I+"</font></td>"); ФайлTXT.ДобавитьСтроку("</TR>"); ФайлTXT.ДобавитьСтроку("</font>"); НазваниеК = СокрЛП(Объект.Контрагент); //ФайлTXT.ДобавитьСтроку("<div id=""footer"">"); ФайлTXT.ДобавитьСтроку("<TR>"); ФайлTXT.ДобавитьСтроку("<td height=""400"" valign=""bottom"" colspan=""3""><font size=""6"">"+НазваниеК+"</font></td>"); ФайлTXT.ДобавитьСтроку("</TR>"); ФайлTXT.ДобавитьСтроку("</table>"); ФайлTXT.ДобавитьСтроку("</table>"); ФайлTXT.ДобавитьСтроку("</BODY></html>"); ФайлTXT.НачатьЗапись(, "C:\secondmonitor\1.htm", КодировкаТекста.UTF8, Символы.ПС); ЗапуститьПриложение( "C:\secondmonitor\PUBID_538855-SecondMonitor.exe", "C:\secondmonitor\", // текущий каталог для запускаемого приложения Ложь, КодВозврата ); КонецПроцедуры |
|||
6
Tatitutu
14.09.23
✎
11:34
|
(4) слишком сложно и ...
замени Сообщить(" найдено"); АдресХранилища=ПоместитьВоВременноеХранилище(Выборка.ФайлХранилище); ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища); //ДвоичныеДанные.Записать("c:\111.jpg"); на МояКартинка=Выборка.ФайлХранилище.Получить(); МояКартинка.Записать("c:\111.jpg") ну когда немного разберёшься в механизмах можно вместо (4) СсылкаНаКарт = ПолучитьНавигационнуюСсылку(Имя_Т, "ОсновноеИзображение"); ПолучитьФайлССервераАсинх(ПолучитьСсылкуНаОбъектБазы(СсылкаНаКарт),"c:\111.jpg"); //но, это отдельная магия из мира MAGAZKA, где нет ничего не возможного |
|||
7
vvs79
14.09.23
✎
12:50
|
Заменил.
На строке МояКартинка.Записать("c:\111.jpg") ошибка: Значение не является значением объектного типа (Записать). |
|||
8
Tatitutu
14.09.23
✎
13:23
|
(7)
а так МояКартинка=Выборка.ФайлХранилище.Хранилище.Получить(); МояКартинка.Записать("c:\111.jpg") |
|||
9
vvs79
14.09.23
✎
13:28
|
Ещё бы название файла картинки узнать, а то "1111.jpg" это я просто-так написал :-(
|
|||
10
Табуретко
14.09.23
✎
13:31
|
(9)Выборка.ВладелецФайла
|
|||
11
Tatitutu
14.09.23
✎
13:39
|
(9) да по хорошему там все переписать легче заново
B=Расш1_Найти(СтрокаТовар.Номенклатура); обращаешься к ПРОЦЕДУРЕ как ФУНКЦИИ что такое B - она нигде потом не используется //ВОТ ЭТО ЧТО И ДЛЯ ЧЕГО ? клавиатура сломаны и буква закончились N, A ,B Для каждого СтрокаТовар Из Объект.Запасы Цикл N=СтрокаТовар.Номенклатура; А="Название: "+СтрокаТовар.Номенклатура+" Цена: "+СтрокаТовар.Цена+" Количество: "+СтрокаТовар.Количество; B=Расш1_Найти(СтрокаТовар.Номенклатура); КонецЦикла; сохраняемш в "c:\111.jpg" а в итоге пишешь 2c.jpg сохранять по идее нужно в папку "C:\secondmonitor\2c.jpg" раз уж решили подключить второй монитор а результат уже видел ? - вырви глаз ))) <BODY BGCOLOR=""yellow"" рулит |
|||
12
vvs79
14.09.23
✎
13:50
|
Насчёт процедуре, как в функции - раньше использовал параметр, потом надобность отпала (в процессе разработки, но вдруг ещё понадобиться).
"B" тоже раньше использовал. Про цвета - не я макет заказывал :-) (рабочий код). И МояКартинка=Выборка.ФайлХранилище.Хранилище.Получить(); вызывает другую ошибку: Поле объекта не обнаружено (Хранилище). :-( |
|||
13
Tatitutu
14.09.23
✎
13:57
|
МояКартинка=Выборка.ФайлХранилище.Получить();
в отладчике , чему равна МояКартинка ? |
|||
14
vvs79
14.09.23
✎
14:19
|
Правильно, МояКартинка = неопределено. Хотя в номенклатуре картинка есть.
|
|||
15
vvs79
14.09.23
✎
14:22
|
Мне тут люди подсказывают, что там (с картинками в номенклатуре) не всё так просто. Надо использовать РегистрыСведений.ДвоичныеДанныеФайлов.
|
|||
16
dmt
14.09.23
✎
14:23
|
(15) используй лучше РаботаСФайлами.ДвоичныеДанныеФайла(СсылкаНаПрисоединенныйФайл).Записать(ИмяФайла);
|
|||
17
vvs79
14.09.23
✎
14:27
|
(15) А как получить СсылкаНаПрисоединенныйФайл ? Из НоменклатураПрисоединенныеФайлы ?
|
|||
18
Tatitutu
14.09.23
✎
14:49
|
(17) это у тебя Имя_Т
|
|||
19
vvs79
14.09.23
✎
14:56
|
Вызывается: Расш1_Найти(СтрокаТовар.Номенклатура);
Какая же это СсылкаНаПрисоединенныйФайл ? |
|||
20
vvs79
14.09.23
✎
14:59
|
Если только Справочники.НоменклатураПрисоединенныеФайлы а на что там ссылаться ?
|
|||
21
Tatitutu
14.09.23
✎
15:04
|
(20) у тебя в (4)
Пока Выборка.Следующий() Цикл ВладелецФайла = Выборка.ВладелецФайла ; // добавь СсылкаНаПрисоединенныйФайл = Выборка.Ссылка; но, можно намного проще через ПолучитьНавигаиционнуюСсылку() |
|||
22
vvs79
14.09.23
✎
15:26
|
Ошибка доступа к файлу '111.jpg'. 5(0x00000005) Отказано в доступе.
Без ПолучитьНавигаиционнуюСсылку(). |
|||
23
Tatitutu
14.09.23
✎
15:41
|
в корень диска С не нужно писать - прав не хватит скорее всего
изменить путь |
|||
24
vvs79
14.09.23
✎
15:54
|
Не РаботаСФайлами.ДвоичныеДанныеФайла(СсылкаНаПрисоединенныйФайл).Записать("C:\111.jpg") не помогает не Записать("H:\111.jpg");
|
|||
25
vvs79
14.09.23
✎
15:55
|
На h точно есть права.
|
|||
26
vvs79
14.09.23
✎
15:56
|
Может путь надо как то по другому указывать ?
|
|||
27
vvs79
14.09.23
✎
15:56
|
диск.
|
|||
28
Tatitutu
14.09.23
✎
16:00
|
Когда сосед или коллега освободит тебе Отладчик
посмотри что возвращает: СсылкаНаПрисоединенныйФайл РаботаСФайлами.ДвоичныеДанныеФайла(СсылкаНаПрисоединенныйФайл); |
|||
29
АгентБезопасной Нацио
14.09.23
✎
16:01
|
(26) Читай про ДиалогВыбораФайла
|
|||
30
vvs79
14.09.23
✎
16:12
|
(28) Название какое надо пишет, тип СправочникСсылкаНоменклатураПрисоединённыеФайлы. Но почему ошибку даёт ?
|
|||
31
vvs79
15.09.23
✎
10:48
|
(28) Вызываю РаботаСФайлами.ДвоичныеДанныеФайла(СсылкаНаПрисоединенныйФайл).Записать("111.jpg");
В ссылке есть что-то определённое (и название и расширение и хранилище), но вызов оператора даёт эту ошибку, куда бы не записывал. |
|||
32
АгентБезопасной Нацио
15.09.23
✎
11:33
|
(31) Берешь отладчик, и смотришь, что возвращает РаботаСФайлами.ДвоичныеДанныеФайла(СсылкаНаПрисоединенныйФайл)
|
|||
33
vvs79
15.09.23
✎
12:40
|
Тупил (пробовал разные варианты - всё поломал).
Сейчас вернул, В СсылкаНаПрисоединенныйФайл название файла с расширением правильное, даты, размер. Файлхранилище - написано Хранилище значение. Что то есть, посмотреть не могу. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |