|
как найти модуль где зависает 1с | ☑ | ||
---|---|---|---|---|
0
mihalich979
08.07.19
✎
10:14
|
Приветствую.
Есть база 1С КА 2.4 неудачно обновили, и теперь при проведении документа "Списание безналичных ДС" зависает намертво. спасает только сбросить сеанс пользователя. причем документ сохраняется без проблем. Но вот проведение. |
|||
1
Cyberhawk
08.07.19
✎
10:15
|
F11
|
|||
2
Cyberhawk
08.07.19
✎
10:15
|
ТЖ
|
|||
3
piter3
08.07.19
✎
10:17
|
замер может быть
|
|||
4
bolobol
08.07.19
✎
10:18
|
Пауза
|
|||
5
mihalich979
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 и в процедуре никак оба значение не меняются. |
|||
6
bolobol
08.07.19
✎
10:31
|
Очевидно, что не выполняются все условия из заложенных, значит, что существует Н+1 состояние, в котором у вас и находится система. Определите его, и, возможно, найдётся либо ошибка в исходных данных, либо в коде.
|
|||
7
bolobol
08.07.19
✎
10:33
|
С учётом "неудачно обновили" - это значит, что не все регламентированные процедуры обновления выполнились или конфига покривела?
Сравните конфигу в интересующей части с типовой, обновите кеш сервера. |
|||
8
mihalich979
08.07.19
✎
10:42
|
(7) Про неудачно обновили это лишь мое предположение.
я не обновлял, не видел что и как. Вприципе в данном модуле не думаю что были введены изменения. Регламентные процедуры обновления попробую еще раз запустить. (6) это как определить? |
|||
9
novichok79
08.07.19
✎
10:56
|
замер производительности?
|
|||
10
mihalich979
08.07.19
✎
11:12
|
(9) а что он дает ?
ниразу не использовал. сделал. и что дальше? 98% строка ДанныеОНепроведенныхДокументах = ОбщегоНазначенияВызовСервера.ПровестиДокументы(МассивСсылок); |
|||
11
johnnik
08.07.19
✎
11:21
|
Наверное дурацкий способ, но в 7.7 я в таких случаях ставил строку "Сообщить("любой текст");" и как минимум понимал, до какого места код отрабатывает нормально. Если в цикле проблема возникала (табличная часть и т.п.), то сообщал не голый текст, а строку цикла. Подобным методом тыка находил проблемный кусок и дальше было легче
Был уверен, что 99% 1С-ников так делает :) |
|||
12
sqr4
08.07.19
✎
11:23
|
Взаиморасчеты онлайн скорее всего всему виной, делай офф
|
|||
13
mihalich979
08.07.19
✎
11:32
|
(11) так ведь определил где зацикливание.
модули со старой конфой сравнил. нет изменений. |
|||
14
novichok79
08.07.19
✎
11:35
|
(10) если у тебя в цикле виснет, значит замер не поможет. по поводу того, что у тебя 98% уходит на проведение, так это понятно - запись в БД - одна из самых затратных.
|
|||
15
novichok79
08.07.19
✎
11:36
|
(13) тогда ищи откуда у тебя там такие данные, раз код не отрабатывает эту ситуацию.
|
|||
16
hhhh
08.07.19
✎
11:39
|
(11) сообщить теперь не катит. На сервере все сообщения складываются в буфер и выдаются все скопом в самом конце.
|
|||
17
mihalich979
08.07.19
✎
11:45
|
(15) создал идентичный документ.
не проводится тоже. |
|||
18
VorHel
08.07.19
✎
11:54
|
В типовом релизе не обрабатывается ситуация, когда в регистре накопления РасчетыСПоставщикамиПланОплат по какой-либо причине появляются отрицательные остатки. В результате в ОперативныеВзаиморасчеты.ЗаполнитьОперативныеВзаиморасчеты() получаются бесконечные циклы в двух местах.
Я обошла это так: //Если ПланыОплат[счПриход].КОплате = 0 Тогда Если ПланыОплат[счПриход].КОплате <= 0 Тогда На этот счет я написала письмо в 1С. |
|||
19
bolobol
08.07.19
✎
12:17
|
Вах! Это наверняка было не просто определить!
|
|||
20
mihalich979
08.07.19
✎
16:18
|
(18) остаток реально отрицательный.
|
|||
21
mihalich979
08.07.19
✎
16:21
|
буду сейчас пробовать условие менять.
|
|||
22
mihalich979
08.07.19
✎
16:50
|
(18) в копии все получилось!
спасибо!! просто для сравнения: я в от в этом месте поменял (дважды одинаково встречется) а вы? Если ПланыОплат[счПриход].КОплате <= 0 Тогда счПриход = счПриход + 1; счРасход = 0; ИначеЕсли ПланыОплат[счРасход].Оплачено = 0 Тогда счРасход = счРасход + 1; КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |