Вопрос по переходу на клиент-серверный вариант 1С8 #667419


#0 by sasha_nik
Добрый день ! Планируем переход на Клиент-Серверный вариант 1С8 Хочу сделать, чтобы в целях ускорения отчета некоторые запросы выполнялись на сервере, а обрабатывались на клиенте. Т.е. на клиенте будет формироваться текст запроса и устанавливаться его параметры, далее  на сервере формируется выборка и возвращается обратно на клиент для обработки выборки (по моему анализу, формирование выборки из запросов в ряде сложных отчетов (например, структура подчиненности) занимает до 70-80% времени от формирования отчета. Т.е. я хочу реализовать вышеприведенную схему следующим образом: #Если клиент тогда     #КонецЕсли #Если Сервер тогда #КонецЕсли Вопрос: сработает ли вышеуказанная схема, если нет, то как реализовать схему, чтобы она сработала (по описанию вроде запрос можно передавать на сервер и обратно)?
#1 by Maxus43
#Если Сервер тогда Не управляет тем, где будет исполнятся код. Если надо на сервере точно - общий модуль с галкой Сервер и Вызов сервера
#2 by Maxus43
да и в клиент сервере все запросы на скуль транслирует сервер 1с всё равно, запросы де факто на сервере только будут
#3 by fisher
Не. Это чепуха. То, что ты хочешь - и так происходит по дефолту.
#4 by fisher
Запросы исполняются на сервере БД, окончательная выборка данных происходит на сервере приложений. На клиента возвращается только результат.
#5 by Ranger_83
вам нужны УФ,или заказать Такси
#6 by fisher
Другое дело, если ты дополнительно какие-то алгоритмы хочешь на сервер вынести. В толстом клиенте для этого надо делать. А в тонком многие алгоритмы на клиенте и не получится выполнить :)
#7 by kiruha
Странный способ ускорения отчета Установка параметров и т.п. это доли сек Сам запрос в 10 раз дольше Зачем такой огород ?
#8 by Maxus43
он думает что запрос выполняется на клиенте просто
#9 by MM
ну, например, чтобы в привилегированный режим перейти, при наличии RLS может дать заметное ускорение.
#10 by AaNnDdRrEeYy
можно и программно в привелигированный режим перейти, не обязательно в общий модуль выносить.
#11 by Рэйв
Если не УФ, то фиг ты прикажешь где выполняться коду. Только если терминально на сервере запустить сессию.Тогда стопудово на нем будет
#12 by Maxus43
в клиент-сервере привелигированный режим возможен только на сервере. на клиенте он не устанавливается
#13 by AaNnDdRrEeYy
на толстом клиенте работает.
#14 by fisher
Можно еще обработку выборки перенести полностью на сервер. Возвращать, например, только готовый табличный документ на клиента. Тут на больших отчетах ускорение очень существенное может быть. Хотя всё это квадратные колеса в свете существования СКД на УФ. Там по дефолту всё примерно так и происходит.
#15 by Maxus43
В клиент-серверном варианте при выполнении на клиенте данный метод не выполняет никаких действий. (с)
#16 by fisher
А тупо выборку на клиента вернуть с сервера кажись и не получится. По-идее должно ругнуться на мутабельность.
#17 by Maxus43
выборка емнип не мутабельна, собсно она вобще только на чтение
#18 by sasha_nik
Спасибо всем за ответы. С 1С8 я работаю с 2006 года, а вот с клиент-серверным вариантом стал знакомиться только сейчас. Все эти годы был файловый вариант, база сейчас весит 5 Гб. И пока это структуру понимаю плохо. Суть - у нас в сети около 50 ПК, подключенных к базе. Среди них есть как мощные, с процессорами i3 - i5, так и слабенькие типа Celeron 900. Естественно, что для таких слабых клиентов идет подключение через терминальный сервер, который сам выполняет роль клиента, а терминальный сервер будет подключаться к связке 2-х мощных новых серверов (которые будут считаться одним): Сервер 1С8 - сервер баз данных. Мощные же ПК подключаются к связке напрямую, минуя терминальный сервер, и сами выступают клиентом. Мною было написано более 100 различных отчетов и обработок, использующих запросы, которые сейчас на старом сервере в файловом варианте сильно тормозят именно из-за скорости выполнения запросов при большой выборке. Естественно, что перелопачивать все запросы нереально, вот и хотел отделаться малой кровью. Спасибо за Ваши ответы, теперь буду их осмыслять.
#19 by sasha_nik
Т.е. основная идея - как малой кровью, без серьезных переделок базы, перенести на сервер сложные вычисления, чтобы они выполнялись значительно быстрее.
#20 by sasha_nik
Хочу добавить - тонкого клиента пока не планируется, будет связка "Толстый клиент " - "Сервер"
#21 by sasha_nik
Итак, проанализировав написанное, я пришел к выводу (поправьте меня пожалуйста, если я не прав): 1. Непосредственно Запрос в клиент-серверном варианте всегда выполняется только  на сервере, а не на клиенте, поэтому давать ему директиву исполнения на сервере не имеет смысла 2. Для того, чтобы реально ускорить работу, имеет смысл большую часть сложных операций, выполняемых отчетом, перенести на сервер, перенести для выполнения на сервере, убрав из текста процедуры/функции не предназначенные для выполнения на сервере.
#22 by sasha_nik
А сейчас у нас организована таким образом - все 50 ПК подключены терминально к слабенькому серверу 2006 года выпуска на базе 2-х процессорного ксеона, на сервере база стоит в файловом вариант, естественного, его мощности не хватает, поэтому мы купили два новых мощных сервера и переходим на клиент-серверный вариант.
#23 by H A D G E H O G s
1. Нет 2. Нет
#24 by ptiz
"большую часть сложных операций, выполняемых отчетом" - что за операции такие?
#25 by ptiz
И, кстати, процессоры в современных ПК намного быстрее серверных. Переводом на сервер можно только всё усугубить.
#26 by H A D G E H O G s
+500!
#27 by sasha_nik
3. #Клиент и #Сервер только определяют место исполнения, но не задают его (?Как задать, я пока не понял)
#28 by H A D G E H O G s
Хотя, покуй. Все уперается в проведение документов, это единственное узкое место, которое не правиться прямыми руками.
#29 by acsent
если сервер брали 5 лет назад, то да
#30 by H A D G E H O G s
Что изменилось за 5 лет?
#31 by sasha_nik
У нас около 50% ПК старше 5 лет, а новые сервера на базу 2-х 16-ти ядерных процессоров с 32 Гб памяти и жестким диском SSD. Т.е. 50% ПК толстыми клиентами быть не могут никак, для них толстый клиент старый сервак. Поэтому и хочу ускорить. Серверу уже 7 лет.
#32 by Maxus43
перевод в клиент-сервер не обязательно даст повышение производительности... он даёт параллельность
#33 by sasha_nik
В общем, я протестирую сегодня и о результатах доложу. Пока могу сказать, что сервер при попытке загрузки базы ругнулся на наличие в общем модуле штатных процедур 1С: Вопрос РежимДиалогаВопрос КодВозвратаДиалога Предупреждение Состояние ОбработкапРерыванияПользователя ОчиститьСообщения Видимо, нужно весь текст можуля поместить в #Если Клиент тогда #КонецЕсли
#34 by Maxus43
короче искуственный вывод запроса в серверный модуль мало что даст, и не стоит оно того
#35 by Maxus43
тут да
#36 by sasha_nik
В общем, буду тестировать, посмотрим, что получится.
#37 by Maxus43
чначала разберись что делает #Если Сервер тогда и др. а то наворотишь
#38 by sasha_nik
А что тут можно напортить - я же все на копии делаю
#39 by sasha_nik
Итак, мой вариант не работает. Иекст показал, что старые отчеты в клиент-серверном варианте выполняются в 2-3 раза быстрее, чем в  старом терминальном. Но ускорить мне удалось. Что я сделал для ускорения:
#40 by sasha_nik
1.    Ускорена структура подчиненности. Общая форма «Структура подчиненности» была скопирована из УПП 1.3,  также были скопированы связанные с ней функции (в глобальный модель), и связанный с ней критерий отбора «Связанные документы» (в интерфейсах кнопку «Перейти», меню «а Связанные докумнеты»). Критерий отбора был доработан для наших условий, теперь структура подчиненности формируется всего несколько секунд даже на нашем терминальном сервере, т.к. введение критериев отбора позволяет не проверять типы метаданных для каждого документа, попавшего в выборку. У трех пользователей новая структура подчиненности выдавала ошибку, помогла чистка КЭШа 1С8 на терминальном сервере. Причина мне неизвестна.
#41 by sasha_nik
2.    Мне удалось выяснить, что все запросы в клиент-серверном варианте всегда формируются на сервере, но для ускорения выполнения требуется оптимизация кода запроса. Поэтому в выражений «ОстаткиИОбороты», «Обороты», «Остатки» при выборке информации из регистров накопления я ввел, где это возможно, критерии отбора по измерениям регистра Но критерии отбора вводятся только там, где присутствует отбор по измерениям Например, при отборе по регистру «ОстаткиТоваровНаСкладах» по группе номенклатуры: Было   Стало «Выбрать * Из РегистрСведений.ОстаткиТоваровНаСкладах.Остатки(&Дата1,Номенклатура в Иерархии(&ВыбГруппа))» «Выбрать * Из РегистрСведений.ОстаткиТоваровНаСкладах.Обороты(&Дата1,&Дата2,Регистратор, Номенклатура в Иерархии(&ВыбГруппа))» РегистрСведений.ОстаткиТоваровНаСкладах.ОстаткиИОбороты(&Дата1,&Дата2,Регистратор,, Номенклатура в Иерархии(&ВыбГруппа))»
#42 by sasha_nik
Т.е. после ускорения отчеты стали работать на терминальном сервере в 2-3 раща быстрее, а в клиент-серверном варианте еще в 3-3 раза быстрее.
#43 by kiruha
Все это замечательно но к идее темы "на клиенте будет формироваться текст запроса и устанавливаться его параметры, далее  на сервере формируется выборк" отношения не имеет Стандартная оптимизация
#44 by sasha_nik
В общем, у меня получилось следующее: Оптимальный и проверенный мною вариант перевода выполнения отчета на сервер: Форма диалога отчета (содержит поля отбора «ДатаНачала, ДатаКонца, Контрагент, Менеджер, ТМЦ) Модуль общего назначения «ПроцедурыИФункцииДляВыполненияНаСервере» (обязательно должны стоять галочки «Сервер», «Клиент» и «Вызов сервера») &НаКлиенте
#45 by sasha_nik
Эта штука работает, один отчет я перевел, стал выполняться значительно быстрее при больших объемах выборки
#46 by sasha_nik
ПроцедурыИФункцииДляВыполненияНаСервере - это общий модель
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С