|
Разная скорость работы обработки в УТ 11 | ☑ | ||
---|---|---|---|---|
0
HiloNakamura
27.10.22
✎
10:15
|
Здравствуйте!
1С 8.3 УТ 11. база SQL, тонкий клиент. Захожу под администратором и запускаю обработку которая формирует цены по номенклатуре. Под пользователем с админскими правами обработка формирует отчёт 30 секунд, под обычным пользователем почти 6 минут формирует. Подскажите пожалуйста куда тут копать, в чём может быть причина такой разницы работы обработки под разными пользователями? Может работает какое то дефолтное распределение ресурсов сервера 1С, когда он пользователю с права админа отдаёт все ресурсы, а обычным пользователям нет. |
|||
1
Kassern
27.10.22
✎
10:17
|
(0) Запуск с одного рабочего места дает такую разницу по времени?
|
|||
2
Фрэнки
27.10.22
✎
10:17
|
А фига там копать-то, если в этой базе наверняка RLS активирован.
Т.е. у полных прав RLS игнорится, а на пользовательских - отрабатывает полностью. |
|||
3
Kassern
27.10.22
✎
10:19
|
(2) Ну или костыль в коде, мол Если Не РольДоступна("ПолныеПрава") Тогда "Запустим долгую унылую логику и 100500 проверок еще и письмо напишем, что этот Вася посмел сформировать отчет" КонецЕсли
|
|||
4
Фрэнки
27.10.22
✎
10:20
|
(3) вряд ли. Эта проверка на РольДоступна как раз и пишется всякий раз, когда костыль в виде RLS приводит к жутким тормозам.
|
|||
5
Фрэнки
27.10.22
✎
10:22
|
(3) По идее, у ТС нужно уточнить, есть в этой базе доработки в части RLS или там полностью типовая конфа с небольшими довесками.
|
|||
6
Kassern
27.10.22
✎
10:24
|
(4) (5) Самый простой способ - запустить замер производительности и глянуть, что там столько времени отожрало.
|
|||
7
HiloNakamura
27.10.22
✎
10:32
|
(1) С разных рабочих мест, с разных ПК, на тонких клиентах.
(2) Еще не в курсе что такое RLS, совсем недавно начал админить 8ку. (6) Этим, пожалуй, сейчас и займусь) |
|||
8
Kassern
27.10.22
✎
10:35
|
(7) Может там антивирусник проявляет особую активность у клиента, поэтому 1ска подвисает и результат отображает с задержкой? Проверьте на одном рабочем месте под 2мя пользователями.
|
|||
9
HiloNakamura
27.10.22
✎
10:38
|
(8) Проверяли, тот же результат. Даже сейчас на сервере, на толстом клиенте такая же история, под админом за 30 секунд обработка отрабатывает, под обычным юзером - 6 минут.
|
|||
10
Фрэнки
27.10.22
✎
10:45
|
(9) https://xn----1-bedvffifm4g.xn--p1ai/news/rls-data-access-restrictions/
Я даже ссылку уже нашел. Осталось только прочитать и проверить :-) |
|||
11
Kassern
27.10.22
✎
10:47
|
(9) "на толстом клиенте такая же история" - а зачем вы толстый клиент для УТ11 запускаете?
|
|||
12
Фрэнки
27.10.22
✎
10:51
|
(11) ну так запросики кто-то из них там кропает в консолях
Допустим, при написании запросов в подсистеме Обеспечения можно их прямо в режиме Предприятием, только толстый клиент нужен для конструктора запросов. или обработина какая-то из прошлого есть, которую под УФ так и не переписали. |
|||
13
Kassern
27.10.22
✎
10:54
|
(12) Так есть же консоль запросов под УФ. Все норм отрабатывает, толстый клиент не нужен для этого.
|
|||
14
Фрэнки
27.10.22
✎
10:59
|
(13) ну что ты как маленький? Они там даже не знают сходу о том, что включен у них в базе RLS или нет, а ты говоришь, что где-то у кого-то есть консоль запросов под УФ.
И еще, я написал конкретно о подсистеме Обеспечения. Даже если ты запустишь для себя лично консоль запросов на УФ или конфигуратор с его конструктором, то это не поможет в подсистему Обеспечение текст запроса засунуть, если с Толстым клиентом не запускаться. |
|||
15
HiloNakamura
27.10.22
✎
11:41
|
Вод код запускаемой обработки:
------------------------------------------------------------------- &НаКлиенте Процедура Загрузить(Команда) ЗагрузитьНаСервере(); КонецПроцедуры &НаСервере Процедура ЗагрузитьНаСервере() Запрос = Новый Запрос("ВЫБРАТЬ | ВложенныйЗапрос.Номенклатура КАК Номенклатура, | ВложенныйЗапрос.ВНаличииОстаток КАК ВНаличииОстаток, | ВложенныйЗапрос.Цена КАК Цена, | ВложенныйЗапрос1.Значение КАК Значение |ИЗ | (ВЫБРАТЬ | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, | СУММА(ТоварыНаСкладахОстатки.ВНаличииОстаток) КАК ВНаличииОстаток, | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена | ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, ) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних | ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура | | СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстатки.Номенклатура, | ЦеныНоменклатурыСрезПоследних.Цена) КАК ВложенныйЗапрос | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка, | НоменклатураДополнительныеРеквизиты.Значение КАК Значение | ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура | ПО НоменклатураДополнительныеРеквизиты.Ссылка = Номенклатура.Ссылка | ГДЕ | НоменклатураДополнительныеРеквизиты.Свойство = &Свойство) КАК ВложенныйЗапрос1 | ПО ВложенныйЗапрос.Номенклатура = ВложенныйЗапрос1.Ссылка"); Запрос.УстановитьПараметр("ВидЦены", ВидЦены); Запрос.УстановитьПараметр("Дата", ТекущаяДата()); Запрос.УстановитьПараметр("Свойство", Реквизит); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Элемент = Список.Добавить(); Элемент.Номенклатура = Выборка.Номенклатура; Элемент.Остаток = Выборка.ВНаличииОстаток; Элемент.Цена = Выборка.Цена; Элемент.Категория = Выборка.Номенклатура.Родитель; Элемент.ЗначениеРеквизита = Выборка.Значение; КонецЦикла; Список.Сортировать("ЗначениеРеквизита,Номенклатура ВОЗР"); КонецПроцедуры &НаКлиенте Процедура РеквизитПриИзменении(Элемент) Если ЗначениеЗаполнено(Реквизит) Тогда Элементы.СписокБрэнд.Заголовок = Строка(Реквизит); Иначе Элементы.СписокБрэнд.Заголовок = "..."; КонецЕсли; КонецПроцедуры ------------------------------------------------------------------- Насколько я могу понять, механизм RLS в ней явно не используется. Отладка сейчас показывает 260 накопленных вызовов за 380 секунд. |
|||
16
Фрэнки
27.10.22
✎
11:42
|
И еще вспомнил, при установке Вида цен есть возможность указать Произвольный запрос к ИБ. Вот чтоб его указывать тоже нужен запуск в толстом клиенте.
|
|||
17
Фрэнки
27.10.22
✎
11:47
|
(15) самое просто, без глубоких поисков и разбирательств, хотя может потребовать времени на создание базы и т.п.
Открой в копии базы для тестирования или разработки (у вас же есть такие возможности, верно?) Убери там настройки внутри раздела Настройки пользователей и прав - там увидишь в Группах доступа галочки на "Ограничивать доступ на уровне записей" и далее там. И пробуй формировать. Т.е. сразу в копии глянь, как оно формирует сейчас. а затем отключи и посмотри без него. |
|||
18
Kassern
27.10.22
✎
11:47
|
(15) Перепишите этот как на временные таблицы. Во втором вложенном запросе зачем вы ТЧ номенклатуры с номенклатурой соединяете левым соединением, если потом правую таблицу нигде не используете? И почему у вас 2 вложенных запроса никак не соединены?
|
|||
19
Kassern
27.10.22
✎
11:47
|
(17) да тут просто корявый запрос, который под одним юзвером скуль норм план строит, а под другим - шлет лесом.
|
|||
20
Kassern
27.10.22
✎
11:51
|
(15) Попробуйте вот так запрос написать (на коленке состряпал)
ВЫБРАТЬ ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, СУММА(ТоварыНаСкладахОстатки.ВНаличииОстаток) КАК ВНаличииОстаток, ЦеныНоменклатурыСрезПоследних.Цена КАК Цена, ЕСТЬNULL(НоменклатураДополнительныеРеквизиты.Значение, "") КАК ЗначениеСвойства ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, ) КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты ПО ТоварыНаСкладахОстатки.Номенклатура = НоменклатураДополнительныеРеквизиты.Ссылка И (НоменклатураДополнительныеРеквизиты.Свойство = &Свойство) СГРУППИРОВАТЬ ПО ТоварыНаСкладахОстатки.Номенклатура, ЦеныНоменклатурыСрезПоследних.Цена, ЕСТЬNULL(НоменклатураДополнительныеРеквизиты.Значение, "") |
|||
21
HiloNakamura
27.10.22
✎
13:55
|
(17) Попробовал. Снял галочку ограничения доступа. Результат тот же - 30 сек с правами админа и 6 минут с обычным пользователем.
Еще момент. "Обновление доступа на уровне записей" у меня висит на 95% и выкатывается с ошибкой. |
|||
22
HiloNakamura
27.10.22
✎
13:56
|
ОШИБКА ОБНОВЛЕНИЯ ДОСТУПА
При обновлении ключей доступа к элементам данных списка "Корректировка перемещения (Документ)" (для пользователей) возникла ошибка: 10/27/2022 6:55:35 PM Невозможно обновить ключ доступа объекта "Корректировка перемещения 00000000001 dated 7/4/2022 12:00:07 PM" типа "Корректировка перемещения", так как этот тип не указан в определяемом типе ВладелецЗначенийКлючейДоступа. {ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(16920)}: ВызватьИсключение ТекстОшибки; {ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(16215)}: ЗаписатьКлючиДоступаОбъектов(ПараметрыОбновления, Контекст); {ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(13689)}: ОбновитьЭлементыДанныхСпискаСУстаревшимРазрешеннымКлючом(Элементы, ПараметрыОбновления); {ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(12975)}: ОбновитьПорциюЭлементов(Элементы, ПараметрыОбновления); {ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(12735)}: ВыполнитьОбновлениеДоступаСписка(ОбщиеПараметрыОбновления); {ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(12043)}: ВыполнитьОбновлениеДоступаСпискаСПопыткамиПовтора(ОбщиеПараметрыОбновления, Контекст); |
|||
23
Kassern
27.10.22
✎
13:59
|
(22) попробуйте добавить этот док в определяемый тип
|
|||
24
Kassern
27.10.22
✎
14:00
|
(22) А откуда у вас вообще документ взялся "Корректировка перемещения"? Сами прикрутили? Не припомню такого в УТ11
|
|||
25
Мультук
гуру
27.10.22
✎
14:05
|
(16) (18)
РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, ) Запрос.УстановитьПараметр("Дата", ТекущаяДата()); За такие вещи нынче уже пальцем не тыкают или "ну и хрен с ним" ? |
|||
26
Kassern
27.10.22
✎
14:08
|
(25) Не посмотрел параметры запроса)) Думал, что там указывается дата, а так да, надо потыкать пальцем и сказать атата. Для текущей даты не надо указывать период в таблице. Так быстрее отработает запрос
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |