ВЕБ-клиент,Ошибка при вызове метода контекста (КаталогВременныхФайловАсинх)

1. Stiks1911 17.08.22 19:41 Сейчас в теме
КА, именно веб-клиент.В документе создал кнопку, при нажатии должен выводиться вордовский документ. В тонком клиенте все работает отлично, но нужно кроме, тонкого клиента, чтобы работало и в вебе. Расширение для работы с файлами для веб-клиента взял из СП, но при нажатии кнопки выскакивает данная ошибка:

Ошибка при вызове метода контекста (КаталогВременныхФайловАсинх)
{КнопкаСотруднику Документ.эсЗаданиеСотруднику.Форма.ФормаДокумента.Форма(50)}: Обещание = КаталогВременныхФайловАсинх();
по причине:
{КнопкаСотруднику Документ.эсЗаданиеСотруднику.Форма.ФормаДокумента.Форма(50)}: Расширение для работы с файлами не подключено.
Обещание = КаталогВременныхФайловАсинх();

Также даже без нажатия кнопки в самом документе периодически вылетает данная ошибка:
{CommonModule.эсРаботаСоСтрокамиКлиентСервер.Module(5243,2)}: Процедура или функция с указанным именем не определена (ЗаписатьJSON)
<<?>>ЗаписатьJSON(ЗаписьJSON, Значение);

Ниже Сам код:

&НаКлиенте
Асинх Процедура Расш1_СправкаСотрудникуПосле(Команда)
  
  #Если Вебклиент Тогда
    Подключить(Истина);
  #КонецЕсли  
  
  Адрес = ПолучитьСтруктуруДанных(); 
  Обещание = КаталогВременныхФайловАсинх();
  ИмяФайла = Ждать Обещание; 
  
  Если ИмяФайла = Неопределено Тогда
    Возврат;
  КонецЕсли;
  
  ДД = ПолучитьИзВременногоХранилища(Адрес);
  ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораФайла",ЭтотОбъект);
  ДД.НачатьЗапись(ОписаниеОповещения, ИмяФайла); 
  
  ЗапуститьПриложение(ИмяФайла);
  
КонецПроцедуры 

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

  Если ДополнительныеПараметры = Неопределено Тогда
    Сообщить("Что-то другое в доп параметры");
  КонецЕсли;
  

КонецПроцедуры // ПослеВыбораФайла()


&НаСервере
Функция ПолучитьСтруктуруДанных() Экспорт 

  Макет = Документы.эсЗаданиеСотруднику.ПолучитьМакет("Расш1_МакетДДБезТабл");
  Возврат ПоместитьВоВременноеХранилище(Макет);

КонецФункции

&НаКлиенте 
Процедура Подключить(УстановитьЕслиНеПодключено) Экспорт
    НачатьПодключениеРасширенияРаботыСФайлами(
        Новый ОписаниеОповещения(
            "ПослеПодключения",
            ЭтотОбъект,
            УстановитьЕслиНеПодключено));
КонецПроцедуры

&НаКлиенте
Процедура ПослеПодключения(Подключено, УстановитьЕслиНеПодключено) Экспорт
    Если Подключено Тогда
        // Расширение работы с файлами подключено
    ИначеЕсли УстановитьЕслиНеПодключено Тогда
        НачатьУстановкуРасширенияРаботыСФайлами(
            Новый ОписаниеОповещения(
                "Подключить",
                ЭтотОбъект,
                Ложь));
    Иначе
        // Не удалось установить или подключить

        // расширение работы с файлами

    КонецЕсли;    
КонецПроцедуры
Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. spacecraft 18.08.22 10:43 Сейчас в теме
(1) НачатьПодключениеРасширенияРаботыСФайлами и НачатьУстановкуРасширенияРаботыСФайлами асинхронные методы. Они не останавливают выполнение кода в методе Расш1_СправкаСотрудникуПосле. Соответственно могут выполняться после вызова КаталогВременныхФайловАсинх. Но так как ошибка уже вызвана, то и они не факт, что отрабатывают даже.
5. Stiks1911 18.08.22 10:53 Сейчас в теме
(4) ага, про асинхронные методы понял. А как тогда сделать, чтобы они заранее выполнялись до основного кода и при этом выполнялись именно когда нажимается кнопка пользователем?
6. spacecraft 18.08.22 11:00 Сейчас в теме
(5) перенести код, зависящий от подключения в отдельный метод и вызывать его уже из результатов асинхронных методов при успешном подключении.
9. Stiks1911 18.08.22 11:05 Сейчас в теме
(6) Т.е. код по сохранению файла и его показу из Процедура Расш1_СправкаСотрудникуПосле(Команда) перенести в Процедура ПослеПодключения, правильно понимаю
(6)
10. spacecraft 18.08.22 11:10 Сейчас в теме
(9) да. вот сюда:
Если Подключено Тогда
        // Расширение работы с файлами подключено

Но я бы сделал отдельную процедуру, куда вынес бы код после Подключить и вызывал бы его из выше указанного места.
И можно убрать проверку
#Если Вебклиент Тогда
Для тонкого клиента подключение нормально отработает. Ничего не подключит и вернет Истину, что подключено.
7. Stiks1911 18.08.22 11:00 Сейчас в теме
(4)Переписал код. По ходу Вы правы, потому что при первом нажатии кнопки выдает ошибку, что не установлено расширение работы с файлами, при втором нажатии вылетает ошибка как на скрине



&НаКлиенте
Процедура НачатьПодключениеРасширенияРаботыСФайламиЗавершение(Подключено, ДополнительныеПараметры) Экспорт

Если Не Подключено Тогда
Оповещение = Новый ОписаниеОповещения("НачатьУстановкуРасширенияРаботыСФайламиЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ТекстСообщения = НСтр("ru='Для продолжении работы необходимо установить расширение для веб-клиента ""1С:Предприятие"". Установить?'");
ПоказатьВопрос(Оповещение, ТекстСообщения, РежимДиалогаВопрос.ДаНет);
Иначе
ВыполнитьОбработкуОповещения(ДополнительныеПараметры);
КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура НачатьУстановкуРасширенияРаботыСФайламиЗавершение(Результат, ДополнительныеПараметры) Экспорт

Если Результат = КодВозвратаДиалога.Да Тогда
НачатьУстановкуРасширенияРаботыСФайлами(ДополнительныеПараметры);
КонецЕсли;

КонецПроцедуры
&НаКлиенте
Асинх Процедура Расш1_СправкаСотрудникуПосле(Команда)

Оповещение = Новый ОписаниеОповещения("НачатьПодключениеРасширенияРаботыСФайламиЗавершение", ЭтотОбъект);
НачатьПодключениеРасширенияРаботыСФайлами(Оповещение);

Адрес = ПолучитьСтруктуруДанных();
//ИмяФайла = КаталогВременныхФайлов()+"Инструкция по нарядам2.docx";
//Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);
Обещание = КаталогВременныхФайловАсинх();
ИмяФайла = Ждать Обещание;

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

ДД = ПолучитьИзВременногоХранилища(Адрес);
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораФайла",ЭтотОбъект);
ДД.НачатьЗапись(ОписаниеОповещения, ИмяФайла);

//ЗапуститьПриложение(ИмяФайла);
НачатьЗапускПриложения(Новый ОписаниеОповещения("НажатиеЗавершение",ЭтотОбъект),ИмяФайла);

КонецПроцедуры

&НаКлиенте
Процедура НажатиеЗавершение(КодВозврата, ДополнительныеПараметры) Экспорт

КонецПроцедуры // НажатиеЗавершение()


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

Если ДополнительныеПараметры = Неопределено Тогда
Сообщить("Что-то другое в дооп параметры");
КонецЕсли;
КонецПроцедуры // ПослеВыбораФайла()

&НаСервере
Функция ПолучитьСтруктуруДанных() Экспорт

Макет = Документы.эсЗаданиеСотруднику.ПолучитьМакет("Расш1_МакетДДБезТабл");
Возврат ПоместитьВоВременноеХранилище(Макет);

КонецФункции
Прикрепленные файлы:
8. spacecraft 18.08.22 11:02 Сейчас в теме
(7) это ошибка связана с тем, что полученный временный каталог пытаетесь использовать как файл.
Обещание = КаталогВременныхФайловАсинх();
ИмяФайла = Ждать Обещание;
...
ДД.НачатьЗапись(ОписаниеОповещения, ИмяФайла);

ИмяФайла это имя каталога, а не файла.
11. Stiks1911 18.08.22 11:54 Сейчас в теме
(10) Скажите пожалуйста, чтобы получить именно имя файла в каталоге, тогда нужно сделать так, правильно?
Обещание = КаталогВременныхФайловАсинх()+"Инструкция по нарядам2.docx";
ИмяФайла = Ждать Обещание;
(8) И тогда по идее код ниже уже будет правильным
ДД.НачатьЗапись(ОписаниеОповещения, ИмяФайла);
12. spacecraft 18.08.22 12:08 Сейчас в теме
(11) типо того. Я же приводил пример во вложенной обработке.
13. Stiks1911 18.08.22 12:17 Сейчас в теме
(12) Да, на основании ее и сделал, но теперь уже новая ошибка). Благодарю Вас за терпение со мной и помощь)
Преобразование значения к типу Число не может быть выполнено
{КнопкаСотруднику Документ.эсЗаданиеСотруднику.Форма.ФормаДокумента.Форма(52)}: Обещание = КаталогВременныхФайловАсинх()+"Инструкция по нарядам2.docx";
(12)
14. spacecraft 18.08.22 12:23 Сейчас в теме
(13) ну да, Обещание это не строка :)
Вот так:
Обещание = КаталогВременныхФайловАсинх();
ИмяКаталога = Ждать Обещание;
ИмяФайла = ИмяКаталога+"Инструкция по нарядам2.docx";
15. Stiks1911 18.08.22 12:44 Сейчас в теме
(14) Я совсем тупица( От души благодарю Вас!!! Спасибо Вам за отзывчивость и терпение! Буду разбираться с этим теперь - Только Вы не подсказывайте, если за сегодня не разберусь, тогда если Вы не против, попрошу помощи!)Еще раз благодарю! Также даже без нажатия кнопки в самом документе периодически вылетает данная ошибка:
{CommonModule.эсРаботаСоСтрокамиКлиентСервер.Module(5243,2)}: Процедура или функция с указанным именем не определена (ЗаписатьJSON)
<<?>>ЗаписатьJSON(ЗаписьJSON, Значение);
(14)
16. Stiks1911 21.08.22 10:41 Сейчас в теме
(14) НЕ знаю, может, чтобы Вас не беспокоить создать новую тему или это будет лишнее увеличение тем на форуме, не хочется его захламлять. Промониторил все на форумах и в гугле, что могло быть связано с этой ошибкой - При Открытии документа, именно в Веб-клиенте, без нажатия каких-либо кнопок, периодически вылетает данная ошибка:

{CommonModule.эсРаботаСоСтрокамиКлиентСервер.Module(5243,2)}: Процедура или функция с указанным именем не определена (ЗаписатьJSON)
<<?>>ЗаписатьJSON(ЗаписьJSON, Значение);

Находил, что какие-то процедуры могут не работать на веб-клиенте и из-за этого может ругаться, каких-то ограничений в самой процедуре не нашел по поводу Веб-клиента, попытался делать ограничения типа если #Вебклиент Тогда #КонецЕсли не помогло. Самое важное, что в тонком клиенте нет ошибок, ничего не появляется, а именно в вебе появляется данная ошибка. Пытался еще добавлять процедуру, но тоже не помогло. ниже текущий код. Помогите пожалуйста, в чем может быть проблема, в каком направлении еще рыть?

&НаКлиенте 
Процедура Подключить(УстановитьЕслиНеПодключено) Экспорт
    НачатьПодключениеРасширенияРаботыСФайлами(
        Новый ОписаниеОповещения(
            "ПослеПодключения",
            ЭтотОбъект,
            УстановитьЕслиНеПодключено));
КонецПроцедуры

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

&НаКлиенте
Процедура НажатиеЗавершение(КодВозврата, ДополнительныеПараметры) Экспорт 
  
КонецПроцедуры // НажатиеЗавершение()


&НаКлиенте
 Процедура Расш1_СправкаСотрудникуПосле(Команда)
   Подключить(Истина);
КонецПроцедуры

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

КонецПроцедуры // ПослеВыбораФайла()

  //эсРаботаСоСтрокамиКлиентСервер
  &НаСервере
Функция ПолучитьСтруктуруДанных() Экспорт 

  Макет = Документы.эсЗаданиеСотруднику.ПолучитьМакет("Расш1_МакетДДБезТабл");
  Возврат ПоместитьВоВременноеХранилище(Макет);

КонецФункции 

&НаКлиенте
Функция СериализоватьВJSON(СериализуемыйОбъект)
    
    #Если ВебКлиент Тогда    

        СтрокаJSON = СериализоватьВJSONНаСервере(СериализуемыйОбъект);
    #Иначе

        ЗаписьJSON = Новый ЗаписьJSON; 
        ЗаписьJSON.УстановитьСтроку();
        НастройкиСериализации = Новый НастройкиСериализацииJSON();
        НастройкиСериализации.СериализовыватьМассивыКакОбъекты = Ложь;
        ЗаписатьJSON(ЗаписьJSON, СериализуемыйОбъект, НастройкиСериализации, "ПреобразованиеВJSON", ЭтотОбъект); 
        СтрокаJSON = ЗаписьJSON.Закрыть();
    #КонецЕсли

    
    Возврат СтрокаJSON; 

КонецФункции 

&НаСервере
Функция СериализоватьВJSONНаСервере(СериализуемыйОбъект)
    
    ЗаписьJSON = Новый ЗаписьJSON; 
    ЗаписьJSON.УстановитьСтроку();
    НастройкиСериализации = Новый НастройкиСериализацииJSON();
    НастройкиСериализации.СериализовыватьМассивыКакОбъекты = Ложь;
    ЗаписатьJSON(ЗаписьJSON, СериализуемыйОбъект); 
    ЗаписатьJSON(ЗаписьJSON, СериализуемыйОбъект, НастройкиСериализации, "ПреобразованиеВJSON", ЭтотОбъект); 

    //

    // ЭтотОбъект недоступнен в безконтекстном вызове, поэтому нужно либо поместтить эту функцию в общий модуль, 

    // либо изменить директиву компиляции в &НаСервере

    СтрокаJSON = ЗаписьJSON.Закрыть();
        
    Возврат СтрокаJSON; 

КонецФункции
Показать
17. spacecraft 21.08.22 11:12 Сейчас в теме
(16)
{CommonModule.эсРаботаСоСтрокамиКлиентСервер.Module(5243,2)}: Процедура или функция с указанным именем не определена (ЗаписатьJSON)
>ЗаписатьJSON(ЗаписьJSON, Значение);

Ошибка не связана с приведенным кодом. Где-то еще вызывается метод из общего модуля с клиента, в котором и происходит ошибка.
CommonModule это ОбщийМодуль
эсРаботаСоСтрокамиКлиентСервер это имя общего модуля
Module(5243,2) это 5243 строка в тексте модуля и 2 символ в этой строке.
Смотрите что за метод там и кто его вызывает. Можно установить остановка по ошибке в отладчике и по стеку вызовов посмотреть, кто вызвал этот метод.
18. Stiks1911 21.08.22 11:20 Сейчас в теме
(17) Понял, благодарю Вас!) Буду разбираться! Если не затруднит, не могли бы посмотреть, еще одну тему - Обработка - Значение поля "Склад" не может быть пустым! Часть уже получилось решить, но хотел бы уточнить там по последнему вопросу и как это можно было бы решить, не с помощью метода ОбработатьСтрокуТЧ, а с помощью ОбработатьТЧ?Если я Вас уже достал, Вы скажите пожалуйста, чтобы я Вас не беспокоил больше, ведь Вы уже и так сильно мне помогли много раз!
(17)
2. gudvin77 18.08.22 08:55 Сейчас в теме
У процедуры ЗаписатьJSON(ЗаписьJSON, Значение) смотрите ограничение на выполнение.
Скорей всего есть ограничение на выполнение в Веб клиенте.
По Расширение для работы с файлами не подключено, смотрите разрешено ли расширение в браузере.
3. Stiks1911 18.08.22 09:24 Сейчас в теме
(2) РАсширение в браузере скачал и подключил, разрешено. ПО поводу процедуры, если я работаю в расширении, у меня в коде вообще ее нет, т.е. вызывать в своем коде и как-то менять, чтобы можно было работать в вебе? Или как это можно решить?

(2)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот