Использование внешних программных средств при обновлении конфигураций 1С

30.03.22

База данных - Обновление 1С

В статье приведены некоторые навыки по обновлению нетиповых конфигураций, а также рассмотрены инструменты трехстороннего сравнения/объединения программного кода.

Введение

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

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

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

Всё описанное тестировалось на платформе 8.3.18.1289 и более поздних версиях.

 

Доработка типовых конфигураций

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

Всем известно, что в платформе 8.3 появился такой удобный и разнообразный инструмент - расширение конфигурации. Здесь я не буду вдаваться в подробности устройства данного механизма, лишь покажу, как его использовать для дальнейшего без проблемного обновления базы. 

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

 

Рисунок 1 - Программное добавление реквизитов и элементов на форму

 

Таким образом возможно максимально разгрузить доработанные модули в основной конфигурации. Использование аннотаций "&Вместо" считается не сильно эффективным, так как при малейшем изменении модуля поставщиком, расширение придется переписывать из-за несоответствия расширяемой процедуры. Инъекции кода и программное переопределение типовой логики лучше производить в основной конфигурации - далее мы увидим, почему так удобнее.

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

Последнее - добавление новых объектов, реквизитов. Любое добавление новых объектов необходимо производить только в основной конфигурации. Объясняется такое решение несколькими причинами. Во-первых,  при добавлении новых справочников, планов видов характеристик, документов - любых ссылочных объектов, не исключён шанс, что в будущем они могут участвовать в качестве типов реквизитов. Назначить ссылочный тип из расширения объекту основной конфигурации не получится, поэтому целесообразно не создавать новые объекты в расширении. Второе - невозможно использовать конструктор запросов и контекстную подсказку одновременно и для объектов расширения и для объектов основной конфигурации. Для всех объектов конструктор запросов доступен только в пользовательском режиме. И, самое главное для нас - объекты, добавленные в основную конфигурацию не нужно анализировать при обновлении базы. Они не удаляются и не модифицируются. Однако стоит понимать, что связи, используемые в типовых объектах с нетиповыми (назначение типовому регистру нетиповой регистратор, настройка владельца, изменение состава определяемого типа) при накатывании нового релиза - затрутся. Их придется анализировать вручную.

 

Встроенные средства сравнения/объединения

Обзорно пройдемся по основным этапам сравнения/объединения платформы 1С 8.3. При возникновении окна сравнения, мы должны проанализировать объекты, подвергшиеся изменениям. Устанавливаем фильтр "Показывать только дважды измененные свойства" для понимания, в какие фрагменты кода были внесены изменения нами (сторонними разработчиками) и поставщиком. Далее, можем воспользоваться настройкой объединения модулей, кликнув по шестерёнке (Рисунок 2)

 

Рисунок 2 - Окно сравнения конфигураций

 

Перейдя к настройке объединения модулей, видим окно двустороннего сравнения модулей (Рисунок 3)

 

Рисунок 3 - Штатное двустороннее сравнение модулей

 

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

Но давайте рассмотрим недостатки штатного механизма сравнения. Первое - ручное исправление коллизий. Инструмент не может автоматически анализировать доработки. Даже добавленный "сбоку" код должен обрабатываться программистом. Конечно, есть возможность выбора режима обновления - "Объединить с приоритетом основной конфигурации", либо "с приоритетом новой конфигурации поставщика", однако данная возможность не совсем удобна в использовании, к тому же, оставляет лишние комментарии только сбивающие с толку в дальнейшем (хотя, возможно, это дело привычки). Второе - необходимо переключаться на новую процедуру(функцию) после каждой обработки текущей. Отнимает много времени анализ больших и длинных методов, особенно, когда правки в них были не критические. Третье, и самое важное - отсутствие трехстороннего сравнения/объединения. Часто бывает просто необходимо посмотреть на старую конфигурацию поставщика. Необходимо проанализировать типовую старую логику работы метода, сравнить ее с текущей (доработанной), либо сравнить старую типовую логику работы механизма с новой логикой (появившейся в новом релизе). Такая возможность отсутствует в штатных средствах сравнения.

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

 

Perforce P4Merge

Одна из сторонних программ сравнения/объединения, которую считаю дольно удачной, при обновлении нетиповой конфигурации - Perforce P4Merge. Вообще, как можно заметить, платформа предлагает некоторые сторонние программы (Сервис -> Параметры -> Сравнение/Объединение) (Рисунок 4)

 

Рисунок 4 - Выбор внешней программы

 

Из всех указанных утилит, больше всего мне приглянулась Perforce P4Merge. Её достоинства заключаются в следующем:

  • Удобный и наглядный интерфейс
  • Возможность автоматического поиска коллизий 
  • Трехстороннее сравнение

 Для начала покажу, как добавить внешний инструмент сравнения. Скачиваем и устанавливаем Perforce P4Merge (Гуглится довольно быстро). В окне выбора внешней программы позиционируемся на Perforce P4Merge и нажимаем "Изменить" (Рисунок 4). Далее выбираем исполняемый файл с соответствующим названием (Рисунок 5)

 

Рисунок 5 - Выбор p4merge

 

Теперь остается в окне "Режим объединения и порядок подчиненных объектов" выбрать Perforce P4Merge и применить настройки.

Далее, в окне сравнения/объединения у нас появится возможность "Объединить с помощью внешней программы" (Рисунок 6)

 

Рисунок 6 - Объединение с помощью внешней программы

 

Кратко покажу работу с Perforce P4Merge. После того, как мы нажмем на "шестерёнку" - откроется окно трехстороннего сравнения (Рисунок 7)

 

Рисунок 7 - Интерфейс объединения "Perforce P4Merge"

 

В целом интерфейс интуитивно понятен. Первое окно - Основная конфигурация, второе - Старая конфигурация поставщика(до обновления), и третье - Новая конфигурация поставщика (накатываемый релиз). Программа выделяет красной рамкой только те части кода, которые различаются во всех трёх окнах. Так, например, в старой конфигурации в запросе присутствовал фрагмент внутреннего соединения с таблицей "ВТСотрудникиПериодДанных" по двум условиям. В основной конфигурации видно, что второе условие было закомментировано. В новой же конфигурации поставщика вообще отсутствует данное соединение, поэтому конфликт и выделен - решение по объединению должен принимать разработчик. Все остальные моменты практически обрабатываются на автомате. Если изменения есть только в новой конфигурации поставщика, то они и будут применены. Если изменения есть только в основной конфигурации (инъекции кода), то они будут учтены системой. И если фрагмент кода будет изменен в основной конфе, старая и новая конфигурации поставщика совпадают, то будут вынесены правки из основной конфигурации. Вверху, по красным стрелочкам, удобно обходить все конфликты и обрабатывать их используя соответствующие пиктограммы (Квадрат, Сектор, Круг). Кликая по пиктограммам удобно выбирать фрагмент вставки изменения - из основной, из старой, из новой, либо сразу из всех конфигураций (все три фигуры подсвечены).

Программа поможет сократить время при анализе километровых модулей программного кода, а также эффективно справится с объединением доработок. 

 

Kdiff3

Помимо Perforce P4Merge существует ещё ряд внешних программ, имеющих удобный интерфейс трёхстороннего сравнения/объединения, например, Kdiff3. Данный инструмент скачивается и подключается аналогично вышеописанному.  Кратко разберем интерфейс Kdiff3.

При открытии окна сравнения конфигураций, выбираем пункт объединения с помощью внешней программы. Интерфейс в целом схож с  Perforce P4Merge, однако есть ряд своих особенностей (Рисунок 8)

 

Рисунок 8 - Интерфейс объединения "Kdiff3"

 

Слева находится старая конфигурация поставщика, затем основная конфигурация и справа - новая конфигурация поставщика. Разумеется, порядок следования окон можно изменить, на рисунке представлен вид по умолчанию. Программа позволяет перемещаться в модулях по проблемным фрагментам кода - по частям, измененным в основной конфигурации и в новой конфигурации поставщика. Для выбора объединения вверху окна используются кнопки "A" "B" и "C". На этом принципиальные отличия Kdiff3 от Perforce P4Merge по большей части заканчиваются. По своему опыту могу сказать, что удобнее и нагляднее работать с Perforce P4Merge, однако тут уж дело вкуса.

 

