0 Votes
Version 1.1 by Сергей Коршунов on 2022/04/21 16:00

Show last authors
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 Посыл заметки - применение расширений, для уменьшения разгрузки программных модулей и использование внешних программных средств, для более удобного сравнения/объединения.