При обновлении типовых конфигурации, столкнулся с проблемой добавления туда своих процедур, с тем чтобы они не затирались после обновления релиза. Поэтому для этих целей написал свой парсер.
В типовых конфигурациях стараюсь придерживаться следующих правил:
1. Писать свой отчеты и обработки (возможно на базе типовых), не трогая типовых.
2. Печатные формы документов, только подключаемые.
3. Добавление элементов форм, только программное.
4. Писать свой «удобные документы», которые либо делают нужные движение по регистрам, либо создают типовые документы, для нужных движений.
Этот парсер и использую для того чтобы, добавлять свои процедуры, дописывать код в существующие, создавать программно элементы форм. Минус этой методики в том, что на добавление элемента формы, приходиться тратить гораздо больше времени, чем просто открыть и создать.
Выложил конфигурацию «Авто обновление конфигурации.cf», в ней только один справочник «Авто обновление конфигурации», он только и нужен. Этот справочник можно скопировать и вставить в любую конфигурацию, чтобы работать с ним.
Принцип работы:
1. Выгрузить файлы конфигурации из типовой конфигурации. Можно и из рабочей базы.
2. Заполнить вашими процедурами справочник «Авто обновление конфигурации», сделать из него выгрузку.
3. Загрузить файлы конфигурации, в рабочую базу.
Что умеет это парсер:
- Добавлять свои процедуры и функции
- Добавлять предопределенные процедуры, если их нет в форме
- Добавлять в существующие процедуры свой код, в начало или конец. Если надо создать код в начале и в конце одновременно, то следует это делать двумя строками.
- Добавлять код в середину процедуры, нужно привязаться к уникальному коду и указать процедуру. При этом обязательно ставить флаг «Вставить в любой текст».
- Добавлять код в начало раздела, например переменные
- Добавлять код в конец раздела, раздел основной программы
- Удалять ненужный код, вставляя на его место свой. При этом обязательно ставить флаг «Вставить в любой текст».
- Вернуть модуль в исходное состояние, целиком копируется типовой модуль.
- Копировать процедуры (строки) из другого элемента справочника «Авто обновление конфигурации». Я у себя создал определенны шаблоны и копирую их почти в каждый новый элемент «Авто обновление конфигурации».
- Функция «Сдвиг», используется для вставки кода «В любое место», но со сдвигом.
- Текст сопоставления (текст который будет встречаться до или после текущего), используется для сложных вставок. Когда нужно привязать не к одному уникальному коду внутри процедуры, а к нескольким.
Инструкция:
- Необходимо заполнить параметры, разовая работа:
1.1 Путь к каталогу файлов конфигурации – Путь к текстам модулей типовой конфигурации
1.2 Путь к каталогу файлов результата – Путь к обработанным результатам, должен отличаться от 1.1
1.3 Текст авто комментария – ваш комментарии в процедурах, до и после изменения, например //Код Емельянова А.
- Добавление документа. Встаем на группу «Документы», добавляем группы, документ, например «ABCКлассификацияПокупателей», можете писать имена сами (как в конфигураторе без пробелов), можете выбрать из выпадающего списка.
- Добавление модулей. Встаем на вновь созданную группу «ABCКлассификацияПокупателей», добавляем элемент справочника «Авто обновление конфигурации». Записываем имя модуля, имя модуля должно быть таким же как создает конфигуратор после «Выгрузить файлы конфигурации», для этого есть конструктор, кнопка «Конструктор имени модуля». Там нужно выбрать только реквизит «Форма».
- Заполняем строки элемента. Каждая строка это процедура или код в процедуру.
- Галочка «Выгружать», отвечает за то выгружать код или нет.
- Галочка «Никогда не выгружать», ставиться например в шаблонах. Она нужна потому-что есть функция которая включает во всех элементах «Выгружать».
- Галочка «Создать файл в случае отсутствия». Например есть справочник «АдресныеСокращения» и у него нет формы элементы, а хотите туда код написать. В данный момент для него конфигуратор модуля не выгружал. Ставим этот флаг, для создания этого модуля.
- Описание формы редактирования.
8.1 Имя процедурыфункции. Пишем имя процедуры или функции целиком, со всеми переменными, скобками, экспортом.
8.2 Текст вставки – ваш код.
8.3 Имя предопределенной процедуры – выбирается в том случае если нужно вставлять код в предопределенные процедуры форм (у меня не все описаны, но можно дописать самому), описаны только те которые использовал за 4 года работы. При выборе атвтоматом заполняется Имя процедурыфункции.
8.4 Флаг «Предопределённая процедура» — ставиться если нужно создать предопределённую процедуру которой нет.
8.5 «Вставлять текст в начало процедурыфункции» — указывает куда вставлять код в начало или в конец
8.6 «Вставить в любой текст.» — Используется для вставки кода в любое место процедуры, (код указывать в «Имя процедурыфункции») при этом надо указать в какую процедуру «Вставить в процедуруфункцию:», если этого не указать то код будет вставлен при первом совпадение.
8.7 «Удалить текст». Все как для пункта 8.6 только найденный текст будет удален.
8.8 Текст сопоставления (текст который будет встречаться до или после текущего), используется для сложных вставок. Когда нужно привязать не к одному уникальному коду внутри процедуры, а к нескольким.
Пример работы в видео, 10 Мб, около 8 минут, без звука.
Парсер писал для себя, попросили показать. Написал его года 4 назад. Года 2 как уже внутрь кода не лезу, все что мне нужно работает. Для простых вещей «Что умеет парсер» с 1 по 9 пункт работает без проблем. Для пункта 4 требуются определенные навыки. 10 и 11 пункт работает, но использую редко и требует навыков.
Просьба камнями не кидать, я ни на что не претендую, переписывать пока ничего не собираюсь, выкладываю как есть.
Вот это правильный способ доработки конфигураций и их обновления, всем рекомендую!
Как минимум за идею +, реализацию смотреть нет смысла т.к. сам давно такой себе сделал, может попроще, но пока устраивает.
Кстати, видео-ролик не заработал!
Попробую вставить заново, пока в текст добавил ссылку.
http://youtu.be/2N941XVz04w
По видео проще увидеть, что получилось, чем разбираться.
Эхма, костыли это всё. Эффективные, но костыли. Тоже себе такой делал, но имхо, должна уметь сама платформа.
Мне одному кажется что как минимум половина функционала уже реализовано в платформе? М модули можно по-процедурно объединять или объединять с приоритетом основной/поставщика (и добавленные функции никуда не исчезают) и многое другое.
P.S. Почитал внимательнее описание, тут пожалуй более автоматизировано.
Но тогда вопрос, что будет если в типовой в функцию/процедуру добавят новых аргументов или произвольный код, к которому привязались изменится? Есть ли диагностика какая-нибудь этого?
Кстати как модули по-процедурно объединять? У меня только весь модуль. Где-то галочку надо поставить?
Очень интересная идея! Сам пока до реализации подобного функционала еще не дошел.
Вот бы сразу cf править для полноценной автоматизации.
(5) AlexanderKai,
в окне сравнения справа есть значек лупа напротив модулей — нажимаешь, и можешь выбирать для каждой процедуры — объединять(с приоритетом…)/замещать/не трогать(снять галку).
Платформа 8.3.3.641 Конфа КАМИН:Зарплата для бизнеса 4.0.
Конфигуратор выгружает в файлы все, не дает выбирать. Загружает тоже, когда есть все.
У форм расширение *.form кодировка UTF-8. Поправил в обработке записи. Вставил свой код в модуль формы. После загрузки выругалось на файлы хранилищ (6 ошибок). При попытке открыть форму выкидывает из конфигуратора. Подскажите, это у меня руки без пальцев или защита у КАМИНа безобразничает?
(7) zqzq,
Что-то я никак не вгоняю, можно подробней и со скриншотами?
(9) AlexanderKai, на какой платформе сидите?
(10) tango,
8.2.17.153
(7) zqz,
Кое-как, но разобрался. Очень это дело неочевидно 🙁