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