gifts2017

Супер-быстрый поиск и замена значений на УФ

Опубликовал Ivan Alekseev (IvanAlekseev) в раздел Обработки - Универсальные обработки

Возможности:
1. Замена ссылок в объектах сгруппирована по самим объектам, что сильно ускоряет работу: объект 1 раз получается из БД, в нем производятся все необходимые замены после чего объект  1 раз записывается в БД.
2. Существует возможность отключения итогов во время выполнения замены ссылок, что также сильно ускоряет замену в движениях регистров.
3. Представлена возможность пометки на удаление заменяемых значений (для последующего удаления).
4. На форме расположен прогресс-бар, что позволяет оценить оставшееся время работы.
5. Предусмотрена запись объектов в режиме "Загрузка" (данная опция позволяет производить замены в некорректно введенных данных).
6. Предложена возможность отбора видов объектов, в которых будет произведен поиск ссылок. Документы (и их движения), бизнес- процессы, задачи и периодические регистры сведений также можно отобрать по периоду.
7. Реализована функциональность "точечных" замен, установкой флагов "Выбран".
8. Замена в движениях регистров происходит без перепроведения документов, что позволяет делать замены по "закрытым" периодам.

Уже существует подобная обработка, которая получает и записывает объекты при каждой замене.  Подобный подход не только сильно замедляет работу, но и в некоторых случаях приводит к некорректному результату. Например, при последовательной замене счета и вида субконто значения субконто всегда останутся очищенными. При одновременной замене значений подобной ошибки удается избежать.

Для выполнения определенных работ я пробовал использовать кем-то ранее созданную обработку, но более чем за 8 часов в БД было выполнено около 10% замен значений. Моя обработка со всеми заменами значений справляется менее, чем за 1 час.

Скачать файлы

Наименование Файл Версия Размер
Супер- быстрая замена ссылок на объекты 426
.epf 26,72Kb
03.06.15
426
.epf 1.0 26,72Kb Скачать

См. также

PowerTools от 1 000
Вознаграждение за ответ
Сумма: 1 $m
Добавили:
Владимир (Strange Device) (1.00 $m)
Подписаться Добавить вознаграждение
Комментарии
1. Сергей Старых (tormozit) 03.06.15 17:46
Не пробовал, но описаны действительно эффективные улучшения.
2. Ivan Alekseev (IvanAlekseev) 03.06.15 21:21
(1) tormozit, главное в публикации не написано: в предыдущей обработке был код- лапша, который я практически весь удалил. Теперь там пушкинские строки- можно перед сном читать без особого напряжения. Главное на расплакаться от умиления :)

Кстати, предыдущая обработка выполняла не все замены в регистре бухгалтерии (автор сам запутался в своей лапше).
dj_serega; students; aexeel; MaximStav; bogdan_sukonnov; +5 Ответить 1
3. Дмитрий Топчий (hakerxp) 03.06.15 23:09
4. На форме расположен прогресс-бар, что позволяет оценить оставшееся время работы.

Если расположен прогресс-бар, то получается что обработка должна получать данные в фоне. А это значит что обработка должна использовать ранее прописанные экспортные процедуры общих модулей. Это сужает область использования.
Иначе, прогресс-бар каждый раз лазит с сервера на клиент для отображения состояния, что неэффективно и снижает скорость работы обработки. Обработчики ожиданий не работают для считывания состояния когда форма занята работой в управляемом режиме т.к. управление уходит на сервер.
4. Андрей (h00k) 04.06.15 04:59
(3) hakerxp,
Если расположен прогресс-бар, то получается что обработка должна получать данные в фоне. А это значит что обработка должна использовать ранее прописанные экспортные процедуры общих модулей. Это сужает область использования.

ОМГ, изучите уже возможности БСП 2.2+, а то прям странно такое читать.

Подсказка: Стоит обратить внимание на ОМ ДлительныеОперации и в частности на функции ЗапуститьВыполнениеВФоне, СообщитьПрогресс, ПрочитатьПрогресс и т.д. ... ну и другие модули, с названием начинающимся с ДлительныеОперации, тоже достаточно полезны и содержат ряд интересных функций.
5. Дмитрий Топчий (hakerxp) 04.06.15 08:31
(4) h00k, эти модули где находятся? Как раз в общих модулях т.к. внешняя обработка не может запустить свой же код в фоне. Это уже много раз мной проверено. И модули "Длительные операции" так же использует запуск процесса в фоне, а потом при помощи обработчика ожидания считывают состояние. Все это справедливо для конфигураций с данными модулями.
6. Ivan Alekseev (IvanAlekseev) 04.06.15 10:24
(3) hakerxp, никаких фоновых заданий не используется. Обработка универсальная и не опирается ни на какие общие модули.
7. Дмитрий Топчий (hakerxp) 04.06.15 13:11
(6), я не смотрел код, но как же все таки Вы выкрутились с баром и его состоянием?
8. Ivan Alekseev (IvanAlekseev) 04.06.15 13:15
(7) hakerxp, на клиенте цикл по количеству шагов прогресс- бара. В цикле вызывается серверная процедура, выполняющая замены.
9. Дмитрий Топчий (hakerxp) 04.06.15 16:12
(8), я угадал) А вообще, я б в угоду скорости отказался от бара, если обработка внешняя. А так бы предусмотрел возможность использовать модули "Длительные операции", если обработка точно будет встроена в конфу.
10. Сергей Ожерельев (Поручик) 04.06.15 16:50
(0) Ты взял эту за основу - http://infostart.ru/public/91837/ ? В ней реализовано всё тоже самое, кроме п. 2., 3., 6.
11. Ivan Alekseev (IvanAlekseev) 04.06.15 16:55
(10) Поручик, да, и переписал 80% кода.

п.1 там нет.
12. Сергей (Che) Коцюра (CheBurator) 04.06.15 21:37
некузяво.
где передовой "такси" ?
пишем вещи для устаревших вещей ;-)
13. Сергей Ожерельев (Поручик) 05.06.15 07:34
(12) Опять ляпнул не в ту степь. Практически все обработки для управляемого приложения, написанные ещё для 8.2., работают в поедем на таксо в интерфейсе "такси" без переделок.
14. Дмитрий Топчий (hakerxp) 05.06.15 11:13
(13), с учетом если режим модальности не стоит "Не использовать". А так в обработке нужно предусматривать варианты работы обработки в зависимости от модальности конфигурации. Иначе будет ошибка. А так же нужна адаптация интерфейса под компоновку элементов под "такси". Следовательно, работать возможно будут вещи с 8.2, но как - это уже вопрос.
15. Ivan Alekseev (IvanAlekseev) 05.06.15 14:13
(14) hakerxp, модальные окна не используются.
16. Дмитрий Топчий (hakerxp) 05.06.15 15:34
(15), режим модальности зависит от настройки конфы пользователя, а не от вашей обработки.
17. ac86 (Aleanza) 10.06.15 08:41
Столько критики. А кто-то скачал и попробовал обработку в работе?
18. vadim vadim (fvadim) 10.06.15 15:53
на счёт супер быстро это конечно не правда. просто в некоторых случаях немного быстрее.
делал тоже самое, кроме п.6. плюс возможность заполнения чтозаменять/начтозаменять запросом.
19. Kiber_ Юрий (Kiber_) 10.06.15 17:19
А что конкретно подразумевается под отключением итогов?

P.S. Очень порадовала информация:
>> в предыдущей обработке был код- лапша, который я практически весь удалил. Теперь там пушкинские строки- можно перед сном читать без особого напряжения.
Молодец!
20. v i (vis_tmp) 14.06.15 09:37
Спасибо, отличная обработка!
21. Maximilian Alekseevich (1cmax) 24.06.15 22:05
(1) tormozit, ждем реализации алгоритма в инструментах разработчика.
22. Сергей Старых (tormozit) 25.06.15 23:58
(21) Уже реализовано все, кроме отключения итогов (опасная операция, думаю над сглаживанием углов).
23. Евгений (jk3) 28.08.15 10:11
При замене одной номенклатуры на другую, вывалилось в такую ошибку:


Платформа: 1С:Предприятие 8.3 (8.3.5.1596)
Конфигурация: Управление торговлей, редакция 11.1 (11.1.10.145) (http://v8.1c.ru/trade/)
--------------------------------------------------------------------------------
28.08.2015 0:31:07
{ВнешняяОбработка.ПоискИЗаменаЗначений.МодульОбъекта(13)}: Ошибка при вызове метода контекста (Содержит)
Если Метаданные.Константы.Содержит(МетаданныеГдеЗаменять) Тогда
по причине:
Несоответствие типов (параметр номер '1')
24. Сергей (СержТ) 10.01.16 01:31
Спасибо, обработка помогла исправить косяки 1с при переносе адресов из ЗУП 2, ЗиКБУ 1 в ЗУП 3 и ЗКГУ 3 на версиях от 30.12.15
25. Илья Вышинский (thelans) 10.02.16 17:17
(23) jk3, А ошибку последнюю исправили в этой обработке или она не воспроизводится?
26. Александр Андрющенко (anderson) 19.04.16 23:17
Понадобилась данная обработка, но для планов видов расчета. Чуть-чуть добавил в процедуру ВыполнитьЗаменуЗначений


	ИначеЕсли СтруктураОбъекта.ПланыВидовРасчета Тогда
		
		Для Каждого СтандартнаяТабличнаяЧасть Из МетаданныеГдеЗаменять.СтандартныеТабличныеЧасти Цикл
			ТабличнаяЧасть 			= ОбъектГдеЗаменять[СтандартнаяТабличнаяЧасть.Имя];
			СтрокиСЧтоЗаменять 		= ТабличнаяЧасть.НайтиСтроки(Новый Структура("ВидРасчета", ЧтоЗаменять));
			СтрокиСНаЧтоЗаменять 	= ТабличнаяЧасть.НайтиСтроки(Новый Структура("ВидРасчета", НаЧтоЗаменять));
			
			Если СтрокиСЧтоЗаменять.Количество() > 0 И СтрокиСНаЧтоЗаменять.Количество() = 0 Тогда 
				Для Каждого СтрокаСЧтоЗаменять Из СтрокиСЧтоЗаменять Цикл
					СтруктураОбъекта.ОбъектГдеЗаменятьНадоЗаписывать = Истина;
					СтрокаСЧтоЗаменять.ВидРасчета = НаЧтоЗаменять;
				КонецЦикла;
			ИначеЕсли СтрокиСЧтоЗаменять.Количество() > 0 И СтрокиСНаЧтоЗаменять.Количество() > 0 Тогда 
				Для Каждого СтрокаСЧтоЗаменять Из СтрокиСЧтоЗаменять Цикл
					СтруктураОбъекта.ОбъектГдеЗаменятьНадоЗаписывать = Истина;
					ТабличнаяЧасть.Удалить(СтрокаСЧтоЗаменять);
				КонецЦикла;
			КонецЕсли;
		КонецЦикла;
		
		ЗаменитьРеквизитыИТабличныеЧасти(ЧтоЗаменять, НаЧтоЗаменять, СтруктураОбъекта);

...Показать Скрыть


Автору спасибо
27. Осипов Сергей (fixin) 14.05.16 00:42
(2) да, типовой код в этой обработке был таким, что без слез не взглянешь. Если реально переписал, то красаучык. Сейчас скачаю, протестирую.

Да, поюзал, недурно-с. Молодец.
28. Осипов Сергей (fixin) 14.05.16 01:25
(6) (3) Вместо кривых фоновых процессов можно просто тупо запустить в отдельном окне 1С, ;-)
главное, чтобы работала
29. Дмитрий Топчий (hakerxp) 14.05.16 11:34
В 1 пункте про группировку по объектам при замене ссылок - не вижу смысл группировать т.к. при замене ссылок человек обычно выбирает ссылки одного типа. В объектах врядли будут дубли реквизитов с одинаковыми ссылками. Следовательно, скорость замены останеться прежней, верно?
30. Anastasiya Surmach (SurmachAU) 04.09.16 22:20
Запускаю обработку в 1С Розница 2.2.4.17 (платформа 8.3.8.1964) и не могу выбрать для замены Номенклатуру. Может я не правильно поняла суть обработки?
31. Ivan Alekseev (IvanAlekseev) 22.09.16 19:22
(30) SurmachAU, в Рознице у справочника "Номенклатура" установлено представление объекта "Позиция номенклатуры". Поэтому первоначальный выбор необходимо выполнять по этому представлению.
32. Ivan Alekseev (IvanAlekseev) 22.09.16 19:24
(29) hakerxp, например, изменение номенклатуры в документах, где она используется в строках табличной части.
33. Anastasiya Surmach (SurmachAU) 23.09.16 20:38
(31) IvanAlekseev, Спасибо) проверила, все хорошо, очень нужна такая обработка для исправления с работой РИБ
34. Игорь Милославский (ikm) 25.09.16 12:53
Получил ошибку, аналогичную (23).
Клиент-сервер, три строки поиска.
Попробовал в отладчике по одной строке... и всё отработало.
35. Ivan Alekseev (IvanAlekseev) 30.09.16 10:26
(34) ikm, (23) jk3,

Посмотрел код на возможность ошибки. Платформа получает таблицу значений при поиске ссылок и именно значение из этой таблицы не соответствует типу. Так что простым просмотром кода ошибки не вижу. Поэкспериментировал- все отлично заменяется.

Можете на какой- нибудь демке привести конкретный пример?
36. Владимир (Strange Device) 25.11.16 19:57
Спасибо. Сильно облегчили работу. Работает даже там, где не работают типовые обработки от 1С, в частности, видит и заменяет те реквизиты, которые просто не видны при отключенных функциональных опциях, что доставило мне немало геморроя.