Просмотр документов, используя Google Docs (PDF, MS Office и не только). Без регистрации и смс

27.10.22

Интеграция - WEB-интеграция

С версии 8.3.22 в 1С:Предприятие реализован просмотр документов PDF. И это прекрасно. Но просмотр офисных документов (Word, Excel, Power point) возможен только путем некоторых "костылей". Вот, один из таких костылей я и предлагаю рассмотреть ниже.

Скачать исходный код

Наименование Файл Версия Размер
Просмотр документов, используя Google Docs (PDF, Ms Office и не только). Без регистрации и смс
.epf 14,94Kb
10
.epf 14,94Kb 10 Скачать

Как всегда, я бы не озадачился чем-то интересным, если бы не понадобилось. И вот этот день настал. Я проснулся и понял, что страсть как хочу прямо в окне 1С смотреть на Word-овский документ. Я не хочу думать какая у меня операционная система, тонкий или веб-клиент. Все что я хочу, это выбрать файл и посмотреть его в окне 1С, разве это так много??? Ну ладно, прочь шуточки. Теперь все по порядку. 

Вот вам небольшая подборка на тему "Просмотр Word и тому подобное"

Среди типовых предпросмотр есть в 1С:Документооборот версии 3.0. Там он реализован путем сохранения офисных документов в HTML и хранением этих данных в отдельном регистре. Использует ComОбъект и требует наличие офисного пакета (ну или по крайней мере его части, отвечающей за работу com-объектов Application). Кстати, кому интересно, подробно про работу с Word через COM можно почитать тут.

Мне не нравилось по разным причинам ни одно из решений. А значит настало время создавать "нетленку". 

Требования были такие:

  • не важно какая операционная система
  • желательно без внешних компонент, регистрации, смс и других танцев с бубном
  • чтобы "кушало" разные форматы (хотя мне нужен был в общем то только *.docx)
  • идеально чтобы не хранило ни в каком виде копию файла

То есть сразу отпали игры с COM, сохранение в HTML (в конфигурации или вне ее), внешние конверторы (вроде pdf24). Ну и вообще получалось так, что решения в общем то и не было какое-то время. Пока я случайно не наткнулся на Google Docs Viewer. О нем сейчас нет информации на сайте Google, но есть неплохая статья на Хабр. Кроме того, аналогичный сервис есть и у Мелкомягких, но он съедает чуть меньшее число форматов. Ну и забегая вперед, его полноценно использовать не получилось.

Google Docs Viewer

Самое главное что надо, для просмотра документа, это HTML поле в 1С и файл размещенный где-то, куда Google может легко достучаться (также без паролей, регистраций и смс). Ну и представим что у нас уже есть такой файл и лежит он где-нибудь, например "СВЕДЕНИЯ ПО ИСТОРИИ РУСИ XIII в. В САГЕ О КОРОЛЕ ХАКОНЕ". Достаточно ссылку на данный файл вставить внутрь конструкции

https://docs.google.com/viewer?url=[АдресСсылки]&embedded=true

И мы можем эту ссылку скормить полю HTML в 1С и вуаля, немного подождали и читаем очень увлекательный документ.

Собственно дело в шляпе, если бы не одно "но". Файлы то у нас в базе или в файловой системе. В общем не лежат они в облаке. А значит нам надо его куда-то "пульнуть", потом получить ссылку на него, открыть, ну и неплохо было бы удалить его после. То есть нам нужен, сервис временного хранения файлов, имеющий на борту REST API, выдающий "публичные" ссылки на файлы. Ну и как всегда, без дополнительных танцев в виде регистраций, платных доступов и т.д. После некоторого времени поиска такой сервис был найден.

file.io

Подробнее о данном сервисе вы можете почитать у них на сайте. Изучив немного, копнув чуток и ткнув "палкой" в виде клиента для теста REST API, выяснилось - а он подходит. По заверению авторов файл удаляется, данные не хранятся, авторизации и регистрации не требуется, HTTPS есть. Кажется пора сесть и написать код отправки файла.

Собственно тут нам не понадобится ничего сверх "тяжелого". HTTPСоединение, HTTPЗапрос и немного навыка с отправкой тела запроса в виде "multipart/form-data". 

А вот и сам код отправки и получения временной ссылки

	Разделитель = СтрЗаменить(Новый УникальныйИдентификатор, "-", "");

	СтрокаИмяФайла = СтрШаблон("filename=""%1""", ИмяФайла);
	
	ТелоЗапроса = Новый ПотокВПамяти;
	ЗаписьДанных = Новый ЗаписьДанных(ТелоЗапроса,,, Символы.ВК + Символы.ПС, ""); 
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
	ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""file""; " + СтрокаИмяФайла);
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: " + ПолучитьContentTypeПоРасширению(РасширениеФайла));
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.Записать(ДвоичныеДанные);
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");
	ЗаписьДанных.Закрыть();
	
	ДанныеТела = ТелоЗапроса.ЗакрытьИПолучитьДвоичныеДанные();
	
	ЗапросHTTP = Новый HTTPЗапрос;
	ЗапросHTTP.Заголовки.Вставить("content-type"	, "multipart/form-data; boundary=" + Разделитель);
	ЗапросHTTP.Заголовки.Вставить("content-length"	, Формат(ДанныеТела.Размер(), "ЧН=0; ЧГ="));
	ЗапросHTTP.УстановитьТелоИзДвоичныхДанных(ДанныеТела);

	СоединениеHTTP = Новый HTTPСоединение("file.io",,,,,, Новый ЗащищенноеСоединениеOpenSSL);
	ОтветHTTP = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);
	Если ОтветHTTP.КодСостояния <> 200 Тогда
		ДанныеОшибки = ОбработатьОшибкуЗапроса(ОтветHTTP);
		ЗаполнитьЗначенияСвойств(Результат, ДанныеОшибки);
		Возврат Результат;
	КонецЕсли;
	
	ТелоОтвета = ОтветHTTP.ПолучитьТелоКакСтроку();
	СтруктураОтвета = ЗначениеИзСтрокиJSON(ТелоОтвета, Истина);
	
	АдресСсылки = СтруктураОтвета.Получить("link");

Это немного "полуфабрикат", я думаю разобрать его на запчасти труда не составит. Собственно "АдресСсылки" и есть требуемый нам путь к файлу. В общем то, на этом статью можно и закончить, наверное...

Хотя нет, секундочку. Помните я упомянул что у мелкомягких тоже есть свой вьюер. Так вот, с ним не завелось поскольку, по неведомой мне причине, он считывал документ из ссылки дважды, а после первого запроса ссылка уничтожалась (как надеюсь и файл ))) ). Так что, что-то тут не вышло. Впрочем, не сильно то и расстроился.

Что в обработке?

Собственно красиво оформленный код (ну или почти красиво). С описанием для пользователя, ну и обработкой некоторых ситуаций. Например, при смене ссылки, иногда поле HTML не обновлялось. Для web-клиента недоступна работа с объектами для REST запросов. Ну и по мелочи. 

Я сознательно не прикручивал это к просмотру присоединенных файлов. Вроде хотелось, но по хорошему это бы делать расширением. В общем тут я думаю каждый сам взвесит насколько ему интересно данное решение и прикрутит. Ну, и если что в комментариях оставляйте ссылки на свои решения "на базе".

Код открыт, пользуйтесь на здоровье.

Поддерживаемые форматы:

  • Документ Word (*.doc)
  • Документ Word2007-... (*.docx)
  • Документ OpenDocument Text (*.odt)
  • Документ PDF (*.pdf)
  • Лист Excel (*.xls)
  • Лист Excel2007-... (*.xlsx)
  • Презентация PowerPoint (*.ppt)
  • Презентация PowerPoint2007-... (*.pptx)

Это не полный перечень, в статье на Хабр информация раскрыта несколько серьезнее

Немного о разном

  • минус: требуется доступ к интернет
  • минус: жрет трафик (файл отправляется в сеть, а потом данные просмотра загружаются из сети)
  • Google может прикрыть лавочку. Но с 2015 не закрывает, просто убрал официальную инфу об этом, но есть расширение для браузера, так что это маловероятно (я считаю)
  • хочется такой функционал прямо в платформе
  • можно конечно файлы держать и в облаке и перманентно открывать доступ для просмотра, не заморачивался

Я нормально отношусь к критике, так что пишите и предлагайте какие-то более интересные варианты "около".

Послесловие, после публикации

А Яндекс 360 тоже может. Спасибо JohnyDeath за идею. Формат ссылки там таков:

https://docs.yandex.ru/docs/view?url=[АдресСсылки]&name=[ИмяФайла]

Но можно обойтись и без имени файла. А благодаря товарищу ixijixi мы знаем что ему можно "скормить" word, excel, картинки (jpg как минимум), pdf, txt, zip, csv. Что очень не плохо.

Я доработал обработку и добавил возможность выбора сервиса (Google, Яндекс), но по какой-то причине яндекс показывает все вокруг, а сам документ не показывает, "думает". Желающие копнуть обработку, но не имеющие возможности скачать, пишите в личку, я отправлю, расскажете что получится.

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15930    13    18    

13

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17880    6    15    

13

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    88926    163    216    

318

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25870    9    0    

7

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16477    42    49    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. JohnyDeath 301 27.10.22 15:32 Сейчас в теме
В сторону https://docs.yandex.ru/ или https://myoffice.ru/ не смотрел?
Через них такое не провернуть? А то гугл может в любой момент исчезнуть с просторов нашей Родины.
ixijixi; vandalsvq; +2
2. vandalsvq 1545 27.10.22 15:46 Сейчас в теме
(1) однако, что-то я не подумал сам Яндекс похожим образом копнуть. И так, через него работает, формат ссылки
https://docs.yandex.ru/docs/view?url=[АдресСсылки]&name=[ИмяФайла]

Без части (ИмяФайла) тоже показывает, проверю через 1С позже. По форматам пока только pdf дал, но есть подозрение, что должен быть тоже не маленький. Поможешь потестить?

Что касается myoffice, наверное пока не готов с ним разбираться. С Яндексом было не сложно, у меня корпоративный ящик на нем )))))
JohnyDeath; +1
3. JohnyDeath 301 27.10.22 15:52 Сейчас в теме
(2) С "моим офисом" вообще ни разу не сталкивался, но он просто всегда на слуху как аналог офисному пакету от MS.

Поможешь потестить?

А что именно нужно потестить? Прогнать много файлов разного формата?
Я так понимаю, официально такой "хак" не описан в API этих сервисов. Остается только старым-добрым методом тыка. Правильно?
+
4. vandalsvq 1545 27.10.22 16:03 Сейчас в теме
(3) ну да, но наверное тогда пока не тыкайся, я переделаю обработку чуток и расскажу результат, минут через 10-15
+
5. ixijixi 1796 27.10.22 16:09 Сейчас в теме
(2) Проверил Яндекс. Принимает форматы word, excel, картинки (jpg как минимум), pdf, txt, zip, csv, возможно еще какие-либо. Не принимает dbf, mdb, xml
JohnyDeath; vandalsvq; +2
6. vandalsvq 1545 27.10.22 16:18 Сейчас в теме
(3), (5) Так, с Яндексом уже 1С не справляется. То есть Chrome, Edge (хотя этот тот же хром) без проблем, а в 1С поле HTML не "вывозит".
Авторизация тут роли не играет, я и режим инкогнито пробовал, то есть норм Яндекс всегда в браузерах работает.
На всякий случай, счас приложу версию с переключателем между сервисами, но у меня пока не завелось в общем
+
8. JohnyDeath 301 27.10.22 16:34 Сейчас в теме
(6) Спасибо за доп. исследование.
Поковыряюсь на досуге, вдруг что-то да получится.
Ты, кстати, на какой версии 1С пробовал? С новым веб-движком же?
+
9. vandalsvq 1545 27.10.22 16:36 Сейчас в теме
(8) я на 8.3.20.1838 сижу, пока даже на 21й никак не перееду ))))
+
10. JohnyDeath 301 27.10.22 16:42 Сейчас в теме
(9)
8.3.20.1838

если есть типовые, то скоро будешь вынужден обновиться. БСП заломает руки и затребует следующие минимальные версии:
8.3.17.2733; 8.3.18.1902; 8.3.19.1665; 8.3.20.2076; 8.3.21.1508; 8.3.22.1603
+
12. vandalsvq 1545 27.10.22 16:46 Сейчас в теме
(10) да я не против, тут что-то ребята у нас тормозят )))) перейдем в ближайшее время, может сразу на 22, нам не принципиально
+
13. JohnyDeath 301 27.10.22 16:52 Сейчас в теме
(12) я просто между делом сказал.
Сам вчера нарвался на то, что меня Документооборот так подставил, где уже в новом релизе выкатили требования к свежайшим платформам.
Пришлось быстренько патч-расширение нарисовать.
+
11. vandalsvq 1545 27.10.22 16:45 Сейчас в теме
(8) кстати, вот у Яндекса об этом написано - https://yandex.ru/support/docviewer/index.html
JohnyDeath; +1
7. vandalsvq 1545 27.10.22 16:29 Сейчас в теме
(1) JohnyDeath, спасибо за идею, я немного доработал обработку и в статье указал инфу про Яндекс.
JohnyDeath; +1
Оставьте свое сообщение