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

Обработки - Универсальные обработки

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

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

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

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

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

См. также

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

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

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

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

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

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

P.S. Очень порадовала информация:
>> в предыдущей обработке был код- лапша, который я практически весь удалил. Теперь там пушкинские строки- можно перед сном читать без особого напряжения.
Молодец!
20. v i (vis_tmp) 27 14.06.15 09:37 Сейчас в теме
Спасибо, отличная обработка!
21. Maximilian Alekseevich (1cmax) 151 24.06.15 22:05 Сейчас в теме
(1) tormozit, ждем реализации алгоритма в инструментах разработчика.
22. Сергей Старых (tormozit) 4273 25.06.15 23:58 Сейчас в теме
(21) Уже реализовано все, кроме отключения итогов (опасная операция, думаю над сглаживанием углов).
23. Евгений (jk3) 65 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) 26 10.02.16 17:17 Сейчас в теме
(23) jk3, А ошибку последнюю исправили в этой обработке или она не воспроизводится?
26. Александр Андрющенко (anderson) 184 19.04.16 23:17 Сейчас в теме
Понадобилась данная обработка, но для планов видов расчета. Чуть-чуть добавил в процедуру ВыполнитьЗаменуЗначений


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

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


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

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

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

Можете на какой- нибудь демке привести конкретный пример?
36. Владимир (Strange Device) 305 25.11.16 19:57 Сейчас в теме
Спасибо. Сильно облегчили работу. Работает даже там, где не работают типовые обработки от 1С, в частности, видит и заменяет те реквизиты, которые просто не видны при отключенных функциональных опциях, что доставило мне немало геморроя.
37. script Мальчинко (script) 196 20.01.17 13:15 Сейчас в теме
У меня с константами какая-то проблема
{ВнешняяОбработка.ПоискИЗаменаЗначений.МодульОбъекта(13)}: Ошибка при вызове метода контекста (Содержит)
Если Метаданные.Константы.Содержит(МетаданныеГдеЗаменять) Тогда
по причине:
Несоответствие типов (параметр номер '1')

В комментах пишут про эту ошибку.
Я так понимаю что ее не исправили?
38. Ivan Alekseev (IvanAlekseev) 64 24.01.17 17:07 Сейчас в теме
Ребята, я решил больше не заниматься 1с. Сейчас изучаю С++, буду выполнять анализ сложных данных или что-то другое интересное (например, физическое моделирование). В 1с у меня нет ощущения первооткрывателя, познания истины, творчества в работе...

Поэтому если кто-то опубликует эту обработку с исправлением текущих ошибок, и возьмется за ее последующую поддержку, то я буду только благодарен этому человеку. В день с нее капает примерно полбакса :)
39. Роберт В е р т и н с к и й (v3rter) 24.01.17 17:13 Сейчас в теме
То есть разрешаете форкать Вашу обработку?

Со временем компьютерство перестает дарить ощущения творчества-развития и становится ремеслом. Более того, оказывается, что технологии развиваются по принципу "приведи в дом козу - выведи из дома козу". Ходят по кругу. И чтобы "оставаться на месте, приходится бежать"(с), попутно изучая тонны безсмысленных и безпощадных обновлений, изменений и дополнений, без которых упадет общая сложность технологий капитализация отрасли, и которые через 3-5 лет обесцениваются до нуля. В каком-то смысле это можно считать инфляцией знаний. Будьте морально готовы. А пока есть время и развитие мотивирует - дерзайте )
40. Дмитрий Топчий (hakerxp) 756 24.01.17 17:50 Сейчас в теме
(38), я бы с вами поспорил по поводу
"
В 1с у меня нет ощущения первооткрывателя, познания истины, творчества в работе...
". Удачи вам в начинаниях!
Оставьте свое сообщение