|   |   | 
| 
 | Использование синхронных методов на клиенте запрещено | ☑ | ||
|---|---|---|---|---|
| 0
    
        LivingStar 04.10.19✎ 07:36 | 
        В вэб клиенте при нажатии на кнопку сохранить выходит окно.
 Не получается сохранить файл как в режиме предприятия на ПК. Как можно решить этот вопрос? http://joxi.ru/KAx3R4VTZ9x5Y2 | |||
| 1
    
        LivingStar 04.10.19✎ 07:47 | 
        Там вот такой код сохранения файла, как его изменить на асинхронный вызов ?
 ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); ДиалогВыбораФайла.Расширение = ".xls"; СтрокаДатаОтчета = Формат(ДатаОтчета,"ДФ=dd.MM.yyyy"); ПолноеИмяФайла = Форма.НаименованиеОтчета + "_" + СтрокаДатаОтчета; ДиалогВыбораФайла.ПолноеИмяФайла = ПолноеИмяФайла; ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина; ТабДок = Новый ТабличныйДокумент; Если ДиалогВыбораФайла.Выбрать() Тогда СформироватьНаСервереТабДок(ТабДок); КонецЕсли; Попытка ТабДок.Записать(ДиалогВыбораФайла.ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLS); Сообщить("Отчет сохранен " + ДиалогВыбораФайла.Каталог); Исключение КонецПопытки; КонецЕсли; | |||
| 2
    
        Dmitry1c 04.10.19✎ 07:50 | 
        (1) что-то типа "показатьДиалогВыбораФайла"     | |||
| 3
    
        Dmitry1c 04.10.19✎ 07:52 | ||||
| 4
    
        LivingStar 04.10.19✎ 07:59 | 
        А как вот этот код (1) поправить на асинхронный вызов?     | |||
| 5
    
        LivingStar 04.10.19✎ 08:33 | 
        подскажите пожалуйста по коду?     | |||
| 6
    
        Тихий омут 04.10.19✎ 08:44 | 
        &НаСервере
 Функция ПоместитьФайлВоВременноеХранилище(Ссылка) Результат = ПоместитьВоВременноеХранилище(Ссылка.Файл.Получить(),ЭтаФОрма.УникальныйИдентификатор); Возврат Результат; КонецФункции &НаСервереБезКонтекста Функция ПолучитьФайлИзХранилища(Файл) АдресВременногоХранилища=""; АдресВременногоХранилища=ПоместитьВоВременноеХранилище(Файл.Файл.Получить()); Возврат АдресВременногоХранилища; КонецФункции // ПолучитьФайлИзХранилища(НомерФайла) &НаКлиенте Процедура СохранитьФайлНаДиск(Команда) #Если ВебКлиент Тогда Если ЭтаФорма.Элементы.Файлы.ТекущиеДанные=Неопределено Тогда Возврат; КонецЕсли; // [ЭтаФорма.Элементы.Файлы.ТекущиеДанные=Неопределено] СсылкаНаФайл=ЭтаФорма.Элементы.Файлы.ТекущиеДанные.Файл; ПолучитьФайл(ПоместитьФайлВоВременноеХранилище(СсылкаНаФайл), ПолучитьИмяФайла(СсылкаНаФайл), Истина); #Иначе Если ЭтаФорма.Элементы.Файлы.ТекущиеДанные=Неопределено Тогда Возврат; КонецЕсли; // [ЭтаФорма.Элементы.Файлы.ТекущиеДанные=Неопределено] СсылкаНаФайл=ЭтаФорма.Элементы.Файлы.ТекущиеДанные.Файл; Диалог=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); Диалог.ПолноеИмяФайла=ПолучитьИмяФайла(СсылкаНаФайл); Диалог.Фильтр="*.*"; Диалог.МножественныйВыбор=Ложь; Диалог.Заголовок="Укажите путь и имя файла для сохранения на локальный диск"; Если Диалог.Выбрать() Тогда АдресВременногоХранилища=ПолучитьФайлИзХранилища(СсылкаНаФайл); ДвоичныеДанные=ПолучитьИзВременногоХранилища(АдресВременногоХранилища); ДвоичныеДанные.Записать(Диалог.ПолноеИмяФайла); КонецЕсли; // [Диалог.Выбрать()] #КонецЕсли // [ВебКлиент] КонецПроцедуры | |||
| 7
    
        Тихий омут 04.10.19✎ 08:44 | 
        внимательно покури в СП метод глоб. контекста ПолучитьФайл()     | |||
| 8
    
        Тихий омут 04.10.19✎ 08:47 | 
        Разжевывать всё не буду, мой пример у тебя сразу не заработает. Думай, пробуй. Направление есть.     | |||
| 9
    
        ДенисЧ 04.10.19✎ 08:51 | 
        правой кнопкой клацни и рефакторинг - нерекомендуемые синхронные вызовы - преобразовать...     | |||
| 10
    
        Василий Алибабаевич 04.10.19✎ 08:51 | 
        (6) А у тебя тоже "Диалог.Выбрать()". А именно на это у ЖивойЗвезды и ругается.
 Нужно переделывать на "Диалог.Показать()". Но это же ЖиваяЗвезда... А значит - тут нужно только вместо него сделать. | |||
| 11
    
        LivingStar 04.10.19✎ 08:55 | 
        Вот код который работает как синхронный вызов (1)
 как его переделать на асинхронный ? | |||
| 12
    
        LivingStar 04.10.19✎ 08:56 | 
        (6) ничего не понятно, у меня вот кусок кода (1) который работает, как его преобразовать на асинхронный вызов?     | |||
| 13
    
        Тихий омут 04.10.19✎ 08:58 | 
        (10) ты совет из (7) тоже проигнорировал, да?     | |||
| 14
    
        Василий Алибабаевич 04.10.19✎ 08:58 | 
        (13) Да.     | |||
| 15
    
        Василий Алибабаевич 04.10.19✎ 08:59 | 
        + (14) У ДиалогВыбораФайла есть вполне себе асинхронный метод. ПРичем он никак не связан с ПолучитьФайл.     | |||
| 16
    
        Тихий омут 04.10.19✎ 09:02 | 
        (15) А я не спорю с этим. Но если есть желание налюбиться вдоволь с установкой в браузере расширения для работы с файлами - дело ваше.     | |||
| 17
    
        LivingStar 04.10.19✎ 09:03 | 
        (13) посомтрел     | |||
| 18
    
        LivingStar 04.10.19✎ 09:05 | 
        мне не понятно что делать     | |||
| 19
    
        Василий Алибабаевич 04.10.19✎ 09:06 | 
        (16) Ага. Точно. Как раз у ТС проблема - его программа уже везде работает, осталось только в браузере наладить )))     | |||
| 20
    
        LivingStar 04.10.19✎ 09:07 | 
        (19) Работает, на веб браузере хочу понять как сделать это асинхронно, пересмотрел массу статей, но как именно это сделать пока не понял ((((( Странно что не понятно. Вроде все очевидно. Полумается таб документ и сохраняется в эксель файл.
 Все прозрачно!!!!! Как это сделать с аснхронным вызовом? | |||
| 21
    
        Василий Алибабаевич 04.10.19✎ 09:09 | 
        (18) Так все же просто. Как предлагает Тихий омут нужно на 1С написать свой НортонКомандир, который даст возможность выбрать файл и ... Та-да-дам... подставить его в метод ПолутьФайл() ))) Занавес.     | |||
| 22
    
        LivingStar 04.10.19✎ 09:15 | 
        (21) Я по делу спрашиваю, из кода в (1) как его переделать на асинхронный вызов?     | |||
| 23
    
        Тихий омут 04.10.19✎ 09:21 | 
        (21) Узбагоинчика примите-с :)
 (22) Тебе принципиально именно на асинхронный вызов переделать или чтобы в браузере работало без лишней любви? Поверь, предложенный метод работает _на всех_ браузерах,безо всяких расширений для работы с файлами. Но если принципиально, то... разбирайся сам. А если непринципиально - то ещё одна подсказка. Ты формируешь таб. док. на сервере. Сохрани его там же во временный файл в нужном формате, загрузи полученное во временное хоронилище, верни полученную хоронилещную ссылку на клиента - и код из моего примера внезапно окажется прозрачным и работающим. | |||
| 24
    
        LivingStar 04.10.19✎ 09:26 | 
        (23) что бы в браузере ошибки не было что в (0)
 и код в (1) что бы работал как в предприятии мне просто не понятно что и как делать. | |||
| 25
    
        GROOVY 04.10.19✎ 09:28 | 
        https://its.1c.ru/db/v8315doc#bookmark:dev:TI000001507 вот очень подробно с рисунками.     | |||
| 26
    
        seevkik 04.10.19✎ 09:29 | 
        Он ожил!     | |||
| 27
    
        Тихий омут 04.10.19✎ 09:31 | 
        (24) Тогда прошу прощения за отвлечение внимания на ненужное. Засим позвольте удалиться.     | |||
| 28
    
        LivingStar 04.10.19✎ 09:32 | 
        как из всех этих подсказок переделать код в (1) на работающий в браузере?     | |||
| 29
    
        Василий Алибабаевич 04.10.19✎ 09:42 | 
        (28) ГЫ. Эта музыка будет вечной.
 Я вчера говорил - ливингостар не читает документацию. Не читает советы на форуме, в которых нет готового кода. И вот этого вот (25) он читать тоже не будет. Ему не нужны советы. Ему нужен готовый код. | |||
| 30
    
        Василий Алибабаевич 04.10.19✎ 09:55 | 
        (0) Проверяй :
 Твоя процедура : ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); ДиалогВыбораФайла.Расширение = ".xls"; СтрокаДатаОтчета = Формат(ДатаОтчета,"ДФ=dd.MM.yyyy"); ПолноеИмяФайла = Форма.НаименованиеОтчета + "_" + СтрокаДатаОтчета; ДиалогВыбораФайла.ПолноеИмяФайла = ПолноеИмяФайла; ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина; //отсюда изменилось : Обработчик = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект); ДиалогВыбораФайла.Показать(Обработчик); //здесь закончилась твоя процедура //Это добавленная процедура. В ней часть кода из старой. &НаКлиенте Процедура ПослеВыбораФайла(Результат, П) Экспорт Если Результат = Неопределено Тогда Возврат; КонецЕсли; ИмяФайла = Результат[0]; ТабДок = Новый ТабличныйДокумент; СформироватьНаСервереТабДок(ТабДок); Попытка ТабДок.Записать(ДиалогВыбораФайла.ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLS); Сообщить("Отчет сохранен " + ДиалогВыбораФайла.Каталог); Исключение КонецПопытки; КонецПроцедуры | |||
| 31
    
        LivingStar 04.10.19✎ 09:57 | 
        (25) Я не вижу там примера ((((
 (30) Смотрю. | |||
| 32
    
        Василий Алибабаевич 04.10.19✎ 10:03 | 
        (30) Вот здесь косяк :
 ТабДок.Записать(ДиалогВыбораФайла.ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLS); Нужно : ТабДок.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLS); или ТабДок.Записать(Результат[0],ТипФайлаТабличногоДокумента.XLS); | |||
| 33
    
        LivingStar 04.10.19✎ 10:14 | 
        &НаКлиенте
 Процедура ПослеВыбораФайла(Результат, П) Экспорт Если Результат = Неопределено Тогда Возврат; КонецЕсли; // ИмяФайла = Результат[0]; ТабДок = Новый ТабличныйДокумент; СформироватьНаСервереТабДок(ТабДок); Попытка ТабДок.Записать(ДиалогВыбораФайла.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.XLS); Сообщить("Отчет сохранен " + ДиалогВыбораФайла.Каталог); Исключение КонецПопытки; КонецПроцедуры {Отчет.интРеестрОбъектовЗащиты.Форма.ФормаОтчета.Форма(182,19)}: Переменная не определена (ДиалогВыбораФайла) ТабДок.Записать(<<?>>ДиалогВыбораФайла.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.XLS); (Проверка: Тонкий клиент) {Отчет.интРеестрОбъектовЗащиты.Форма.ФормаОтчета.Форма(183,32)}: Переменная не определена (ДиалогВыбораФайла) Сообщить("Отчет сохранен " + <<?>>ДиалогВыбораФайла.Каталог); (Проверка: Тонкий клиент) | |||
| 34
    
        Василий Алибабаевич 04.10.19✎ 10:16 | 
        (33) Птля... см. (32)     | |||
| 35
    
        Василий Алибабаевич 04.10.19✎ 10:17 | 
        А-а-а-а... В Сообщить() тоже косяк.
 Нужно Сообщить("Отчет сохранен " + ИмяФайла); или Сообщить("Отчет сохранен " + Результат[0]); | |||
| 36
    
        LivingStar 04.10.19✎ 11:01 | 
        (35) Спасибо. Первое тестирование прошло. Ошибки в (0) не было.
 Утром с установкой дополнений и расширений для браузера прозанимался. Установил как получилось. Незнакомые технологии мне всегда с трудом даются. Теряюсь в описаниях. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |