О проблеме
При выпуске программного продукта часто возникает вопрос о его подготовке в виде разных редакций, Demo, Free, Lite, Standard, Pro и пр.
Системы сборки для языков программирования прекрасно решают эту задачу. Например, при разработке приложения для Android разработчик может создать редакции приложения используя Product flavors.
К сожалению, ничем подобным конфигуратор 1С похвастать не может. Думаю, такой функционал можно реализовать в EDT, например, в виде плагина. Но хотелось бы иметь более простое решение, работающее как для конфигураций на обычных формах так и на управляемых.
Выбор не богат, придется сделать свою небольшую систему сборки. Пусть система работает только с текстом, большего и не надо.
Постановка задачи
Итак, требования к системе сборки:
- Система сборки должна уметь обрабатывать исходный текстовый код модуля.
- Исходный код должен разрабатываться в основной редакции (варианте) модуля. Должна быть возможность запускать и отлаживать основную редакцию в 1С: Предприятии. Поэтому система сборки не должна требовать внесения изменений, приводящих к синтаксическим ошибкам.
- В исходном коде основного варианта должны быть возможности:
- Объявлять редакции для системы сборки;
- Использовать переменные (текущая дата, идентификатор редакции и т.п.) текущего контекста системы сборки;
- Указывать принадлежность части кода к определенным редакциям;
- Помечать части кода, которые надо исключить для всех редакций.
- Система сборки должна определять текущий номер версии из комментария вида:
//Версия 1.0
- Система сборки должна генерировать все объявленные редакции сразу, за один проход.
Решение
Система сборки Make1C написана на Java. Почему на Java? Проще использовать регулярные выражения, легче разрабатывать сложные алгоритмы. Работает везде :), где есть Java машина.
Да, тоже самое можно было сделать и на встроенном языке 1С.
Система сборки обрабатывает только текстовые файлы, далее обработанный текст можно вставить в модуль, отчет или обработку используя пакетный режим работы конфигуратора (с ключами /DumpExternalDataProcessorOrReportToFiles и /LoadExternalDataProcessorOrReportFromFiles) или вручную.
Пример использования
Приведу пример использования в стиле "Hello world!". Исходный код базового варианта модуля:
Размещаем текстовый файл hello-world.txt с исходным кодом модуля в каталоге HelloWorld, в командной строке запуска указываем исходный файл и каталог для вывода, запускаем
под Linux:
java -Dsource="./hello-world.txt" -Dtarget="./" -jar "../../Make1C/Make1C.jar"
под Windows:
java -Dsource="hello-world.txt" -Dtarget="" -jar "..\..\Make1C\Make1C.jar"
В результате в подкаталоге hello-world будут сформированы 3 файла, Demo.txt, Lite.txt, Standard.txt.
Сгенерированный код модуля в редакции Demo:
Сгенерированный код модуля в редакции Lite:
Сгенерированный код модуля в редакции Standard:
Практическое использование
При помощи системы сборки Make1C удобно создавать, и самое главное, поддерживать и дорабатывать различные редакции модулей, отчетов и обработок.
Так, уже на протяжении нескольких лет, использую Make1C в разработке отчетов по дебиторской и кредиторской задолженности. Отчеты технически сложные, содержат в себе непростые алгоритмы расчета. Благодаря Make1C разработка ведется в одном базовом варианте отчета (по одному на каждый отчет). После тестирования через систему сборки новый функционал попадает в конечные редакции отчетов. Это намного эффективнее, нежели поддерживать по отдельности каждую редакцию отчета.
К публикации приложен дистрибутив с примером использования Make1C.
Тесты выполнены в операционной среде:
1. Linux
На платформах:
1. 1С:Предприятие 8.3
2. 1С:Предприятие 8.2
В конфигурациях:
1. Бухгалтерия Предприятия, редакция 3.0
2. Комплексная автоматизация, редакция 2.4
3. Управление торговлей, редакция 11
4. Управление производственным предприятием, редакция 1.3
5. Комплексная автоматизация, редакция 1.1
Другие публикации автора
Дебиторская задолженность по срокам долга
Кредиторская задолженность по срокам долга
Когда много сканов: Автоматическое прикрепление сканированных документов
Когда много строк в документе: Удобный редактор табличных частей
Перенос справочников и документов из КА 1.1. в ЗУП 3.1.
Статистика документов на СКД для любой конфигурации