Данная конфигурация предназначена для логирования и автоматического внесения изменений в другие конфигурация 1С 8.Х. Краткое описание ее работы выглядит следующим образом:
Структура конфигурации автоапдейтера следующая:
Элемент справочника действий содержит специальное выражение, описывающее действие над выбранным модулем - вставка процедуры/ функции, вставка фрагментов кода и т.д. В элементе формы сценария мы отмечаем объекты метаданных над которыми нужно производить действия сценария За выполнение самих действий отвечает обработка "ВыполненеСценария"
Остановимся на каждом пункте более подробно.
Для логируемой конфигурации в справочнике конфигураций автоапдейтера заводится новый элемент (Справочники - Конфигурации - "Добавить"); Указываются реквизиты логируемой базы и производится загрузка ее метаданных. В случае изменения структуры логируемой базы, конфигурацию можно загрузить повторно (обновить). Также нужно указать каталог, куда предварительно были выгружены модули логируемой конфигурации.
Форма элемента справочника конфигураций
После чего можно заводить сценарий изменения. Сценарий в данном контексте - это некая группа обощенных действий. Можно в одном сценарии прописать несколько действий над модулями, можно в разных сценариях прописать по одному действию. Особого значения это не имеет и остается на усмотрение пользователя. Для начала откроем форму списка сценариев выбранной конфигурации(в списке конфигураций нажмем кнопку "Сценарии").
Форма списка справочника конфигураций
После добавления / изменения откроется элемент справочника сценариев.
Форма элемента справочника сценариев
В левом окне - список элементов метаданных, похожий на обычный список конфигурации в конфигураторе. В правом верхнем углу добавляются действия. Правое нижнее окно - текст действия в режиме просмотра. Для добавления действия откроем форму списка действий (Справочники - действия).
Например, надо во все справочники и докуметы, которые обрабатывают внешнее событие, дописать некий код. Код будет выполняться после стандартной обработки события. Без автоапдейтера мы бы в каждую форму в конфигураторе прописали бы в конец процедуры обработки внешнего события нашу процедуру:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные) ... <стандарные действия> ... ВызовНашегоОбработчика(Источник, Событие, Данные); КонецПроцедуры
Чтобы сделать это автоматически в автоапдейтере, действию присвоим следующий текст:
Если ЕстьСекцияТекста(Перечисления.ВидыСекцийТекста.Процедура,"ОбработкаВнешнегоСобытия") Тогда ДобавитьТекстВнутрьСекцииМодуля(Перечисления.ВидыСекцийТекста.Процедура,"ОбработкаВнешнегоСобытия",Перечисления.ВидыМестВставок.Конец, "; | |ВызовНашегоОбработчика(Источник, Событие, Данные); |" КонецЕсли;
Функция ЕстьСекцияТекста и Процедура ДобавитьТекстВнутрьСекцииМодуля являются скриптами, используемыми для обработки текстов модуля. Они описаны в модуле обработки "ВыполнениеСценария". После добавления действия напротив каждого элемента метаданных конфигурации появляется пустой флажок. Для тех объектов метаданных, над которыми производится требуемое действие включается отметка. Возможна групповая отметка всех форм, модулей. Или использование запроса, по результатам которого ставятся отметки.
В левом нижнем углу формы элемента сценария есть флажок "Перезаписывать действие при выполнении сценария". Если он включен - автовставка переписывается, если нет, действие пропускается. Далее все необходимые сценарии выполняются. После чего измененные модули загружаются обратно в логируемую конфигурацию. Возможно применение сценария, изначально написанного для одной конфигурации, для другой конфигурации. Для этого используется обработка "Применение сценария". Выбирается конфигурация - источник сценариев, конкретный сценарий и конфигурация приемник. После выполнения сценарий будет скопирован со всеми отметками и привязан к новому владельцу.
Список скриптовых процедур и функций для работы с текстами модулей:
//Функция проверяет наличие заданной процедуры/функции в обрабатываемом модуле. // Возвращает истину если секция есть. // ВидСекцииТекста - возможные значения : // Перечисления.ВидыСекцийТекста.Процедура, Перечисления.ВидыСекцийТекста.Функция // ШаблонИмени - Имя процедуры/функции обрабатываемого модуля Функция ЕстьСекцияТекста(ВидСекцииТекста,ШаблонИмени) //Процедура добавляет код внутрь нужной секции // ВидСекцииТекста - возможные значения : // Перечисления.ВидыСекцийТекста.Процедура, Перечисления.ВидыСекцийТекста.Функция // ШаблонИмени - Имя процедуры/функции обрабатываемого модуля // ВидМестаСекции - возможные значения : // Перечисления.ВидыМестВставок.Начало, Перечисления.ВидыМестВставок.Конец // ТекстВставки - код, вставляемый в модуль // СтрокОтМеста - количество строк от начала/конца модуля // (зависит от параметра ВидМестаСекции), где вставляется ТекстВставки Процедура ДобавитьТекстВнутрьСекцииМодуля( ВидСекцииТекста, ШаблонИмени, ВидМестаСекции, ТекстВставки, СтрокОтМеста = 0) //Добавляет процедуру или функцию в модуль // ТекстВставки - код процедуры или функции, вставляемый в модуль Процедура ДобавитьСекциюМодуля(ТекстВставки) //Процедура удаляет выбранную процедуру/функцию // ВидСекцииТекста - возможные значения : // Перечисления.ВидыСекцийТекста.Процедура, Перечисления.ВидыСекцийТекста.Функция // ШаблонИмени - Имя процедуры/функции обрабатываемого модуля Процедура УдалитьСекциюМодуля(ВидСекцииТекста,ШаблонИмени) //Возвращает полный текст модуля Функция ПолучитьТекстМодуля() //Полностью заменяет текст модуля на ТекстЗамены Процедура ЗаменитьТекстМодуля(ТекстЗамены)
Если каких-то возможностей не хватает, не составит особого труда дописать собственную скриптовую процедуру или функцию в модуль обработки "Выполнение сценария".