|   |   | 
| 
 | Сохранить файл изображения | ☑ | ||
|---|---|---|---|---|
| 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 | 
        Тупил (пробовал разные варианты - всё поломал).
 Сейчас вернул, В СсылкаНаПрисоединенныйФайл название файла с расширением правильное, даты, размер. Файлхранилище - написано Хранилище значение. Что то есть, посмотреть не могу. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |