Часто приходится однотипным образом обрабатывать модули объектов 1С 80 (форм, документов, справочников и т.п.), чтобы над всеми ими выполнить однотипную операцию.
Нам понадобилось обработать все формы журналов и списков документов в УПП, чтобы вставить в журналы и списки документов некоторые действия, а некоторые действия сделать доступными только в зависимости от наличия прав пользователя.
Для целей несложной обработки текстов модулей (парсинга) была написана простая обработка.
Функции обработки:
Структура маркера:
Маркер начала имеет структуру: //{[ПоставщикЗамены][пробел][ИмяЗамены]
Маркер конца имеет структуру: //}[ПоставщикЗамены][пробел][ИмяЗамены]
Где:
· ПоставщикЗамены – любой идентификатор, в качестве которого удобно использовать название фирмы, которая вносит изменения в конфигурацию, например BESTFRAN4;
· ИмяЗамены – идентификатор конкретно данной замены.
Поиск и замены происходит в два прохода. На первом проходе текст модуля рассматривается как обычный неструктурированный плоский текст. Для каждой замены пробуем найти помеченные маркером участки замены и заменить на новое содержимое (вариант, когда содержимое между маркерами обновляется).
Те правила, которые выполнились, прекращаются, и если остались невыполненные правила, текст модуля разбивается на две части – код процедур и код модуля.
Далее помеченный маркерами код вставляется в зависимости от места вставки:
Вариант вставки |
Работа |
НачалоМодуля |
Код вставляется в
начало кода тела модуля. |
КонецМодуля |
Код вставляется в
конец кода тела модуля. |
Переменные |
Код вставляется в
самое начала кода всего модуля. |
Для простой замены в текстах предусмотрен режим, где вариант вставки – «Замена». Тогда код в ячейке «Код» в случае его присутствия в модуле заменяется на другой код, причем замены производятся для всех вхождений текста.