Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

как найти модуль где зависает 1с

как найти модуль где зависает 1с
Я
   mihalich979
 
08.07.19 - 10:14
Приветствую.

Есть база 1С КА 2.4

неудачно обновили, и теперь при проведении документа "Списание безналичных ДС" зависает намертво.
спасает только сбросить сеанс пользователя.

причем документ сохраняется без проблем. Но вот проведение.
 
 
   Cyberhawk
 
1 - 08.07.19 - 10:15
F11
   Cyberhawk
 
2 - 08.07.19 - 10:15
ТЖ
   piter3
 
3 - 08.07.19 - 10:17
замер может быть
   bolobol
 
4 - 08.07.19 - 10:18
Пауза
   mihalich979
 
5 - 08.07.19 - 10:24
(4) По паузе

заходит в процедуру в обдем модуля Оперативные взаиморасчетыСервер:
Если ПланыОплат.Количество() > 0 Тогда
        
        ПланыОплат.Свернуть("Регистратор, ДокументПлан ,ВариантОплаты, Период, ДатаВозникновения, ДатаПлановогоПогашения, ПорядокОперации, ПорядокЗачетаПоДатеПлатежа, ХозяйственнаяОперация, ПриходДобавлен","КОплате, Оплачено");
        ПланыОплат.Сортировать("ПорядокОперации ВОЗР, ПорядокЗачетаПоДатеПлатежа ВОЗР");
        счПриход = 0;
        счРасход = 0;
        РаспределеноСтрок = 0;
        Пока счПриход < ПланыОплат.Количество() ИЛИ счРасход < ПланыОплат.Количество() Цикл
            
            Если счРасход > ПланыОплат.Количество()-1 Тогда
                Если РаспределеноСтрок = 0 Тогда
                    Прервать;
                Иначе
                    РаспределеноСтрок = 0;
                КонецЕсли;
                счПриход = счПриход + 1;
                счРасход = 0;
            КонецЕсли;
            
            Если счПриход > ПланыОплат.Количество()-1 Тогда
                Прервать;
            КонецЕсли;
            
            Если ПланыОплат[счПриход].КОплате = 0 Тогда
                счПриход = счПриход + 1;
                Продолжить;
            КонецЕсли;
            
            Если ПланыОплат[счРасход].Оплачено = 0 Тогда
                счРасход = счРасход + 1;
                Продолжить;
            КонецЕсли;
            
            Если ПланыОплат[счПриход].КОплате > 0 И ПланыОплат[счРасход].Оплачено > 0 Тогда
                
                РаспределеноСтрок = РаспределеноСтрок + 1;
                
                //Приход по плану и расход по плану

                Если ПланыОплат[счПриход].ПорядокОперации < ПланыОплат[счРасход].ПорядокОперации
                    И ПланыОплат[счПриход].Регистратор = ПланыОплат[счРасход].ДокументПлан Тогда
                    
                    СуммаСписания = Мин(ПланыОплат[счПриход].КОплате, ПланыОплат[счРасход].Оплачено);
                    
                    ПроверитьДобавитьПриходПланаОплат(ТаблицаПланОплат, ПланыОплат[счПриход], ГлобальныеПеременные.ХозяйственныеОперации["Планирование"], СуммаСписания);
                    ДобавитьРасходПланаОплат(ТаблицаПланОплат, ПланыОплат[счПриход], ПланыОплат[счРасход], СуммаСписания);
                    
                    ПланыОплат[счПриход].КОплате = ПланыОплат[счПриход].КОплате - СуммаСписания;
                    ПланыОплат[счРасход].Оплачено = ПланыОплат[счРасход].Оплачено - СуммаСписания;
                ИначеЕсли счРасход + 1 < ПланыОплат.Количество() Тогда
                    счРасход = счРасход + 1;
                Иначе
                    счРасход = 0;
                    счПриход = счПриход + 1;
                КонецЕсли;
            КонецЕсли;
            
            Если ПланыОплат[счПриход].КОплате = 0 Тогда
                счПриход = счПриход + 1;
                счРасход = 0;
            ИначеЕсли ПланыОплат[счРасход].Оплачено = 0 Тогда
                счРасход = счРасход + 1;
            КонецЕсли;
            
        КонецЦикла;

ну и соответственно бесконечный цикл:
Пока счПриход < ПланыОплат.Количество() ИЛИ счРасход < ПланыОплат.Количество() Цикл

т.к. 
счРасход  = 3
ПланыОплат.Количество() = 5

и в процедуре никак оба значение не меняются.
   bolobol
 
6 - 08.07.19 - 10:31
Очевидно, что не выполняются все условия из заложенных, значит, что существует Н+1 состояние, в котором у вас и находится система. Определите его, и, возможно, найдётся либо ошибка в исходных данных, либо в коде.
   bolobol
 
7 - 08.07.19 - 10:33
С учётом "неудачно обновили" - это значит, что не все регламентированные процедуры обновления выполнились или конфига покривела?
Сравните конфигу в интересующей части с типовой, обновите кеш сервера.
   mihalich979
 
8 - 08.07.19 - 10:42
(7) Про неудачно обновили это лишь мое предположение.

я не обновлял, не видел что и как.
Вприципе в данном модуле не думаю что были введены изменения.

Регламентные процедуры обновления попробую еще раз запустить.


(6) это как определить?
   novichok79
 
9 - 08.07.19 - 10:56
замер производительности?
   mihalich979
 
10 - 08.07.19 - 11:12
(9) а что он дает ?

ниразу не использовал.

сделал. и что дальше?

98% строка
ДанныеОНепроведенныхДокументах = ОбщегоНазначенияВызовСервера.ПровестиДокументы(МассивСсылок);
   johnnik
 
11 - 08.07.19 - 11:21
Наверное дурацкий способ, но в 7.7 я в таких случаях ставил строку "Сообщить("любой текст");" и как минимум понимал, до какого места код отрабатывает нормально. Если в цикле проблема возникала (табличная часть и т.п.), то сообщал не голый текст, а строку цикла. Подобным методом тыка находил проблемный кусок и дальше было легче

Был уверен, что 99% 1С-ников так делает :)
   sqr4
 
12 - 08.07.19 - 11:23
Взаиморасчеты онлайн скорее всего всему виной, делай офф
   mihalich979
 
13 - 08.07.19 - 11:32
(11) так ведь определил  где зацикливание.

модули со старой конфой сравнил. нет изменений.
   novichok79
 
14 - 08.07.19 - 11:35
(10) если у тебя в цикле виснет, значит замер не поможет. по поводу того, что у тебя 98% уходит на проведение, так это понятно - запись в БД - одна из самых затратных.
   novichok79
 
15 - 08.07.19 - 11:36
(13) тогда ищи откуда у тебя там такие данные, раз код не отрабатывает эту ситуацию.
   hhhh
 
16 - 08.07.19 - 11:39
(11) сообщить теперь не катит. На сервере все сообщения складываются в буфер и выдаются все скопом в самом конце.
   mihalich979
 
17 - 08.07.19 - 11:45
(15) создал идентичный документ.

не проводится тоже.
   VorHel
 
18 - 08.07.19 - 11:54
В типовом релизе не обрабатывается ситуация, когда в регистре накопления РасчетыСПоставщикамиПланОплат по какой-либо причине появляются отрицательные остатки. В результате в ОперативныеВзаиморасчеты.ЗаполнитьОперативныеВзаиморасчеты() получаются бесконечные циклы в двух местах.

Я обошла это так:
                                              //Если ПланыОплат[счПриход].КОплате = 0 Тогда

                                               Если ПланыОплат[счПриход].КОплате <= 0 Тогда

На этот счет я написала письмо в 1С.
   bolobol
 
19 - 08.07.19 - 12:17
Вах! Это наверняка было не просто определить!
   mihalich979
 
20 - 08.07.19 - 16:18
(18) остаток реально отрицательный.
   mihalich979
 
21 - 08.07.19 - 16:21
буду сейчас пробовать условие менять.
   mihalich979
 
22 - 08.07.19 - 16:50
(18) в копии все получилось!

спасибо!!

просто для сравнения:

я в от в этом месте поменял (дважды одинаково встречется)
а вы?
Если ПланыОплат[счПриход].КОплате <= 0 Тогда
  счПриход = счПриход + 1;
  счРасход = 0;
ИначеЕсли ПланыОплат[счРасход].Оплачено = 0 Тогда
  счРасход = счРасход + 1;
КонецЕсли;


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.