Парсинг модулей (1Cv8)

Материал из КинтВики
Перейти к: навигация, поиск


Источник: http://fixin.com.ru/articles/down_module_parser/article.htm

Парсинг модулей

Часто приходится однотипным образом обрабатывать модули объектов 1С 80 (форм, документов, справочников и т.п.), чтобы над всеми ими выполнить однотипную операцию.

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

Для целей несложной обработки текстов модулей (парсинга) была написана простая обработка.

[Image]

Функции обработки:

  • Вставлять в модуль новую процедуру или функцию
  • Добавлять текст в тело модуля или в область переменных
  • Все изменения помечаются комментариями – маркерами начала и конца, что позволяет повторно изменять код, а следовательно применять парсинг многократно
  • Можно отбирать, в какие модули вносить изменения – в формы или модули объектов и каких объектов


Структура маркера:

Маркер начала имеет структуру: //{[ПоставщикЗамены][пробел][ИмяЗамены]
Маркер конца имеет структуру:  //}[ПоставщикЗамены][пробел][ИмяЗамены]

Где:

· ПоставщикЗамены – любой идентификатор, в качестве которого удобно использовать название фирмы, которая вносит изменения в конфигурацию, например BESTFRAN4;

· ИмяЗамены – идентификатор конкретно данной замены.


Алгоритм поиска и замены.

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

Те правила, которые выполнились, прекращаются, и если остались невыполненные правила, текст модуля разбивается на две части – код процедур и код модуля.

Далее помеченный маркерами код вставляется в зависимости от места вставки:

Вариант вставки Работа
НачалоМодуля Код вставляется в начало кода тела модуля.
КонецМодуля Код вставляется в конец кода тела модуля.
Переменные Код вставляется в самое начала кода всего модуля.


Для простой замены в текстах предусмотрен режим, где вариант вставки – «Замена». Тогда код в ячейке «Код» в случае его присутствия в модуле заменяется на другой код, причем замены производятся для всех вхождений текста.

Обработка

Медиа:Обработка ПарсингМодулей.zip