|   |   | 
| 
 | выгрузить картинку из 1с | ☑ | ||
|---|---|---|---|---|
| 0
    
        andrewrocker 08.07.25✎ 19:58 | 
        Добрый день, всем!
 Не могу выгрузить картинку из 1с через метод ПолучитьИзВременногоХранилища, хотя туда скармливаю навигационную ссылку. 1с выдает крайне странную ошибку "неправильный путь к файлу" на операции ПолучитьИзВременногоХранилища. В чем может быть причина ? Как это устранить ? 
 | |||
| 1
    
        andrewrocker 08.07.25✎ 19:58 | 
        &НаКлиенте
 Процедура ВыгрузитьОбразецПодписи(Команда) АдресРезультата = ПодготовитьКартинку(); Если Не ЗначениеЗаполнено(АдресРезультата) Тогда Возврат; КонецЕсли; ПараметрыПолученияФайла = Новый ПараметрыДиалогаПолученияФайлов; ПолучитьФайлССервераАсинх(АдресРезультата,Объект.СканПечатиИмяФайла); КонецПроцедуры &НаСервере Функция ПодготовитьКартинку() АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "СканПечати"); ДвоичныеДанныеИзображения = ПолучитьИзВременногоХранилища(АдресКартинки); Если ДвоичныеДанныеИзображения = Неопределено Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Картинка номенклатуры не загружена"; Сообщение.Сообщить(); Возврат Неопределено; КонецЕсли; Картинка = Новый Картинка(ДвоичныеДанныеИзображения); ОбрабатываемаяКартинка = Новый ОбрабатываемаяКартинка(Картинка); Картинка = ОбрабатываемаяКартинка.ПолучитьКартинку(); ДвоичныеДанныеИзображения = Картинка.ПолучитьДвоичныеДанные(); Возврат ПоместитьВоВременноеХранилище(ДвоичныеДанныеИзображения, УникальныйИдентификатор); КонецФункции | |||
| 2
    
        Волшебник 08.07.25✎ 20:02 | 
        На сервере другие пути к файлам, другой пользователь, другие права.
 Навигационная ссылка не является путём к файлу. | |||
| 3
    
        andrewrocker 08.07.25✎ 20:14 | 
        (2) да, по этой части я тут несколько иду в роли четвероногого друга - я понимаю этот момент, я ошибку у себя исправить не могу     | |||
| 4
    
        Волшебник 08.07.25✎ 20:18 | 
        (3) Переходите на обычные формы.     | |||
| 5
    
        andrewrocker 08.07.25✎ 20:23 | 
        (4) вы знаете, тут столько всего уже в этой нетленке написано, что хочется этих несколько фич добить до приличного юзабилити.
 мы пишем свою срм-ку-торговую программу, дальше она будет всё грузить в бухгалтерию без проблем, внутри торговой программы нужно настроить всё и тогда можно будет дальше расширять, так сказать, бизнес у меня всё совсем не решаемо, да? | |||
| 6
    
        Волшебник 08.07.25✎ 20:29 | 
        (5) Я ж пошутил. У Вас всё решаемо.     | |||
| 7
    
        Волшебник 08.07.25✎ 20:30 | 
        Щас спецы по УФ подтянутся и всё решат. Я просто держу ветку в топе.     | |||
| 8
    
        andrewrocker 08.07.25✎ 20:33 | 
        (7) вы великолепны!     | |||
| 9
    
        DiMel_77 08.07.25✎ 22:42 | 
        (1) Че за бред у вас в функции ПодготовитьКартинку?
 Если я правильно понимаю суть ваших стараний, то должно быть что-то типа: 
&НаСервере
Функция ПодготовитьКартинку()
    
    СканПечати = Объект.СканПечати.Получить();
    Если СканПечати = Неопределено Тогда
        
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Картинка номенклатуры не загружена";
        Сообщение.Сообщить();
        Возврат Неопределено;
    КонецЕсли;
    
    Возврат ПоместитьВоВременноеХранилище(СканПечати, УникальныйИдентификатор);
    
КонецФункции  | |||
| 10
    
        andrewrocker 09.07.25✎ 19:54 | 
        (9) вы помогли, дальше я тоже проявил сообразительность
 &НаКлиенте Процедура ВыгрузитьОбразецПодписи(Команда) АдресРезультата = ПодготовитьКартинку(); Если Не ЗначениеЗаполнено(АдресРезультата) Тогда Возврат; КонецЕсли; ПараметрыПолученияФайла = Новый ПараметрыДиалогаПолученияФайлов; ПолучитьФайлССервераАсинх(АдресРезультата,Объект.СканПечатиИмяФайла,ПараметрыПолученияФайла); КонецПроцедуры &НаСервере Функция ПодготовитьКартинку() СканПечати = Объект.Ссылка.СканПечати.Получить(); Если СканПечати = Неопределено Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Картинка номенклатуры не загружена"; Сообщение.Сообщить(); Возврат Неопределено; КонецЕсли; Возврат ПоместитьВоВременноеХранилище(СканПечати, УникальныйИдентификатор); КонецФункции | |||
| 11
    
        andrewrocker 09.07.25✎ 20:22 | 
        Отдельная просьба, помогите пожалуйста господа, чтобы до конца весь функционал доделать. Я хочу добавить кнопку "удалить скан подписи". 
 Пытаюсь почистить реквизит через Объект.СканПечати, система выдает "поле не найдено". Если работать как с ссылкой, то поле объекта не доступно для записи. Гугление не помогает найти решение проблемы. &НаСервере Процедура ОчиститьОбразецПодписиНаСервере() Объект.Ссылка.СканПечати = Новый ХранилищеЗначения(Неопределено); Объект.СканПечатиИмяФайла = ""; КонецПроцедуры &НаКлиенте Процедура ОчиститьОбразецПодписи(Команда) ОчиститьОбразецПодписиНаСервере(); СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "СканПечати"); КонецПроцедуры | |||
| 12
    
        DiMel_77 09.07.25✎ 21:35 | 
        (11) Забавные боты пошли...
 
&НаСервере
Процедура ОчиститьОбразецПодписиНаСервере()
        
        ТекущийОбъект = РеквизитФормыВЗначение("Объект");
	ТекущийОбъект.СканПечати         = Новый ХранилищеЗначения(Неопределено);
	ТекущийОбъект.СканПечатиИмяФайла = "";
        
        ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект")
КонецПроцедуры
 | |||
| 13
    
        andrewrocker 12.07.25✎ 20:18 | 
        (12) забавно, но 1с ничего не удаляет     | |||
| 14
    
        andrewrocker 13.07.25✎ 11:37 | 
        Разобрался! (11) не работает, потому, что это только работает если работать через процедуру "ПередЗаписьюНаСервере", во всех остальных местах - не работает. 
 Хинт(!), чтобы передать самому себе перед записью процедуру просто - сделал невидимый булевый флажок в самом объекте. Когда делается передзаписью на сервере - проверяется флажок, стираются данные, флажок снова гаснет. По итогу код такой: &НаСервере Процедура ОчиститьОбразецПодписиНаСервере() Объект.УдалитьСканПриВыходе = Истина; КонецПроцедуры &НаКлиенте Процедура ОчиститьОбразецПодписи(Команда) ОчиститьОбразецПодписиНаСервере(); СсылкаНаКартинку = ""; КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Если ЭтоАдресВременногоХранилища(СсылкаНаКартинку) Тогда ТекущийОбъект.СканПечати = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(СсылкаНаКартинку)); КонецЕсли; Если ТекущийОбъект.УдалитьСканПриВыходе = Истина Тогда ; ТекущийОбъект.СканПечати = Новый ХранилищеЗначения(Неопределено); ТекущийОбъект.СканПечатиИмяФайла = ""; ТекущийОбъект.УдалитьСканПриВыходе = Ложь; КонецЕсли; КонецПроцедуры | |||
| 15
    
        timurhv 13.07.25✎ 00:55 | 
        (14) Очень надо (нет)
 Удаляйте реквизит объекта, используйте реквизит формы на крайний случай. А лучше все перепишите и используйте механизм присоединенных файлов БСП. | |||
| 16
    
        timurhv 13.07.25✎ 00:57 | 
        А ну и
 С 5 мая 2025 г. skype прекращен советую обновить профиль) | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |