Имя: Пароль:
1C
 
Использование синхронных методов на клиенте запрещено
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) не было.
Утром с установкой дополнений и расширений для браузера прозанимался. Установил как получилось.

Незнакомые технологии мне всегда с трудом даются. Теряюсь в описаниях.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший