Система контроля версий внешних обработок на раз-два-три

10.03.15

Разработка - Инструментарий разработчика

Большое число конфигураций на базе 1С содержит в своем составе справочник, где хранятся подключаемые внешние обработки. Данный механизм позволяет наращивать функциональность системы без изменения самой конфигурации. У такого решения есть и отрицательные моменты - т.к. внешние обработки не хранятся в конфигурации, то и хранилище конфигурации не контролирует изменение каждой обработки.

Скачать файлы

Наименование Файл Версия Размер
Обработка сравнения версий
.epf 18,51Kb
17
.epf 1 18,51Kb 17 Скачать


Преамбула.
Описанная в статье методика не претендует на звание полноценной системы контроля версий. При написании статьи преследовались две цели:

  • анализ существующих методов контроля изменений внешних обработок, описание их особенностей;
  • описание альтернативного способа контроля изменений.

 

Существующие инструменты контроля версий внешних обработок.
Я классифицировал существующие системы контроля версий внешних обработок по двум признакам - место хранения версий (т.е. сам инструмент контроля) и вид хранения внешних обработок - бинарный/текстовый:

Место хранения версий Тип хранения Примечание Примеры инструментов

1. Под одной из существующих систем контроля версий (git, mercurial, svn и т.д.).

Бинарный

Т.к. данные хранятся в бинарном виде, то для сравнения используется внешний инструмент сравнения. Из минусов подобного подхода можно отметить хранение данных в бинарном виде, в результате чего часть преимуществ системы контроля версий теряется.

V8Viewer, V8Reader

2. Под одной из существующих систем контроля версий (git, mercurial, svn и т.д.).

Бинарный и текстовый

Для хранения используются те же системы контроля версий, что и в пункте 1, но перед сохранением изменений (коммитом) происходит парсинг и конвертация бинарного файла обработки в обычные текстовые файлы. Таким путем идут авторы публикации V8Commit. Плюсы - полноценное использование git'а из-за хранения исходников в текстовом виде. Минусы - отсутствие обратной "сборки" обработки (как следствие - нельзя внести изменения в модуль объекта сторонними средствами, смержить изменения с помощью утилиты сравнения и т.д.), много зависимостей (используется V8Reader + отдельная служебная база 1С + обвязка всего этого в виде скриптов). По-моему мнению этот инструмент наиболее приближен к полноценному контролю версий внешних обработок из всех.

V8Commit, TortoiseSVN Hook

 

3. В отдельном типовом хранилище конфигураций.

Бинарный (внутренний формат хранилища конфигурации 1С)

Создается новое пустое хранилище конфигурации, каждая новая обработка добавляется как встроенная в соответствующую ветвь конфигурации. Плюсы: привычный инструмент разработчика 1С. Минусы: если в конфигурации, где хранятся внешние обработки, нет справочников, которые используются в реквизитах обработки, то тип данных реквизитов будет выставлен по-умолчанию, т.е. "Строка" (фактически это означает, что если в ваших обработках есть ссылочные типы, то данный способ не подходит). Также, можно отметить, что для добавления новой обработки необходим исключительный захват корня конфигурации (как следствие - невозможность одновременного добавления новых обработок различными пользователями).

Типовое хранилище конфигурации 1C

 

Альтернативный способ контроля версий.
Ниже речь пойдет об альтернативном варианте хранения версий внешних обработок, а именно о хранении версий обработок в самой информационной базе.

Практически во всех типовых конфигурациях существует подсистема версионирования объектов. Если включить данный механизм для справочника внешних обработок, то мы получим историю изменений каждой обработки во времени (в разрезе даты изменения, номера и автора). Также, в блоке версионирования будет храниться сам бинарный файл внешней обработки. Это означает, что при необходимости мы можем провести сравнение двух версий внешней обработки.

Приложенная к публикации обработка написана на обычных формах и протестирована на конфигурации УПП 1.3.56.1, но данную методику можно реализовать на любой конфигурации, содержащей в себе подсистему версионирования. Для сравнение двух версий обработок использовалась программа V8Viewer.

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

Как этим пользоваться.

Перед использованием обработки следует произвести следующие настройки:

  1. Для сравнения внешних обработок используется утилита V8 Viewer, поэтому для корректного сравнения версий дополнительных обработок следует установить и настроить данный инструмент (подробности данной операции описаны в публикации v8Viewer).
  2. Включить версионирование для справочника внешних обработок:
  3. Настройка версионированияУказать путь к обработке сравнения (по нажатию кнопки "Настройки"):Настройка инструмента сравнения

Принципиально на этом этапе у нас уже готова система контроля версий - теперь любое изменение внешней обработки в информационной базе будет сохраняться в разрезе версии обработки, даты изменения и автора. Чтобы сравнить две версии внешней обработки следует выбрать в основном окне внешнюю обработку из одноименного справочника, указать две версии и нажать "Сравнить версии":Выбор версий для сравнения

В результате будет выведено окно программы V8Viewer, где будет возможность сравнить две версии:

Окно программы V8 Viewer

Сравнение модулей обработок

 

Альтернативным вариантом использования является выгрузка версии в файл (это может потребоваться для восстановления старой версии обработки). Для выполнения данной операции нужно выбрать версию и нажать "Выгрузить версию".

 

Как это может помочь.

  1. Предложенная методика даст ответы на вопросы когда, кто и что именно менял в каждой версии внешней обработки (с возможностью сравнить код обработок, макеты и т.д.).
  2. Обработка позволит выгрузить произвольную версию обработки. Это позволит при необходимости "откатиться" на старую версию, если новая содержит ошибки или оказалась битой (такое бывает, когда по ошибке обработка затирается совершенно другой).

CVS системы контроля версий git github

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    121614    670    389    

711

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 15300 руб.

06.10.2023    7262    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8000 руб.

10.11.2023    3507    11    1    

33

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177728    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99339    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18102    6    8    

39

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28096    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23596    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. newtype 10.03.15 10:36 Сейчас в теме
Скажите,а где настройка версифицирования в Зарплата и Управление Персоналом, редакция 2.5 (2.5.87.1)
2. simargle 93 10.03.15 11:09 Сейчас в теме
В редакцию ЗиУП 2.5 механизм версионирования не встроен. Насколько мне известно, данная подсистема была добавлена в третьей редакции данной конфигурации.
В тексте публикации заявлена поддержка обработки только для конфигурации "Управление производственным предприятием" редакции 1.3. Для всех остальных конфигураций нужно смотреть индивидуально.
3. Evil Beaver 8107 10.03.15 11:30 Сейчас в теме
Как автор V8Viewer хочу сказать спасибо за то, что пользуетесь.
Единственно, не понял до конца - каковы преимущества предлагаемого подхода по сравнению с простым хранением обработок в git и управления всем этим с помощью Tortoise? Т.е. написана конфигурация, которая заменяет собой стандартные системы контроля? А зачем?
Прошу не воспринимать, как критику, я просто, возможно, не уловил каких-то моментов.
simargle; artbear; +2 Ответить
5. simargle 93 10.03.15 11:58 Сейчас в теме
(3) Evil Beaver, спасибо за проявленный интерес. К объективной критике отношусь положительно.
Возможно не совсем корректно описал механизм работы данной обработки. Отдельная конфигурация не создавалась - для хранения версий внешних обработок используется та же самая конфигурация, где эти обработки потом применяются (т.е. в нашем случае это УПП редакции 1.3). Плюсы у такого подхода исключительно в его простоте - включается версионирование для внешних обработок (пункт 3 в публикации) и изменения каждой версии начинают сохраняться.

Я не рассматриваю данную обработку как полноценную систему контроля версий - об этом я упомянул в начале статьи. Это скорее первый шаг на пути к такой системе, который позволяет быстро запустить контроль без установки стандартной системы контроля версий (git, mercurial, svn и т.д.) и без обучения остальных разработчиков навыкам работы с ней. В таблице сравнения я описал какой вариант лично для себя считаю предпочтительным - это V8Commit. Мы на пути к нему :)
Alien_job; +1 Ответить
4. artbear 1448 10.03.15 11:43 Сейчас в теме
(0) Не хочу обижать автора v8Viewer, тем более, что работаем вместе :) , но почему все-таки не v8Reader ?
1. v8reader все-таки помощнее при анализе модулей и особенно форм
2. вызов v8reader через командную строку 1С и спец.базы 1С не намного сложнее v8viewer.
Например, я постоянно пользуюсь v8reader для сравнения обработок через ком. строку (один хоткей в Фар) и через Гит (одна настройка в Source и Черепахе)

Ну и жду ответа на вопрос Андрея в (3)
Evil Beaver; simargle; +2 Ответить
6. simargle 93 10.03.15 12:05 Сейчас в теме
(4) artbear,
Отличный и закономерный вопрос.

Сразу скажу, что для внутренних нужд мы используем как раз v8reader с незначительными изменениями (в коде обработки можно увидеть, что список инструментов сравнения можно расширить).

Причина по которой текущая публикация заточена под v8Viewer в том, что у v8reader нет простого способа запуска сравнения из текущего сеанса. Т.е. действительно можно запустить сравнение в отдельном сеансе через параметры командной строки, но нет возможности в текущем сеансе подключить обработку и вызвать, скажем экспортный метод Сравнить(ПутьКФайлу1, ПутьКФайлу2). Посчитал, что запуск отдельной информационной базы в данном случае будет избыточным.
7. artbear 1448 10.03.15 12:41 Сейчас в теме
(6) ИМХО запуск процесса v8Commit и запуск процесса 1С (для v8Reader) ничем не отличается.
Повторюсь - я постоянно пользуюсь сравнением внешних файлов 1С через v8Reader и мои "хотелки" постоянно растут и оперативно дорабатываются :)

Кстати, при работе с Гит в проекте precommit1C, который основан на v8reader, есть возможность сборки обработки из исходников текстов.

Твою задачу https://github.com/xDrivenDevelopment/v8Reader/issues/27 (программный запуск обработки из текущего сеанса) автор v8Reader реализует в скором времени :)
9. simargle 93 10.03.15 12:51 Сейчас в теме
(7) artbear,
В части запуска отдельной базы, либо отдельного приложения - тут уже разговор в плоскость вкусов переходит :) Я принципиально ничего против этих двух вариантов не имею. В части precommit1C и сборки обработки - здорово. Я слежу за развитием данного проекта, но видимо упустил этот момент. В части программного запуска v8reader - супер, ждем-с :)
8. artbear 1448 10.03.15 12:42 Сейчас в теме
(6) Интересно, какие незначительные изменения v8Reader вы сделали?
10. simargle 93 10.03.15 12:54 Сейчас в теме
(8) artbear,
К своему большому стыду сделал весьма костыльно. А именно - завел у обработки строковый реквизит, куда извне передаю параметры сравнения. Соответственно при открытии формы обработки у данного параметра настроен больший приоритет, чем у параметров запуска сеанса. Других изменений не было. Пробовал проанализировать форму обработки на предмет точечных изменений там, но показалось, что придется внести значительный объем доработок. Это технический долг, который я отдам, когда в v8reader появится возможность программного запуска сравнения :)
11. Alien_job 190 10.03.15 13:44 Сейчас в теме
Спасибо! По моему очень удобно для начала. Попробую убедить коллег.
12. simargle 93 10.03.15 15:02 Сейчас в теме
(11) Alien_job, рад, что смог помочь :)
Можно для начала включить версионирование для справочника внешних обработок, а потом публично на примерах объяснить как это может быть использовано. Если данное предложение встретит отторжение в коллективе, то вы сможете использовать предложенный подход как минимум для себя.
13. ilov_boris 163 11.03.15 11:55 Сейчас в теме
Есть еще такая штука: http://infostart.ru/public/181018/
На гитхабе: https://github.com/ilovb/1c-toolkit
Релиз тут: https://github.com/ilovb/1c-toolkit/releases

Пользуемся утилитой tsvn_hook_pre-commit давно и исправно :)
По опыту могу сказать, что потребность в "сборке" так и не возникла ни разу.
14. Pr-Mex 136 11.03.15 14:46 Сейчас в теме
(13) Потребность в сборке бывает, поверьте.
Например, когда используете генераторы кода.
15. simargle 93 12.03.15 09:36 Сейчас в теме
(13) ilov_boris,
спасибо за обратную связь - добавил ваш инструмент в обзорную таблицу в текущей публикации.
В части сборки сам с такой необходимостью еще не сталкивался, но навскидку кажется, что это может быть удобно. Например, в случае внесения незначительных поправок в код на машине, где отсутствует платформа, либо для объединения обработок 1С сторонними средствами (WinMerge, Meld и т.д.). (14) Pr-Mex) также привел пример, где это может быть полезно. Допускаю, что такая функциональность нужна далеко не всем.
16. Alien_job 190 13.03.15 06:27 Сейчас в теме
(15) конечно сборка нужна. Например затер коллега мои наработки своими. Это можно увидеть сравнив версии обработок вашим инструментом. Было бы проще сразу смержить их и сохранить новую версию чем выгружать обе версии, мержить в конфигураторе, загружать в справочник.
17. lustin 16.03.15 00:55 Сейчас в теме
(13) Как только я начинал хранить обработки в git - а это было уже давно у меня сразу возникала необходимость сборок. Причем с наложением патчей.

Сценариев на практике возникало основных 2:

1. когда ядро обработки или подсистемы остается тем же, но необходимо делать несколько сборок - под разные версии платформы чаще всего. Чтобы не плодить кода в формате
Если Версия > 8.2.17 Тогда
делается просто сборки ядра + патчи для версии.
2. когда необходимо было делать сборки под разные типовые конфигурации - ядро обработки сохраняется, меняется только код вызова типовых функции.

Когда я говорю патч - я имею ввиду https://ru.wikipedia.org/wiki/Patch_(UNIX)
Redokov; Pr-Mex; +2 Ответить
Оставьте свое сообщение