ПоместитьФайлНаСерверАсинх c диалогом выбора файла

03.07.24

Разработка - Инструментарий разработчика

Использование метода ПоместитьФайлНаСерверАсинх c диалогом выбора файла.

Файлы

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

Наименование Скачано Купить файл
ПоместитьФайлНаСерверАсинх c диалогом выбора файла:
.epf 7,08Kb
11 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

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

Оформить подписку и скачать решение со скидкой

Асинхронные методы реализованы в 1С уже сравнительно давно, но редко используются разработчиками. Виной тому - отсутствие рабочих примеров и наличие до сих пор работающих старых методов (ПоместитьВоВременноеХранилище, НачатьПомещениеФайла, НачатьПомещениеФайлаНаСервер), которые хорошо описаны и снабжены работающими примерами.

Моя цель зафиксировать и предоставить рабочий пример, тем, кто захочет воспользоваться современным методом НачатьПомещениеФайлаНаСервер.

#Область ОбработчикиКомандФормы

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

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

#Область СлужебныеПроцедурыИФункции

&НаСервереБезКонтекста
Процедура ПрочитатьФайл(Адрес)
    
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
    ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
    ДвоичныеДанные.Записать(ИмяФайла);
    
    табДок = Новый ТабличныйДокумент;
    
    Попытка
        табДок.Прочитать(ИмяФайла);
    Исключение
        ЗаписьЖурналаРегистрации(НСтр("ru = 'Загрузка статей'"),
        УровеньЖурналаРегистрации.Ошибка,,,
        ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        ВызватьИсключение;
    КонецПопытки;
    
    КоличествоСтрок = табДок.ВысотаТаблицы;
    ГлубинаИерархии = 6;
    Для каждого Область из табДок.Области Цикл
        
        ИмяСправочника = Область.Имя;
        Менеджер = Справочники[ИмяСправочника];
        
        Если Менеджер = Неопределено Тогда
            Менеджер = Справочники.СтатьиДвиженияДенежныхСредств;
        КонецЕсли;
        
        РодительскаяГруппаСправочника = Менеджер.НайтиПоНаименованию("Загруженные справочники");
        
        ГруппыИерархии = Новый Массив(ГлубинаИерархии);
        ГруппыИерархии.Вставить(0, РодительскаяГруппаСправочника);
        ТекущаяГруппа = ГруппыИерархии[0];
        
        Для НомерСтроки = Область.Верх + 1 по Область.Низ Цикл
            Наименование = Строка(табДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0;") + "C" + 2).ТекущаяОбласть.Текст);
            Тип = Строка(табДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0;") + "C" + 3).ТекущаяОбласть.Текст);
            ДоходРасход = Строка(табДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0;") + "C" + 4).ТекущаяОбласть.Текст);
            
            Если Лев(Тип, 6) = "Группа" Тогда
                Уровень = Число(Прав(Тип, 1)) + 1;
                НоваяГруппа = Менеджер.СоздатьГруппу();
                НоваяГруппа.Наименование = Наименование;
                НоваяГруппа.Родитель = ГруппыИерархии[Уровень - 1];
                НоваяГруппа.Записать();
                ТекущаяГруппа = НоваяГруппа.Ссылка;
                ГруппыИерархии[Уровень] = ТекущаяГруппа;
            ИначеЕсли Тип = "Статья" Тогда
                НоваяСтатья = Менеджер.СоздатьЭлемент();
                НоваяСтатья.Наименование = Наименование;
                НоваяСтатья.Родитель = ТекущаяГруппа;
                НоваяСтатья.ПриходРасход = ?(ДоходРасход = "Доход", Перечисления.ВидыДвиженийПриходРасход.Приход, Перечисления.ВидыДвиженийПриходРасход.Расход);
                НоваяСтатья.Записать();
            КонецЕсли;
            
        КонецЦикла;
        
    КонецЦикла;
    
КонецПроцедуры

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

Платформа: 8.3.24.1467.

Вступайте в нашу телеграмм-группу Инфостарт

ПоместитьФайлНаСерверАсинх

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    213710    1173    413    

1050

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    40951    223    115    

212

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    26757    67    30    

97

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

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

16000 руб.

10.11.2023    18895    76    39    

92

Инструментарий разработчика Программист 1С v8.3 Платные (руб)

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

9500 руб.

17.05.2024    37913    135    55    

177

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

9900 руб.

25.08.2025    4407    8    10    

15

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

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

3600 руб.

27.12.2024    3736    7    0    

12
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. baracuda 2 04.07.24 15:35 Сейчас в теме
Спасибо, сегодня как раз пригодилось.
2. Xershi 1542 04.07.24 20:13 Сейчас в теме
Было бы не плохо написать с какого релиза это может начать работать.
И почему нужно отказаться от асинхронного метода.
Работа с файлами (обычная и управляемая форма)
5 лет прошло. Тогда ещё не было этого метода и за это время множество кода в типовых через описание оповещения реализованно.
Да и как то устаревшими я не видел чтобы их называли, а вот модальные вызовы, было такое. В самой справке писали. Но это больше связано было с работой в браузере и переходом на управляемые формы.
6. sikuda 679 05.07.24 10:27 Сейчас в теме
(2) Этапы большого пути.... Скрестить https://www.w3.org/TR/FileAPI/ и Windows API и Linux - операция невозможное..
Прикрепленные файлы:
7. Xershi 1542 05.07.24 11:52 Сейчас в теме
(6) спасибо. Залез в справку 8.3.25:

ПоместитьФайл
Использование в версии:
Доступен, начиная с версии 8.2.
Не рекомендуется использовать, начиная с версии 8.3.13.
Описание изменено в версии 8.3.18.

НачатьПомещениеФайла
Использование в версии:
Доступен, начиная с версии 8.3.13.
Не рекомендуется использовать, начиная с версии 8.3.15.
Описание изменено в версии 8.3.22.

НачатьПомещениеФайлаНаСервер
Использование в версии:
Доступен, начиная с версии 8.3.15.

ПоместитьФайлНаСерверАсинх
Использование в версии:
Доступен, начиная с версии 8.3.18.

В 2019 только появилась 8.3.15 тогда все стало через НачатьПомещениеФайла, затем они придумали НачатьПомещениеФайлаНаСервер и до сих пор используется. А с 8.3.18 решили сделаем как в дваже или каком там языке обещания есть и пошло уже ПоместитьФайлНаСерверАсинх. Но этот метод как то пока странно смотрится. Хотя и с оповещением тоже было странно. Но они на оповещении повесили и все остальные методы, поэтому работу с файлами переписывать такое себе.

Посмотрел свое решение. Там используются уже методы с 8.3.15, которые до сих пор актуальны. Т.е. в ходу НачатьПомещениеФайлаНаСервер. Ну а для спец задач уже можно начать думать как применять ПоместитьФайлНаСерверАсинх.
9. sikuda 679 08.07.24 11:19 Сейчас в теме
(7) Это процесс большого перехода и философии локального приложения, в котором доступен локальный диск и мы может делать что угодно к философии интернета, где все локальные ресурсы это особые временные ресурсы для безопасного работы приложений.

Как с точки зрения 1С надо придерживаться философии локального приложения и положить болт на безопасность:
"Для использования метода ПоместитьФайлы() в веб-клиенте требуется подключение расширения работы с файлами"

Но общая тенденция все равно уходит в сторону безопасности и привязки к философии браузеров(колбеки Начать)
и 1С приходится следовать общим тенденциям, но кто сказал что программисту 1С вообще будет понятно что происходит!
10. Xershi 1542 08.07.24 12:21 Сейчас в теме
(9) что-то про это слышал. Посмотрим на будущие релизы платформы.
3. user1142959 2 04.07.24 22:09 Сейчас в теме
1800руб.. огонь!
Hogyoku; gucci76; dj_tol; DoctorRoza; manlak; Jimbo; +6 Ответить
11. ubnkfl 08.07.24 13:14 Сейчас в теме
(3) уже 1850 рублей. Цена фантиков подросла.
4. gybson 05.07.24 04:49 Сейчас в теме
В ЗУП 8 "НачатьПомещениеФайлаНаСервер" и 5 "ПоместитьФайлНаСерверАсинх"

Притом пишут в одну строку

Результат = Ждать ПоместитьФайлНаСерверАсинх(,,, ПутьКФайлуВнешнегоОтчетаНаКлиенте, УникальныйИдентификатор);


Тут нет более щадящих способов продвигать свои продукты, чем вот такой незамысловатый?
5. dhurricane 05.07.24 09:38 Сейчас в теме
К ячейкам табличного документа можно обращаться в том числе и по номерам строк и колонок. При этом текст приводить к строке ни к чему, равно как и получать область от области.
// То есть вместо такого:
Наименование = Строка(табДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0;") + "C" + 2).ТекущаяОбласть.Текст);

// ...можно писать так:
Наименование = табДок.ПолучитьОбласть(НомерСтроки, 2).Текст;
8. Поручик 4595 05.07.24 13:53 Сейчас в теме
Если пошёл разговор про старое и прогрессивное,
ЭтаФорма.УникальныйИдентификатор давно устарело.
Используйте ЭтотОбъект.ИмяСвойства
marku; Alexwarsis; rozer; +3 Ответить
12. Xershi 1542 07.09.24 11:10 Сейчас в теме
(8) только в оф всё ещё эта форма.
Для отправки сообщения требуется регистрация/авторизация