|
Обработка "Хранилище инструкций для пользователей" | ☑ | ||
---|---|---|---|---|
0
Anton_V
10.11.19
✎
17:28
|
Добрый день всем!
Я только начал изучать программирование в среде 1С и очень хотел бы попросить помочь. Поставлена задача следующего плана: необходимо реализовать, чтобы пользователи могли подгружать инструкции, написанные в *doc/*docx формате в саму 1С и из 1С была возможность сразу открыть любую инструкцию и прочитать, не обращаясь к Word. Значит, как я увидел это решение задачи. Создаю обработку, в ней добавляю форму, в которой есть кнопка "Добавить", при нажатии на которую открывается окно диалога выбора подгружаемых файлов. Выбираю желаемые файлы с расширением MS Office и список данных файлов отображается в таблице (а сами файлы сохраняются в ХранилищеЗначений). После чего щёлкнув по любому файлу из таблицы открывается поле HTML и данная инструкция отображается прямо в форме, подобно PDF. Форма выглядит пока в следующем виде: Cделал кнопку, к которой относится следующая процедура: <CODE> &НаКлиенте Процедура ВыборНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Заголовок = "Выбор файла"; Диалог.Фильтр = "Word файлы(*.doc;*.docx)|*.doc;*.docx"; Диалог.ИндексФильтра = 0; Диалог.ПредварительныйПросмотр = Ложь; Диалог.ПроверятьСуществованиеФайла = Истина; Диалог.МножественныйВыбор = Истина; Диалог.ПолноеИмяФайла = ЗагрузитьИнструкции; Если Диалог.Выбрать() Тогда МассивФайлов = Диалог.ВыбранныеФайлы; Для Каждого ИмяФайла Из МассивФайлов Цикл //Обработка файлов //... //... //... КонецЦикла КонецЕсли; КонецПроцедуры </CODE> При нажатии открывается диалог выбора файла, нажимаю добавить, но ничего не происходит. Теперь остановился и не знаю, как поступить дальше. По логике, необходимо действовать так: 1. Создать объект для чтения текста из файла; 2. Создать таблицу значений (пустую); 3. Считать текст в переменную "ТекстДанные"; 4. Создать хранилище на основании пустой таблицы значений; 5. Создать элемент справочника Файлы; 6. Поместить в реквизит элемента справочника созданное ранее хранилище значений; 7. Записать элемент справочника. Кто может помочь с кодом, просто ещё не сталкивался с диалогом выбора файла и загрузкой в ХЗ. Необходимо, чтобы выбранные файлы перенеслись в таблицу, при нажатии на колонку которой я мог вывести поле HTML с содержимым документа. Прошу прощения за странное объяснение, поскольку совсем новичок в этой области и ранее кроме внешних отчётов не занимался разработкой в 1С. С уважением, Антон. |
|||
1
Мимохожий Однако
10.11.19
✎
17:48
|
Дойди отладчиком до выбора файла, смотри.Долго думай.
|
|||
2
lucbak
10.11.19
✎
18:24
|
||||
3
Anton_V
15.11.19
✎
10:56
|
Сделал по-другому.
Поскольку реализация обработки происходит в чистой конфигурации, то создал новый справочник, который получил название "Файлы". В справочнике "Файлы" добавил реквизиты: - "Файл" (Тип: ХранилищеЗначения); - "ИмяФайла" (Тип: Строка); - "Автор" (Тип: ЛюбаяСсылка). После этого создал новую обработку, в которой создал реквизит с именем "Файл" (Тип: СправочникСсылка.Файлы). И перешёл к созданию чистой формы с именем "ФормаВыбора". Добавил команду "ДобавитьФайл" и связал её с кнопкой, а также создал динамический список, получивший название "СписокФайлов", в котором создал 2 столбца - "Код" и "Имя файла". Больше добавлять не стал, поскольку не вижу смысла в лишних столбцах. Смысл должен быть такой - при нажатии кнопки "Добавить файл" открывается окно диалога выбора файлов, выбирается файл с расширением *.doc/*.pdf, и загружается в хранилище значений, одновременно появляясь в строках динамического списка. А далее, при двойном щелчке по выбранной строке открывается форма с полем HTML, где содержимое документа визуализируется, подобно PDF-просмотрщику. Ввиду необходимости появления формы просмотра файла, в справочнике "Файлы" создал новую форму с именем "ФормаПросмотраФайлов", содержащая реквизит "PDF_HTML" с видом "Поле HTML документа. Модуль формы содержит следующий код: <CODE> АдресМ = "ХранилищеЗначений"; PDF_HTTP = "<ht ml><EMB ED id='PDF' width=100% height=100% type=""application/pdf"" src="""+АдресМ+"""></EMBED></html>"; </CODE> "ФормаВыбора" содержит событие "Выбор", код которого следующий: <CODE> Функция ПолучитьИмяФайла(ПолныйПуть) ИсхСтрока = ПолныйПуть; Позиция = Найти(ИсхСтрока, "\"); ПозицияКонечная = 0; Пока Позиция <> 0 Цикл ПозицияКонечная = ПозицияКонечная + Позиция; ИсхСтрока = Сред(ИсхСтрока, Позиция+1); Позиция = Найти(ИсхСтрока, "\"); КонецЦикла; ИмяФайла = Сред(ПолныйПуть, ПозицияКонечная + 1); Возврат ИмяФайла; КонецФункции &НаКлиенте Процедура ДобавитьФайл(Команда) ПолноеИмяФайла = ""; Если ПоместитьФайл( , , ПолноеИмяФайла, Истина) = Истина Тогда Данные = Новый ДвоичныеДанные(ПолноеИмяФайла); ЗаписатьФайл(ПолучитьИмяФайла(ПолноеИмяФайла), Данные); КонецЕсли; КонецПроцедуры &НаСервере Процедура ЗаписатьФайл(ИмяФайла, Данные) НовыйФайл = Справочники.Файлы.СоздатьЭлемент(); НовыйФайл.Файл = Новый ХранилищеЗначения(Данные, Новый СжатиеДанных()); НовыйФайл.Наименование = ИмяФайла; НовыйФайл.ИмяФайла = ИмяФайла; // НовыйФайл.Автор = Объект.Ссылка; НовыйФайл.Записать(); КонецПроцедуры &НаКлиенте Процедура СписокФайловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; //ОткрытьФорму("Справочник.Файлы.Форма.ФормаПросмотраФайлов"); //СсылкаНаФайл = ПолучитьНавигационнуюСсылку(ЭтаФорма.Элементы.ИмяФайла, "Файлы"); //ПолучитьФайл(СсылкаНаФайл, ЭтаФорма.Элементы.ИмяФайла); //------------------------------------------------------------------------------------------------------ //Адрес = ПолучитьНавигационнуюСсылку(Объект.Файл, "ИмяФайла"); //ИмяФайла = "" + КаталогВременныхФайловСервер() + Объект.Файл; Параметры = Новый Структура("ТекущийФайл", Элемент); ФормаВыбора = ПолучитьФорму("Справочник.Файлы.Форма.ФормаПросмотраФайлов", Параметры); НайденныйЭлемент = ФормаВыбора.ОткрытьМодально(); КонецПроцедуры </CODE> В итоге выбранные файлы загружаются в хранилище значений, отражаются в списке выбора, но при желании его открыть для просмотра ошибка. Пожалуйста, помогите связать с ФормаПросмотраФайлов, чтобы на форму выводилось содержимое выбранного в списке файла (просмотр в окне HTML). |
|||
4
Ник080808
15.11.19
✎
11:06
|
(0) нафиг ворд, форматированный документ тебе в помощь. Пусть сразу в 1с и пишут инструкции
|
|||
5
Anton_V
15.11.19
✎
11:18
|
(4) Да вот попросили универсальную обработку, которую можно будет применить в различных конфигурациях) Быстро развернуть, например через расширение конфигурации
|
|||
6
hhhh
15.11.19
✎
11:23
|
(5) а если просто, без всяких таких обработок? Там разве файл не открывается? Обязательно надо с обработкой заморачиваться?
|
|||
7
Ник080808
15.11.19
✎
11:28
|
(5) так вот тебе и универсальная обработка - делаешь расширение - в него пихаешь справочник инструкции. обработка открывающая форматированный документ. все
|
|||
8
Anton_V
15.11.19
✎
11:30
|
(6) да просто сам хочу в виде обработки реализовать, чтобы научиться одновременно. Конфигурация пустая, потому и справочники и обработки создавать приходится
|
|||
9
hhhh
15.11.19
✎
11:36
|
(8) файл обычно открывается без всяких обработок. Просто по пути к файлу.
|
|||
10
D_E_S_131
15.11.19
✎
11:47
|
Пример реализации на УФ.
Есть некий объект с ТЧ "Памятки". Реквизиты объекта: "Описание" (строка 150), "ИмяФайла" (строка 150), "Расширение" (строка 10), "ДанныеФайла" (ХранилищеЗначения), "Размер" (число 10.0). На форме кнопка "Добавить" (для добавления файла). Просмотр файла - по клику на строке ТЧ. &НаКлиенте Процедура ДобавитьФайл(Команда) ПриЗавершении = Новый ОписаниеОповещения("ПоместитьФайлКомандаЗавершение", ЭтотОбъект); ПередПомещением = Новый ОписаниеОповещения("ПоместитьФайлКомандаПередПомещением", ЭтотОбъект); ДиалогВыбораФайлов = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбораФайлов.Заголовок = "Выбор файла памятки"; ДиалогВыбораФайлов.МножественныйВыбор = Ложь; МаскаВсеФайлы = ПолучитьМаскуВсеФайлыКлиента(); ДиалогВыбораФайлов.Фильтр = "Все файлы|" + МаскаВсеФайлы + "|Все файлы|" + МаскаВсеФайлы; НачатьПомещениеФайла(ПриЗавершении,, ДиалогВыбораФайлов, Истина,, ПередПомещением); КонецПроцедуры &НаКлиенте Процедура ПоместитьФайлКомандаЗавершение(ФайлВыбран, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт Если Не ФайлВыбран Тогда Возврат; КонецЕсли; ДобавитьПамяткуСервер(Адрес, ВыбранноеИмяФайла); Модифицированность = Ложь; КонецПроцедуры &НаКлиенте Процедура ПоместитьФайлКомандаПередПомещением(ПомещаемыйФайл, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт ОбщийРазмер = РазмерВсехФайловСервер() + ПомещаемыйФайл.Размер(); Если ОбщийРазмер > 10 * 1024 * 1024 Тогда ПоказатьПредупреждение(, "Превышен максимальный размер прикреплденных файлов 10М"); ОтказОтПомещенияФайла = Истина; КонецЕсли; ИмяФайлаПамятки = ПомещаемыйФайл.Файл.Имя; РасширенияФайлаПамятки = ПомещаемыйФайл.Файл.Расширение; РазмерФайла = ПомещаемыйФайл.Размер(); КонецПроцедуры &НаСервере Функция РазмерВсехФайловСервер() Возврат Объект.Памятки.Итог("Размер"); КонецФункции // РазмерВсехФайловСервер() &НаСервере Процедура ДобавитьПамяткуСервер(Адрес, ВыбранноеИмяФайла) ДД = ПолучитьИзВременногоХранилища(Адрес); СпрОбъект = РеквизитФормыВЗначение("Объект"); НовСтр = СпрОбъект.Памятки.Добавить(); НовСтр.Описание = "Памятка №" + Формат(НовСтр.НомерСтроки, "ЧГ="); НовСтр.ИмяФайла = ИмяФайлаПамятки; НовСтр.Расширение = РасширенияФайлаПамятки; НовСтр.ДанныеФайла = Новый ХранилищеЗначения(ДД); НовСтр.Размер = РазмерФайла; СпрОбъект.Записать(); ЗначениеВРеквизитФормы(СпрОбъект, "Объект"); КонецПроцедуры &НаКлиенте Процедура ПамяткиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ТекДанные = Элементы.Памятки.ДанныеСтроки(ВыбраннаяСтрока); Адрес = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Памятки.ДанныеФайла", ТекДанные.НомерСтроки - 1); ПолучитьФайл(Адрес, ТекДанные.ИмяФайла); КонецПроцедуры |
|||
11
D_E_S_131
15.11.19
✎
11:49
|
"Реквизиты объекта" = "Реквизиты ТЧ".
Маску "все файлы" поменяй на свои "docx". |
|||
12
Anton_V
15.11.19
✎
12:34
|
(10) D_E_S_131, спасибо большое за образец, буду пробовать разбираться
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |