Поиск дублей и замена ссылок пожелание
|
|
Elgrego | Дата: Вторник, 27.03.2018, 13:42 | Сообщение # 1 |
Лейтенант
Группа: Проверенные
Сообщений: 57
Репутация: 59
Статус: Оффлайн
| Суть предложения в следующем: Очень полезно будет производить обход найденных объектов из таблицы ссылающихся объектов (колонка "Ссылающийся объект") иерархически, по каждому ссылающемуся объекту отдельно. Т.е. выполнять замену ВСЕХ заменяемых ссылок сразу по объекту. Например, у нас есть документ с табличной частью "Документы основания". В этой табчасти находится 100 документов оснований, половина из которых требует замены ссылок на другой документ-основание. В данный момент обработка замены будет записывать один и тот же объект 50 раз (при подмене каждой ссылки в табчасти документов оснований). Я предлагаю организовать цикл таким образом, чтобы переписывать один объект, в котором требуется подменить много ссылок, в одной транзакции записи. Это же касается и наборов записей регистров, связанных с объектом для перезаписи. Понимаю, что ваш код и без этого сложен. Однако, если Вам удастся это сделать, то скорость замены в таких ситуациях может возрасти в несколько раз.
|
|
| |
tormozit | Дата: Вторник, 27.03.2018, 20:52 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 6387
Репутация: 165
Статус: Оффлайн
| Цитата Elgrego ( ) Очень полезно будет производить обход найденных объектов из таблицы ссылающихся объектов (колонка "Ссылающийся объект") иерархически, по каждому ссылающемуся объекту отдельно. Т.е. выполнять замену ВСЕХ заменяемых ссылок сразу по объекту. Именно так код и делает. Почему ты предположил, что это не так?
|
|
| |
Elgrego | Дата: Среда, 28.03.2018, 09:13 | Сообщение # 3 |
Лейтенант
Группа: Проверенные
Сообщений: 57
Репутация: 59
Статус: Оффлайн
| По своему конкретному случаю. У меня в данную обработку попали 3100 ссылок для замены. Примерно 1500 из них приходились на один и тот же объект. Замена ссылок происходила около 3-х часов. Причем, первые 2 часа прогнозируемое время выполнения было 12 часов, а затем резко снизилось. После этого я открыл код Вашей обработки меня смутила вот эта группировка в строке 222 формы:
СтрокаГруппировок = "Метаданные,Данные";
Судя по коду, именно по ней идет обход.
PS Данный вывод был сделан после 10-минутного анализа кода. М.б. я ошибся, но очень похоже, что нет.
|
|
| |
tormozit | Дата: Среда, 28.03.2018, 22:46 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 6387
Репутация: 165
Статус: Оффлайн
| Все изложенные тобой наблюдения говорят о том, что каждый объект обходится однократно. 1. Индикатор оставшейся длительности выполнения долго не обновлялся из-за обработки большого объекта, в котором было 1500 ссылок. Как только обработка этого объекта завершилась, произошел переход к следующему объекту и очередной пересчет оставшейся длительности. Поэтому резко упала оставшаяся длительности, т.к. среднее время обработки объекта резко упало. 2. Группировка таблицы ссылающихся объектов по "Метаданные,Данные" говорит, что нас интересуют только уникальные ссылающиеся объекты (Данные). Далее в коде выполняется обход этих уникальных объектов, т.е. каждый объект обходится и записывается однократно.
Если у тебя остались сомнения, то попробуй отладчиком прошагать этот код или хотя бы сделать замер производительности. Если и это не поможет развеять сомнения, то приведи более весомые доказательства своего предположения.
|
|
| |
Elgrego | Дата: Четверг, 29.03.2018, 08:15 | Сообщение # 5 |
Лейтенант
Группа: Проверенные
Сообщений: 57
Репутация: 59
Статус: Оффлайн
| Вам не кажется странным, что на обработку одного объекта ушло 2 часа, а на обработку оставшихся полутора тысяч ушел всего час?
|
|
| |
tormozit | Дата: Четверг, 29.03.2018, 21:45 | Сообщение # 6 |
Генералиссимус
Группа: Администраторы
Сообщений: 6387
Репутация: 165
Статус: Оффлайн
| К сожалению представленной тобой информации не достаточно, чтобы делать вывод о странности. Я допускаю что в коде имеются неоптимальности, но чтобы их увидеть, нужно хотя бы иметь замер производительности желательно с описанием входных данных.
Твое желание улучшить инструмент похвально, но начинать все таки полезнее всего с описания способа воспроизведения проблемы, особенно когда нет уверенности в ее причине.
|
|
| |
Elgrego | Дата: Пятница, 30.03.2018, 16:06 | Сообщение # 7 |
Лейтенант
Группа: Проверенные
Сообщений: 57
Репутация: 59
Статус: Оффлайн
| Прикладываю файл с замером времени, а также список ссылающихся объектов. В примере была произведена замена 235 ссылок в 55 найденных объектах и одном регистре сведений. Основные просадки идут при чтении/записи регистров. Не совсем понятно откуда взялось 1806 чтений наборов записей, если в регистры пишут только документы двух видов: ПоступлениеТоваровУслуг и СписаниеСРасчетногоСчета. Первый двигает 2 регистра, второй один. Остальные документы не делают движений совсем...
|
|
| |
tormozit | Дата: Пятница, 30.03.2018, 23:30 | Сообщение # 8 |
Генералиссимус
Группа: Администраторы
Сообщений: 6387
Репутация: 165
Статус: Оффлайн
| В твоем примере 56 различных документов и 100 записей независимых регистров содержат ссылки, подлежащие замене. В строке 11448 вызов метода Записать выполняется 56 раз (по всей видимости каждый документ записывается). В строке 171 вызов метода Записать выполняется 42 раза для регистров, часть из которых являются движениями этих документов и остальные - записи независимых регистров. Всего запись вызывается 98 раз.
В строке 750 выполняется 1806 чтений наборов записей, куда попадают все возможные движения и последовательности всех 56 документов и все найденные записи независимых регистров. Для всех видов найденных документов - Акт сверки расчетов с контрагентом - Книга покупок/продаж (филиалы) - Поступление (акт, накладная) - Списание с расчетного счета прошу предоставить отчет по движениям и последовательностям из метаданных, т.е. список регистров, которые эти типы документов могут двигать, и последовательностей, в которые они могут входить.
Замер удобнее предоставлять в виде родного файла ppf . А если предоставляешь в виде картинки, то хотелось бы видеть не только с флажком "Для вызова процедур и Функций включать время выполнения" и но и без него. Также было бы полезно предоставить информацию для технической поддержки ( http://devtool1c.ucoz.ru/forum/2-2-1 ).
|
|
| |
tormozit | Дата: Воскресенье, 01.04.2018, 23:08 | Сообщение # 9 |
Генералиссимус
Группа: Администраторы
Сообщений: 6387
Репутация: 165
Статус: Оффлайн
| Благодаря нашему обсуждению, в версии 4.45 оптимизировал чтение движений документов при выполнении замены.
Также для ускорения обработки объектов рекомендую попробовать выключить флажок "Объекты на сервере". Если с отключенным флажком ошибок не возникает, то лучше его не включать чтобы не выполнять лишние вычисления.
|
|
| |
Elgrego | Дата: Понедельник, 02.04.2018, 12:11 | Сообщение # 10 |
Лейтенант
Группа: Проверенные
Сообщений: 57
Репутация: 59
Статус: Оффлайн
| Движения по метаданным: 1. Акт сверки расчетов - как я и говорил движений не делает совсем. В последовательности не входит; 2. Книга покупок/продаж (филиалы) - тоже; 3. Поступление (акт, накладная) - может двигать 46 регистров один из которых регистр бухгалтерии. Входит в пять последовательностей. Все последовательности не перемещают границы и не имеют движений, влияющих на последовательность. 4. Списание с расчетного счета - может двигать 34 регистра. Входит в пять последовательностей. Все последовательности не перемещают границы и не имеют движений, влияющих на последовательность. Во вложении отчет по указанным объектам. Спасибо за оперативное реагирование.Добавлено (02.04.2018, 12:11) --------------------------------------------- К сожалению, после обновления подсистемы на 4.45 в момент проведения замены появляются ошибки: 1.{Обработка.ирИмитаторСсылочныйОбъект.МодульОбъекта(134)}: Поле объекта не обнаружено (ДополнительныеСвойства) 2. Ошибка обработки ссылающегося объекта InformationRegisterRecordSet.ДанныеПервичныхДокументов(Организация:CatalogRef.Организации(4ee92b07-29d3-4ee2-8366-05e8504427f7), Документ:DocumentRef.ПоступлениеТоваровУслуг(18749c21-f7e3-11e6-805a-00505686e22c)): {Обработка.ирИмитаторНаборЗаписей.МодульОбъекта(132)}: Поле объекта не обнаружено (ДополнительныеСвойства) М.б. подскажете как лучше исправить?
|
|
| |
tormozit | Дата: Понедельник, 02.04.2018, 21:59 | Сообщение # 11 |
Генералиссимус
Группа: Администраторы
Сообщений: 6387
Репутация: 165
Статус: Оффлайн
| Elgrego, ошибки (в данном случае явная) следует описывать в другом разделе форума http://devtool1c.ucoz.ru/forum/2 . Проблема исправлена в 4.46
|
|
| |
Elgrego | Дата: Вторник, 03.04.2018, 16:15 | Сообщение # 12 |
Лейтенант
Группа: Проверенные
Сообщений: 57
Репутация: 59
Статус: Оффлайн
| Про ошибки буду иметь ввиду. Еще раз спасибо за оперативность. Скорость замены ссылок выросла ровно в 2 раза. Проверял на том же примере.
|
|
| |