Имя: Пароль:
1C
1С v8
Есть ли способ нормально (де)сериализовать данные в 1с на клиенте?
,
0 Fragster
 
гуру
26.01.21
12:43
И чтобы веб клиенте тоже работало?
1 Asmody
 
26.01.21
12:46
через xml/json?
2 acht
 
26.01.21
12:47
(0) Десериализовать из чего? Из двоичных данных?
3 Fragster
 
гуру
26.01.21
12:48
(1) не работает на клиенте
4 Fragster
 
гуру
26.01.21
12:48
(2) из строки
5 Fragster
 
гуру
26.01.21
12:50
кстати, из-за этого пришлось воспользоваться подходом, похожим на Как сериализовать ссылку в XML?, только тссс :)
код, конечно, другой, но блин.
Для РегистрНакопленияКлючЗаписи, например, не  подходит, а надо
6 ДенисЧ
 
26.01.21
12:50
ЗаписьXML (XMLWriter)

Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
7 Fragster
 
гуру
26.01.21
12:51
(6) да, веб клиент пролетает
8 Fragster
 
гуру
26.01.21
12:59
Вот такой гомункул:

        #Если ВебКлиент Тогда
            ДесериализованныеДанные = ДесериализоватьДанныеНаСервере(Данные);
        #Иначе
            ДесериализованныеДанные = ДесериализоватьДанные(Данные);
        #КонецЕсли

&НаСервереБезКонтекста
Функция ДесериализоватьДанныеНаСервере(Данные)
    Возврат ДесериализоватьДанные(Данные);
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ДесериализоватьДанные(Данные)
    Чтение = Новый ЧтениеXML;
    Чтение.УстановитьСтроку(Данные);
    Возврат ПрочитатьXML(Чтение);
КонецФункции

Мне не нравится (
9 fisher
 
26.01.21
13:01
Хм... И действительно - с веб-клиентом проблема.
10 fisher
 
26.01.21
13:03
Ну, что тут сказать... Нет ножек - нет варенья.
11 acht
 
26.01.21
13:05
(5) > РегистрНакопленияКлючЗаписи
Не выгорит. У этого объекта нет конструктора в веб клиенте, ты новый экзампляр вообще никак не создашь. Получай с сервера.
12 acht
 
26.01.21
13:07
(11)+ Ну и это уже совсем не "примивный тип". Для примивных можно через полехтмлдокумента извратится, если очень уж надо.
13 Garykom
 
гуру
26.01.21
13:09
Для примитивных типов проще свою сериализацию наваять
14 Garykom
 
гуру
26.01.21
13:09
(13)+ или ВК для веб-клиента, которые расширения для браузеров
15 fisher
 
26.01.21
13:11
(14) Кгм...
16 fisher
 
26.01.21
13:13
(12) > полехтмлдокумента?
Это что за зверь и как через него извратиться?
17 acht
 
26.01.21
13:14
(14) Микросервис же. На Го. Не?
18 fisher
 
26.01.21
13:15
А, блин. HTML!
Но все равно не пойму, как он поможет.
19 H A D G E H O G s
 
26.01.21
13:15
(0) Напиши на партнерке предложение, а я буду тебе говорить, что ну это можно сделать на сервере. Ну как с множественным отбором для НаборовЗаписей.
20 H A D G E H O G s
 
26.01.21
13:16
(17) Как с вами связаться?
21 acht
 
26.01.21
13:17
(16) Положить на форму полехтмл, для него будет использоваться инстанс текущего браузера в iframe. Подергать его javascript движок, статей море.
Но в (8) куда меньшее зло
22 acht
 
26.01.21
13:17
(20) Я ж письмо писал, ответа так и не получил. Попало в спам?
23 H A D G E H O G s
 
26.01.21
13:19
(22) Сейчас все проверил и Входящие и Спам, ничего нет.
Скинь плиз еще раз письмо на [email protected]
24 fisher
 
26.01.21
13:20
(21) Каким образом браузерный js поможет с одинэсной сериализацией/десмериализацией? Только лишь как более мощный инструмент ручной реализации? Данунах.
25 acht
 
26.01.21
13:23
(24) Ты уж определись "примитивные типы", как написано в заголовке темы, или объекты 1С.
26 Fragster
 
гуру
26.01.21
13:23
(19) ты обиделся, чтоли?
27 Fragster
 
гуру
26.01.21
13:25
(25) ну вот ОповеститьОбИзменении, например, в веб клиенте есть, РегистрХХХКлючЗаписи ему подсунуть можно, а вот как его на этом самом клиенте получить из строки?
28 H A D G E H O G s
 
26.01.21
13:27
(26) Ты давно скайп читал? Нет конечно, просто иронизирую, что ты постоянно играешь за адвоката дьявола. Пусть работают, сидят в своих 1С, штаны протирают :-)
29 Fragster
 
гуру
26.01.21
13:28
в воскресенье за компом был где он норм работает. а на мобилке сука вылетает :(
30 Fragster
 
гуру
26.01.21
13:43
31 H A D G E H O G s
 
26.01.21
13:49
(30) Ну воооот! Ты движешься в правильном направлении.
32 acht
 
26.01.21
13:50
(23) Скинул. На другие ящики доходит, на яндексе, правда, не проверял.
33 acht
 
26.01.21
13:51
(27) > как его на этом самом клиенте получить из строки

Из строки - никак. Взять уже существующий, приехавший с сервера, например как иденфтиикатор строки динамического списка - запросто.
34 Fragster
 
гуру
26.01.21
13:54
(33) проблема в том, что он с другого сеанса прилетает в ВК, ВК передает по сети в сериализованном виде только.
35 Fragster
 
гуру
26.01.21
13:54
прямо в клиента
36 Fragster
 
гуру
26.01.21
13:55
делаю нормальный Оповестить и ОповеститьОбИзменении. Ну и заодно плюхи типа уведомление о звонке на астер прям в 1с без тормозов и прочее
37 Fragster
 
гуру
26.01.21
13:55
сообщения в чаты с сайта, мгновенно прилетающие менеджеру
38 acht
 
26.01.21
14:03
(34) Функциональную форму Новый пробовал?
39 H A D G E H O G s
 
26.01.21
14:09
(32) Нет, не пришло. Короче, пофиг, работа не интересует?
40 acht
 
26.01.21
14:13
(39) Зависит от. Давай последнюю попытку - на [email protected] напиши =)
41 H A D G E H O G s
 
26.01.21
14:38
(40) Написал
42 ДедМорроз
 
26.01.21
15:13
А разве значение в строку внутр уже в web-клиенте перестало работать?
43 ДедМорроз
 
26.01.21
15:15
Потом,web-клиент,это страница html и там только строки.
44 H A D G E H O G s
 
26.01.21
15:15
(42) Оно и в тонком уже не работает
45 fisher
 
26.01.21
15:16
(42) А начинало? Не говоря уже о том, что deprecated/
46 LoneBull
 
26.01.21
16:46
(0) Конструктор на клиенте можно вызвать через функциональную форму новый:

Новый(<Тип регистра>, <Массив параметров для конструктора>)
(раньше это было в СП, но потом некоторые товарищи это оттуда вырезали т.к. на это проверка конфигурации ругается, а вырезать из СП проще чем чинить)

Попробовал (на демо конфигурации)

ПараметрыКонструктора = Новый Массив;
ПараметрыКонструктора.Добавить(Новый Структура("Период, Валюта", Период, Валюта));
А = Новый(Тип("РегистрСведенийКлючЗаписи.КурсыВалют"), ПараметрыКонструктора);

работает
47 fisher
 
26.01.21
17:05
(46) Слава богу, за моим СП "некоторые товарищи" не приходили.
48 Cthulhu
 
26.01.21
17:12
(46): ну они так ясно зачем сделали, чтобы на клиенте низя было слепить то что сериализатор не осилит. например, полноценную ТЗ на клиенте типа ОписаниеТипа = Новый ОписаниеТипов("ТаблицаЗначений"); ТЗ = Новый(ОписаниеТипа.Типы()[0]);
49 Garykom
 
гуру
26.01.21
17:22
Меня больше всего удивляет какого х на веб-клиенте нету HTTPЗапрос на WebКлиенте под 8.3?
50 sikuda
 
26.01.21
17:32
(49) Кросс-доменные запросы не такая простая вещь - https://learn.javascript.ru/xhr-crossdomain
51 Garykom
 
гуру
26.01.21
17:35
(50) хотя бы к тому же домену к другим ресурсам же
или через свое расширение 1Сное для браузеров реализовать хоть кроссдоменные
52 sikuda
 
26.01.21
17:41
(51) Расширением для браузера 1С сделала чтобы лучше воровать данные с локального компьютера (все для удобства пользователей)
А к тому-же домену есть функции работы с базой 1С НачатьПомещениеФайловНаСервер() ;)
53 Fragster
 
гуру
26.01.21
18:21
(46) а то, что для этого структура нужна, для которой нормальной сериализации опять же не завезли?
54 Fragster
 
гуру
26.01.21
18:22
пока что веб клиенту придется ходить на сервер.
теперь осталось нормальную компиляцию ВК под всю хурму настроить (там cmake, да еще и с конаном)
55 ДедМорроз
 
28.01.21
08:15
(51) там проблема в том,что у браузера общее хранилище ключей cookie,что накладывает серьезные ограничения на весь функционал,т.к.в случае разрешения выполнения таких запросов будут пересечения с уже открытыми сеансами.
Расширение - это ещё более печальная история,т.к.оно применяется к браузеру,а не к отдельной странице в нем.
56 Вафель
 
28.01.21
09:08
(55) у браузера есть локал сторадж, а также локальная бд
57 Fragster
 
гуру
28.01.21
10:19
(56) оно тоже на весь браузер. можно в переменных скрипта страниц все хранить
58 ДедМорроз
 
28.01.21
21:27
У браузера есть кеш,который позволяет при правильном использовании не передавать повторно данные.
Остальные фокусы с хранением - это только ненужное усложнение.