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