Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Как работать с методами, недоступными на web-клиенте?

Как работать с методами, недоступными на web-клиенте?
Я
   Crush
 
30.05.18 - 17:13
Всем привет!
В глобальном модуле держу процедуры и функции, доступные на клиенте и на сервере, что б проще вызывать.
Например функция глобального контекста ПрочитатьJSON() используется в одной из процедур глобального модуля. В веб-клиенте эта функция недоступна и загрузка 1С валится с ошибкой.


&НаСервере
Функция jsonЗначениеВстрокуНаСервере(зн) Экспорт
    зп = Новый ЗаписьJSON;
    зп.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));
    ЗаписатьJSON(зп, зн);
    Возврат зп.Закрыть();    
КонецФункции

Функция jsonЗначениеВстроку(зн) Экспорт
    #Если ВебКлиент тогда 

        Возврат jsonЗначениеВстрокуНаСервере(зн);
    #Иначе

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

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

Конструкции такого типа лепить везде не хочется. Может есть какой способ попроще?
 
 
   hhhh
 
1 - 30.05.18 - 17:21
(0) "В глобальном модуле держу процедуры и функции, доступные на клиенте и на сервере"

выкинь это своё ноу-хау, и сразу всё устаканится.
   Crush
 
2 - 30.05.18 - 17:29
(1) А поподробнее?
Есть метод платформы ЗаписатьJSON(). Он доступен на клиенте. Но недоступен в веб-клиенте.
Для веб-клиента писать отдельный код? Или всегда дёргать сервер, когда нужно выполнить ЗаписатьJSON()?

Я не знаю как правильно это организовать, потому и спрашиваю. Два раза держать одну процедуру - ерунда получатся. Дёргать сервер с клиента без надобности - тоже фигня какая то..
   Crush
 
3 - 30.05.18 - 17:54
Нашел статью, с такими же извращениями, что и у меня:( неужели нет человеческих решений?

http://pro1c.org.ua/index.php?showtopic=31919

&НаКлиенте
Функция СериализоватьВ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; 

КонецФункции
   hhhh
 
4 - 30.05.18 - 17:59
(2) ну, сервер с клиента дергается миллионы раз. До фанатизма не доходите. Это обычная ситуация.
   Crush
 
5 - 30.05.18 - 18:40
Мда.. Пришел к выводу, что для работы с json и с сериализатором xdto в веб-клиенте нужно будет писать отдельные процедуры с вызовом сервера. Глядишь в дальнейшем получится их заменить на клиентские (с использованием javascript), но когда это будет..?:) пока сервер подёргаю:)

Спасибо!

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует