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

12.03.25

Разработка - Работа с интерфейсом

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Просмотр документов, используя Google Docs (PDF, Ms Office и не только). Без регистрации и смс
.epf 14,94Kb
11
11 Скачать (2 SM) Купить за 2 150 руб.

Как всегда, я бы не озадачился чем-то интересным, если бы не понадобилось. И вот этот день настал. Я проснулся и понял, что страсть как хочу прямо в окне 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

Важная информация (март 2024)

Сервис 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, Яндекс), но по какой-то причине яндекс показывает все вокруг, а сам документ не показывает, "думает". Желающие копнуть обработку, но не имеющие возможности скачать, пишите в личку, я отправлю, расскажете что получится.

Проверено на следующих конфигурациях и релизах:

  • Бухгалтерия предприятия, редакция 3.0, релизы 3.0.171.23

См. также

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    20207    29    6    

45

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    55891    17    23    

43

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Универсальный редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью рисовать на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    64248    45    60    

83

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    25552    mrXoxot    44    

130

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    13259    smielka    37    

105

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    18773    1240    elcoan    53    

128

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

3 стартмани

10.04.2023    13151    170    acces969    31    

126

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    8680    kalyaka    6    

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

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

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

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

А что именно нужно потестить? Прогнать много файлов разного формата?
Я так понимаю, официально такой "хак" не описан в API этих сервисов. Остается только старым-добрым методом тыка. Правильно?
4. vandalsvq 1604 27.10.22 16:03 Сейчас в теме
(3) ну да, но наверное тогда пока не тыкайся, я переделаю обработку чуток и расскажу результат, минут через 10-15
5. ixijixi 1992 27.10.22 16:09 Сейчас в теме
(2) Проверил Яндекс. Принимает форматы word, excel, картинки (jpg как минимум), pdf, txt, zip, csv, возможно еще какие-либо. Не принимает dbf, mdb, xml
JohnyDeath; vandalsvq; +2 Ответить
6. vandalsvq 1604 27.10.22 16:18 Сейчас в теме
(3), (5) Так, с Яндексом уже 1С не справляется. То есть Chrome, Edge (хотя этот тот же хром) без проблем, а в 1С поле HTML не "вывозит".
Авторизация тут роли не играет, я и режим инкогнито пробовал, то есть норм Яндекс всегда в браузерах работает.
На всякий случай, счас приложу версию с переключателем между сервисами, но у меня пока не завелось в общем
8. JohnyDeath 302 27.10.22 16:34 Сейчас в теме
(6) Спасибо за доп. исследование.
Поковыряюсь на досуге, вдруг что-то да получится.
Ты, кстати, на какой версии 1С пробовал? С новым веб-движком же?
9. vandalsvq 1604 27.10.22 16:36 Сейчас в теме
(8) я на 8.3.20.1838 сижу, пока даже на 21й никак не перееду ))))
10. JohnyDeath 302 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 1604 27.10.22 16:46 Сейчас в теме
(10) да я не против, тут что-то ребята у нас тормозят )))) перейдем в ближайшее время, может сразу на 22, нам не принципиально
13. JohnyDeath 302 27.10.22 16:52 Сейчас в теме
(12) я просто между делом сказал.
Сам вчера нарвался на то, что меня Документооборот так подставил, где уже в новом релизе выкатили требования к свежайшим платформам.
Пришлось быстренько патч-расширение нарисовать.
11. vandalsvq 1604 27.10.22 16:45 Сейчас в теме
(8) кстати, вот у Яндекса об этом написано - https://yandex.ru/support/docviewer/index.html
JohnyDeath; +1 Ответить
7. vandalsvq 1604 27.10.22 16:29 Сейчас в теме
(1) JohnyDeath, спасибо за идею, я немного доработал обработку и в статье указал инфу про Яндекс.
JohnyDeath; +1 Ответить
Оставьте свое сообщение