Имя: Пароль:
1C
1С v8
Очень долго сохраняется новая карточка номенклатуры
0 BigShmax
 
29.09.11
11:59
минута и более , если очень долго то вылазит ошибка  .  УПП 1.3 MSSQL/  как вычислить    на записи какой таблицы  такая задница.  потому как не выяснив  где затык - как лечить я не спрашиваю :-)
1 Starhan
 
29.09.11
12:06
Используй отладку и замер производительности.
Посмотри на каком строчке кода висит.
2 BigShmax
 
29.09.11
12:55
а нет URL  где вкратце описано как юзать?  я запстил предприятие в режиме отладки, в конфигураторе нажал замер производительности и что?
3 BigShmax
 
29.09.11
12:57
вру - кажется нашел
4 BigShmax
 
29.09.11
15:00
в процедуре

Функция Номенклатура_СуществуютСсылки(Ссылка, СуществуютСсылки) Экспорт

   Если НЕ ЗначениеЗаполнено(Ссылка) Тогда
       Возврат Ложь;
   ИначеЕсли СуществуютСсылки <> Неопределено Тогда
       Возврат СуществуютСсылки; // уже было рассчитано
   КонецЕсли;
   
   Запрос = Новый Запрос();

   Запрос.УстановитьПараметр("ТекущийВладелец", Ссылка);

   ТипНоменклатура = ТипЗнч(Справочники.Номенклатура.ПустаяСсылка());

   Запрос.Текст = "";

   Для Каждого РегистрНакопления Из Метаданные.РегистрыНакопления Цикл
       Для Каждого РеквизитРегистра Из РегистрНакопления.Измерения Цикл
           Если РеквизитРегистра.Тип.СодержитТип(ТипНоменклатура) Тогда
               Если Запрос.Текст <> "" Тогда
                   Запрос.Текст = Запрос.Текст + "
                   |ОБЪЕДИНИТЬ ВСЕ
                   |";
               КонецЕсли;
               Запрос.Текст = Запрос.Текст + "
               |ВЫБРАТЬ ПЕРВЫЕ 1
               |    РегистрНакопления."+РегистрНакопления.Имя+"."+РеквизитРегистра.Имя+" КАК Номенклатура
               |ГДЕ
               |    "+РеквизитРегистра.Имя+" = &ТекущийВладелец
               |";
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
   
   СуществуютСсылки = НЕ Запрос.Выполнить().Пустой();

   Возврат СуществуютСсылки;

КонецФункции //  СуществуютСсылки()


в строке

СуществуютСсылки = НЕ Запрос.Выполнить().Пустой();

до двух минут  стоит
5 BigShmax
 
29.09.11
15:01
иногда 12-20 секунд.  какой то регитср  заблокирвоан видать но как понять какой
6 MNS_Ротерта
 
29.09.11
15:19
(5) Может не в блокировке дело? А в большом объеме базы, по которой ищутся ссылки на номенклатуру. Если так то примерно так же должно тормозить и на копии базы, где будешь только ты работать. Если так то убирай либо данный код если возможно. А если думаешь что блокировки какие-то то в случае если у тебя этот код должен выполняться в транзакции (ТранзакцияАктивна()), если так то даже если есть блокирровки то ты не узнаешь где если атоматический режим. Если упраляемый режим, то поставив на данные регистры исключительную блокировку ты поймешь какая SQL таблица заблокирована, но что это тебе даст если оставить данный код? Ведь блокировки это неизбежность. Оптимизировать начнешь и расставлять индексы - не факт что поможет, переписывать полконцы - не серьезно, переводить на упраляемые блокировки наверное оно того не стоит.
7 MNS_Ротерта
 
29.09.11
15:21
(0) Чтобы выяснить где блокировки надо ЦУП.
8 BigShmax
 
29.09.11
15:28
принимая исстематически много жалоб начал зхадумываться и решил проверить.
создал три элемента  на первом 12 секунд, на втором 12 а на третьем 96.  т.е. создаться элемент за 12 секунд таки в состоянии
9 BigShmax
 
29.09.11
15:41
(6)   спасибо за развернутый ответ.  БД не такая уж и большая для УПП.

dt весит около 6ти гигов.  обидно что тупит родной код а не самописный :-(
10 BigShmax
 
29.09.11
15:46
не уверен что можно просто прибить :-(((((((



ПРОЦЕДУРЫ ПРОВЕРКИ ПРИ ЗАПИСИ НОМЕНКЛАТУРЫ

// Функция проверяет, существуют ли ссылки на единицу измерения в движениях регистров накопления.
// Если есть - нельзя менять коэффицент
//
// Параметры:
//  СуществуютСсылки - булево, переменная, в которой сохраняется результат работы функции, чтобы
//                     при последующих вызовах заново не считать функцию.
//
// Возвращаемое значение:
//  Истина - если есть движения, Ложь - если нет.
11 MNS_Ротерта
 
30.09.11
14:49
(10) Может лучше сделать регистр сведений где будет одно измерение Номенклатура. Если есть ссылка в регистре то значит есть ссылки, иначе нет ссылок. И подписокй на все РН засобачить перед записью. Думаю будет гораздо быстрее работать, чем вышеприведенный механизм.
12 НЕА123
 
30.09.11
15:22
(8)
>создал три элемента
а надо ли для новых делать проверку ссылок?
13 BigShmax
 
30.09.11
15:54
(12)  именно так и решил.  Вчера добавил условие на НЕ ЭтоНовый()  не знаю зачем 1с  при создании это проверяет