Имя: Пароль:
1C
1С v8
Работа с картинками
0 kolp821
 
30.09.11
10:14
Подскажите как можно прикрепить скан(картинку) документа к форме самого документа который проводится? если есть пример буду благодарен, так как сам еще не очень разбираюсь в 1С
1 jsmith82
 
30.09.11
10:17
1. Толстое приложение или управляемое
2. Как понять фразу "который проводится". Картинка должна появляться в в момент проведения, а потом исчезать? Переформулируй
2 kolp821
 
30.09.11
10:20
(1) Есть документ в 1с, хочется прикрепить к нему скан документа. как можно это реализовать? тонкий клиент.
3 kolp821
 
30.09.11
10:21
(1)Картинка должна сохранится в системе, что бы потом можно было сверится.
4 Nallama
 
30.09.11
10:21
(2) Определись с тем, где будешь хранить сканы - внутри базы или вне ее.
5 kolp821
 
30.09.11
10:27
(4)Если можно то тот и тот вариант.
6 jsmith82
 
30.09.11
10:29
Лукай в УТ 11. Там фича реализована донельзя.
Там правда немного мудрёно, но с отладкой разобраться можно.
Самый простой вариант - библиотека стандартных подсистем, но ты наверно с ней вазюкаться будешь.
Если грубо, то так
1. Создаёшь справочник Файлы, подчинённый документу
2. В нём есть реквизит ХранилищеЗначения (простой вариант - хранится в базе)
3. В элементе справочника кнопки "Загрузить", "Выгрузить"
По кнопке загрузить пользователь выбирает файл, система его хавает и записывает в хранилище значения (найди этот кусок в УТ11). По кнопе "Выгрузить" - выгружает.
Начни с этого. Если будут траблы, пиши
7 Nallama
 
30.09.11
10:43
В БСП много лишнего многовато... я в свое время на этом варианте остановилась:

&НаКлиенте
Процедура ПрикрепитьФайл(Команда)

#Если ВебКлиент Тогда
   ПодключитьРасширениеРаботыСФайлами();
#КонецЕсли
   ФайлВоВременномХранилище = "";
   ИмяВыбранногоФайла = "";
   ПоместитьФайл(ФайлВоВременномХранилище, , ИмяВыбранногоФайла, Истина, ЭтаФорма.УникальныйИдентификатор);
   РасширениеФайла = РаботаСоСтроками.ИмяИРасширениеФайла(ИмяВыбранногоФайла,".");
   Разделитель = ?(Найти(ИмяВыбранногоФайла,"\") > 0,"\","/");
   ИмяФайла = РаботаСоСтроками.ИмяИРасширениеФайла(ИмяВыбранногоФайла,Разделитель);
   Если РасширениеФайла = Неопределено ИЛИ ИмяФайла = Неопределено Тогда
       Сообщить("Файл неизвестного типа!");
       Возврат;
   КонецЕсли;
   ЭтоЗапрещенныйТипФайла = РаботаСоСтроками.ЗапрещенныйТипВложения(РасширениеФайла);
   Если Не ЭтоЗапрещенныйТипФайла Тогда
       Элементы.ПрикрепленныеФайлы.ДобавитьСтроку();
       СсылкаНаФайл    = РаботаСФайлами.ЗаписатьФайлВХранилище(ФайлВоВременномХранилище,ИмяФайла);
       Элементы.ПрикрепленныеФайлы.ТекущиеДанные.Файл = СсылкаНаФайл;
   Иначе
       Сообщить("Файлы типа *." + РасширениеФайла + " запрещено использовать в системе!");
       Возврат;
   КонецЕсли;
   
   
КонецПроцедуры //ПрикрепитьФайл(Команда)

&НаКлиенте
Процедура ОткрытьФайл(Команда)
   
#Если ВебКлиент Тогда
   ПодключитьРасширениеРаботыСФайлами();
#КонецЕсли

   ФайлВСправочнике = Элементы.ПрикрепленныеФайлы.ТекущиеДанные.Файл;
   Адрес = ПолучитьНавигационнуюСсылку(ФайлВСправочнике,"Файл");
   ИмяФайла = РаботаСФайлами.ПолучитьИмяФайла(ФайлВСправочнике);
   ПолучитьФайл(Адрес,ИмяФайла,Истина);
   
КонецПроцедуры //ОткрытьФайл(Команда)

Функция ЗаписатьФайлВХранилище(ВременноеХранилище,ИмяФайла) Экспорт
   
   НовыйФайл                = Справочники.ПрикрепленныеФайлы.СоздатьЭлемент();
   НовыйФайл.Наименование    = ИмяФайла;
   Данные                    = ПолучитьИзВременногоХранилища(ВременноеХранилище);
   УдалитьИзВременногоХранилища(ВременноеХранилище);
   Хранилище                = Новый ХранилищеЗначения(Данные);
   НовыйФайл.Файл            = Хранилище;
   НовыйФайл.Записать();
   Возврат НовыйФайл.Ссылка;
   
КонецФункции // ЗаписатьФайлВХранилище(ВременноеХранилище,ИмяФайла)

Функция ПолучитьИмяФайла(Ссылка) Экспорт

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

КонецФункции // ПолучитьИмяФайла(Ссылка)
8 Nallama
 
30.09.11
10:45
(7) последние две функции - серверные
9 kolp821
 
30.09.11
11:02
(7) А можно поподробнее что нужно делать.
10 Nallama
 
30.09.11
11:18
(9) эээ... общая концепция - в (6), пример кода в (7), так чего ж тебе еще надобно, старче?
11 kolp821
 
03.10.11
13:24
Создаю общий модуль РаботаСФайлами, пишу туда:
Функция ЗаписатьФайлВХранилище(ВременноеХранилище,ИмяФайла) Экспорт
   
   НовыйФайл                = Справочники.ПрикрепленныеФайлы.СоздатьЭлемент();
   НовыйФайл.Наименование    = ИмяФайла;
   Данные                     = ПолучитьИзВременногоХранилища(ВременноеХранилище);
   УдалитьИзВременногоХранилища(ВременноеХранилище);
   Хранилище                = Новый ХранилищеЗначения(Данные);
   НовыйФайл.Файл            = Хранилище;
   НовыйФайл.Записать();
   Возврат НовыйФайл.Ссылка;
   
КонецФункции // ЗаписатьФайлВХранилище(ВременноеХранилище,ИмяФайла)


Функция ПолучитьИмяФайла(Ссылка) Экспорт

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

КонецФункции // ПолучитьИмяФайла(Ссылка)

Создаю справочник Файлы, добавляю реквизит "Файл" с типом хранилище значений.

Делаю команду Прикрепить Файл с текстом

&НаКлиенте
Процедура ПрикрепитьФайл(Команда)

#Если ВебКлиент Тогда

   ПодключитьРасширениеРаботыСФайлами();
#КонецЕсли

   ФайлВоВременномХранилище = "";
   ИмяВыбранногоФайла = "";
   ПоместитьФайл(ФайлВоВременномХранилище, , ИмяВыбранногоФайла, Истина, ЭтаФорма.УникальныйИдентификатор);
   РасширениеФайла = РаботаСоСтроками.ИмяИРасширениеФайла(ИмяВыбранногоФайла,".");
   Разделитель = ?(Найти(ИмяВыбранногоФайла,"\") > 0,"\","/");
   ИмяФайла = РаботаСоСтроками.ИмяИРасширениеФайла(ИмяВыбранногоФайла,Разделитель);
   Если РасширениеФайла = Неопределено ИЛИ ИмяФайла = Неопределено Тогда
       Сообщить("Файл неизвестного типа!");
       Возврат;
   КонецЕсли;
   ЭтоЗапрещенныйТипФайла = РаботаСоСтроками.ЗапрещенныйТипВложения(РасширениеФайла);
   Если Не ЭтоЗапрещенныйТипФайла Тогда
       Элементы.ПрикрепленныеФайлы.ДобавитьСтроку();
       СсылкаНаФайл     = РаботаСФайлами.ЗаписатьФайлВХранилище(ФайлВоВременномХранилище,ИмяФайла);
       Элементы.ПрикрепленныеФайлы.ТекущиеДанные.Файл = СсылкаНаФайл;
   Иначе
       Сообщить("Файлы типа *." + РасширениеФайла + " запрещено использовать в системе!");
       Возврат;
   КонецЕсли;
КонецПроцедуры //ПрикрепитьФайл(Команда)

Но много ошибок, что не так?
12 Stim213
 
03.10.11
13:26
(0) рекомендую посмотрить УНФ. Там реализован сабж, причем с компонентой сканера. Буквально: Док-добавить файлы-сканировать-ОК
13 kolp821
 
03.10.11
13:34
(12) а в каком месте это там реализовано?
14 kolp821
 
04.10.11
15:33
Сделал так:
Создал справочник ХранениеФайлов с реквезит ДанныеФайла тип ХранилищеЗначения. В форме елемента это справочника создал две команды ПрочитатьФайлИСохранитьНаДиск и ВыбратьФайлСДискаИЗаписать


&НаКлиенте
Процедура ПрочитатьФайлИСохранитьНаДиск()
   Если Объект.Ссылка.Пустая() Тогда
       Предупреждение(НСтр("ru = 'Данные не записаны'", "ru"));
       Возврат;
   КонецЕсли;
   
   Если ПустаяСтрока(Объект.ИмяФайла) Тогда
       Предупреждение(НСтр("ru = 'Имя не задано'", "ru"));
       Возврат;
   КонецЕсли;
   
   Адрес = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеФайла");
   ПолучитьФайл(Адрес, Объект.ИмяФайла, Истина);

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


&НаКлиенте
Процедура ВыбратьФайлСДискаИЗаписать()
   Перем ВыбранноеИмя;
   Перем АдресВременногоХранилища;
   НовыйОбъект = Объект.Ссылка.Пустая();
   Если ПоместитьФайл(АдресВременногоХранилища, "", ВыбранноеИмя, Истина) Тогда
       Объект.ИмяФайла = ВыбранноеИмя;
       ПоместитьФайлОбъекта(АдресВременногоХранилища);
       Если НовыйОбъект Тогда
           ОтобразитьИзменениеДанных(Объект.Ссылка, ВидИзмененияДанных.Добавление);
       КонецЕсли;            
   КонецЕсли;    
КонецПроцедуры

и


&НаСервере
// Процедура извлекает данные объекта из временного хранилища,
// производит модификацию элемента справочника и записывает его.
//
// Параметры:
//  АдресВременногоХранилища – Строка – адрес временного хранилища.
//
// Возвращаемое значение:
//  Нет.
Процедура ПоместитьФайлОбъекта(АдресВременногоХранилища)
   ЭлементСправочника = РеквизитФормыВЗначение("Объект");
   ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
   ЭлементСправочника.ДанныеФайла = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных());
   Файл = Новый Файл(ЭлементСправочника.ИмяФайла);
   ЭлементСправочника.ИмяФайла = Файл.Имя;
   ЭлементСправочника.Записать();
   Модифицированность = Ложь;
   УдалитьИзВременногоХранилища(АдресВременногоХранилища);
   ЗначениеВРеквизитФормы(ЭлементСправочника, "Объект");    
КонецПроцедуры



Спасибо всем участникам форума.
15 kolp821
 
04.10.11
15:34
еще вопрос, а можно реализовать ввод документа через обычный сканер? если да то как.
16 Stim213
 
04.10.11
15:42
(15) еще раз -  смотри в сторону УНФ. У меня работало даже со снимками из вебкамеры, причем конфигурация "коробочная"
17 kolp821
 
04.10.11
15:44
(16) уважаемый Stim213 не могли б подсказать где там искать, не нашел там реализацию сканера. Спасибо.
18 Stim213
 
04.10.11
16:18
вечерком
19 Stim213
 
04.10.11
21:29
20 kolp821
 
04.10.11
22:36
(19) но у меня нет варианта со сканера, только 2 первых варианта. Версия конфигурации 1,3. Может нужно что то включить?
21 Stim213
 
04.10.11
22:38
(20) сканер подключен к компу?
22 kolp821
 
04.10.11
23:00
(21) буду завтра на работе проверю, сканер был отключен. Спс за наводку.
23 kolp821
 
05.10.11
09:56
(21) сканер подключен, все ок. Вопрос, как можно эту компоненту перенести в другую конфигурацию?
24 Nallama
 
05.10.11
10:33
(23) Первый вариант: делаешь сравнение и объединение своей конфигурации с УНФ, переносишь объекты подсистемы "Работа с файлами", потом запасаешься терпением и разруливаешь повылезавшие зависимости.
Второй: берешь ИТС и внимательно изучаешь методику интеграции БСП.
25 kolp821
 
05.10.11
13:11
Вопрос всем, внешняя компонента для сканирования нужна? (какие то файлы)
2 + 2 = 3.9999999999999999999999999999999...