Работа с файлами в 8.3

08.09.15

Разработка - Механизмы платформы 1С

Работа с файлами в 8.3(толстый, тонкий и web клиенты)

Время неумолимо идёт вперёд, а платформа 1С 8 бежит ещё быстрей этого времени.

Управляемые формы теперь называются "интерфейс ТАКСИ", модальные окна запрещены, а режим использования синхронных вызовов расширений и внешних компонент наглухо положил работоспособность большинства этих расширений и внешних компонент, и половину старых методов в добавок.

 

В общем, пацаны, дела такие - многие из вас читали статью великолепного Чистова П. о работе с файлами в 8.3

Если Вы ещё этого не сделали - бегом марш! (ссылка)

 

Суть механизма работы с файлами в кратце:

1) На клиенте выбираем файл

2) Пихаем его в чёрный ящик

3) Сохраняем содержимое чёрного ящика на сервере

 

Загвоздка состоит в том, что делать это надо особенно, по-новому и с душой.

Поэтому ваши

ВыбранныйФайл.Существует()

и прочие языческие штучки здесь не прокатят.

 

Итак, поехали!

Вот листинг кода, который позволяет загрузить файл с клиента

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

Нас интересует метод "НачатьПомещениеФайлов", который, собственно, вызывает диалог выбора файла и помещает этот файл во временное хранилище. Заморачиваться с описанием временного хранилища нет смысла, просто запомните - это то место, куда помещаются все выбранные нами файлы в виде двоичных данных (черный ящик).

&НаКлиенте
Процедура ОбработатьВыборФайла(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт

    Если ПомещенныеФайлы = Неопределено Тогда
        Возврат;
    КонецЕсли;

    Для каждого ПереданныйФайл Из ПомещенныеФайлы Цикл
        ПутьКФайлу = ПереданныйФайл.Имя;
        Запись.ИмяФайла = РазборСтроки(ПутьКФайлу, "\");
        Элементы.ОткрытьФайл.Заголовок = Запись.ИмяФайла;        
        Адрес = ПереданныйФайл.Хранение;
    КонецЦикла;
    
КонецПроцедуры // ()

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

Идём дальше.

С тем, что файлы нужно хранить в реквизите или ресурсе с типом "Хранилище значения", спорить, думаю, никто не будет. Достать файл из временного хранилища и поместить его в реквизит с типом "Хранилище значения" можно след.образом:

Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Адрес));

С одним разобрались, теперь второе - как достать файл из этого хранилища значений (которое, напомню, находится на сервере) и сохранить на диск клиента?

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

Адрес = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ИмяРеквизита");

Будьте, внимательны! Эта навигационная ссылка уже не имеет с временным хранилищем ничего общего! Проверить тип навигационной ссылки можно методом

ЭтоАдресВременногоХранилища(Адрес)

По традиции, листинг кода, который вызывает диалог сохранения файла

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

Значение переменной "Файл" это ещё одна особенность данного способа. Здесь стоит обратить внимание на "ИмяФайла". Дело в том, что помещая файл во временное хранилище, информация о его имени и расширении теряется. Поэтому не забудьте где-нибудь сохранять корректное имя файла, или хотя бы его расширение, чтобы потом не мучаться с вопросом "А это вордовский документ или мп3?"

Метод "НачатьПолучениеФайлов" аналогичен методу "НачатьПомещениеФайлов". Просто один открывает диалог для выбора файла, другой же, наоборот, открывает диалог для сохранения файла.

 

В принципе всё.

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

Статью писал больше как памятку для себя.

файл 8.3 Такси работа с файлами УФ управляемые формы

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    8060    bayselonarrend    20    

156

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    6276    dsdred    18    

80

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

24.01.2024    19090    YA_418728146    26    

72

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    24140    SeiOkami    48    

135

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    15182    YA_418728146    7    

169
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. vladismi 168 09.09.15 09:02 Сейчас в теме
Как памятка - хорошо.
Плюс!
user593586_fdaimond; kild; CeHbKA; +3 Ответить
2. surikateg 09.09.15 09:36 Сейчас в теме
Да, к сожалению новшества 1с превращают читаемый код в бред умственно отсталого. Автор молодец.
user1671936; vakham; Veric; davdykin; zinzillya; mihaway; probkaotjizni; wowik; Dozkni; Gendelf; Vida; Chai Nic; bolotnikofff; KazanKokos; Reserv1st; Александр056; Windsor77; DrAku1a; IvanovAV; emakei; BigB; q_i; bulpi; CeHbKA; +24 Ответить
3. jura376 7 09.09.15 10:30 Сейчас в теме
Код увеличивается в разы. жесть!!!
wowik; KazanKokos; jif; Windsor77; DrAku1a; CeHbKA; +6 Ответить
4. Bonov 09.09.15 10:50 Сейчас в теме
Крайне бы не рекомендовал использовать подобный код где либо за пределами веб клиента. Минусы очевидны - безусловная загрузка любого файла. Представьте ситуацию, когда пользователь выберет файлике размером в 20 Гб, например? Все повиснет и надолго, ведь этот метод грузит все подряд, не давая вклиниться в обработку загрузки. На веб клиенте это единственный вариант без расширения работы с файлами, а вот в тонком и других клиентах стандартный диалог выбора файлов НО без использования модальности все же стоит использовать.
YanTsys; dimasts; +2 Ответить
6. CeHbKA 305 09.09.15 12:39 Сейчас в теме
(4) Bonov, я не могу представить себе ситуацию, когда в базу 1С будут загружаться файлы объемом 20Гб
Я даже не могу представить себе ситуацию, когда в базу 1С будут загружаться файлы более 10-20мб (файлы оффиса, картинки, мп3 и прочее барахло)

А о том, что старые методы и совместимости, скоро уйдут в небытие, говорить бессмысленно
7. Идальго 235 09.09.15 16:08 Сейчас в теме
(6) чего тут представлять-то? Просто берете и выбираете файлы большие, видео и презентации, ПДФ-ки бывают огромные и т.п. Передача файлов это же не вопрос вашего представления вообще.
LosevI; YanTsys; mrnovel; spy-83; +4 Ответить
8. CeHbKA 305 09.09.15 17:06 Сейчас в теме
(7) Идальго, само по себе хранение больших файлов в недрах базы данных, тем более 1С, абсурдно. Для этого есть репозитории и файловые хранилища. К чему и приучаю своих клиентов.

А прикреплять к документу или элементу справочника PDF, который весит 300мб...
В общем, на своём половом органе я вертел такие PDF и уж тем более видео файлы :)

9. Quasar 09.09.15 17:59 Сейчас в теме
(8) вопрос то не в том логично или нет загружать такие файлы, а в том, что можно просто случайно выбрать большой файл и понеслась))
asisdes; YanTsys; elga2012; +3 Ответить
10. Bonov 09.09.15 19:07 Сейчас в теме
(8) всегда найдется идиот, который и файл большой выберет, и экзешник загрузит, и вообще как только окно 1С перестанет отвечать на запросы в процессе загрузки файла - постарается его поскорее принудительно закрыть. Защита от дурака должна быть всегда! И для этого в 1С полно современных методов, соответствующих последним требованиям по совместимости. Нужно только прислушаться и разобраться, а не твердить свое...
13. CeHbKA 305 10.09.15 09:53 Сейчас в теме
CeHbKA, всегда найдется идиот...

Защита от дурака должна быть всегда!

(10) Bonov, мы друг друга прекрасно поняли :) Но от идиотов даже на кухне никто не застрахован)))
как только окно 1С перестанет отвечать на запросы в процессе загрузки файла - постарается его поскорее принудительно закрыть

не вижу в этом ничего плохого, загрузка всё равно идёт во временное хранилище. А заботиться о потерянных данных "дурака" (как вы выразились), как минимум странно
И для этого в 1С полно современных методов, соответствующих последним требованиям по совместимости. Нужно только прислушаться и разобраться, а не твердить свое...

Я не твержу своё, данный метод рекомендован самим вендором, иначе бы его не было и не было никаких режимов совместимости модальных окон и асинхронных методов. До поры до времени тонкий и web клиенты различаются, но всё ведёт к тому, что они будут единым целым. Достаточно посмотреть на западные примеры систем подобных 1С - работа в них строится через web
42. AnryMc 848 07.09.20 12:03 Сейчас в теме
(10)
Защита от дурака должна быть всегда!


Лифт должен выдержать прямое попадание в кабину самого необученного академика.

Аpкадий Стругацкий, Боpис Стругацкий
11. Идальго 235 09.09.15 20:28 Сейчас в теме
(8) ну не храните большие файлы в недрах 1С, храните в репозитории. Но, что если репозиторий будет под управлением 1С и хранятся файлы централизовано на сервере? Один черт файлы передавать нужно будет на сервак из окна 1С. Другое дело, что 1С должна при этом давать возможность нормально работать (поток н-р дополнительный пилить или еще как-то).

А прикреплять к документу или элементу справочника PDF, который весит 300мб...
В общем, на своём половом органе я вертел такие PDF и уж тем более видео файлы

Отчасти я вас конечно понимаю, но вот далеко не всякому пользователю ясно, почему бы и не прикрепить файло в 300 мб к справочнику. Почему вы как программист не можете обеспечить корректность, надежность и т.п. этой операции? И на самом деле, пользователь прав, мало ли что у него за файлы и зачем они ему, по крайней мере это не должно волновать программиста, это не его задача. Его задача в обеспечении норм.работы пользователей и хотелок.
14. CeHbKA 305 10.09.15 10:03 Сейчас в теме
что если репозиторий будет под управлением 1С и хранятся файлы централизовано на сервере? Один черт файлы передавать нужно будет на сервак из окна 1С

(11) Идальго, это какое-то извращение, управлять файловым репозиторием через 1С, вы так не считаете?
Отчасти я вас конечно понимаю, но вот далеко не всякому пользователю ясно, почему бы и не прикрепить файло в 300 мб к справочнику

как я уже сказал выше, даже на кухне никто не застрахован)))
Почему вы как программист не можете обеспечить корректность, надежность и т.п. этой операции?

Потому что я не Господь Бог))) Пользователь же не спрашивает, почему механик в автосервисе не может обеспечить взаимозаменяемость з\ч от жигулей и кайена?)))
И на самом деле, пользователь прав, мало ли что у него за файлы и зачем они ему, по крайней мере это не должно волновать программиста, это не его задача. Его задача в обеспечении норм.работы пользователей и хотелок.

вот прекрасный ролик)))
http://www.youtube.com/watch?v=TGb6fNUkA4s
logarifm; +1 Ответить
38. dimasts 22 09.02.18 10:01 Сейчас в теме
(6) а я могу — когда компания занимается производством медиаконтента.

Гигабайтный видеоролик — это нормальное почти ежедневное явление. И для того чтобы просто зарегистрировать локальный путь в системе, придётся ждать, когда 1С загрузит его во временное хранилище или получать сообщение о запрете модальности.

В моей ситуации нужно просто зарегистрировать путь в форме, а загрузку файла в облако запустить асинхронно — немодального решения я пока не нашел.

Если кто подскажет, буду премного плюсодарен :)
5. moli_i_n 09.09.15 11:08 Сейчас в теме
12. qwinter 683 10.09.15 01:22 Сейчас в теме
И это еще плюсуют?)))))
m1_1976; Идальго; +2 2 Ответить
15. Идальго 235 10.09.15 15:18 Сейчас в теме
это какое-то извращение, управлять файловым репозиторием через 1С, вы так не считаете
1С это вообще извращение, особенно на УФ. Тем не менее, я допускаю, что репозиторий может иметь систему учета и управления (н-р у нас огромная библиотека здоровых фоток, книг, презентаций, видяшек и т.п.). Неужели вы считаете, что для этого никому не может требоваться система управления?

Потому что я не Господь Бог))) Пользователь же не спрашивает, почему механик в автосервисе не может обеспечить взаимозаменяемость з\ч от жигулей и кайена?)))
Он вполне может это спросить. Далее, сравнение не корректное. Вас же не просят сделать доработку 1С, чтобы она пользователям задницу подтирала.

А ролик действительно прекрасный.
16. CeHbKA 305 10.09.15 17:27 Сейчас в теме
Он вполне может это спросить. Далее, сравнение не корректное. Вас же не просят сделать доработку 1С, чтобы она пользователям задницу подтирала.

(15) Идальго, почему некорректное? Вы даже сами аналогию провели)))))
17. Идальго 235 10.09.15 17:57 Сейчас в теме
(16) потому что функции разные.

Итак, 1С умеет файлы прикреплять - умеет. Ну вот и пользователь может захотеть прикрепить огромный файл. Нигде же в документации не написано (вроде), что большие файлы прикреплять нельзя и не написано почему. А пользователю м.б. это нужно. И хорошо, что вы своих пользователей приучили только мелкие картинки грузить, но, полагаю, это решение скорее административного толка, не технологическое.
18. MaxS 2950 12.09.15 22:11 Сейчас в теме
Сделал как-то загрузку картинок в номенклатуру УТ 11 с папки сервера. Объяснил почему с сервера, а не с клиента. Но пользователи захотели грузить с любого места - со своей папки, с флешки... Пришлось сделать.
Раз уж 1С такое наворотили, можно было бы в платформу добавить возможность просмотра свойств картинок, например, чтобы сообщить пользователю, что картинка огромная. И если 1С сумеет, предложить преобразовать в меньший размер (на клиенте), либо отказаться от загрузки.
ixilimuse; CeHbKA; +2 Ответить
20. CeHbKA 305 14.09.15 10:09 Сейчас в теме
(18) MaxS, да, я примерно о том же

(19) logarifm, спасибо большое за ваш комментарий!
Плюсануть то я плюсанул, но вот в документации 1С все это расписано.
Руководство разработчика: Глава 4. Встроенный язык. 4.7.8. Синхронные и асинхронные методы работы
Следует почитать автору это прежде чем вообще говорить о том, что 1С не сделала или сделала не так.

Так я не говорил, что она не сделала или сделала не так. Я просто констатировал факт. Не у всех есть возможность постоянно курить пособие, поэтому и сделал небольшую памятку (прежде всего для себя :)
21. logarifm 1123 14.09.15 10:21 Сейчас в теме
(20) Извеняюсь и не будучи рекламой этого блога, просто на заметку автору, заведите себе блог. Я вот сделал такой блог (ссылка). Если я беру чьи-то статьи в него на заметку то обязательно это указываю. Зато удобно и всегда под рукой.
22. VladimirKHV 14 15.10.15 10:06 Сейчас в теме
(20) Скажу больше, не у всех есть это пособие.
(19) logarifm, Мы покупали 1С еще версии 8.2. Причем она была с книжками от 8.0.
Поэтому у нас "Описание встроенного языка", часть 1, глава4 называется "Общие объекты".
И где нам узнавать о новом функционале, если не в интернете? После каждого обновления платформы покупать новую версию?
23. Serj1C 483 03.02.16 12:20 Сейчас в теме
(22) VladimirKHV, список изменений не является секретом и всегда подробно описывается с каждым релизом электронно на сайте ИТС и портале обновлений. Например http://downloads.v8.1c.ru/content//Platform/8_3_7_1873/1cv8upd.htm
24. AlX0id 10.03.16 15:40 Сейчас в теме
(23) Serj1C,
Кабы кто еще додумался там (ну или в другом каком месте) именно постить различия между 8.3.7.1873 и 8.3.7.****, а не между 8.3.7.1873 и 8.2..
19. logarifm 1123 14.09.15 09:46 Сейчас в теме
Плюсануть то я плюсанул, но вот в документации 1С все это расписано.

Руководство разработчика: Глава 4. Встроенный язык. 4.7.8. Синхронные и асинхронные методы работы

Следует почитать автору это прежде чем вообще говорить о том, что 1С не сделала или сделала не так. Как по мне то 1С молодцы и не топчуться на месте с ноги на ногу и делают революционные прорыви, пусть они не всем нравяться, я сам не любитель "Такси" да и слово подобрали. что вообще никто не понимает почему именно "Такси"... Но все же, мы на этом работаем и мы под это разрабатываем и давайте не будем утаивать и то, что на других языках есть масса неудобного использования - где на своих форумах вы также найдете как пинают святыню С++, Java и другие языки...

А может проблема не в языках программирования?... Думаю следует вначале посомтреть на себя, а смог бы я нечто подобное сделать прежде чем критиковать. У меня все!
SvetaH; SkyHunter; CeHbKA; +3 Ответить
25. donyab 9 29.03.16 17:59 Сейчас в теме
На версии платформы 8.3.7.1949 ругается, что надо использовать расширение для работы с файлами, а при повторном вызове все удачно срабатывает.

Что бы это вылечить надо начинать со следующего кода:


#Если ВебКлиент Тогда
		НачатьПодключениеРасширенияРаботыСФайлами(Новый ОписаниеОповещения("ПослеПодключенияСохранениеАсинхронно", ЭтаФорма));
#КонецЕсли
26. fixin 4275 14.01.17 23:20 Сейчас в теме
не пиши чушь про "модальные окна запрещены", покури "Блокировка всего интерфейса".
в остальном неплохо.
27. jokereinherjar 06.02.17 14:35 Сейчас в теме
а если выбирается множество файлов и без диалога открытия?
28. dimasts 22 29.04.17 11:29 Сейчас в теме
Это, нормально что нет листинга процедуры "ОбработкаСохраненияФайлов", к которой обращается ОписаниеОповещения в листинге сохранения файла? Или я опять ни чего не понял?
ER34; Letos; +2 Ответить
29. z4z4z 50 11.07.17 17:47 Сейчас в теме
Метод НачатьПолучениеФайлов(ОписаниеОповещения,ПолучаемыеФайлы, ДиалогОткрытияФайла, Истина) требует установки расширение работы с файлами, если без расширения то подойдет только метод ПолучитьФайл(АдресВР,ПутьКФайлуВыгрузкиПолн, Истина);
30. CeHbKA 305 12.07.17 09:52 Сейчас в теме
(29) статью нужно переписать, всё руки не доходят
deutsch2008; stas1kbob; +2 Ответить
35. deutsch2008 10.10.17 11:04 Сейчас в теме
31. deutsch2008 09.10.17 15:27 Сейчас в теме
что-то пошло не так у меня!
32. deutsch2008 09.10.17 15:28 Сейчас в теме
Переменная не определена (Запись)
Процедура или функция с указанным именем не определена (РазборСтроки)
Переменная не определена (Адрес)
33. CeHbKA 305 09.10.17 21:23 Сейчас в теме
(32) запись вам не нужна, разборСтроки - аналогично.
См (30)
34. deutsch2008 10.10.17 11:03 Сейчас в теме
(33) тогда еще больше ошибок!
36. deutsch2008 10.10.17 13:59 Сейчас в теме
+ не отрабатывает на веб клиенте. из за запрета модальности.
37. AlexHelmer 1829 15.10.17 08:26 Сейчас в теме
У меня вопрос. Как реализовать загрузку файла на WEB клиенте, без диалога выбора файла? НачатьПомещениеФайлов, в нем есть параметр Интерактивно, но на Веб клиенте он всегда Истина, т.е. диалог выбора файла будет отображен.
А мне надо загрузить конкретно по указанному пути c:\www\kkk.jpg на WEB клиенте?
39. lisrws 145 10.02.18 14:21 Сейчас в теме
Вы писали:
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтаФорма);
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;

НачатьПомещениеФайлов(ОписаниеОповещения, , ДиалогОткрытияФайла, Истина, УникальныйИдентификатор);

В СП для НачатьПомещениеФайлов третьим параметром передается имя файла, а не ДиалогВыбораФайла. это вы ошиблись или в каких-то релизах так было раньше? было бы круто передавать диалог выбора с установленными на тип файла фильтрами, но пока такой возможности не вижу.
40. CeHbKA 305 15.02.18 15:53 Сейчас в теме
(39) используйте ДиалогОткрытияФайла.Показать()
Естественно, методы от версии к версии в платформе могут меняться.
41. Xershi 1557 09.06.19 18:33 Сейчас в теме
Наконец написал свою публикацию с блекджеком и ш...... Работа с файлами (обычная и управляемая форма) все структурировано и методы все актуализированы!
BigB; wowik; CeHbKA; +3 Ответить
43. user1979322 01.08.24 09:25 Сейчас в теме
А можно как нибудь перечислить реквизиты, а то не работает
Прикрепленные файлы:
Оставьте свое сообщение