0. Rain88 165 22.08.18 23:08 Сейчас в теме

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C

У многих начинающих 1С программистов часто возникают вопросы про клиент-серверное взаимодействие в 1С и чтобы разобраться в непростых механизмах платформы, необходимо понять, что же такое контекст, для чего предназначены директивы компиляции, что представляют собой контекстные/внеконтекстные вызовы и как наиболее оптимально описывать прикладные задачи в модулях управляемых форм.

Перейти к публикации

Вознаграждение за ответ
Показать полностью
Комментарии
Избранное Подписка Сортировка: Древо
1. leosoft 139 24.08.18 09:12 Сейчас в теме
Ссылка на архитектуру "битая"
2. Rain88 165 24.08.18 09:38 Сейчас в теме
(1) спасибо. Чуть позже исправлю.
3. PerlAmutor 42 25.08.18 08:18 Сейчас в теме
Спасибо за статью. Стоит ли ожидать следующей части, где будет раскрыта суть вопроса передачи разных типов данных между клиентом и сервером? Мне например интересно как правильно осуществлять безконтекстный серверный вызов процедуры из клиентского общего модуля имея ссылку на УФ, в которой находится ТЧ типа ДанныеФормыСтруктура. Кроме варианта перебора в цикле, создания структур и копирования всего в Массив я ничего не нашел. Несмотря на то, что ДанныеФормыСтруктура существует и на сервере - невозможно в качестве параметра передать ссылку на неё, т.к. 1С при этом начинает ругаться, что данные не предназначены для изменения.
4. Rain88 165 25.08.18 08:51 Сейчас в теме
(3) Спасибо за отзыв. Продолжения пока не планировала, но подумаю)
41. miha0713 02.08.19 20:16 Сейчас в теме
(4) Отличная статья. Было бы здорово увидеть продолжение про "передачу разных типов данных между клиентом и сервером"
42. Rain88 165 03.08.19 19:30 Сейчас в теме
(41) Спасибо. К сожалению график работы пока не позволяет заниматься чем-то, кроме работы.
5. Rain88 165 25.08.18 11:01 Сейчас в теме
(3) По поводу
как правильно осуществлять безконтекстный серверный вызов процедуры из клиентского общего модуля имея ссылку на УФ
, просто передать значения с типом ДанныеФормыСтруктура или ДанныеФормыКоллекция нельзя, так как при возврате из процедуры или функции будет производится попытка их перезаписи, что недопустимо. Чтобы такого не происходило, можно, например, в вызываемой процедуре или функции указать ключевое слово "Знач", которое будет означать, что параметр будет передан как значение, а не ссылка и ошибки уже не будет. Но в любом случае нужно смотреть, какая реализация кода будет более оптимальной, возможно, что передача массива строк из табличной части будет более производительнее.
Если данная тема будет востребована, то продолжение точно напишу.
6. PerlAmutor 42 25.08.18 11:48 Сейчас в теме
(5) Спасибо. Тоже появилась такая мысль после того как сделал через массив, но проверять не стал. Думал еще капнуть в сторону КопированиеДанныхФормы, но в этом случае непонятно как программно создать приемник.
7. Rain88 165 26.08.18 09:45 Сейчас в теме
(6)
сторону КопированиеДанныхФормы
копируете объект формы в переменную, передаете на сервер, там делаете заполнение, при выходе из процедуры заполнения, осуществляете копирование через "КопированиеДанныхФормы".
8. PerlAmutor 42 26.08.18 10:20 Сейчас в теме
(7) Скорее всего копировать объект формы целиком и гонять его с клиента на сервер и обратно должно быть накладно. Так то можно и через сериализацию данные перегнать. Стоит ли оно того.
9. Rain88 165 26.08.18 10:27 Сейчас в теме
(8) Я лишь привела пример одного из вариантов решения задачи.
10. sereginseregin 15 29.08.18 11:06 Сейчас в теме
(8)Экспериментировал с простыми вычислениями (типа 1+1) на клиенте, на сервере или в БД с вызовами между ними
Тут рассмотрены разные варианты взаимодействия клиента и сервера.
Но больше расстроило, что вызов клиентом сервера без контекста (п.1.3.) в 3!!! раза оказался медленнее обращения сервера к БД (п.2.1.).
12. PerlAmutor 42 29.08.18 13:41 Сейчас в теме
(10) Я это уже заметил достаточно давно. В типовых конфигурациях хорошо видно, как разработчики перекладывают вычислительный функционал на SQL.
34. Helsk 18.10.18 12:25 Сейчас в теме
(10) можете скинуть свою обработку для теста?
11. herfis 280 29.08.18 11:26 Сейчас в теме
Оформление отличное и конкретные примеры тоже будут полезны новичкам.
Но название статьи предполагает более концептуальный охват, с которым по моему мнению гораздо лучше справилась статья "Под капотом управляемых форм".
13. Rain88 165 29.08.18 17:02 Сейчас в теме
(11) Возможно Вы правы и стоило бы более подробно расписать некоторые механизмы, например, "жизненный цикл формы", но я решила не перегружать статью.
Указанная Вами статья включает в себя не на много много больше информации ("и воды там достаточно") и читать, ИМХО, ее было тяжело. Также, стоит заметить, что автор не пытался раскрыть тему оптимизации, а лишь рассказывал, что представляют из себя управляемые формы.
Считаю, что для базовой основы, информации здесь вполне достаточно, единственное, думаю стоило бы добавить еще несколько примеров в конце.
14. dr2c 36 31.08.18 10:20 Сейчас в теме
Спасибо! Но не совсем понял ремарку- "Не рекомендуется создавать клент-серверные общие модули"?
15. Rain88 165 31.08.18 17:00 Сейчас в теме
(14)
не совсем понял ремарку
Если для процедуры в клиент-серверном общем модуле не указать директиву, то процедура будет скомпилирована в обоих контекстах, при этом надо следить, чтобы код в этой процедуре был написан с учетом его доступности в контекстах модуля. Также, немало важным является то, что процедура на клиенте из общего модуля может обратиться только к экспортной процедуре серверного общего модуля с галочкой "вызов сервер", т.е. расположить в одном общем модуле процедуры НаКлиенте и НаСервере с вызовом друг друга, как например в модуле форм, не получится. Поэтому общие модули разделяют на Клиентские и на Серверные, а вот клиент-серверные используются не часто, для каких то общих действий, например, для простых вычислительных операций.
16. LordKim 04.09.18 17:20 Сейчас в теме
(15)
Или для подписок на события...
17. Rain88 165 05.09.18 15:55 Сейчас в теме
(16) В общих модулях происходит определение процедур и функций, которые требуются для выполнения каких-то действий. Подписки, сами по себе не содержат код, а обращаются к процедурам из общих модулей, поэтому не совсем корректно говорить о том, что клиент-серверные общие модули используются для подписок.
Если заглянуть в типовые общие модули, то можно увидеть, что там производятся какие-то общие простые операции, например, определение типов значений, работа с числами, строками, массивами и с теми встроенными процедурами/функциями, которые доступны и на клиенте и на сервере.
19. LordKim 05.09.18 18:53 Сейчас в теме
(17)
не совсем корректно говорить о том, что клиент-серверные общие модули используются для подписок


А что же используется?
Подписка - всего лишь триггер для выполнения куска кода, этот кусок кода можно расположить где-нибудь кроме общего модуля?

А теперь представим подписку ПередЗаписью для справочника, и запись этого справочника выполняется в фоновом задании (Сервер), в толстом клиенте и еще во внешнем соединении.

Если флажки (все три) на ОМ стоять не будут - будет "красный крест", нет?)
20. Rain88 165 05.09.18 19:57 Сейчас в теме
(19) Да при чем тут вообще подписки, если речь шла про процедуры и функции, с которыми могут возникнуть проблемы, если в них что-то не так написать или поставить не те галочки у общего модуля? Поэтому и написала, что в контексте моего сообщения, говорить про подписки было бы некорректно.
21. LordKim 05.09.18 20:31 Сейчас в теме
(20)
Подписки - часть общих модулей, как и (например) регламентные задания. И в клиент-серверном режиме - поведение отличается.
Это точно такие же процедуры как и все остальные

Статья называется "Основные понятия и механизмы клиент-серверного взаимодействия в 1C" - мне показалось, что особенности поведения РЗ и триггеров должны быть включены (или хотя бы упомянуты)

Тем более, что идет пояснение вашей фразы "Не рекомендуется создавать клент-серверные общие модули" и вашего ответа "а вот клиент-серверные используются не часто", и в качестве примера выприводите только вычисления, я всего лишь уточнил, что модули с флагами клиент и сервер имеет смысл так же создавать для реализации подписок на события (и для начинающих - это наверное, важная инфо про КС механику)

Возможно, я неверно истолковал название статьи, и название должно интерпретироваться как "Особенности работы с управляемыми формами" или "Особенности оптимизации работы управляемых форм в клиент-серверном режиме", no aggression
22. Rain88 165 05.09.18 21:13 Сейчас в теме
(21)
модули с флагами клиент и сервер имеет смысл так же создавать для реализации подписок на события
чтобы произвести какие-то простые действия, например вычисления)

(21)
Возможно, я неверно истолковал название статьи
скорее не Вы неправильно истолковали, а я наверно неправильно назвала статью и ее действительно надо было назвать по-другому, потому что акцент сделан именно на механизмы оптимизации.
18. herfis 280 05.09.18 16:29 Сейчас в теме
(14) Я понял ее как "Не рекомендуется создавать клент-серверные общие модули, все равно вы не умеете их готовить"
Поручик; +1 Ответить
23. AlX0id 12.10.18 11:49 Сейчас в теме
серверным процедурам и функциям, которые используются привилегированный режим.


Небольшой косячок в тексте
24. AlexPC 12.10.18 12:15 Сейчас в теме
Очень напоминает выдержки из книги "Разработка интерфейса прикладных решений на платформе "1С:Предприятие 8". Примеров оптимизации приведено всего два, в книге намного больше.
25. Поручик 4294 13.10.18 00:57 Сейчас в теме
ДанныеРеквизитов.Вставить("Артикул",Ссылка.Артикул);
ДанныеРеквизитов.Вставить("ЕдиницаИзмерения",Ссылка.ЕдиницаИзмерения);

Это капец, да.
А использовать ОбщегоНазначения.ЗначенияРеквизитовОбъекта() не по-пацански.

ДанныеРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Артикул, ЕдиницаИзмерения");
29. Rain88 165 15.10.18 01:31 Сейчас в теме
(25)
Это капец, да.
как Вы могли заметить, про этот "капец" в статье есть пояснение, что через точку лучше не обращаться к данным базы, если конечно Вы это имели ввиду.

А по поводу
А использовать ОбщегоНазначения.ЗначенияРеквизитовОбъекта()
в статье ведь не разбирается использование стандартных функций БСП.
26. logarifm 1045 14.10.18 11:12 Сейчас в теме
могу только отминусовать автора за то что статья по факту практически видоизменено с ИТС. Это смешно как слова перековерканы но смысл с книжки 1в 1. Особенно ЗАКЛЮЧЕНИЕ. Модераторы следует обратить на это внимание.
Прикрепленные файлы:
28. Rain88 165 15.10.18 01:26 Сейчас в теме
(26)
но смысл с книжки 1в 1
позвольте Вас спросить, а Вы наверно черпаете знания "с потолка"? Конечно же был прочитан не один материал, включая и ИТС, прежде чем появилась данная статья, в которой как раз и попыталась собрать в кучу все ключевые, как мне показалось, моменты.

смешно как слова перековерканы
Особенно ЗАКЛЮЧЕНИЕ.
видимо заключение для Вас явилось прям каким-то камнем преткновения, раз решили заминусовать статью))

А вообще да, идея была взята из книги "Разработка интерфейса прикладных решений на платформе 1С:Предприятие 8", где все подробно расписано, но не каждый захочет ее прочитать всю. Моей ошибкой было не указать ее в тексте, критика ведь для этого и нужна, чтобы выявлять ошибки)
30. logarifm 1045 15.10.18 10:50 Сейчас в теме
(28) минус схлопотали из-за того, что статья эта не собственная и очень много буковок именно из этой книги. Значит и следовательно статью требовалось назвать как-то иначе и в обязательном характере упомянуть основной источник. Ведь даже примеры от туда только скрины другие. смешно не иначе.