Заключение

В текущей публикации были рассмотрены некоторые этапы по доработке обновляемых конфигураций, а также показаны внешние инструменты трехстороннего сравнения/объединения. Существует множество других программ, позволяющих корректно сравнивать модули при обновлении, но здесь я решил рассмотреть две наиболее часто используемых. Удобство описанных приложений объясняется в простоте их установки и применения - наглядном анализе доработок, используя трехстороннее сравнение. На компьютер, где находится база возможно установить сразу несколько внешних программ и использовать их поочередно, переключаясь по шестерёнке в окне объединения конфигураций (Рисунок 6).

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

Обновление нетиповые P4Merge Kdiff3 Расширения

См. также

Зарплата Регламентированный учет и отчетность Кадровый учет Обновление 1С Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Зарплата и Управление Персоналом 2.5 Бухгалтерский учет Налоговый учет Управленческий учет Акцизы ЕНВД ЕСН Земельный налог ИП, ПБОЮЛ, КФХ Налог на имущество Налог на прибыль НДС НДФЛ ФОМС, ЕФС Транспортный налог УСН ПСН (патентная система налогообложения) Платные (руб)

Пакет обновлений для старых конфигураций 1С:КА 1.1, ЗУП 2.5 и БУХ 2.0 - УСН, НДС 5%, 7%, НДФЛ новая шкала 2025, ЕФС-1, Расчет страховых взносов, Статистика, СЗВ-ТД, 2-НДФЛ, Регламентированная отчетность, Кадровый учет, Прослеживаемость импортных товаров. С 14.04.25 ожидается увеличение стоимости на 10%

30690 руб.

01.04.2020    156183    580    392    

267

Обновление 1С Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1C:ERP Абонемент ($m)

Внешняя обработка для обновления расширений и дополнительных обработок 1С из GitHub. Поддерживает как публичные, так и приватные репозитории, фильтрацию релизов по версии конфигурации, скачивание .cfe, .epf, .erf.

1 стартмани

15.04.2025    610    2    Aleksandr    0    

14

Обновление 1С Системный администратор Программист Платформа 1С v8.3 Абонемент ($m)

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

1 стартмани

02.04.2025    548    2    DoubleT    8    

4

Обновление 1С Linux Системный администратор Программист Бесплатно (free)

Пошаговая инструкция для обновления платформы 1С на сервере Linux Debian.

28.03.2025    878    California_Dreaming    2    

5

Обновление 1С Программист Платформа 1С v8.3 Россия Бесплатно (free)

При обновлении релиза конфигурации УТ появилась ошибка "Ошибка формата потока".

21.03.2025    1088    Gummi_pr    10    

7

Обновление 1С Программист Платформа 1С v8.3 1С:ERP. Управление холдингом Абонемент ($m)

Описан практический пример обновления через копию конфигурации 1С:ERP. Управление холдингом с версии 3.2.6.6 на версию 3.2.6.7, который можно применять на других конфигурациях и версиях.

10 стартмани

18.02.2025    999    PetrovAnton    6    

5

Обновление 1С Программист Платформа 1С v8.3 Абонемент ($m)

Отчет о сравнении конфигураций представляет собой обширный массив информации. Однако у него есть значительное ограничение: его невозможно настраивать, например, добавлять различные группировки, фильтры или сортировку данных. Тем не менее, если преобразовать этот отчет в таблицу и использовать её в качестве источника данных, это открывает возможность для создания универсального отчета с использованием группировок, отборов и сортировки

10 стартмани

18.02.2025    913    5    kalyaka    0    

7

Обновление 1С Программист Платформа 1С v8.3 Абонемент ($m)

При длительном обновлении из конфигуратора следим за процентом загрузки ПК и отправляем письмо на почту при завершении.

1 стартмани

17.02.2025    420    0    slavik27    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kauksi 217 06.04.22 16:09 Сейчас в теме
Perforce закрыли по ходу доступ с российских ip. Ну и ладно Kdiff еще и легче
Denis211990; +1 Ответить
2. Dimbayyyy 199 06.04.22 16:59 Сейчас в теме
(1) Действительно, сайт не работает. На момент создания публикации проблем не было.
3. kauksi 217 06.04.22 17:27 Сейчас в теме
прямая ссылка на дистр https://cdist2.perforce.com/perforce/r22.1/bin.ntx64/p4vinst64.exe, ну либо пользуйтесь западными прокси
alsan; Orlando Skibraves; sergkushkov; Dimbayyyy; +4 Ответить
4. user1118625 12 12.09.22 14:58 Сейчас в теме
Добрый день. Подскажите пожалуйста, строку настройки для объединения 2-х файлов для Р4, а то в публикации именно эта часть и закрыта :)
VKuzmin76; +1 Ответить
5. adapter 418 23.11.22 10:54 Сейчас в теме
Теперь остается в окне "Режим объединения и порядок подчиненных объектов" выбрать Perforce P4Merge и применить настройки.

Далее, в окне сравнения/объединения у нас появится возможность "Объединить с помощью внешней программы" (Рисунок 6)


А где это окно "в окне "Режим объединения и порядок подчиненных объектов" выбрать Perforce P4Merge"?
Путь к внешней программе указал. Но у меня при обновлении через поддержку нет пункта "Объединить с помощью внешней программы"
Платформа 8.3.18.1363
6. user970589 10 28.12.22 07:50 Сейчас в теме
(5)
в окне сравнения/объединения у нас появится возможность "Объединить с помощью внешней программы" (Рисунок 6)

когда вы изменения в модуле очередном настроили - шестеренку жамкните, там и будет выбор
7. SagittariusA 16.02.23 19:07 Сейчас в теме
Кто-нибудь настраивал "Araxis"?
16. frkbvfnjh 811 17.04.25 13:48 Сейчас в теме
8. gamletspb 112 08.09.23 09:07 Сейчас в теме
у меня при использовании P4Merge при объединении почему-то обрезает целые куски кода, никто не сталкивался с таким безобразием?
Прикрепленные файлы:
10. alexbur 31 16.11.23 05:51 Сейчас в теме
(8), сталкивался. Использовал только для восстановления соответствий методов в расширении с ключом ИзменениеИКонтроль, если исходные методы изменились.

Причём в интерфейсе P4Merge итоговый текст собирается правильно, но при записи в конфигурацию пропадают куски текста. Если итоговый вариант из P4Merge скопировать и ручками в конфигурацию перенести, то всё в порядке.

Вам удалось победить проблему?
d4rkmesa; +1 Ответить
11. gamletspb 112 16.11.23 11:41 Сейчас в теме
(10) не стал заморачиваться, вернулся на kdiff3. Благо проблема с зависаниями решилась: https://v8.1c.ru/lawmonitor/2089e82b-0453-11ee-8cbc-005056bea45e.htm
12. Гипервизор 29.12.23 12:04 Сейчас в теме
(11) А где по ссылке про kdiff3?
13. gamletspb 112 09.01.24 08:42 Сейчас в теме
(12) извиняюсь, не ту ссылку скопипастил, вот правильная: https://telegra.ph/kdiff-bug-12-27
9. Восьмой 92 08.11.23 11:34 Сейчас в теме
Настройки для examdiff
Прикрепленные файлы:
14. d4rkmesa 06.06.24 11:26 Сейчас в теме
Для p4merge, при обновлении методов в расширении с &ИзменениеИКонтроль имеет смысл comparison method выбрать Ignore Line Ending and White Space length Differences - так меньше значимых различий и конфликтов будет показывать.
15. pridecom 773 18.07.24 13:35 Сейчас в теме
Как сделать раскраску кода в Perforce P4Merge ?
Оставьте свое сообщение