Замена текстов модулей внешних обработок

09.12.13

Разработка - Инструментарий разработчика

Иногда возникает необходимость заменить вызовы процедур или функций во внешних обработках на новые. Если количество обработок мало, то сложностей, как правило, не возникает, но что делать, если их сотни? Предлагаю свой вариант решения проблемы.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
ЗаменаТекстовМодулейВнешнихОбработок.epf
.epf 109,82Kb ver:1.2
163 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Введение.

Думаю, каждый разработчик 1С хоть раз в своей практике сталкивался с задачей замены вызовов процедур и функций в модулях внешних обработок на новые.

К сожалению, 1С не предоставила удобного инструмента для подобных случаев: фактически, доступна лишь глобальная замена, пользоваться которой - при наличии у вас большого числа обработок - то еще мучение.

Недавний релиз ЗУП, в котором произошла массовая миграция процедур и функций из модуля ОбщегоНазначения в модуль ОбщегоНазначенияЗК, заставил меня задуматься об автоматизации процесса и в результате была написана обработка, позволяющая по  словарю замен выполнить все требуемые действия.

Благодарности.

Обработка основана на V8Unpack (//infostart.ru/public/15695/), автору которого выражаю мою искреннюю благодарность.

История версий.

 Версия 1.1 от 20.11.2013 г - изменен алгоритм замены в текстах модулей, добавлена поддержка управляемых форм. Добавлена возможность помещать в папку результата только измененные обработки.

 Версия 1.2 от 29.11.2013 г - добавлена возможность замены текстов без учета регистра. Исправлены выявленные проблемы.

Пошаговая инструкция.

1. Выгрузка внешних обработок

На данном этапе производится выгрузка обработок из справочника "Внешние обработки" в каталог для их дальнейшей обработки.

В случае, если у вас уже есть каталог с обработками, то можете сразу переходить к шагу №2.

Для выгрузки обработок из базы, следует воспользоваться  кнопкой "Выгрузить" на панели действий формы.

Предварительно, требуется указать путь для сохранения внешних обработок (в разделе "Путь к внешним обработкам"). После выгрузки, система выдаст предупреждение об окончании процесса.

Внимание! Данный шаг доступен только для тех конфигураций, где есть справочник "Внешние обработки"; во всех остальных конфигурациях  выгрузка будет невозможна.

Алгоритм выгрузки позаимствован из обработки с ИТС "КонвертацияВнешнихОбработок".

 выгрузка обработок

2. Выбор внешних обработок

На этом шаге, в разделе "Путь к внешним обработкам", требуется указать каталог с файлами внешних обработок (способ конвертации "Все файлы из каталога"), либо выбрать конкретную обработку для проведения замены текстов (способ конвертации "Выбранный файл")

3. Заполнение словаря замен

Для того, чтобы система знала, что и на что необходимо заменить в текстах модулей внешних обработок, в разделе "Словарь замен" требуется указать необходимое количество заменяемых строк и их новых значений.

Словарь также можно сохранить в файл/прочитать из файла (текстовый формат) для дальнейшего использования.

 словарь замен

 4. Замена строк

На данном этапе в модулях выбранных на шаге №2 внешних обработок производится замена подстрок, согласно словарю замен.

Для начала процесса, требуется указать путь для сохранения измененных внешних обработок (в разделе "Путь для сохранения результатов работы обработки") и нажать кнопку "Замена текстов" на панели действий формы.

После окончания процесса, система выдаст предупреждение.

Внимание! Обработки в исходном каталоге не изменяются, результат сохраняется в отдельный каталог!

 Замена текстов

 5. Проверка результата (опционально)

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

Проверка запускается при нажатии на кнопку "Проверить" на панели действий формы; анализируются обработки в каталоге, указанном в разделе  "Путь для сохранения результатов работы обработки" 

Сразу скажу, что никакого глубокого анализа нет: производится простая попытка создать экземпляр внешней обработки из изменного файла, а возникающие ошибки выводятся в окно сообщений.

6. Загрузка внешних обработок в ИБ.

На данном этапе производится загрузка измененных обработок из каталога, указанного в разделе  "Путь для сохранения результатов работы обработки" в справочник "Внешние обработки".

Для загрузки обработок в базу, следует воспользоваться  кнопкой "Загрузить" на панели действий формы.

После загрузки, система выдаст предупреждение об окончании процесса.

Внимание! Данный шаг доступен только для тех конфигураций, где есть справочник "Внешние обработки"; во всех остальных конфигурациях  загрузка будет невозможна!

Алгоритм загрузки позаимствован из обработки с ИТС "КонвертацияВнешнихОбработок".

Загрузка

Заключение.

Надеюсь, обработка окажется полезной в нелегкой работе разработчиков 1С.

Спасибо за внимание.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Инструментарий разработчика Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Просмотр структуры и данных информационных баз 1С:Предприятие 8.2, 8.3. Состав, типы объектов, табличных частей, движений. Размер, структура хранения объекта. Для администраторов и разработчиков. Версия 1 - на обычных формах, версия 2 - на управляемых.

1 стартмани

11.07.2016    41924    162    o.nikolaev    17    

36

Инструментарий разработчика Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Вот уже много лет я использую замечательный инструмент для работы с запросами - Запросник. Однако, с переходом на управляемые формы для его использования пришлось запускать базы в устаревшем толстом клиенте, да еще и разрешать в свойствах конфигурации использование обычных форм. В 2014 году появился запросник на управляемых формах, который, к сожалению, оказался несовершенен из за ограничений платформы. Самое неприятное из них - отсутствие подсветки синтаксиса. Мне кажется, что я нашел решение этой проблемы.

1 стартмани

19.04.2016    52842    276    1С_Мастер    42    

32

Инструментарий разработчика Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Предлагаемая в работе обработка включает обычную и управляемую формы, которые максимально точно реализуют функциональность системного диалога выбора типа в толстом клиенте обычное приложение (включая оформление диалога). Эти формы имеют дополнительные интерфейсные удобства и могут быть использованы в качестве альтернативных диалогов выбора типа.

1 стартмани

17.02.2016    73470    70    yuraos    21    

53

Инструментарий разработчика Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Яндекс.Деньги теперь в 1С. Форма для приема благотворительных взносов. Форму легко сделать и вставить на любую страницу сайта или блога. Платежи будут приходить на ваш кошелек. На форме есть три способа платежа: из кошелька, с банковской карты, с баланса мобильного.

1 стартмани

16.02.2016    33681    8    Tatitutu    5    

17

Инструментарий разработчика Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Зарплата и Управление Персоналом 2.5 1С:Управление торговлей 10 1С:Управление производственным предприятием Абонемент ($m)

Вы внедряете обмен данными между двумя типовыми или основанными на типовых БД и вам необходим инструмент, чтобы сопоставить между собой справочники этих конфигураций? Вы хотите навести порядок в обмене данными, потому что вам надоело вылавливать дублирующиеся объекты? Вам очень хочется перепоручить сопоставление объектов обменивающихся баз пользователям, но нет подходящего и понятного пользователям интерфейса? Тогда вам нужна именно эта обработка!

4 стартмани

11.11.2015    55102    121    catsam    8    

23

Инструментарий разработчика Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Незаменимый инструмент администратора БД и программиста: Выполняйте произвольный код из режима 1С Предприятие; сохраняйте/загружайте часто используемые скрипты; выполняйте запросы с замером производительности запроса в целом и каждой из временных таблиц в частности, а также с просмотром содержимого временных таблиц; произвольным образом изменяйте любые объекты БД, редактируя даже не вынесенные на формы реквизиты и записывая изменения в режиме "ОбменДанными.Загрузка = Истина"; легко узнавайте ИД объектов БД; выполняйте прямые запросы к SQL с замером производительности и не только!

5 стартмани

10.11.2015    50524    80    catsam    11    

72

Инструментарий разработчика Системный администратор Программист 1С:Предприятие 8 Абонемент ($m)

Обработка для настройки, тестирования и использования с предустановками для 3-х сервисов. Текст модуля для внедрения в конфигурацию или другие обработки. Уведомления на телефон, компьютер, браузер.

1 стартмани

18.08.2015    38622    46    anig99    1    

25
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4612 20.05.13 16:06 Сейчас в теме
(0) Такое впечатление, будто я уже видел работу на инфостарте.
4. nreisende 206 21.05.13 11:26 Сейчас в теме
(1)(2) Когда доступен такой мощный инструмент, как v8unpack - написать подобную обработку не представляет какой-то запредельной сложности - было бы желание, поэтому не исключаю, что кроме моей, есть другие похожие работы. Более того, был бы очень удивлен, если бы никто на это не сподобился. Мою публикацию можно рассматривать, как один из возможных вариантов решения озвученной задачи.
(3) По указанной ссылке, автор предлагает с помощью глобальной замены вручную обрабатывать каждую строку таблицы замен. Кому как, а мне жалко своего времени: ведь мало того, что процесс завязан на ручной ввод, он еще и длительный по времени (кто заменял - поймет). С помощью моей обработки все можно сделать автоматически, что, поверьте, гораздо веселее (например, для ЗУПа словарь замен составлял несколько десятков позиций, обработок в базе у меня было около 300 - попробуйте вручную все заменить, убьете полдня, а то и больше).
2. TrinitronHome 20.05.13 19:58 Сейчас в теме
я тоже читал что-то похожее на эту тему
5. MaxS 3137 22.05.13 08:34 Сейчас в теме
Поставил плюс, возьму для примера с чего оттолкнутся.
С управляемыми формами работает? Текст модулей УФ меняет?
9. nreisende 206 03.06.13 09:24 Сейчас в теме
(5)(8) С управляемыми формами пока не работает. Постараюсь сделать в ближайшее время и обновить публикацию.
6. help1Ckr 22.05.13 11:15 Сейчас в теме
хорошая идея.Можно использовать для упрощения создания ВПФ
7. serega3333 22.05.13 13:00 Сейчас в теме
отличная вещь, когда-то тоже задумывался на этот счет, спасибо!
8. serg1983 21 31.05.13 16:38 Сейчас в теме
а для управляемого приложения есть такая же обработка, мне код интересен
10. Evil Beaver 8425 20.06.13 11:21 Сейчас в теме
Делаю тот же функционал, но на базе http://infostart.ru/public/176775/. Подпишусь на тему. Если функционал будет востребован, продолжу, если нет - брошу
11. Evil Beaver 8425 20.06.13 11:22 Сейчас в теме
Хаха! Вот же оно http://infostart.ru/public/182699/. Все что нужно, да еще и типовыми средствами.
12. nreisende 206 21.06.13 09:55 Сейчас в теме
(11) см. мой комментарий в посте (4), обращенный к (3).
13. Evil Beaver 8425 21.06.13 11:06 Сейчас в теме
(12) да-да, безусловно для групповой замены типовые средства не подходят. Просто я про них вообще не знал, вот и обрадовался. Мне редко бывает нужно менять сразу много всего во внешних файлах.

Ну и еще, как вариант, есть скрипты типа AutoIt, которые записывают нужные клики и типовыми средствами стопицот раз прогоняют нужную замену ;)
14. Pawlick 10 19.08.13 10:40 Сейчас в теме
Вопрос:
а возможно ли с помощью этой утилиты заменить во внешней обработке макет?
16. nreisende 206 20.11.13 10:48 Сейчас в теме
Добавил поддержку управляемых форм.

(14) Pawlick, нет, изменить или удалить макет с помощью этой обработки нельзя. Рекомендую ознакомится с инструментами типа v8unpack для подобных целей.
15. Pawlick 10 19.08.13 10:43 Сейчас в теме
17. Nordgreen 27.11.13 16:43 Сейчас в теме
18. 7OH 90 30.11.13 02:49 Сейчас в теме
Спасибо. Приспособил к своей разработке ВЫПОЛНИТЬ. Теперь могу делать Выполнить() с отладкой.
19. Sabfir 20.08.14 12:46 Сейчас в теме
Жаль, что с помощью обработки нельзя заменить тип реквизита обработки и тип элементов на форме.
Очень было бы полезно доработать это.
20. irreal 32 04.12.15 13:19 Сейчас в теме
Хорошая вещь, особенно когда у тебя несколько баз и франчи наплодили в них целый зверинец этого зла. Единственное, файлы могут также лежать в табчасти Принадлежность справочника (в УПП, по крайней мере, есть такая). Поэтому слегка дописал, выгрузка:

	// {CORRECTION 04.12.2015 12:35:45 Лазарев: файлы могут храниться в табчасти справочника
	// current:
	Если НЕ Метаданные.Справочники.ВнешниеОбработки.ТабличныеЧасти.Найти("Принадлежность") = Неопределено Тогда
		Запрос.Текст =
		"ВЫБРАТЬ
		|	Шапки.Ссылка,
		|	Шапки.ВидОбработки,
		|	ВЫБОР
		|		КОГДА Шапки.ВидОбработки = ЗНАЧЕНИЕ(Перечисление.ВидыДополнительныхВнешнихОбработок.Отчет)
		|			ТОГДА "".erf""
		|		ИНАЧЕ "".epf""
		|	КОНЕЦ КАК Расширение,
		|	Табчасти.НомерСтроки,
		|	Табчасти.ХранилищеВнешнейОбработки
		|ИЗ
		|	Справочник.ВнешниеОбработки.Принадлежность КАК Табчасти
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВнешниеОбработки КАК Шапки
		|		ПО Табчасти.Ссылка = Шапки.Ссылка";
		
		Если Не ПустаяСтрока(ТекстГде) Тогда
			Запрос.Текст = Запрос.Текст + "
			|ГДЕ " + ТекстГде;
		КонецЕсли;
		
		Выборка = Запрос.Выполнить().Выбрать();
		Пока Выборка.Следующий() Цикл
			
			ДвоичныеДанные = Выборка.ХранилищеВнешнейОбработки.Получить();
			Если ДвоичныеДанные = Неопределено Тогда
				Продолжить;
			КонецЕсли;
			ИмяФайла = ПутьКФайлу + "\" + Выборка.Ссылка.УникальныйИдентификатор() + "$" + Формат(Выборка.НомерСтроки,"ЧГ=0") + Выборка.Расширение;
			ДвоичныеДанные.Записать(ИмяФайла);
			
		КонецЦикла;
		
	КонецЕсли;	
	// }CORRECTION 04.12.2015 12:35:45 Лазарев.
Показать

Загрузка:


			// {CORRECTION 04.12.2015 12:47:45 Лазарев:
			// current:
			ФайлИмяБезРасширения = СокрЛП(Файл.ИмяБезРасширения);
			поз = Найти(ФайлИмяБезРасширения,"$");
			Если поз Тогда
				Ссылка = Справочники.ВнешниеОбработки.ПолучитьСсылку(Новый УникальныйИдентификатор(Лев(ФайлИмяБезРасширения, поз-1)));
				НомерСтроки = Число(Прав(ФайлИмяБезРасширения, СтрДлина(ФайлИмяБезРасширения) - поз));
				Ссылка = Справочники.ВнешниеОбработки.ПолучитьСсылку(Новый УникальныйИдентификатор(Файл.ИмяБезРасширения));
				Если Не ПустаяСтрока(Ссылка.ВерсияДанных) Тогда
					Обработка = Ссылка.ПолучитьОбъект();
					Обработка.Принадлежность[НомерСтроки-1].ХранилищеВнешнейОбработки = Новый ХранилищеЗначения(Новый ДвоичныеДанные(Файл.ПолноеИмя));
					Обработка.Записать();
					ЗагруженХотябыОдинФайл = Истина;
				Иначе
					Сообщить("Ошибка загрузки файла (объект не найден): "+Файл.ПолноеИмя, СтатусСообщения.Важное);
				КонецЕсли;
				Продолжить;
			КонецЕсли;	
			// }CORRECTION 04.12.2015 12:47:45 Лазарев.
Показать
21. toypaul 64 10.01.18 13:59 Сейчас в теме
Управляемые формы некорректно разбирает. И на больших УФ к тому же еще и думает долго...
user1804809; +1 Ответить
Для отправки сообщения требуется регистрация/авторизация