|
Какие есть идеи - "Как ускорить отмену проведения документа"? | ☑ | ||
---|---|---|---|---|
0
Fergus
03.07.15
✎
06:42
|
Всем привет. Как обычно в пт занимаемся оптимизацией 1С. Есть документы, которые генерирует по 20-30 тысяс проводок. Само проведение оптимизировали, записывая проводки порциями, но вот отмена проведения занимает капец время. При чем всегда разное. Что испробововали:
1. Проводить отмену проведения вне транзакций 2. Отключать итоги, делать отмену проведения, включать итоги (неодназначный результат, больше сомнения вызывает вкл\откл итогов, база большая, и постоянно вкл\выкл итоги накладно) 3. Управляемые блокировки (пока тестим) Есть идеи? Заранее спасибо... |
|||
1
1Сергей
03.07.15
✎
06:44
|
начать с пункта 3.
|
|||
2
Fergus
03.07.15
✎
06:47
|
(1) все таки хотелось бы ускорения, а конфликты блокировки были бы отсечены
|
|||
3
kosts
03.07.15
✎
08:00
|
Вариант для экспериментов:
Запись в режиме Обмен=Истина. И удаление движений своим алгоритмом. |
|||
4
MSOliver
03.07.15
✎
08:06
|
1 Не удалять движения при отмене проведения
2 Получить набор записей с отбором по регистратору 3 очистить набор 4 записать набор. |
|||
5
MSOliver
03.07.15
✎
08:07
|
Хотя по логике вещей п.1 делает п.2,3,4
|
|||
6
mistеr
03.07.15
✎
08:40
|
(0) Отказаться от документов, "которые генерирует по 20-30 тысяс проводок", и спроектировать правильно не предлагать?
|
|||
7
ДенисЧ
03.07.15
✎
08:41
|
(6) Правильно! Давайте откажемся от документа РСВ в УПП, например!
А то что он кучи проводок генерит, это же неправильно... |
|||
8
mistеr
03.07.15
✎
08:48
|
(7) Не слышал, чтобы кто-то жаловался на долгую *отмену* РСВ. И то, РСВ можно выполнять (и отменять) по частям. Так что все предусмотрено.
Там у ТС явно чего-то лишнего наворотили. Может так "обмен" пытаются делать. |
|||
9
ДенисЧ
03.07.15
✎
08:49
|
(8) Отменять? По частям?
|
|||
10
mistеr
03.07.15
✎
08:51
|
(9) По операциям. Не знал?
|
|||
11
Armando
03.07.15
✎
08:54
|
У нас такая же проблема((
Есть документ, который в конце месяца генерит до 500 тыс проводок. Отмена проведения это ппц. Мало того, что память жрет, еще и выполняется долго, и эскалация блокировок включается. |
|||
12
Fergus
03.07.15
✎
09:07
|
(8) ниче там не предусмотрено. вообще мне кажется в 1С больше г..на, только что беседовали с коллегами по sap, те поржали от души, когда мы им сказали, что в 1С есть ограничение на кол-во записей в таб. доке (9999) и на кол-во записей в регистре (99999). резюмировали: 1С - для EPR систем еще расти и расти, лучше не жлобиться и купить норм. забугор прогу, которая веками оттачивали.
Че думаете? Идти к начальству с предложением :)) |
|||
13
ЧеловекДуши
03.07.15
✎
09:11
|
(0) Напиши свой блек ждек и шлюх.
30 000 проводок, разбросай на 1000 документов :) т.е. есть документ Владелец и будут еще документы, которые подчинены владельцу и формируется автоматически, так же и проводятся из основного документа. |
|||
14
ЧеловекДуши
03.07.15
✎
09:12
|
(12) Количество записей в таблице "99 999".
Количества записей в Регистре, нет :) |
|||
15
mistеr
03.07.15
✎
09:14
|
(11) Что делает док, если не секрет?
|
|||
16
Fergus
03.07.15
✎
09:19
|
(13) супер, "раскидайте 30 000 проводок по 1000 документам", а когда откроешь карточка счета бухи аху, там же мля 1000 док, не говоря уже о размере базы и т.д., и т.п. Хотя признаюсь често была такая мысль - но главный спец наш сказал вы аху что ли! давайте думайте дальше...
|
|||
17
mistеr
03.07.15
✎
09:23
|
(13) И весь процесс будет занимать раза в 3 больше времени.
|
|||
18
mistеr
03.07.15
✎
09:27
|
(12) Вообще не в кассу. Я тоже могу пойти к бывшим коллегам ораклистам и у нас найдется 100500 причин поржать над тем, какое 1С тормозное УГ. (Что, кстати, раньше и делали.) Но это никак не относится к обсуждаемой теме. Как и ограничения в ТЧ.
|
|||
19
mistеr
03.07.15
✎
09:28
|
(0) Профилировать запросы пробовали?
|
|||
20
Лефмихалыч
03.07.15
✎
09:35
|
(12) ограничение по числу строк на порядок шире - 99999, про регистр вранье - нет такого ограничения ни на сам регистр, ни на набор записей.
|
|||
21
Лефмихалыч
03.07.15
✎
09:45
|
(0) Что конкретно больше всего времени занимает? подписки/обработчики при отмене проведения пустые что ли все?
|
|||
22
Fergus
03.07.15
✎
09:45
|
(20) как говорится "безграничен только космос" - а на регистры есть ограничения. Можно запихать туда ярды записей, затем спокойно увольняться - система намертво встанет, при проведение\отмене проведения документа получим сообщение:
# Идет третий этап завершения продолжения окончания установки Microsoft Office 2000. Подождите! |
|||
23
Fergus
03.07.15
✎
09:46
|
(21) больше всего времени занимает "ОТМЕНА проведения документа", с "проведением документа" слава аллаху разобрались (летает)
|
|||
24
Лефмихалыч
03.07.15
✎
09:47
|
(23) при отмене проведения что-то делается вашим кодом? Или обработчик при отмене проведения пустой и подписок нет?
|
|||
25
Cyberhawk
03.07.15
✎
09:51
|
(0) замер времени выполнения кода с топ10 жирных строчек кода в студию
|
|||
26
Fergus
03.07.15
✎
09:53
|
(24) при отмене проведения ничего не делается, подписок нет
|
|||
27
H A D G E H O G s
03.07.15
✎
09:55
|
Весело тут у вас. Автору - уволится и идти в САП.
|
|||
28
floody
03.07.15
✎
09:57
|
Откуда мы знаем, может у вас железо УГ.
А вообще, оптимизация должна начинаться с перехода на упр. блокировки. |
|||
29
Лефмихалыч
03.07.15
✎
09:58
|
(26) какой регистр дольше всего очищается?
|
|||
30
Лефмихалыч
03.07.15
✎
09:58
|
(28) оптимизация должна начинаться с идентификации проблемы
|
|||
31
Гёдза
03.07.15
✎
10:00
|
на таком наборе будет эскалация (от 20 тыщ записей). Только частями.
|
|||
32
Гёдза
03.07.15
✎
10:02
|
Говорят, что у 1с есть оптимизированная запись, которая перезаписывает и перерасчитывает только измененные записи
|
|||
33
H A D G E H O G s
03.07.15
✎
10:03
|
вы стебаетесь штоле?
Автор не то, что ТЖ не собрал, профайлер не запустил. Он даже не озвучил, типовая это конфа или нет. |
|||
34
Гёдза
03.07.15
✎
10:04
|
(33) Что ты хочешь увидеть в ТЖ?
|
|||
35
Serg_1960
03.07.15
✎
10:07
|
(34) Ты не ответил на (29) Попробуй ответить - вопрос сам собой отпадёт.
|
|||
36
Fergus
03.07.15
✎
10:08
|
(28)(29)(30)
Железо Intel(r) Xeon(r) EU-1240 v2 3.40ghz Ozu - 16 Gb запись идет только в регистр бухгалтерии, все остальное мы уже и так упростили и перенесли логику в др. документы. Фактически мы разобрали документ, регистры накопления записываются в др, здесь идет запись только для бухов. |
|||
37
floody
03.07.15
✎
10:12
|
Т.е. по вашему для описания серверного железа достаточно указать модель процессора и количество оперативки?
А кстати, "капец время" это сколько? |
|||
38
Fergus
03.07.15
✎
10:13
|
(33) меня умиляют ваши слова. какая разница типовая или нет? в нашей конторе кредо - нам пох... кто и когда ставил 1С, типовая или нет. мы просто делаем свою работу.
замеры и тж есть - не криворукие же в конце концов. Вы еще спросите а делаем ли мы бэкапы. (33) что вы хотите увидеть в ТЖ? |
|||
39
mistеr
03.07.15
✎
10:14
|
(38) На скуле профилировали?
|
|||
40
Гёдза
03.07.15
✎
10:18
|
Кстати эскалация на управляемых хуже чем не обычных.
На обычных продолжает работать, на управляемых ставится в очередь. На обычных можно настроить размер до эскалации, на управляемых - нет |
|||
41
Fergus
03.07.15
✎
10:20
|
(37) извините, забыл написать - цвет системного блока - черный.
капец время - это может быть и 30 мин и 20, и даже час. Причем один и тот же документ может выдавать разное время. Настройки скуля и состояние сервера мониторим постоянно, но адских всплесков чтения\записи на хард, или нехватку памяти нету. ТИИБ, обновление статистики, и бла-бла-бла делаем. Профайл - смотрим ужо с утро, что там 1С выдает охрененную запрос к sql, но в принципе сам запрос логичен. |
|||
42
piter3
03.07.15
✎
10:22
|
(41) автор,а мы чем-то обязаны Вам?не можете пользоваться не надо
|
|||
43
vhl
03.07.15
✎
10:24
|
ssd поставьте :)
|
|||
44
floody
03.07.15
✎
10:25
|
30 тыс проводок удаляются час? не, гебят, продолжайте и дальше думать, что у вас все настроено 146% идеально, и все проблемы от УГ1С
|
|||
45
vhl
03.07.15
✎
10:26
|
(44) а ты пробовал удалить 30 тыс проводок?
|
|||
46
Serg_1960
03.07.15
✎
10:28
|
(41) "там 1С выдает охрененную запрос к sql, но в принципе сам запрос логичен." - сорри, не понял. Для удаления записей из регистра - запрос? Сорри, не понял
А сколько занимает времени банальное "создать набор записей; установить отбор по регистратору; удалить набор"? |
|||
47
Fergus
03.07.15
✎
10:28
|
(42) ??? вы не обязаны мне ничем, я даже вас не знаю ??? я даже не понял суть вашей претензии. Это форум, где я спросил "а есть идеи" - если есть, и он будет полезным, я буду вам благодарен, если нет...помалкивайте
|
|||
48
Гёдза
03.07.15
✎
10:31
|
Основное время занимает не удаление, а пересчет итогов
|
|||
49
Serg_1960
03.07.15
✎
10:32
|
(не в тему) Есть отложенное проведение документов - почему бы не создать отложенное отмену проведения? :)
|
|||
50
piter3
03.07.15
✎
10:37
|
(47) дома женой будешь командывать ок.
|
|||
51
Fergus
03.07.15
✎
10:37
|
(48) в точку. в принципе если установить итоги выкл, то результат приемлемый от 2 мин до 5 мин на каждый док, но вот не задача, отчеты не пашут, надо обратно вкл итоги, тут 1С начинает пересчет итогов от рождества христова до текущего месяца.
А доки дергать туда-сюда могут несколько пользователей, при этом получается остальные сидят без дела. Итоги то выкл, отчеты не пашут, др доки где задействованы обращение к вирт табл тоже. |
|||
52
rs_trade
03.07.15
✎
10:38
|
8.2 или 8.3?
|
|||
53
Fergus
03.07.15
✎
10:39
|
(51) хорошо, мне не трудно покомандывать вашей ЖЕНОЙ. адрес и тел на лычко. :) шучу. хороших выходных вам и вашей семье.
|
|||
54
Fergus
03.07.15
✎
10:39
|
(52) 8.1
|
|||
55
Гёдза
03.07.15
✎
10:41
|
Отложенное проведение используете?
Начинайте |
|||
56
floody
03.07.15
✎
10:41
|
(55) Так проведение у них летает.
|
|||
57
Гёдза
03.07.15
✎
10:42
|
в 8.2 вроде нет оптимизированной записи регистров
|
|||
58
itlikbez
03.07.15
✎
10:43
|
(51) Остается только оптимизация регистров.
|
|||
59
floody
03.07.15
✎
10:43
|
(0) Это ваша статья? http://www.trsoft.ru/articles/11/
|
|||
60
Гёдза
03.07.15
✎
10:48
|
(58) Оптимизация регистра бухгалтерии? )))
|
|||
61
Лефмихалыч
03.07.15
✎
10:56
|
(36) отмена вне транзакции + управляемые блокировки + сделать что-то с консерваторией, чтобы отменять надо было не часто
|
|||
62
Лефмихалыч
03.07.15
✎
11:00
|
кроме того, на сервере БД надо замеры провести, чтобы понять, что там с дисковой подсистемой в момент отмены происходит. Может достаточно перенести таблицы РБ на отдельный раздел (или отдельный и более быстрый)
|
|||
63
Fergus
03.07.15
✎
11:01
|
INSERT INTO _AccTtl33597
( _Period, _AccountRRef, _Fld3576RRef, _Fld3577RRef, _Value1_TYPE, _Value1_RTRef, _Value1_RRRef, _Value2_TYPE, _Value2_RTRef, _Value2_RRRef, _Value3_TYPE, _Value3_RTRef, _Value3_RRRef, _Fld3578, _TurnoverDt3586, _TurnoverCt3587, _Turnover3588, _Fld3579, _TurnoverDt3589, _TurnoverCt3590, _Turnover3591, _Fld3580, _TurnoverDt3592, _TurnoverCt3593, _Turnover3594, _Splitter ) SELECT #PRDRecords_R._Period, #PRDRecords_R._AccountRRef, #PRDRecords_R._Fld3576RRef, #PRDRecords_R._Fld3577RRef, CASE WHEN #PRDRecords_R._Value1_TYPE = 0x01 OR #PRDRecords_R._Value1_TYPE = 0x08 AND #PRDRecords_R._Value1_RTRef IS NOT NULL AND #PRDRecords_R._Value1_RRRef IS NOT NULL THEN #PRDRecords_R._Value1_TYPE ELSE NULL END, CASE WHEN #PRDRecords_R._Value1_TYPE = 0x08 THEN #PRDRecords_R._Value1_RTRef WHEN #PRDRecords_R._Value1_TYPE IS NULL OR #PRDRecords_R._Value1_TYPE NOT IN (0x01,0x08) THEN NULL ELSE 0x00000000 END, CASE WHEN #PRDRecords_R._Value1_TYPE = 0x08 THEN #PRDRecords_R._Value1_RRRef WHEN #PRDRecords_R._Value1_TYPE IS NULL OR #PRDRecords_R._Value1_TYPE NOT IN (0x01,0x08) THEN NULL ELSE 0x00000000000000000000000000000000 END, CASE WHEN #PRDRecords_R._Value2_TYPE = 0x01 OR #PRDRecords_R._Value2_TYPE = 0x08 AND #PRDRecords_R._Value2_RTRef IS NOT NULL AND #PRDRecords_R._Value2_RRRef IS NOT NULL THEN #PRDRecords_R._Value2_TYPE ELSE NULL END, CASE WHEN #PRDRecords_R._Value2_TYPE = 0x08 THEN #PRDRecords_R._Value2_RTRef WHEN #PRDRecords_R._Value2_TYPE IS NULL OR #PRDRecords_R._Value2_TYPE NOT IN (0x01,0x08) THEN NULL ELSE 0x00000000 END, CASE WHEN #PRDRecords_R._Value2_TYPE = 0x08 THEN #PRDRecords_R._Value2_RRRef WHEN #PRDRecords_R._Value2_TYPE IS NULL OR #PRDRecords_R._Value2_TYPE NOT IN (0x01,0x08) THEN NULL ELSE 0x00000000000000000000000000000000 END, CASE WHEN #PRDRecords_R._Value3_TYPE = 0x01 OR #PRDRecords_R._Value3_TYPE = 0x08 AND #PRDRecords_R._Value3_RTRef IS NOT NULL AND #PRDRecords_R._Value3_RRRef IS NOT NULL THEN #PRDRecords_R._Value3_TYPE ELSE NULL END, CASE WHEN #PRDRecords_R._Value3_TYPE = 0x08 THEN #PRDRecords_R._Value3_RTRef WHEN #PRDRecords_R._Value3_TYPE IS NULL OR #PRDRecords_R._Value3_TYPE NOT IN (0x01,0x08) THEN NULL ELSE 0x00000000 END, CASE WHEN #PRDRecords_R._Value3_TYPE = 0x08 THEN #PRDRecords_R._Value3_RRRef WHEN #PRDRecords_R._Value3_TYPE IS NULL OR #PRDRecords_R._Value3_TYPE NOT IN (0x01,0x08) THEN NULL ELSE 0x00000000000000000000000000000000 END, CAST(#PRDRecords_R._Fld3578 AS NUMERIC(21,2)), CAST(#PRDRecords_R._TurnoverDt3586 AS NUMERIC(21,2)), CAST(#PRDRecords_R._TurnoverCt3587 AS NUMERIC(21,2)), CAST(#PRDRecords_R._Turnover3588 AS NUMERIC(21,2)), CAST(#PRDRecords_R._Fld3579 AS NUMERIC(21,2)), CAST(#PRDRecords_R._TurnoverDt3589 AS NUMERIC(21,2)), CAST(#PRDRecords_R._TurnoverCt3590 AS NUMERIC(21,2)), CAST(#PRDRecords_R._Turnover3591 AS NUMERIC(21,2)), CAST(#PRDRecords_R._Fld3580 AS NUMERIC(21,4)), CAST(#PRDRecords_R._TurnoverDt3592 AS NUMERIC(21,4)), CAST(#PRDRecords_R._TurnoverCt3593 AS NUMERIC(21,4)), CAST(#PRDRecords_R._Turnover3594 AS NUMERIC(21,4)), CAST(CAST(0. AS NUMERIC(1,0)) AS NUMERIC(10,0)) FROM #tt8 #PRDRecords_R WITH(NOLOCK) LEFT OUTER JOIN _AccTtl33597 _AccTtl33597_T WITH(SERIALIZABLE) ON #PRDRecords_R._Period = _AccTtl33597_T._Period AND #PRDRecords_R._AccountRRef = _AccTtl33597_T._AccountRRef AND #PRDRecords_R._Fld3576RRef = _AccTtl33597_T._Fld3576RRef AND (#PRDRecords_R._Fld3577RRef = _AccTtl33597_T._Fld3577RRef OR #PRDRecords_R._Fld3577RRef IS NULL AND _AccTtl33597_T._Fld3577RRef IS NULL) AND (#PRDRecords_R._Value1_TYPE = _AccTtl33597_T._Value1_TYPE OR #PRDRecords_R._Value1_TYPE IS NULL AND _AccTtl33597_T._Value1_TYPE IS NULL) AND (#PRDRecords_R._Value1_RTRef = _AccTtl33597_T._Value1_RTRef OR #PRDRecords_R._Value1_RTRef IS NULL AND _AccTtl33597_T._Value1_RTRef IS NULL) AND (#PRDRecords_R._Value1_RRRef = _AccTtl33597_T._Value1_RRRef OR #PRDRecords_R._Value1_RRRef IS NULL AND _AccTtl33597_T._Value1_RRRef IS NULL) AND (#PRDRecords_R._Value2_TYPE = _AccTtl33597_T._Value2_TYPE OR #PRDRecords_R._Value2_TYPE IS NULL AND _AccTtl33597_T._Value2_TYPE IS NULL) AND (#PRDRecords_R._Value2_RTRef = _AccTtl33597_T._Value2_RTRef OR #PRDRecords_R._Value2_RTRef IS NULL AND _AccTtl33597_T._Value2_RTRef IS NULL) AND (#PRDRecords_R._Value2_RRRef = _AccTtl33597_T._Value2_RRRef OR #PRDRecords_R._Value2_RRRef IS NULL AND _AccTtl33597_T._Value2_RRRef IS NULL) AND (#PRDRecords_R._Value3_TYPE = _AccTtl33597_T._Value3_TYPE OR #PRDRecords_R._Value3_TYPE IS NULL AND _AccTtl33597_T._Value3_TYPE IS NULL) AND (#PRDRecords_R._Value3_RTRef = _AccTtl33597_T._Value3_RTRef OR #PRDRecords_R._Value3_RTRef IS NULL AND _AccTtl33597_T._Value3_RTRef IS NULL) AND (#PRDRecords_R._Value3_RRRef = _AccTtl33597_T._Value3_RRRef OR #PRDRecords_R._Value3_RRRef IS NULL AND _AccTtl33597_T._Value3_RRRef IS NULL) AND _AccTtl33597_T._Splitter = CAST(0. AS NUMERIC(1,0)) WHERE _AccTtl33597_T._Period IS NULL AND #PRDRecords_R._EDCount = CAST(@P1 AS NUMERIC(1,0)) кто-то хотел профайл, при каждой отмене проведения этот запрос и висит. есть гурманы sql можете что посоветуйте, буду благодарен |
|||
64
Гёдза
03.07.15
✎
11:05
|
(61) Отмена вне транзакции - это как?
|
|||
65
Fergus
03.07.15
✎
11:05
|
(59) не наша статья, но и ее мы тоже прочитали, сделали выводы.
1. Ставить монопольно систему - не выход, остальные че должны сидеть курить бамбук 2. Про вкл\выкл итоги мы уже проверяли - результат неоднозначный 3. Управляемые блокировки - неясно еще, может то, а может и не то. Вывод один: надо как-то уменьшить время отмены проведения документа, что однозначна решит и проблему блокировок |
|||
66
Гёдза
03.07.15
✎
11:06
|
(65) у вас только один выход - отмена в очереди
|
|||
67
Лефмихалыч
03.07.15
✎
11:07
|
(64) это кодом
|
|||
68
Гёдза
03.07.15
✎
11:07
|
Запись набора вроде автоматом транзакцию поднимает
|
|||
69
Лефмихалыч
03.07.15
✎
11:08
|
(65) управляемые блокировки уменьшат время. Но для этого вам придется из каменного века выползти - (54)
|
|||
70
asady
03.07.15
✎
11:08
|
(0) а зачем надо отменять проведение?
может быть тупо перезаписать старый НЗ новым |
|||
71
Fergus
03.07.15
✎
11:09
|
(64) запись отмены проведения документа кодом
|
|||
72
Гёдза
03.07.15
✎
11:09
|
(69) Как упр блокировки уменьшат время?
|
|||
73
Гёдза
03.07.15
✎
11:09
|
покажите мне этот код, где отмена будет ВНЕ транзакции
|
|||
74
Лефмихалыч
03.07.15
✎
11:09
|
(70) результат будет отличным от (0) только, если новый набор - это старый с добавлением новых строк в конец. Любые другие изменения приведут сначала к удалению всего старого набора, потом записи нового
|
|||
75
rs_trade
03.07.15
✎
11:10
|
А для чего они отменяют проведение? Правят и перепроводят?
|
|||
76
Fergus
03.07.15
✎
11:11
|
(69) а что в 8.3 или 8.2 стало быстрее проводиться/отменяться "документы-крокоменты-гигатоныпроводок"
|
|||
77
Лефмихалыч
03.07.15
✎
11:11
|
(73) >> (59)
|
|||
78
Fergus
03.07.15
✎
11:11
|
(75) точняк
|
|||
79
Лефмихалыч
03.07.15
✎
11:14
|
(76) управляемых блокировок в 8.1 нет и многое таки стало быстрее
|
|||
80
rs_trade
03.07.15
✎
11:14
|
Обновиться не хотите? Все таки последние версии побыстрее стали.
|
|||
81
Гёдза
03.07.15
✎
11:16
|
(77) там запись, а не отмена.
И не ВНЕ транзакции, а маленькими трагзакциями |
|||
82
Fergus
03.07.15
✎
11:20
|
(80) это еще клиенту надо объяснять. Вы и сами знаете, когда конфига отработана годами, начальство не любит менять проверенный механизм на неизвестный новый - это время, деньги. Тем более вопрос довольно "узкий" есть один нехороший документ, который надо оптимизировать и ради него отваливать кучу денег на новое ПО - это не решение...
|
|||
83
mistеr
03.07.15
✎
11:23
|
(51) О, наконец-то соизволил назвать причину - обновление итогов. Можно было и пораньше.
Отключать итоги совсем не нужно, границу итогов для чего придумали? |
|||
84
rs_trade
03.07.15
✎
11:29
|
(82) в 8.3 у программиста больше штатных возможностей для оптимизации производительности
|
|||
85
asady
03.07.15
✎
11:31
|
(0) постепенно до народа стало доходить почему в буржуйских системах нет работы задним числом
|
|||
86
Fergus
03.07.15
✎
11:31
|
(83) поясните вашу мысль "отключать итоги не нужно, границу итогов для чего придумали"?
|
|||
87
Fergus
03.07.15
✎
11:32
|
(85) не согласен, буржуи тоже этим балуются
|
|||
88
asady
03.07.15
✎
11:33
|
(87) это уже влияние наших засланцев
|
|||
89
Fergus
03.07.15
✎
11:38
|
1. снизили количество проводок в документе до 10 000 записей и уже стало лучше. отмена проведения идет до 5 мин.
2. развернули на др. машине помощнее, та же байда :) интересно, до какого значения количество проводок мы дойдем, чтобы получить приемлемый результат? какие ставки господа??? |
|||
90
floody
03.07.15
✎
11:39
|
в 8.1 _есть_ упр. блокировки
|
|||
91
Гёдза
03.07.15
✎
11:39
|
на 8.3 однако значительно ускорили запись массивных наборов, правда мелкие чуть хуже стали
|
|||
92
H A D G E H O G s
03.07.15
✎
11:40
|
Я правильно понял, что проблема в запросе (63)?
|
|||
93
Fergus
03.07.15
✎
11:42
|
МодульПриложения 90 КонецПроцедуры 10 0,000027 28,35
РегистрБухгалтерии.Хозрасчетный 8 Если ОбменДанными.Загрузка Тогда 1 0,000022 22,43 РегистрБухгалтерии.Хозрасчетный 12 Если Количество()>0 Тогда 1 0,000007 6,85 РегистрБухгалтерии.Хозрасчетный 4 Если Отказ Тогда 1 0,000003 2,80 РегистрБухгалтерии.Хозрасчетный 15 Возврат; 1 0,000002 2,49 РегистрБухгалтерии.Хозрасчетный 59 КонецПроцедуры 1 0,000002 1,56 РегистрБухгалтерии.Хозрасчетный 6 КонецЕсли; 1 0,000001 0,93 РегистрБухгалтерии.Хозрасчетный 10 КонецЕсли; 1 0,000001 0,93 замеры неутешительны |
|||
94
Fergus
03.07.15
✎
11:44
|
предпоследнее значение (где 0.00002) - чистое время, последнее значение %Время(чистое)
|
|||
95
H A D G E H O G s
03.07.15
✎
11:45
|
(93) Что именно тебя неутешает?
|
|||
96
Fergus
03.07.15
✎
11:48
|
(93) санкции против России - что же еще :) Это замер при отмене проведения документа с 36482 проводками - глянь какие красивые секунды, все быстро, и четко
|
|||
97
Fergus
03.07.15
✎
11:56
|
пошли пить пиво и есть пиццу, всех с выходными, потом отпишусь, как че решим...
|
|||
98
H A D G E H O G s
03.07.15
✎
12:00
|
Я не сомневался в вас.
Захватите с собой САПеров, поржете над 1С. гыгыгы |
|||
99
mistеr
03.07.15
✎
12:01
|
(86) РегистрНакопленияМенеджер.УстановитьПериодРассчитанныхИтогов()
РегистрНакопленияМенеджер.УстановитьИспользованиеТекущихИтогов() |
|||
100
n0ther
03.07.15
✎
12:03
|
подпишусь
|
|||
102
vogenut
03.07.15
✎
12:16
|
(96) Проводить и потом распроводить 36482 записей в регистре бухгалтерии? Это или больные разработчики/архитекторы конфигурации или пользователи.
|
|||
103
vogenut
03.07.15
✎
12:19
|
(98) Ага, пусть расскажет им как он каждый день итоги пересчитывает для десятков тысяч позиций. И это тормозит, Карл! ))
|
|||
104
kiruha
03.07.15
✎
12:39
|
(0)
1. Нет. 2. Нет. Пересчет еще большее зло 3. Да 4. Не очищать, а записывать новый набор сразу с заменой старого набора, потом контроль остатков 5. Проверить всякие подписки на события на набор 6. Проверить незакрытые остатки в регистре 7. Если все это сделано - проблема в железе - увеличить память, поставить более скоростные диски 8. Нет денег на диски - делать предварительную пометку отмены проведения и далее в фоновом режиме реглламентом |
|||
105
Fergus
05.07.15
✎
19:36
|
Друзья - мы хорошо попили, поели шашлыков. Пришли в вс на работу и вот решение:
В списке формы повесили кнопку "Отмена проведения (быстро)" с таким вот обработчиком: Документ = Элементыформы.ДокументСписок.ТекущиеДанные.Ссылка; ДокументОбъект = Документ.ПолучитьОбъект(); ДокументОбъект.Проведен = Ложь; ДокументОбъект.Записать(); работает сверхбыстро, без пересчетов за доли секунды. Пробовали на документах с количеством проводок от 10 000 до 450 000. До этого перепробовали: 1. Документ = Элементыформы.ДокументСписок.ТекущиеДанные.Ссылка; ДокументОбъект = Документ.ПолучитьОбъект(); ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения); Результат отрицательный 2. ПроводкиДокумента = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(); ПроводкиДокумента.Отбор.Регистратор.Установить(Документ); ПроводкиДокумента.Прочитать(); КоличествоПроводок = ПроводкиДокумента.Количество(); Если НЕ (КоличествоПроводок = 0) Тогда ТекущаяАктивностьПроводок = ПроводкиДокумента[0].Активность; Если НЕ ТекущаяАктивностьПроводок Тогда Сообщить("Документ уже отменен"); Иначе ПроводкиДокумента.УстановитьАктивность(Ложь); ПроводкиДокумента.Записать(); КонецЕсли; КонецЕсли; Результат получше, но возникла волокита с выкл. проводками. Надо было при проведение документа вкл. проводки и дозаписывать новые проводки. 3. Connection = Новый COMОбъект("ADODB.Connection"); Connection.ConnectionString = СтрПодключения; Connection.CommandTimeout = 600; Попытка Connection.Open(); Сообщить("Подключено!"); Исключение Connection = Неопределено; Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Запрос = Новый COMОбъект("ADODB.Recordset"); Запрос.Activeconnection = Connection; Для Каждого ТС ИЗ тзТаблицыБД Цикл ТекстЗапроса = "DELETE FROM dbo._"+ТС.ИмяТаблицыБД; КонецЦикла; Попытка ТекстЗапроса = ТекстЗапроса+ОтборПоДокументу; Запрос.Open(ТекстЗапроса); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Connection = Неопределено; Результат просто супер. Единственно, что нас остановило - неодназначность с ссылочной целостностью. Движения очищаются моментально, но сразу же при переходе на другой объект выскакивает сообщения от SQL. Мы так поняли, что надо доработать этот запрос. Надо дописать доп. действия по др. таблицам SQL. 4. РегистрыБухгалтерии.Хозрасчетный.УстановитьИспользованиеИтогов(Ложь); Документ = ЭлементыФормы.ДокументСписок.ТекущиеДанные.Ссылка; ДокументОбъект = Документ.получитьОбъект(); ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения); РегистрыБухгалтерии.Хозрасчетный.УстановитьИспользованиеИтогов(Истина); Результат - удов, но вкл\выкл итогов хорошо при массовом МОНОПОЛЬНОЙ работе (например при синхронизации данных, обмен данными и в этом духе). Но для повседневной работы не годится. Всем спасибо. Тема закрыта. Надеемся кому нибудь это пригодится. |
|||
106
ДенисЧ
05.07.15
✎
19:39
|
мдя....
Вон из профессии |
|||
107
Garykom
гуру
05.07.15
✎
19:48
|
(106) не нужно обижать уже умственно обиженных
|
|||
108
ДенисЧ
05.07.15
✎
19:49
|
(107) Кто ж их обижает-то?
|
|||
109
RomanYS
05.07.15
✎
19:52
|
(105) как бы сказать... твой новый метод совсем не трогает проводки, похоже это объясняет его скорость
|
|||
110
Fergus
05.07.15
✎
19:53
|
(106)(107) я ждал этого...:), хотя! идите лесом
|
|||
111
Fergus
05.07.15
✎
19:59
|
работу сдаем в пн, результаты удов. а то что 1С УГ - ну так sap-ры предупреждали
Для вас умстевенно "наделенных" уж не знаю чем, выдержка из синтаксиса: Проведен (Posted) Использование: Чтение и запись. Описание: Тип: Булево. Содержит признак проведенности документа. Примечание: Свойство может быть изменено. Если понятие проведенности документа отличается от стандартного (проведение документа говорит от наличии движений регистров), то разработчик конфигурации предоставляет пользователям средства формирования движений, а данное свойство может быть использовано для иных, определяемых конкретной задачей, целей (например, построение специального отчета, индикации того, что данный документ уже оказывает влияние на итоговые или учетные данные, и т.д.). пойди догадайся, на что влияет это свойство и почему он работает быстрее. выше расмотренных способов. |
|||
112
ДенисЧ
05.07.15
✎
20:02
|
ой блин.... Работу они сдают...
Что-то чует моя печень, что через пару дней увидим мы тему ищу работу.... |
|||
113
Garykom
гуру
05.07.15
✎
20:06
|
(112) как бы для ТС вообще новостью будет что "проведенный" документ можно изменить и записать без "перепроведения"
если задача "убрать быстро галку проведения" то они ее выполнили на ять но если задача изменить регистры для отчетов то полный фейл |
|||
114
Fergus
05.07.15
✎
20:06
|
(112) печень пожалей, а чуйку смажь вазелином :) безработный
|
|||
115
H A D G E H O G s
05.07.15
✎
20:06
|
Бугагашеньки.
|
|||
116
Garykom
гуру
05.07.15
✎
20:07
|
(115) мне вот интересно ТС это не полном серьезе или все таки стебется?
|
|||
117
Fergus
05.07.15
✎
20:08
|
Bazinga
|
|||
118
Fergus
05.07.15
✎
20:11
|
(115) в тему: (112) это сарказм? - нет, а (106) это сарказм? - нет, и так в рекурсии :) ждем 9-й сезон ТБВ в сентябре
|
|||
119
RomanYS
05.07.15
✎
20:13
|
(111) "пойди догадайся, на что влияет это свойство и почему он работает быстрее. выше расмотренных способов."
потому, что не работает. |
|||
120
Лефмихалыч
05.07.15
✎
22:03
|
(105) сказочные вы ребята... А отчеты формировать после этого пробовали, чтобы убедиться, что движения документа очистились?
На всякий случай. Ну, мало ли?.. вдруг они, ну, скажем, не чистились?.. |
|||
121
Garykom
гуру
05.07.15
✎
22:18
|
(120) зачем? они же "программисты" а не пользователи и не тестировщики
ЗЫ да еще и походу "саперы" бывшие судя по оговорке |
|||
122
Fergus
05.07.15
✎
22:45
|
(120) да дедуля, мы же косорукие, зря хлеб свой едим. Конечно все проверили, и отчеты, и блокировки, все работает.
(120) не суди людей по себе, если ты привык делать свою работу тяп-ляп, это не значит, что и другие так работают.... |
|||
123
Fergus
05.07.15
✎
22:52
|
(122) :) "и отчеты, и блокировки, все работает" - оговорка по фрейду
блокировки как раз не работают :)) |
|||
124
Лефмихалыч
05.07.15
✎
23:03
|
(122) если после проведен = ложь очистились проводки, значит ты мне соврал, когда ответил отрицательно на вопрос, есть ли код в обработке отмены проведения и вся проблема в том, что вы реально косорукие и слепоглазые студни. Ну, или ты врешь, что движения очистились, но тогда результат тот же самый
|
|||
125
RomanYS
05.07.15
✎
23:13
|
(124) а разве при обычной записи сработает обработка отмены проведения?
|
|||
126
Лефмихалыч
05.07.15
✎
23:14
|
Хотя скорее всего кода при отмене ни какого нет и при проведен = ложь реально ни хрена ни чистится, а банда уродов из топика просто записали документ, у которого и до того движений не было или смотрят не в те отчеты
|
|||
127
Лефмихалыч
05.07.15
✎
23:14
|
(125) не сработает. Точно так же, как при записи не очистятся ни какие движения
|
|||
128
RomanYS
05.07.15
✎
23:16
|
(122) а журнал регистрации фиксирует при (105) запись регистров?
|
|||
129
birkoFFFF
05.07.15
✎
23:18
|
(125)
Если "ДокументОбъект.Записать();" то не сработает. Режим записи документа по умолчанию: Запись. |
|||
130
birkoFFFF
05.07.15
✎
23:21
|
РежимЗаписиДокумента (DocumentWriteMode)
Запись (Write) Описание: В этом случае будут сохранены изменения, внесенные в документ, и движения. |
|||
131
Armando
05.07.15
✎
23:22
|
Шашлыки походу несвежие, плюс саперы покусали.
|
|||
132
Злопчинский
05.07.15
✎
23:59
|
(12) " что в 1С есть ограничение на кол-во записей в таб. доке (9999)"
- даже в клюшках такого ограничения не было |
|||
133
Garykom
гуру
06.07.15
✎
00:59
|
(132) на кол-во строк доке в sql версии... в dbf версии глюки с нумерацией
|
|||
134
Drac0
06.07.15
✎
08:55
|
(105) мда. Весело у вас там прошли выходные.
|
|||
135
s_ustinov
06.07.15
✎
09:25
|
(0) "Есть документы, которые генерирует по 20-30 тысяс проводок. Само проведение оптимизировали, записывая проводки порциями, но вот отмена проведения занимает капец время.
.... Есть идеи? Заранее спасибо..." Сделать отдельны документы вида "Отмена проведения 1" "Повторное проведение 2" и т.д. И при отмене проведения не удалять проводки, а генерировать еще столько же проводок но с другим знаком. Проведение ведь у вас оптимизировано. :))) А ночью чистить базу. |
|||
136
Cyberhawk
06.07.15
✎
09:27
|
Хозяйке на заметку:
Особенности использования поля "Проведен" и процесса проведения http://its.1c.ru/db/metod8dev/content/2713/hdoc Конкретнее: "Изменение значения поля Проведен может выполняться и без проведения или отмены проведения. Для этого достаточно просто изменить значение поля и выполнить запись документа. При этом может получиться непроведенный документ, имеющий движения. Следует заметить, что при таком способе изменения поля Проведен не будут вызываться обработчики ОбработкаПроведения() и ОбработкаУдаленияПроведения()." |
|||
137
Drac0
06.07.15
✎
09:28
|
(136) Ты шо! Ему на слово не веришь? Он же все проверил :)
|
|||
138
piter3
06.07.15
✎
09:28
|
до шашлыков или после
|
|||
139
Cyberhawk
06.07.15
✎
09:36
|
(137) просто формулировка "может получиться" (лично мне) идет бок о бок с "а может и не получиться", но без подписки или пост-обработки не понял, как это может быть (Я проверил - открыл типовую БП 2.0, через ИР - инструменты разработчика - записал документ с выключенным флагом "Проведен", причем как в режиме "ОбменДанными.Загрузка", так и без - в обоих случаях движения остались)
|
|||
140
SeraFim
06.07.15
✎
09:36
|
Эээх... чудес не бывает)))
|
|||
141
Drac0
06.07.15
✎
09:39
|
(139) На мисте нужен смайлик "сарказм" -_-
|
|||
142
Drac0
06.07.15
✎
09:41
|
(122) "Конечно все проверили, и отчеты,"
Небось отчет собирает данные по документам, да? :) |
|||
143
kiruha
06.07.15
✎
15:32
|
Что там с автором ?
Пользователи не растерзали ? |
|||
144
kiruha
06.07.15
✎
15:52
|
Еще можно попробовать -
1) Включить режим разделения итогов 2) Снять пометку проведен 3) Снять активность всех проводок документа (в транзакции с (2)) 4) Регламентом ночью чистить регистр от неактивных проводок |
|||
145
vde69
06.07.15
✎
16:11
|
я-бы пошел таким путем
1. Перейти на 8.3.5 и перейти на управляемые блокировки (без ручных, чисто галочки поставить) 2. снять у документов режим "автоматическое удаление движений" и написать нормальный код удаления... 3. добавить озу как на скуль так и на сервер 1с, для больших транзакций память очень важна 4. потестить http://wiki.mista.ru/doku.php?id=it:analiz_sql_block потом думать... |
|||
146
Гёдза
06.07.15
✎
16:12
|
(145) Нормальный код удаления - это какой?
|
|||
147
Garykom
гуру
06.07.15
✎
16:31
|
(146) который записи "быстро удаляет"
|
|||
148
kiruha
06.07.15
✎
16:34
|
Снятие активности должно работать быстрее так как нет физического перемещения записей
|
|||
149
vde69
06.07.15
✎
16:34
|
(146) удалять можно по каждому регистру отдельно, а можно все скопом.
Можно через запись объект.движения, а можно через отбор по регистратору. кроме того не следует забывать про "последовательности" и "обмены", в них можно удалять отдельным регламентным заданием... в принцепе 20-30 тысяч проводок должны удалятся с пересчетом итогов не более 5 минут, у меня были документы (ежедневный пересчет комиссий и дебиторок) которые делали по около ляма проводок, вот тут действительно проблема была, пришлось разбивать на много документов... |
|||
150
Лефмихалыч
06.07.15
✎
16:47
|
(148) ты уверен, что снятие активности - это не запись с замещением? Проверял?
|
|||
151
kiruha
06.07.15
✎
16:55
|
(150)
Синтаксис: УстановитьАктивность(<Активность>) Параметры: <Активность> (обязательный) Тип: Булево. Признак активности записей. Истина - записи активны. Ложь - записи не активны. Описание: Устанавливает значение свойства Активность для всех записей набора. >> В SQL не смотрел, но сомневаюсь что в 1С такие идиоты что создали спец метод который в итоги делает запись с замещением |
|||
152
ХардHard
06.07.15
✎
17:01
|
(151) Интересно. Вот бы кто затестил.
|
|||
153
Лефмихалыч
06.07.15
✎
17:11
|
Кстати, 8.1 при удалении набора записей выполняет DELETE FROM по одной записи. Надо бы посмотреть, как это делает 8.3...
|
|||
154
Гёдза
06.07.15
✎
17:40
|
(149) покажи код, что быстро удалит записи регистра бухгалтерии
|
|||
155
ДенисЧ
06.07.15
✎
17:42
|
(153) Да точно так же. Ибо модуль набора записей вызывает...
|
|||
156
kiruha
06.07.15
✎
17:48
|
По активности типовой код
Процедура ИзменитьАктивностьПоРегистратору(ДокументОбъект, Отказ,ВключитьАктивность = Истина) Экспорт Для Каждого Набор ИЗ ДокументОбъект.Движения Цикл Набор.Прочитать(); Набор.УстановитьАктивность(ВключитьАктивность); Попытка Набор.Записать(); Исключение // возможно «сработал» RLS или механизм даты запрета изменения ОписаниеОшибки = ИнформацияОбОшибке(); ОбщегоНазначения.СообщитьОбОшибке(КраткоеПредставлениеОшибки(ОписаниеОшибки), Отказ, Строка(Набор)); ЗаписьЖурналаРегистрации(НСТр("ru = 'Операция не выполнена'"), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ОписаниеОшибки)); ВызватьИсключение НСтр("ru='Операция не выполнена'"); КонецПопытки; КонецЦикла; КонецПроцедуры У кого есть возможность посмотреть как в SQL - Update или нет |
|||
157
Гёдза
06.07.15
✎
18:06
|
(156) никогда наборы не делали апдейт
|
|||
158
Cyberhawk
07.07.15
✎
07:47
|
Fergus, работу клиенту сдали?
|
|||
159
vde69
07.07.15
✎
09:08
|
(146) в текущих условиях меня устраивает код выборочного удаления по регистрам см. ниже, но его можно сильно оптимизировать, правда это повлечет усложнение много чего...
Процедура УдалитьДвиженияРегистратора(ДокументСсылка, Отказ, СписокРегистровДляОчисткиДвижений = Неопределено) Экспорт ДокументОбъект = ДокументСсылка.ПолучитьОбъект(); Для Каждого Движение ИЗ ДокументОбъект.Движения Цикл Если (не СписокРегистровДляОчисткиДвижений = Неопределено) И (СписокРегистровДляОчисткиДвижений.Найти(ТипЗнч(Движение)) = неопределено) Тогда Продолжить; КонецЕсли; Движение.Прочитать(); Если Движение.Количество() > 0 Тогда ПозицияТочки = Найти(Строка(Движение), "."); ТипРегистра = Лев(Строка(Движение), ПозицияТочки - 13); ИмяРегистра = СокрП(Сред(Строка(Движение), ПозицияТочки + 1)); ЕСли ТипРегистра = "РегистрНакопления" Тогда МетаданныеНабора = Метаданные.РегистрыНакопления[ИмяРегистра]; Набор = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей(); ИначеЕсли ТипРегистра = "РегистрБухгалтерии" Тогда МетаданныеНабора = Метаданные.РегистрыБухгалтерии[ИмяРегистра]; Набор = РегистрыБухгалтерии[ИмяРегистра].СоздатьНаборЗаписей(); ИначеЕсли ТипРегистра = "РегистрСведений" Тогда МетаданныеНабора = Метаданные.РегистрыСведений[ИмяРегистра]; Набор = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); ИначеЕсли ТипРегистра = "РегистрРасчета" Тогда МетаданныеНабора = Метаданные.РегистрыРасчета[ИмяРегистра]; Набор = РегистрыРасчета[ИмяРегистра].СоздатьНаборЗаписей(); КонецЕсли; Набор.Отбор.Регистратор.Установить(ДокументСсылка.Ссылка); Попытка Набор.Записать(); Исключение Отказ = Истина; ВызватьИсключение "Операция не выполнена"; КонецПопытки; КонецЕсли; КонецЦикла; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |