Wiki source code of Использование внешних программных средств при обновлении конфигураций 1С
Version 1.1 by Сергей Коршунов on 2022/04/21 16:00
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | = = | ||
2 | |||
3 | Публикация № **1630336** | ||
4 | |||
5 | [[Администрирование БД>>url:https://infostart.ru/public/all/?public-filter[section_id][]=1687]] - [[Обновление 1С>>url:https://infostart.ru/public/all/?public-filter[section_id][]=37411]] | ||
6 | |||
7 | Дмитрий Дмитриев [[(Dimbayyyy)>>url:https://infostart.ru/auth/?backurl=/1c/articles/1630336/]] | ||
8 | |||
9 | Рейтинг: **123** | ||
10 | |||
11 | [[Обновление>>url:https://infostart.ru/public/all/?public-filter[search]=%CE%E1%ED%EE%E2%EB%E5%ED%E8%E5]] [[нетиповые>>url:https://infostart.ru/public/all/?public-filter[search]=+%ED%E5%F2%E8%EF%EE%E2%FB%E5]] [[P4Merge>>url:https://infostart.ru/public/all/?public-filter[search]=+P4Merge]] [[Kdiff3>>url:https://infostart.ru/public/all/?public-filter[search]=+Kdiff3]] [[Расширения>>url:https://infostart.ru/public/all/?public-filter[search]=+%D0%E0%F1%F8%E8%F0%E5%ED%E8%FF]] | ||
12 | |||
13 | * [[image:https://infostart.ru/upload/iblock/a37/a377f757d7ad04efd20eb6da0ff1c367.PNG||alt="Добавление реквизитов на форму.PNG"]] | ||
14 | * [[image:https://infostart.ru/upload/iblock/664/6642753cf0845d1f8423ca2a6a52b24a.PNG||alt="Окно сравнения 1С.PNG"]] | ||
15 | * [[image:https://infostart.ru/upload/iblock/063/0632ea4a281918bdb6386ebe806b1817.PNG||alt="Объединение 1с.PNG"]] | ||
16 | * [[image:https://infostart.ru/upload/iblock/61a/61a547da80a8a62362208fb3cc9b6955.PNG||alt="кдиф.PNG"]] | ||
17 | |||
18 | * [[image:https://infostart.ru/upload/iblock/a37/a377f757d7ad04efd20eb6da0ff1c367.PNG||alt="Добавление реквизитов на форму.PNG"]] | ||
19 | |||
20 | **В статье приведены некоторые навыки по обновлению нетиповых конфигураций, а также рассмотрены инструменты трехстороннего сравнения/объединения программного кода.** | ||
21 | |||
22 | **Введение** | ||
23 | |||
24 | Одна из важнейших задач, с которой встречаются программисты 1С - обновление конфигураций. Во многих фирмах-франчах знакомство начинающего разработчика/консультанта/сервис-инженера с 1С начинается с обновления программных продуктов. Как правило, новичкам дают задачи по обновлению типовых конфигураций, либо платформ 1С. Обычно, обновление типовых решений не доставляет много хлопот - скачал апдейтник, прокликал несколько раз "далее" - "далее" - "ок" и все готово. Практически тоже самое можно сказать и про обновление платформы - скачал актуальную версию, установил и готово - можно работать. Бывают, конечно, особенности, связанные с нелицензионным ПО, старым железом, однако это все решается на уровне системного администратора, либо сервис-инженера. | ||
25 | |||
26 | Самое интересное начинается при обновлении нетиповой конфигурации. Особенно проблематично обновлять базу, которую не приходилось дорабатывать лично... | ||
27 | |||
28 | Итак, в текущей заметке будет продемонстрировано несколько навыков и инструментов по обновлению нетиповых конфигураций. | ||
29 | |||
30 | Всё описанное тестировалось на платформе 8.3.18.1289 и более поздних версиях. | ||
31 | |||
32 | |||
33 | **Доработка типовых конфигураций** | ||
34 | |||
35 | В дальнейшем я буду рассматривать некоторые внешние программы для сравнения/объединения программного кода. Для оптимального использования таких инструментов, необходимо поддерживать обновляемую конфигурацию в соответствующем виде - производить доработки в строго определенном формате и использовать один шаблон. Речь пойдет, конечно же, о расширениях. | ||
36 | |||
37 | Всем известно, что в платформе 8.3 появился такой удобный и разнообразный инструмент - расширение конфигурации. Здесь я не буду вдаваться в подробности устройства данного механизма, лишь покажу, как его использовать для дальнейшего без проблемного обновления базы. | ||
38 | |||
39 | Очевидно, что самый сложный этап в обновлении конфигурации - сравнение программных модулей и анализ произведенных доработок. Поэтому использование расширений очевидно - необходимо по максимуму перенести программный код из основной конфигурации в конфигурацию расширений. Для этого существует несколько аннотаций: &Перед, &После, &Вместо и &Вместо (с контролем). В рамках нашей концепции рекомендуется использовать лишь две из них: &Перед и &После. Переносимый в расширения код должен компилироваться и правильно отрабатывать после каждого обновления. Код прописанный До или После типового метода обычно не подвергается критическим ошибкам - он носит, по большей части, дополняющий характер. Например, это может быть добавление своих реквизитов на форму в процедуре "ПриСозданииНаСервере" (Рисунок 1) | ||
40 | |||
41 | |||
42 | [[image:https://infostart.ru/upload/iblock/58e/58edef7fe675da5fcec928311214504f.PNG||height="402" width="1055"]] | ||
43 | |||
44 | Рисунок 1 - Программное добавление реквизитов и элементов на форму | ||
45 | |||
46 | |||
47 | Таким образом возможно максимально разгрузить доработанные модули в основной конфигурации. Использование аннотаций "&Вместо" считается не сильно эффективным, так как при малейшем изменении модуля поставщиком, расширение придется переписывать из-за несоответствия расширяемой процедуры. Инъекции кода и программное переопределение типовой логики лучше производить в основной конфигурации - далее мы увидим, почему так удобнее. | ||
48 | |||
49 | Следующее - доработка форм. Любое редактирование управляемой формы, опять-таки, строго рекомендуется выполнять программно. Во-первых, при ручном редактировании формы в основной конфигурации (используя редактор форм) все настройки будут успешно стерты и по умолчанию взяты из новой конфигурации поставщика (из нового релиза). Производить редактирование формы в расширении тоже не самая удачная идея - теряется визуальное отличие между типовыми и нетиповыми доработками. Поэтому при настройке форм, пользуемся схемой, описанной выше. Все, что можно поместить в расширение по аннотации &Перед, &После - переносим, все остальное (программное изменение логики формы, инъекции кода) оставляем в основной конфигурации. | ||
50 | |||
51 | Последнее - добавление новых объектов, реквизитов. Любое добавление новых объектов необходимо производить только в основной конфигурации. Объясняется такое решение несколькими причинами. Во-первых, при добавлении новых справочников, планов видов характеристик, документов - любых ссылочных объектов, не исключён шанс, что в будущем они могут участвовать в качестве типов реквизитов. Назначить ссылочный тип из расширения объекту основной конфигурации не получится, поэтому целесообразно не создавать новые объекты в расширении. Второе - невозможно использовать конструктор запросов и контекстную подсказку одновременно и для объектов расширения и для объектов основной конфигурации. Для всех объектов конструктор запросов доступен только в пользовательском режиме. И, самое главное для нас - объекты, добавленные в основную конфигурацию не нужно анализировать при обновлении базы. Они не удаляются и не модифицируются. Однако стоит понимать, что связи, используемые в типовых объектах с нетиповыми (назначение типовому регистру нетиповой регистратор, настройка владельца, изменение состава определяемого типа) при накатывании нового релиза - затрутся. Их придется анализировать вручную. | ||
52 | |||
53 | |||
54 | **Встроенные средства сравнения/объединения** | ||
55 | |||
56 | Обзорно пройдемся по основным этапам сравнения/объединения платформы 1С 8.3. При возникновении окна сравнения, мы должны проанализировать объекты, подвергшиеся изменениям. Устанавливаем фильтр "Показывать только дважды измененные свойства" для понимания, в какие фрагменты кода были внесены изменения нами (сторонними разработчиками) и поставщиком. Далее, можем воспользоваться настройкой объединения модулей, кликнув по шестерёнке (Рисунок 2) | ||
57 | |||
58 | |||
59 | [[image:https://infostart.ru/upload/iblock/1f0/1f0104ebc1ed4a7c8ef794e396e6c3d3.PNG||height="599" width="1342"]] | ||
60 | |||
61 | Рисунок 2 - Окно сравнения конфигураций | ||
62 | |||
63 | |||
64 | Перейдя к настройке объединения модулей, видим окно двустороннего сравнения модулей (Рисунок 3) | ||
65 | |||
66 | |||
67 | [[image:https://infostart.ru/upload/iblock/61f/61f4815430fa16ba6656e7c363be1747.PNG||height="722" width="1615"]] | ||
68 | |||
69 | Рисунок 3 - Штатное двустороннее сравнение модулей | ||
70 | |||
71 | |||
72 | В целом, инструмент помогает произвести анализ выполненных доработок, переходя к каждому измененному методу данного модуля. Слева мы видим дорабатываемую нами конфигурацию (Основная конфигурация), справа - конфигурацию поставщика (новый релиз). Если наша база не сильно доработана, и все программные изменения находятся в расширениях, то такой возможности сравнения будет достаточно для обновления почти типовой конфигурации. | ||
73 | |||
74 | Но давайте рассмотрим недостатки штатного механизма сравнения. Первое - ручное исправление коллизий. Инструмент не может автоматически анализировать доработки. Даже добавленный "сбоку" код должен обрабатываться программистом. Конечно, есть возможность выбора режима обновления - "Объединить с приоритетом основной конфигурации", либо "с приоритетом новой конфигурации поставщика", однако данная возможность не совсем удобна в использовании, к тому же, оставляет лишние комментарии только сбивающие с толку в дальнейшем (хотя, возможно, это дело привычки). Второе - необходимо переключаться на новую процедуру(функцию) после каждой обработки текущей. Отнимает много времени анализ больших и длинных методов, особенно, когда правки в них были не критические. Третье, и самое важное - отсутствие трехстороннего сравнения/объединения. Часто бывает просто необходимо посмотреть на старую конфигурацию поставщика. Необходимо проанализировать типовую старую логику работы метода, сравнить ее с текущей (доработанной), либо сравнить старую типовую логику работы механизма с новой логикой (появившейся в новом релизе). Такая возможность отсутствует в штатных средствах сравнения. | ||
75 | |||
76 | Давайте обзорно рассмотрим некоторые сторонние инструменты сравнения фрагментов кода, используемые при обновлениях 1С. | ||
77 | |||
78 | |||
79 | **Perforce P4Merge** | ||
80 | |||
81 | Одна из сторонних программ сравнения/объединения, которую считаю дольно удачной, при обновлении нетиповой конфигурации - Perforce P4Merge. Вообще, как можно заметить, платформа предлагает некоторые сторонние программы (Сервис -> Параметры -> Сравнение/Объединение) (Рисунок 4) | ||
82 | |||
83 | |||
84 | [[image:https://infostart.ru/upload/iblock/5c7/5c7bd5453cf38e89987efd806b6bafe5.PNG||height="401" width="564"]] | ||
85 | |||
86 | Рисунок 4 - Выбор внешней программы | ||
87 | |||
88 | |||
89 | Из всех указанных утилит, больше всего мне приглянулась Perforce P4Merge. Её достоинства заключаются в следующем: | ||
90 | |||
91 | * Удобный и наглядный интерфейс | ||
92 | * Возможность автоматического поиска коллизий | ||
93 | * Трехстороннее сравнение | ||
94 | |||
95 | Для начала покажу, как добавить внешний инструмент сравнения. Скачиваем и устанавливаем Perforce P4Merge (Гуглится довольно быстро). В окне выбора внешней программы позиционируемся на Perforce P4Merge и нажимаем "Изменить" (Рисунок 4). Далее выбираем исполняемый файл с соответствующим названием (Рисунок 5) | ||
96 | |||
97 | |||
98 | [[image:https://infostart.ru/upload/iblock/204/204a9fe9de17f668b91d057861cc6670.PNG||height="609" width="944"]] | ||
99 | |||
100 | Рисунок 5 - Выбор p4merge | ||
101 | |||
102 | |||
103 | Теперь остается в окне "Режим объединения и порядок подчиненных объектов" выбрать Perforce P4Merge и применить настройки. | ||
104 | |||
105 | Далее, в окне сравнения/объединения у нас появится возможность "Объединить с помощью внешней программы" (Рисунок 6) | ||
106 | |||
107 | |||
108 | [[image:https://infostart.ru/upload/iblock/b48/b4853b5ad716396a6d1ae33a789f73ab.PNG||height="302" width="1014"]] | ||
109 | |||
110 | Рисунок 6 - Объединение с помощью внешней программы | ||
111 | |||
112 | |||
113 | Кратко покажу работу с Perforce P4Merge. После того, как мы нажмем на "шестерёнку" - откроется окно трехстороннего сравнения (Рисунок 7) | ||
114 | |||
115 | |||
116 | [[image:https://infostart.ru/upload/iblock/a9a/a9ade46d68b11f0a7d2f1a7f3f4b9c02.PNG||height="819" width="1581"]] | ||
117 | |||
118 | Рисунок 7 - Интерфейс объединения "Perforce P4Merge" | ||
119 | |||
120 | |||
121 | В целом интерфейс интуитивно понятен. Первое окно - Основная конфигурация, второе - Старая конфигурация поставщика(до обновления), и третье - Новая конфигурация поставщика (накатываемый релиз). Программа выделяет красной рамкой только те части кода, которые различаются во всех трёх окнах. Так, например, в старой конфигурации в запросе присутствовал фрагмент внутреннего соединения с таблицей "ВТСотрудникиПериодДанных" по двум условиям. В основной конфигурации видно, что второе условие было закомментировано. В новой же конфигурации поставщика вообще отсутствует данное соединение, поэтому конфликт и выделен - решение по объединению должен принимать разработчик. Все остальные моменты практически обрабатываются на автомате. Если изменения есть только в новой конфигурации поставщика, то они и будут применены. Если изменения есть только в основной конфигурации (инъекции кода), то они будут учтены системой. И если фрагмент кода будет изменен в основной конфе, старая и новая конфигурации поставщика совпадают, то будут вынесены правки из основной конфигурации. Вверху, по красным стрелочкам, удобно обходить все конфликты и обрабатывать их используя соответствующие пиктограммы (Квадрат, Сектор, Круг). Кликая по пиктограммам удобно выбирать фрагмент вставки изменения - из основной, из старой, из новой, либо сразу из всех конфигураций (все три фигуры подсвечены). | ||
122 | |||
123 | Программа поможет сократить время при анализе километровых модулей программного кода, а также эффективно справится с объединением доработок. | ||
124 | |||
125 | |||
126 | **Kdiff3** | ||
127 | |||
128 | Помимо Perforce P4Merge существует ещё ряд внешних программ, имеющих удобный интерфейс трёхстороннего сравнения/объединения, например, Kdiff3. Данный инструмент скачивается и подключается аналогично вышеописанному. Кратко разберем интерфейс Kdiff3. | ||
129 | |||
130 | При открытии окна сравнения конфигураций, выбираем пункт объединения с помощью внешней программы. Интерфейс в целом схож с Perforce P4Merge, однако есть ряд своих особенностей (Рисунок 8) | ||
131 | |||
132 | |||
133 | [[image:https://infostart.ru/upload/iblock/10d/10d771270644f91d989f5f00d89c466f.PNG||height="777" width="1564"]] | ||
134 | |||
135 | Рисунок 8 - Интерфейс объединения "Kdiff3" | ||
136 | |||
137 | |||
138 | Слева находится старая конфигурация поставщика, затем основная конфигурация и справа - новая конфигурация поставщика. Разумеется, порядок следования окон можно изменить, на рисунке представлен вид по умолчанию. Программа позволяет перемещаться в модулях по проблемным фрагментам кода - по частям, измененным в основной конфигурации и в новой конфигурации поставщика. Для выбора объединения вверху окна используются кнопки "A" "B" и "C". На этом принципиальные отличия Kdiff3 от Perforce P4Merge по большей части заканчиваются. По своему опыту могу сказать, что удобнее и нагляднее работать с Perforce P4Merge, однако тут уж дело вкуса. | ||
139 | |||
140 | |||
141 | **Заключение** | ||
142 | |||
143 | В текущей публикации были рассмотрены некоторые этапы по доработке обновляемых конфигураций, а также показаны внешние инструменты трехстороннего сравнения/объединения. Существует множество других программ, позволяющих корректно сравнивать модули при обновлении, но здесь я решил рассмотреть две наиболее часто используемых. Удобство описанных приложений объясняется в простоте их установки и применения - наглядном анализе доработок, используя трехстороннее сравнение. На компьютер, где находится база возможно установить сразу несколько внешних программ и использовать их поочередно, переключаясь по шестерёнке в окне объединения конфигураций (Рисунок 6). | ||
144 | |||
145 | Посыл заметки - применение расширений, для уменьшения разгрузки программных модулей и использование внешних программных средств, для более удобного сравнения/объединения. |