ЗЫ, На будущее сравните написание статей других авторов. Я не понимаю зачем делать копи пасты из книги и менять состав слов и говорить это мой труд!?

Вот что не сказать про эту статью https://infostart.ru/public/682305/ раскрыто намного больше и собственной терминологией, а не книжной из ИТС. Поэтому однозначно МИНУС.
33. Rain88 165 17.10.18 10:22 Сейчас в теме
(30)
Я не понимаю зачем делать копи пасты из книги и менять состав слов и говорить это мой труд!? Поэтому однозначно МИНУС
Ну, как говорится, для всех мил не будешь. Поставили минус, Ваше право, но я останусь при свое мнении, что вычленение чего-то существенного из общей массы текста и перефразирование в более понятный язык для начинающих - это тоже труд.
27. webester 28 14.10.18 17:54 Сейчас в теме
Кому лень читать, вся статья сводится к двум советам: Если у тебя много серверных вызовов, попробуй уменьшить их количество. Не тащи на сервер весь контекст формы без необходимости, это как минимум глупо. Собственно все. Вместо вступительной теоретической части, стоит просто оставить Вот эту ссылку тут у автора получилось подробнее и лучше, хотя можно просто оставить эту ссылку, добавлять ничего не надо, все, что написано в этой статье, больше и интереснее, есть по ссылке. Про использование ключевого слова "Знач" при передаче данных на сервер сознательно не стали упоминать?
androgin; berezdetsky; rozer; win-l; +4 Ответить
31. Makcum32 16.10.18 09:30 Сейчас в теме
Начиная с платформы 8.3.10 стала доступна возможность получать данные с клиента на сервер, используя систему взаимодействия.


Автор скорее всего хотела сказать "передача данных с сервера на клиент"
32. Rain88 165 17.10.18 10:16 Сейчас в теме
(31) Я еще думала, может написать по другому, возможно моя формулировка будет непонятна, смысл то получается одинаковый)
39. androgin 19.07.19 15:52 Сейчас в теме
(32) совсем не одинаковый!
Нельзя передать данные на клиент по желанию сервера без системы взаимодействия!
35. Glebis 11 19.10.18 16:42 Сейчас в теме
Уменьшается ли объем данных (трафик) ответа сервера клиенту если использовать для параметров "Знач" при клиент-серверном вызове серверной функции?
36. shalimski 5 25.02.19 10:21 Сейчас в теме
(35)
Уменьшается ли объем данных (трафик) ответа сервера клиенту если использовать для параметров "Знач" при клиент-серверном вызове серверной функции

конечно уменьшаются, данные обратно на клиент не поедут.
37. user1218675 11.05.19 23:53 Сейчас в теме
Благодарю за обсуждение и ответ, как новичку в 1с было полезно прочитать ответы, хотя некоторые аспекты до конца мне не понятны.
38. MSK_Step 19 18.07.19 19:01 Сейчас в теме
Иногда лучше вызывать сервер, без лишний обрашений. Так как при первом обращение объект кешируется 1с (так написано на сайте ИТС в разделе разработчики.)
Оптимизация 1с сводится к правильному написанию кода, особенно запросы, а клиент сервер это все мелочи, которые не заметишь на производительности.
40. oleganatolievich 142 19.07.19 21:46 Сейчас в теме
одним вызовом возвращать больше данных из номенклатуры, это логично.
по сути весь смысл статьи - чем меньше вызовов сервера, тем лучше. больше кэшируем данных, используем функции с повт. использованием. НаСервереБезКонтекста > НаСервере.
по поводу БСП - общегоназначениясервер постоянно дергает метаданные, собирает запрос. может быть накладнее отдельной процедуры. но это мы уже в спор о балансе оптимизации / рефакторинга.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Москва
зарплата от 150 000 руб. до 150 000 руб.
Полный день

Консультант 1С
Нижний Новгород
зарплата до 100 000 руб.
Полный день

Программист стажер 1С
Нижний Новгород
зарплата от 30 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата до 100 000 руб.
Полный день

Программисты 1С УТ / БУЗ/ЗУП / БИТ ФИНАНС
Москва
зарплата от 100 000 руб. до 180 000 руб.
Полный день