По теме из базы знаний
Найденные решения
В общем отследил как он сохраняет файл, на примере ERP, справочник номенклатура. Файл можно достать так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла КАК ДвоичныеДанныеФайла
|ИЗ
| РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
|ГДЕ
| ДвоичныеДанныеФайлов.Файл.ВладелецФайла = &ВладелецФайла";
Запрос.УстановитьПараметр("ВладелецФайла", Справочники.Номенклатура.НайтиПоКоду("00-00000293"));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Файл = ВыборкаДетальныеЗаписи.ДвоичныеДанныеФайла.Получить();
Файл.Записать("C:\Users\shtennikov\Desktop\1111.jpg");
КонецЦикла;
Показать
(39) для сериализации можно так сделать
Переменная ОбъектXDTO содержит структуру вашего xml файла с которой очень удобно работать. Далее обращаетесь к элементам XDTO читаете нужные данные
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("D:\Home\mpiskunov\Desktop\скрины и доки\тестоваяпапка\1.xml");
ФабрикаXDTOФайлаXML = Новый ФабрикаXDTO;
ОбъектXDTO = ФабрикаXDTOФайлаXML.ПрочитатьXML(ЧтениеXML);
Переменная ОбъектXDTO содержит структуру вашего xml файла с которой очень удобно работать. Далее обращаетесь к элементам XDTO читаете нужные данные
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
А получить куда? Справочник содержит адреса файлов во временном хранилище.
Обращайся по адресу к хранилищу значения и вытаскивай.
Обращайся по адресу к хранилищу значения и вытаскивай.
Вот простой пример сохранения файла из справочника.
&НаКлиенте
Процедура СохранитьФайл(Команда)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Заголовок = "Выбрать каталог для сохранения";
Диалог.Фильтр = "Изобрадение(*.jpg)|*.jpg";
Диалог.Показать(Новый ОписаниеОповещения("ЗакончитьСохранениеФайла", ЭтотОбъект, Новый Структура("Диалог", Диалог)));
КонецПроцедуры
&НаКлиенте
Процедура ЗакончитьСохранениеФайла(ВыбранныйФайл, ДополнительныеПараметры) Экспорт
Диалог = ДополнительныеПараметры.Диалог;
Если ВыбранныйФайл = Неопределено Тогда
Сообщить("Не выбран каталог для сохранения");
Иначе
ПутьКФайлу = Диалог.ПолноеИмяФайла;
КонецЕсли;
Изображение = ПолучитьНаСервере();
Изображение.Записать(ПутьКФайлу);
Сообщить("Файл сохранен " + ПутьКФайлу);
КонецПроцедуры
&НаСервере
Функция ПолучитьНаСервере()
Возврат Объект.Ссылка.ДанныеКартинки.Получить(); //Данные картинки - это реквизит с типом хранилище значения, где хранится сам файл.
КонецФункции
Показать
В справочнике с есть реквизит с типом значения ХранилищеЗначений.
Вы его получаете и сохраняете. Только вам нужно знать какой тип сохранять!
Вы его получаете и сохраняете. Только вам нужно знать какой тип сохранять!
Хранилище = ЭДПрисоединенныеФайлы.РеквизитСТипомХранилище.Получить();
Если Хранилище <> Неопределено Тогда
// далее все зависит от типа значений
Если ТипЗнч(Хранилище) = Тип("ДвоичныеДанные") Тогда
Хранилище.Записать(ПутьКФайлу)
Иначе
// другой метод записи в файл в зависимости от типа значения
Конецесли
(5) у вас есть реквизит ФайлХранилище - в нем ваш файл
Хранилище = Выборка.Ссылка.ФайлХранилище.Получить();
Если Хранилище <> Неопределено Тогда
// далее все зависит от типа значений
Если ТипЗнч(Хранилище) = Тип("ДвоичныеДанные") Тогда
Хранилище.Записать(ПутьКФайлу)
Иначе
// другой метод записи в файл в зависимости от типа значения
Конецесли
Хранилище = Выборка.Ссылка.ФайлХранилище.Получить();
Если Хранилище <> Неопределено Тогда
// далее все зависит от типа значений
Если ТипЗнч(Хранилище) = Тип("ДвоичныеДанные") Тогда
Хранилище.Записать(ПутьКФайлу)
Иначе
// другой метод записи в файл в зависимости от типа значения
Конецесли
(8) То есть он возвращает тип НЕОПРЕДЕЛЕНО - следовательно в этом реквизите у вас нету ничего. Тогда если смотреть структуру Выборка.Ссылка есть еще один реквизит ТекстХранилища. Возможно его нужно попробывать
Когда сделаете Выборка.Ссылка.ТекстХранилища.Получить() - какой тип вернет?
Хранилище = Выборка.Ссылка.ТекстХранилища.Получить();
Если Хранилище <> Неопределено Тогда
// далее все зависит от типа значений
Если ТипЗнч(Хранилище) = Тип("ДвоичныеДанные") Тогда
Хранилище.Записать(ПутьКФайлу)
Иначе
// другой метод записи в файл в зависимости от типа значения
Конецесли
Когда сделаете Выборка.Ссылка.ТекстХранилища.Получить() - какой тип вернет?
(10) Так мы не правильно двигаемся,нужно понять где находится файл. Я думал в реквизите ФайлХранилище но вы говорите что у него тип возвращается не определено следовательно там пусто. Теперь давай те в отладке так же посмотрим на реквизит ВладелецФайла у него тип входящий электронный документ - скорее всего он там храниться. Для этого в отладке вставьте текст
Выборка.Ссылка.ВладелецФайла и вставьте скрин чтоб было видны реквизиты!
Выборка.Ссылка.ВладелецФайла и вставьте скрин чтоб было видны реквизиты!
(14) так давай те вернемся обратно. Вот этот этот код не работает (см ниже)
То есть когда Хранилище = Выборка.Ссылка.ФайлХранилище.Получить(); вы получаете тип значения Хранилище - НЕОПРЕДЕЛЕНО. Так ??
Хранилище = Выборка.Ссылка.ФайлХранилище.Получить();
Если Хранилище <> Неопределено Тогда
// далее все зависит от типа значений
Если ТипЗнч(Хранилище) = Тип("ДвоичныеДанные") Тогда
Хранилище.Записать(ПутьКФайлу)
Иначе
// другой метод записи в файл в зависимости от типа значения
Конецесли
То есть когда Хранилище = Выборка.Ссылка.ФайлХранилище.Получить(); вы получаете тип значения Хранилище - НЕОПРЕДЕЛЕНО. Так ??
(16) вот как пишут в (17) я тоже предполагал что он либо в справочнике файлы или в регистр сведений.
Теперь возьмите открой регистр сведений Двоичные данные и поставьте отбор по тому значению которое храниться у вас в переменной Выборка.Ссылка, если данных нету то возьмите и поставьте отбор по значению в Выборка.Ссылка.ВладелецФайла. Будут данные по какому то отбору??????
Теперь возьмите открой регистр сведений Двоичные данные и поставьте отбор по тому значению которое храниться у вас в переменной Выборка.Ссылка, если данных нету то возьмите и поставьте отбор по значению в Выборка.Ссылка.ВладелецФайла. Будут данные по какому то отбору??????
(21)нет, тестово пока написал так:
Запрос=Новый Запрос;
Запрос.Текст= "ВЫБРАТЬ
| ЭДПрисоединенныеФайлы.Ссылка КАК Ссылка
|ИЗ
| Справочник.ЭДПрисоединенныеФайлы КАК ЭДПрисоединенныеФайлы
|ГДЕ
| ЭДПрисоединенныеФайлы.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Объект.Реквизит1);
Выборка=Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Хранилище = Выборка.Ссылка.ТекстХранилище.Получить();
Хранилище1 = Выборка.Ссылка.ФайлХранилище.Получить();
Хранилище3 = Выборка.Ссылка.ВладелецФайла;
КонецЦикла;
Запрос.Текст="ВЫБРАТЬ
| ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла КАК ДвоичныеДанныеФайла
|ИЗ
| РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
|ГДЕ
| ДвоичныеДанныеФайлов.Файл.ВладелецФайла = &ВладелецФайла";
Запрос.УстановитьПараметр("ВладелецФайла",Хранилище3);
ВыборкаРаз=Запрос.Выполнить().Выбрать();
Пока ВыборкаРаз.Следующий() Цикл
ПеременнаяОдин=ВыборкаРаз.ДвоичныеДанныеФайла;
Файл = ВыборкаРаз.ДвоичныеДанныеФайла.Получить();
КонецЦикла
Запрос=Новый Запрос;
Запрос.Текст= "ВЫБРАТЬ
| ЭДПрисоединенныеФайлы.Ссылка КАК Ссылка
|ИЗ
| Справочник.ЭДПрисоединенныеФайлы КАК ЭДПрисоединенныеФайлы
|ГДЕ
| ЭДПрисоединенныеФайлы.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Объект.Реквизит1);
Выборка=Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Хранилище = Выборка.Ссылка.ТекстХранилище.Получить();
Хранилище1 = Выборка.Ссылка.ФайлХранилище.Получить();
Хранилище3 = Выборка.Ссылка.ВладелецФайла;
КонецЦикла;
Запрос.Текст="ВЫБРАТЬ
| ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла КАК ДвоичныеДанныеФайла
|ИЗ
| РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
|ГДЕ
| ДвоичныеДанныеФайлов.Файл.ВладелецФайла = &ВладелецФайла";
Запрос.УстановитьПараметр("ВладелецФайла",Хранилище3);
ВыборкаРаз=Запрос.Выполнить().Выбрать();
Пока ВыборкаРаз.Следующий() Цикл
ПеременнаяОдин=ВыборкаРаз.ДвоичныеДанныеФайла;
Файл = ВыборкаРаз.ДвоичныеДанныеФайла.Получить();
КонецЦикла
(23) теперь далее вот так
И все должно работать
Отбор = Новый Структура("Файл", Выборка.Ссылка.ВладелецФайла);
СтруктураЗаписи = РегистрСведений.ДвоичныеДанныеФайлов.Получить(Отбор);
ДвоичныеДанные = СтруктураЗаписи.ДвоичныеДанныеФайла.Получить();
Если ДвоичныеДанные <> Неопределено Тогда
ДвоичныеДанные.Записать("Тут укажите путь к файлу")
Конецесли
И все должно работать
(24)
Не работает, так как не проходит через условие: Если ДвоичныеДанные <> Неопределено Тогда
Отбор = Новый Структура("Файл", Выборка.Ссылка.ВладелецФайла); СтруктураЗаписи = РегистрСведений.ДвоичныеДанныеФайлов.Получить(Отбор); ДвоичныеДанные = СтруктураЗаписи.ДвоичныеДанныеФайла.Получить(); Если ДвоичныеДанные <> Неопределено Тогда ДвоичныеДанные.Записать("Тут укажите путь к файлу") Конецесли
Не работает, так как не проходит через условие: Если ДвоичныеДанные <> Неопределено Тогда
(29) блин а когда вы вот это сделали
У вас ведь переменная Файл = ВыборкаРаз.ДвоичныеДанныеФайла.Получить()- не была НЕОПРЕДЕЛЕНО??
Запрос.Текст="ВЫБРАТЬ
| ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла КАК ДвоичныеДанныеФайла
|ИЗ
| РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
|ГДЕ
| ДвоичныеДанныеФайлов.Файл.ВладелецФайла = &ВладелецФайла";
Запрос.УстановитьПараметр("ВладелецФайла",Хранилище3);
ВыборкаРаз=Запрос.Выполнить().Выбрать();
Пока ВыборкаРаз.Следующий() Цикл
ПеременнаяОдин=ВыборкаРаз.ДвоичныеДанныеФайла;
Файл = ВыборкаРаз.ДвоичныеДанныеФайла.Получить();
ПоказатьУ вас ведь переменная Файл = ВыборкаРаз.ДвоичныеДанныеФайла.Получить()- не была НЕОПРЕДЕЛЕНО??
(32) воооооооо оно так и должно выглядеть!!!!! Это тип двоичных данных!!!
Теперь мы его сохраним внешне
Вот после этого файл получилось создать?? на диске С появился файл?
Теперь мы его сохраним внешне
Отбор = Новый Структура("Файл", Выборка.Ссылка.ВладелецФайла);
СтруктураЗаписи = РегистрСведений.ДвоичныеДанныеФайлов.Получить(Отбор);
ИмяФайла = "C:\1.xml"; // пока временно пут
ДвоичныеДанные = СтруктураЗаписи.ДвоичныеДанныеФайла.Получить();
ДвоичныеДанные.Записать(ИмяФайла);
Вот после этого файл получилось создать?? на диске С появился файл?
(36)что-то вроде того:
Функция ДеСериализоватьОбъект(СтрокаXML)
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(СтрокаXML);
Попытка
Значение = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Возврат Значение;
КонецФункции
Показать
(24)Выборка.Ссылка.ВладелецФайла - точно попадает нужное значение?
По идее данные попадут в переменную ДвоичныеДанные, но правильно говорят, что там будет скорее всего xml формат, его еще нужно сериализовать будет, чтобы на основании него поступления заполнять.
По идее данные попадут в переменную ДвоичныеДанные, но правильно говорят, что там будет скорее всего xml формат, его еще нужно сериализовать будет, чтобы на основании него поступления заполнять.
(39) для сериализации можно так сделать
Переменная ОбъектXDTO содержит структуру вашего xml файла с которой очень удобно работать. Далее обращаетесь к элементам XDTO читаете нужные данные
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("D:\Home\mpiskunov\Desktop\скрины и доки\тестоваяпапка\1.xml");
ФабрикаXDTOФайлаXML = Новый ФабрикаXDTO;
ОбъектXDTO = ФабрикаXDTOФайлаXML.ПрочитатьXML(ЧтениеXML);
Переменная ОбъектXDTO содержит структуру вашего xml файла с которой очень удобно работать. Далее обращаетесь к элементам XDTO читаете нужные данные
(45) на самомо деле почти все готово, нужно только вот все таки посмотреть где именно тот файл храниться. А лучше всего посмотреть код когда вы открываете электронный документ и тогда станит ясно откуда все берется и как заполняется!
(47) ну поскольку у вас все получилось. вот без сохранения файла можно так все прочитать, вот в (38) верно помог в этом
ЧтениеДанных = Новый ЧтениеДанных(ДвоичныеДанные); // тут указываете ваши двоичные данные из регистра
СтрокаXML = ЧтениеДанных.ПрочитатьСимволы(, КодировкаТекста.ANSI);
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(СтрокаXML);
Значение = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
ЧтениеДанных = Новый ЧтениеДанных(ДвоичныеДанные); // тут указываете ваши двоичные данные из регистра
СтрокаXML = ЧтениеДанных.ПрочитатьСимволы(, КодировкаТекста.ANSI);
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(СтрокаXML);
Значение = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
В общем отследил как он сохраняет файл, на примере ERP, справочник номенклатура. Файл можно достать так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДвоичныеДанныеФайлов.ДвоичныеДанныеФайла КАК ДвоичныеДанныеФайла
|ИЗ
| РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
|ГДЕ
| ДвоичныеДанныеФайлов.Файл.ВладелецФайла = &ВладелецФайла";
Запрос.УстановитьПараметр("ВладелецФайла", Справочники.Номенклатура.НайтиПоКоду("00-00000293"));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Файл = ВыборкаДетальныеЗаписи.ДвоичныеДанныеФайла.Получить();
Файл.Записать("C:\Users\shtennikov\Desktop\1111.jpg");
КонецЦикла;
Показать
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот