Отображение файла на управляемой форме

Программирование - Практика программирования

Отображение локальных файлов и файлов справочника "ЭДПрисоединенныеФайлы" на управляемой форме с помощью поля HTML документа.

1) Задача: реализовать просмотр прикреплённых файлов к документу.

2) Для саморазвития: реализовать просмотр локального файла по его пути.

1. Создадим обработку. В ней переменную с типом строка (у меня эта переменная называется "Отображение"). Поместим её на форму и укажем в свойствах вид: "поле HTML документа".

Добавим Таблицу значений со списком всех файлов из справочника "ЭДПрисоединенныеФайлы" (заполнять ТЧ будем при открытии формы).

&НаСервере
Процедура ПриОткрытииНаСервере()
Запрос = Новый Запрос("ВЫБРАТЬ
                      |	ЭДПрисоединенныеФайлы.Ссылка КАК Ссылка
                      |ИЗ
                      |	Справочник.ЭДПрисоединенныеФайлы КАК ЭДПрисоединенныеФайлы");

Справочник.Загрузить(Запрос.Выполнить().Выгрузить());
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ПриОткрытииНаСервере();
КонецПроцедуры


Далее в модуле формы создадим функцию "ПоказатьФайл". Функция будет возвращать необходимый HTML код.

&НаКлиенте
Функция ПоказатьФайл(Файл = Неопределено)
Если файл = неопределено  Тогда
	ТекущиеДанные = Элементы.Справочник.ТекущиеДанные;
	
	ФайлРедактируется = Ложь; 
	ДанныеФайла = ДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор);
		Если ДанныеФайла.Зашифрован Тогда
			ОповеститьОбИзменении(ТекущиеДанные.Ссылка);
		КонецЕсли;
	Файл = ОткрытьФайл(ДанныеФайла, Ложь);
КонецЕсли;
	ПутьФайла = Файл.ПолноеИмя;
Если  Файл.Расширение = ".xls" или Файл.Расширение =  ".xlsx" Тогда
	ФайлЭ = ПолучитьCOmОбъект("","Excel.Application");
	Лист = ФайлЭ.WorkBooks.Open(ПутьФайла);
	ВремФайл = ПолучитьИмяВременногоФайла(".html");
	Лист.saveAs(ВремФайл,44);
	ФайлЭ.Quit();
	ТекстВозврата = ВремФайл;
ИначеЕсли Файл.Расширение = ".doc" или Файл.Расширение =  ".docx" или Файл.Расширение =  ".rtf" Тогда
	ФайлВ = ПолучитьCOmОбъект("","Word.Application");
	Страница = ФайлВ.Documents.Open(ПутьФайла);
	ВремФайл = ПолучитьИмяВременногоФайла(".html");
	Страница.saveAs(ВремФайл,8);
	ФайлВ.Quit();
	ТекстВозврата = ВремФайл;
ИначеЕсли Файл.Расширение = ".asf" или Файл.Расширение =  ".wma" или Файл.Расширение =  ".wmv" или Файл.Расширение =  ".avi"
	 или Файл.Расширение =  ".wav" или Файл.Расширение =  ".mpeg" или Файл.Расширение =  ".mp3" или Файл.Расширение =  ".midi"
	  или Файл.Расширение =  ".aiff" или Файл.Расширение =  ".au" или Файл.Расширение =  ".flac" или Файл.Расширение =  ".ogg"  Тогда	
   ТекстВозврата = "<html><body>
   |<object id=WMP classid='CLSID:22D6f312-B0F6-11D0-94AB-0080C74C7E95' data = """+ПутьФайла +""" width ='100%' height='100%'>
   |</object></body></html>";
ИначеЕсли Файл.Расширение = ".bmp" или Файл.Расширение =  ".dib" или Файл.Расширение =  ".rle" или Файл.Расширение =  ".jpg" 
   или Файл.Расширение =  ".jpeg" или Файл.Расширение =  ".tif" или Файл.Расширение =  ".gif" или Файл.Расширение =  ".png"
   или Файл.Расширение =  ".ico" или Файл.Расширение =  ".wmf" или Файл.Расширение =  ".emf" Тогда 
	ТекстВозврата =  "<html><body style=""margin:0;padding:0;""><iframe width=100% height=100% src=""file:///"+ПутьФайла+""">Нет фреймам!</iframe></body></html>"  ;
Иначе
  	ТекстВозврата = ПутьФайла; 
КонецЕсли;
Возврат ТекстВозврата
КонецФункции

После этого для события "Выбор" в ТЧ объявим процедуру.

&НаКлиенте
Процедура СправочникВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	Отображение = ПоказатьФайл();
	СтандартнаяОбработка= Ложь;
КонецПроцедуры

Для получения файла из хранилища электронных документов воспользуемся типовым механизмом "чуть-чуть" изменив его (типовой механизм открывает файл программами установленными на ПК пользователя, нам же надо открыть его в 1с).

Ниже приведены необходимые процедуры и функции.

#Область ОбработкаФайла

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

&НаКлиенте
Функция ОткрытьФайл(Знач ДанныеФайла, Знач ДляРедактирования = Истина) Экспорт
	
	П = Новый Структура;
	П.Вставить("ДанныеФайла", ДанныеФайла);
	П.Вставить("ДляРедактирования", ДляРедактирования);
	
	Возврат ОткрытьФайлРасширениеПредложено(ПрисоединенныеФайлыСлужебныйКлиент, П) 	
КонецФункции

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

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

&НаКлиенте		
Функция ПолучитьФайлВРабочийКаталог(Знач АдресДвоичныхДанныхФайла,
                                    Знач ОтносительныйПуть,
                                    Знач ДатаМодификацииУниверсальная,
                                    Знач ИмяФайла,
                                    Знач РабочийКаталогПользователя,
                                    ПолноеИмяФайлаНаКлиенте)
	
	Если РабочийКаталогПользователя = Неопределено
	 ИЛИ ПустаяСтрока(РабочийКаталогПользователя) Тогда
		
		Возврат Ложь;
	КонецЕсли;
	
	КаталогСохранения = РабочийКаталогПользователя + ОтносительныйПуть;
	
	Попытка
		СоздатьКаталог(КаталогСохранения);
	Исключение
		СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
		СообщениеОбОшибке = НСтр("ru = 'Ошибка создания каталога на диске:'") + " " + СообщениеОбОшибке;
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке);
		Возврат Ложь;
	КонецПопытки;
	
	Файл = Новый Файл(КаталогСохранения + ИмяФайла);
	Если Файл.Существует() Тогда
		Файл.УстановитьТолькоЧтение(Ложь);
		УдалитьФайлы(КаталогСохранения + ИмяФайла);
	КонецЕсли;
	
	ПолучаемыйФайл = Новый ОписаниеПередаваемогоФайла(КаталогСохранения + ИмяФайла, АдресДвоичныхДанныхФайла);
	ПолучаемыеФайлы = Новый Массив;
	ПолучаемыеФайлы.Добавить(ПолучаемыйФайл);
	
	ПолученныеФайлы = Новый Массив;
	
	Если ПолучитьФайлы(ПолучаемыеФайлы, ПолученныеФайлы, , Ложь) Тогда
		ПолноеИмяФайлаНаКлиенте = ПолученныеФайлы[0].Имя;
		Файл = Новый Файл(ПолноеИмяФайлаНаКлиенте);
		Файл.УстановитьУниверсальноеВремяИзменения(ДатаМодификацииУниверсальная);
		Возврат Истина;
	КонецЕсли;
	
	Возврат Ложь;
	
КонецФункции

&НаКлиенте
Процедура ОткрытьФайлПриложением(Знач ИмяОткрываемогоФайла, ДанныеФайла)
	
	РасширениеПодключено = ФайловыеФункцииСлужебныйКлиент.РасширениеРаботыСФайламиПодключено();
	
	Если РасширениеПодключено Тогда
		ЗаголовокСтрока = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(
			ДанныеФайла.Наименование, ДанныеФайла.Расширение);
		
		Если НРег(ДанныеФайла.Расширение) = НРег("grs") Тогда
			Схема = Новый ГрафическаяСхема; 
			Схема.Прочитать(ИмяОткрываемогоФайла);
			Схема.Показать(ЗаголовокСтрока, ИмяОткрываемогоФайла);
			Возврат;
		КонецЕсли;
		
		Если НРег(ДанныеФайла.Расширение) = НРег("mxl") Тогда
			
			ПомещаемыеФайлы = Новый Массив;
			ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяОткрываемогоФайла));
			ПомещенныеФайлы = Новый Массив;
			Если Не ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь) Тогда
				Возврат;
			КонецЕсли;
			ТабличныйДокумент = ПомещенныеФайлы[0].Хранение;
			
			ПараметрыОткрытия = Новый Структура;
			ПараметрыОткрытия.Вставить("ИмяДокумента", ЗаголовокСтрока);
			ПараметрыОткрытия.Вставить("ПутьКФайлу", ИмяОткрываемогоФайла);
			ПараметрыОткрытия.Вставить("ТабличныйДокумент", ТабличныйДокумент);
			
			ОткрытьФорму("ОбщаяФорма.РедактированиеТабличногоДокумента", ПараметрыОткрытия);
			Возврат;
		КонецЕсли;
		
		// Открытие Файла.
		Попытка
			ЗапуститьПриложение(ИмяОткрываемогоФайла);
		Исключение
			ИнформацияОбОшибке = ИнформацияОбОшибке();
			ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'При открытии файла
				           |""%1""
				           |произошла ошибка:
				           |""%2"".'"),
				ИмяОткрываемогоФайла,
				ИнформацияОбОшибке.Описание));
		КонецПопытки;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ПолучитьДанныеФайла(Знач ПрисоединенныйФайл,
                            Знач ИдентификаторФормы = Неопределено,
                            Знач ПолучатьСсылкуНаДвоичныеДанные = Истина,
                            Знач ДляРедактирования = Ложь) Экспорт
	
	ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ПрисоединенныеФайлы.ПолучитьДанныеФайла", "ПрисоединенныйФайл", 
		ПрисоединенныйФайл, Метаданные.РегистрыСведений.ПрисоединенныеФайлы.Измерения.ПрисоединенныйФайл.Тип);
		
	ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект();
	//ОбщегоНазначенияКлиентСервер.Проверить(ФайлОбъект <> Неопределено, 
	//	СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найден присоединенный файл ""%1"" (%2)'"),
	//		Строка(ПрисоединенныйФайл), ПрисоединенныйФайл.Метаданные()));
	
	Если ДляРедактирования И Не ЗначениеЗаполнено(ФайлОбъект.Редактирует) Тогда
		ФайлОбъект.Заблокировать();
		ПрисоединенныеФайлыСлужебный.ЗанятьФайлДляРедактированияСервер(ФайлОбъект);
	КонецЕсли;
	
	УстановитьПривилегированныйРежим(Истина);
	
	СсылкаНаДвоичныеДанныеФайла = Неопределено;
	
	Если ПолучатьСсылкуНаДвоичныеДанные Тогда
		
		ДвоичныеДанные = ПолучитьДвоичныеДанныеФайла(ПрисоединенныйФайл);
		Если ТипЗнч(ИдентификаторФормы) = Тип("УникальныйИдентификатор") Тогда
			СсылкаНаДвоичныеДанныеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы);
		Иначе
			СсылкаНаДвоичныеДанныеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
		КонецЕсли;
		
	КонецЕсли;
	
	Результат = Новый Структура;
	Результат.Вставить("СсылкаНаДвоичныеДанныеФайла",  СсылкаНаДвоичныеДанныеФайла);
	Результат.Вставить("ОтносительныйПуть",            ПолучитьИдентификаторОбъекта(ФайлОбъект.ВладелецФайла) + "\");
	Результат.Вставить("ДатаМодификацииУниверсальная", ФайлОбъект.ДатаМодификацииУниверсальная);
	Результат.Вставить("ИмяФайла",                     ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение);
	Результат.Вставить("Наименование",                 ФайлОбъект.Наименование);
	Результат.Вставить("Расширение",                   ФайлОбъект.Расширение);
	Результат.Вставить("Размер",                       ФайлОбъект.Размер);
	Результат.Вставить("Редактирует",                  ФайлОбъект.Редактирует);
	Результат.Вставить("ПодписанЭП",                   ФайлОбъект.ПодписанЭП);
	Результат.Вставить("Зашифрован",                   ФайлОбъект.Зашифрован);
	Результат.Вставить("ФайлРедактируется",            ЗначениеЗаполнено(ФайлОбъект.Редактирует));
	Результат.Вставить("ФайлРедактируетТекущийПользователь",
		?(Результат.ФайлРедактируется, ФайлОбъект.Редактирует = Пользователи.АвторизованныйПользователь(), Ложь) );
	
	Если ФайлОбъект.Зашифрован Тогда
		МассивСертификатовШифрования = Новый Массив;
		Для Каждого СтрокаТЧ Из ФайлОбъект.СертификатыШифрования Цикл
			МассивСертификатовШифрования.Добавить(Новый Структура("Отпечаток, Представление", СтрокаТЧ.Отпечаток, СтрокаТЧ.Представление));
		КонецЦикла;
		Результат.Вставить("МассивСертификатовШифрования", МассивСертификатовШифрования);
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

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

&НаСервере
Функция ПолучитьДвоичныеДанныеФайла(Знач ПрисоединенныйФайл) Экспорт
	
	ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла", "ПрисоединенныйФайл", 
		ПрисоединенныйФайл, Метаданные.РегистрыСведений.ПрисоединенныеФайлы.Измерения.ПрисоединенныйФайл.Тип);
		
	ФайлОбъект = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПрисоединенныйФайл, 
		"ТипХраненияФайла,ВладелецФайла,Наименование,Расширение,Том,ПутьКФайлу");
	
	УстановитьПривилегированныйРежим(Истина);
	
	Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
		Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	ПрисоединенныеФайлы.ПрисоединенныйФайл,
		|	ПрисоединенныеФайлы.ХранимыйФайл
		|ИЗ
		|	РегистрСведений.ПрисоединенныеФайлы КАК ПрисоединенныеФайлы
		|ГДЕ
		|	ПрисоединенныеФайлы.ПрисоединенныйФайл = &ПрисоединенныйФайл";
		
		Запрос.УстановитьПараметр("ПрисоединенныйФайл", ПрисоединенныйФайл);
		Выборка = Запрос.Выполнить().Выбрать();
		
		Если Выборка.Следующий() Тогда
			Возврат Выборка.ХранимыйФайл.Получить();
		КонецЕсли;
		
		// Запись в журнал регистрации.
		СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Двоичные данные файла отсутствуют в регистре ПрисоединенныеФайлы
			           |
			           |Ссылка на файл: ""%1"".'"),
			ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл));
		ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Открытие файла'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
			УровеньЖурналаРегистрации.Ошибка,
			Метаданные.Справочники[ПрисоединенныйФайл.Метаданные().Имя],
			ПрисоединенныйФайл,
			СообщениеОбОшибке);
		
		ПредставлениеВладельцаФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Присоединен к %1 : %2'"),
				Строка(ТипЗнч(ФайлОбъект.ВладелецФайла)),
				ФайлОбъект.ВладелецФайла);
		
		ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов(
			ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение,
			Ложь,
			ПредставлениеВладельцаФайла);
	Иначе
		ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу;
		
		Попытка
			Возврат Новый ДвоичныеДанные(ПолныйПуть);
		Исключение
			// Запись в журнал регистрации.
			СообщениеОбОшибке = ТекстОшибкиПриПолученииФайла(ИнформацияОбОшибке(), ПрисоединенныйФайл);
			ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Получение файла из тома'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
				УровеньЖурналаРегистрации.Ошибка,
				Метаданные.Справочники[ПрисоединенныйФайл.Метаданные().Имя],
				ПрисоединенныйФайл,
				СообщениеОбОшибке);
			
			ПредставлениеВладельцаФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Присоединен к %1 : %2'"),
					Строка(ТипЗнч(ФайлОбъект.ВладелецФайла)),
					ФайлОбъект.ВладелецФайла);
				
			ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов(
				ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение,
				,
				ПредставлениеВладельцаФайла);
				
		КонецПопытки;
	КонецЕсли;
	
КонецФункции

&НаСервере
Функция ТекстОшибкиПриПолученииФайла(Знач ИнформацияОбОшибке, Знач Файл)
	
	СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
	
	Если Файл <> Неопределено Тогда
		СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = '%1
			           |
			           |Ссылка на файл: ""%2"".'"),
			СообщениеОбОшибке,
			ПолучитьНавигационнуюСсылку(Файл) );
	КонецЕсли;
	
	Возврат СообщениеОбОшибке;
	
КонецФункции

#КонецОбласти

Ну вот и всё, мы открыли файл хранящийся в справочнике "ЭДПрисоединенныеФайлы".

2. Для открытия своего файла укажем путь к нему.

Затем создадим команду выполняющую данный код:

&НаКлиенте
Процедура Показать(Команда)
	Отображение = ПоказатьФайл(Новый Файл(ПолныйПутьКФайлу));
КонецПроцедуры

 

 

Результаты работы приведены на скриншотах ниже.

Открытие текстового документа из справочника.

Открытие картинки из справочника.

Открытие картинки по указанному пути.

Открытие файла формат "xls" по указанному пути.

Скачать файлы

Наименование Файл Версия Размер
Отображение файла на управляемой форме.:
.epf 11,76Kb
01.11.17
11
.epf 11,76Kb 11 Скачать

См. также

Комментарии
1. Yan Tsys (YanTsys) 11 01.11.17 09:02 Сейчас в теме
Спасибо :) Звезду Александру Васильевичу :)
2. Дмитрий Котов (rpgshnik) 451 01.11.17 15:57 Сейчас в теме
3. Yan Tsys (YanTsys) 11 01.11.17 16:41 Сейчас в теме
(2) цель может и одна, но решения разные :) и там загружаемый ресурс а здесь еще и статья с описанием.
8. Дмитрий Котов (rpgshnik) 451 02.11.17 03:58 Сейчас в теме
10. Андрей (user623969_dusa) 02.11.17 13:12 Сейчас в теме
(2) ничесе там кода на 3 метра а здесь на 11К
rpgshnik; +1 Ответить
4. Александр Сокол (shurik_shurik) 01.11.17 17:10 Сейчас в теме
Как-бы еще доработать процесс подчистки временных файлов, например, при закрытии формы. А в процессе работы хранить СЗначений, если пользователь будет перебирать повторно файлы, что-бы новых файлов не плодить, а открывать уже созданные. А при закрытии, удалить файлы согласного этого СЗначений.
6. Вячеслав Кочнев (user608855_krick_09) 98 02.11.17 01:51 Сейчас в теме
(4)при открытии файла из справочника происходит проверка на наличие данного файла на ПК.
При открытии файла можно писать локальный путь в ТЧ . В момент закрытия свернуть данную ТЧ (чтобы не удалять уже удаленный файл) ,обойти её циклом и удалить файлы.
12. Антон Антон (kare) 02.11.17 17:11 Сейчас в теме
5. Алекс Кон (alex-l19041) 10 01.11.17 18:00 Сейчас в теме
предназначено для конфигураций с БСП ?
7. Вячеслав Кочнев (user608855_krick_09) 98 02.11.17 01:52 Сейчас в теме
9. Алекс Кон (alex-l19041) 10 02.11.17 09:49 Сейчас в теме
(7) а можно точнее. Планирую писать конфу с нуля на УФ
13. Евгений Мартыненков (JohnyDeath) 291 04.11.17 21:34 Сейчас в теме
(9) с нуля и без БСП?
странновато
11. Антон Антон (kare) 02.11.17 17:10 Сейчас в теме
переделал на обычные формы, спасибо, подскажите пожалуйста почему pdf исключили?
14. Вячеслав Кочнев (user608855_krick_09) 98 06.11.17 09:28 Сейчас в теме
(11)pdf открывается последним условием
15. Алексей Чесноков (Drak0n) 150 17.11.17 09:44 Сейчас в теме
Подобный способ уже описывался https://infostart.ru/public/370818/. Но за открытый код - спасибо.
16. Никита Заранко (nikita0832) 10 16.01.18 13:15 Сейчас в теме
Поле HTML документа - универсальный объект для окон других приложений, точно не скажу, но очень уж похож на встроенный Ole Automation. Я через него проводник выводил с возможностью перетаскивания файлов в него и всеми прочими функциями проводника.
Оставьте свое сообщение