Технология доработок типовой конфигурации 8.х для обновления за 30 минут

03.11.15

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

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

Технология обновления нетиповых конфигураций хорошо описана в статье //infostart.ru/public/18562/. Целью данной статьи является описать набор некоторых правил, как ее ускорить.

1. Лучшая доработка, это доработка без изменения конфигурации. Если возможно, используем справочник "Внешние отчеты и обработки"

2. Если без доработок никак, стараемся создавать новые объекты, в частности:

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

2.2. Создаем общие модуля (для сервера, клиента и пр.), куда стараемся переносить все изменения. Остальные модули вызывают данный код.

2.3. Используем подписки на события для проверки значений, корректировки проведения документов.

2.3. Для новых объектов лучше создать новую роль, а не редактировать старую

2.4. Все новые и измененные объекты включаем в специально созданную для этого подсистему

3. Если необходимо изменить код модуля:

3.1. Выделяем комментарием все сделанные изменения, причем комментарий должен позволять однозначно найти все изменения конфигурации (используя глобальный поиск) и при этом не дать лишних строк. Желательно добавлять метку задачи (код), в рамках которой были изменения, дату и автора решения.

3.2. Старый код не удаляем, а оставляем закомментированным

3.3. Комментарий добавляем перед и после изменений, с открывающим и закрывающим символом соответственно (например: + и -)

3.4. Самое главное, чего, собственно, нигде не встречал и что сильно упрощает жизнь, создаем процедуру "НеТиповыеИзменения". Данная процедура должна содержать в себе копию всех комментариев по сделанным изменениям с указанием процедур в которых были внесены данные изменения. Т.е. при сравнении/объединении модуля мы вначале определяем процедуры, содержащие изменения, и не проходим по всем процедурам модуля.

Как пример на примере пункта 3.5 в конце модуля добавляется процедура: 

Процедура НеТиповыеИзменения()
//ПриОткрытии() //[*]ОткрываемПоДругому
КонецПроцедуры

3.5. Спасибо  unichkin. Все изменения по возможности выносить в отдельные процедуры, как один из минусов сложность в анализе изменений в одном месте, отлично подходит при отсутствии пункта 3.4, пример: 

Процедура ПриОткрытии()
//{[*]ОткрываемПоДругому 
// уфк_ПриОткрытии()
//----------------------ЗАМЕНЕНО НА---------------------
мод_ПриОткрытии();
//}
КонецПроцедуры;

// Типовой код....

////////////////////////////////////////////////////////////­//////////////////////////////
// МОДИФИЦИРОВАННЫЕ ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ

Процедура мод_ПриОткрытии()
// свой код...

КонецПроцедуры;

////////////////////////////////////////////////////////////­//////////////////////////////
// УДАЛЕННЫЕ ФРАГМЕНТЫ КОДА
Процедура уфк_ПриОткрытии()
// Исходный типовой код
КонецПроцедуры;

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

Процедура МойОбработчикПриОткрытии(Отказ)
    // вызов типового обработкчика
    ПриОткрытии(Отказ);
    // тут наш кот
КонецПроцедуры
УстановитьДействие("ПриОткрытии", "МойОбработчикПриОткрытии");

4. Если необходимо изменить форму:

4.1. Описываем все изменения в процедуре "НеТиповыеИзменения" см. 3.4.

4.2. Кнопки и поля формы возможно добавлять программно, как и настраивать их первоначальную видимость/доступность.

5. Спасибо  unichkin. Внедрения стандартов разработки (например: Система стандартов и методик разработки конфигураций для платформы 1С:Предприятие 8.), позволит быстрее воспринимать код другого программиста.

 Ссылки по теме (для меня это lvl-up, можно рассматривать как продолжение статьи):

v8: Концепция минимального изменения конфигурации для легкого обновления

Методика переопределения и вызова обработчиков событий формы в 1С 8 (переопределение собятие формы для обычных форма)

Методика упрощения поддержки конфигураций. Переопределение и вызов обработчиков событий для УФ 1С 8.2-8.3 (переопределение собятие формы для управляемых форм)

Готов выслушать критику, советы по улучшению статьи как с точки зрения содержания, так и с точки зрения оформления.

Версия 1.1:

Внес дополнения по комментариям от авторов unichkin, Armando , ИНТЕГРА

Уточнил пункт 3.4

Версия 1.2: добавил ссылку по теме для обычных форм. и пункт 5.

Обновление типовая измененная конфигурация

См. также

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

Обновления для конфигураций: КА 1.1; ЗУП 2.5; БУХ 2.0; КА 1.1 Комплексная автоматизация торговли алкогольной продукцией; КА 1.1 Комплексный учет сельскохозяйственного предприятия

27900 руб.

01.04.2020    147099    649    360    

235

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

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

21.10.2024    2661    mixaeel    18    

17

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

Те кто объединял конфигурации находящиеся на поддержке, обновлял подсистемы БСП прекрасно помнят упражнение «10000 тысяч кликов мышкой» или, непонятное словесное заклинание, после которого конфигурация снимается с поддержки целиком.

1 стартмани

26.09.2024    501    3    milkers    2    

7

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

Вышел новый релиз для УТ11 5.19.63. На копии базы было выполнено обновление и вылезли проблемы с номенклатурой, подлежащей маркировке. В публикации описаны проблемы, обнаруженные в копии базы конкретной организации.

24.09.2024    861    gull22    2    

8

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

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

17.09.2024    4369    vatkir    15    

10

Обновление 1С Пользователь Платформа 1С v8.3 1С:Управление торговлей 11 Абонемент ($m)

Упрощенное обновление конфигураций 1С (предпочтительно самописных) с помощью батника и Яндекс Диска (по публичной ссылке)

1 стартмани

22.08.2024    558    0    user1694357    0    

4

Обновление 1С Системный администратор Россия Абонемент ($m)

На ИТС есть статья, в которой поверхностно описан процесс автоматического обновления тонких клиентов. В качестве примера, что логично, представлены методы конфигурации 1С. Но, в отличие от того же управления списками баз, для обновления не требуется хранить информацию, потому я решил переписать код на php, чтобы можно было отвязаться от 1С. Не работает для файловых баз, подключенных как File="ПутьКПапкеБазы"; (а жаль), для опубликованных файловых - работает.

1 стартмани

20.08.2024    681    MikeSh    10    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. TMV 14 03.11.15 19:08 Сейчас в теме
(0), где упоминание расширений?
vx_gas; mihey; ya.Avoronov; ivanov660; +4 Ответить
2. ИНТЕГРА 25 03.11.15 21:29 Сейчас в теме
Все верно написал, не подкопаться! Делаю точно также и живу спокойно :) ТОлько я с 4.1 гораздо проще обхожусь - вношу в справочную информацию к своей подсистеме все доработки. Там тоже соблюдаю определенный формат.
8. Trise 139 04.11.15 12:58 Сейчас в теме
(2) ИНТЕГРА, Смы(6) unichkin, К сожалению не нашел статей по "мягкой" доработке. Кидайте ссылку обязательно добавлю в статью.
12. unichkin 1579 04.11.15 23:52 Сейчас в теме
(8)
Методика переопределения и вызова обработчиков событий формы в 1С 8
Методика упрощения поддержки конфигураций. Переопределение и вызов обработчиков событий для УФ 1С 8.2-8.3

(7) Armando, можно и так - но это затрагивает область программы. И как раз на этом методе основана статья из первой ссылки. ИМХО (6) - как то нагляднее, но это конечно только мое мнение :)
14. Trise 139 05.11.15 07:16 Сейчас в теме
(12) unichkin, за статьи спасибо! Жалко, что только для управляемых форм подходит.
(13) unichkin, не согласен. Знакомился со стандартами и методиками от 1С. В них в основном описано как писать код, называть процедур и пр., но в задачи стандарта ни как не входит цель по минимизации времени обновления доработанной типовой конфигурации.
15. unichkin 1579 05.11.15 09:46 Сейчас в теме
(14) "Жалко, что только для управляемых форм подходит." - неправда ваша. Две статьи, одна для обычных, другая для УФ. В задачи стандарта входит минимизация времени понимания одним кодером "дампа подсознания" другого. А это тоже влияет на время обновления :) Никакие ухищрения не помогут и не спасут, если двое делают "хорошо", но каждый по-своему.
//
Для объектов - дополню:
- ни в коем случае НИКОГДА не трогать именования типовых реквизитов, это очень пагубно сказывается на времени сравнения\объединения, я уж не говорю про разработку
- Все добавленные объекты переносить вверх соотв. ветки дерева метаданных - это во-первых оч. удобно при разработке - свои объекты всегда сверху, во вторых при том-же сравнении объединении будет меньше типовых в которых "Порядок объекта изменен"
- После обновления неплохо выполнить сравнение с конфой поставщика и убедиться что нет артефактов вроде "Справочная информация". Т.е. все изменения которые покажет сравнение должны быть понятны.
3. Astafan 03.11.15 21:46 Сейчас в теме
На счет п.3.4. не совсем понял. Можно поподробней?
Для изменения формы использую следующий подход: делаю копию типовой и вношу туда все изменения. Новая форма открывается с помощью подписки ДокументаМенеджера на событие ОбработкаПолученияФормы.
5. Trise 139 03.11.15 23:14 Сейчас в теме
(3) Astafan, при сравнении двух модулей не понять, какие процедуры были изменены в типовой а какие просто обновление, для этого создается процедуоа где указываются все измененные процедуры.
9. Trise 139 04.11.15 13:00 Сейчас в теме
(3) Astafan, На счет копии типовой формы, появится необходимость отслеживать, что в ней поменялось, что-бы перенести на копию, как боритесь с такой проблемой? Или создание копии типовой равносильно снятию типовой с поддержки?
4. Armando 1401 03.11.15 22:06 Сейчас в теме
"3.4" может стать узким местом, когда над конфигурацией работают разные люди. Все не заставишь где-то еще описывать внесенные изменения.
10. Trise 139 04.11.15 13:05 Сейчас в теме
(4) Armando, тоже верно. Добавлю аргументов в мою пользу: это можно рассматривать как требования от Заказчика, что-бы не перетереть изменения от исполнителей, особенно, когда их несколько и исполнитель не выполняет обновление.
6. unichkin 1579 04.11.15 01:13 Сейчас в теме
Уже давно есть подходы по "мягкой" доработке типовых - все описано на инфостарте. В тех случаях, когда доработка разовая - пригодится эта статья. От себя лишь добавлю, что желательно не просто комментировать код, а выносить изменения в отдельные блоки. Например - нужно доработать обработчик "ПриОткрытии". Не надо лепить код непосредственно туда - создайте буферный вызов, поместите его в самый конец модуля, и работайте в нем! Т.е. вот так:

Процедура ПриОткрытии()
// Типовой код....
мод_ПриОткрытии();

КонецПроцедуры;

// Типовой код....

////////////////////////////////////////////////////////////­//////////////////////////////
// МОДИФИЦИРОВАННЫЕ ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
Процедура мод_ПриОткрытии()
// свой код...

КонецПроцедуры;
Показать


Что это дает? То, что при обновлении конфы - если будет изменена типовая процедура в режиме сравнения объединения при объединении модулей можно смело ставить галку напротив типовой процедуры. Она будет перезатерта, ну и что - ведь конце модуля остался наш буферный вызов, из названия которого сразу ясно и понятно куда его нужно вставить! Кроме этого - сразу видно какие процедуры были изменены, и это очень удобно - не надо тратить драгоценное время на просмотр всего модуля. Тут конечно есть свои нюансы - если нужно сделать пару изменений в разных частях процедуры например. Я в таких случаях ВЕСЬ текст исходной процедуры выношу в блок "Удаленные фрагменты кода" (уфк_ПриОткрытии()), в типовой процедуре ставлю комментарий "Фрагмент изменен" - и опять вызываю свой буферный обработчик. Т.е. получается так:

Процедура ПриОткрытии()

//{[*] (фрагмент изменен) 
// уфк_ПриОткрытии()
//----------------------ЗАМЕНЕНО НА---------------------
мод_ПриОткрытии();
//}

КонецПроцедуры;

// Типовой код....

////////////////////////////////////////////////////////////­//////////////////////////////
// МОДИФИЦИРОВАННЫЕ ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ

Процедура мод_ПриОткрытии()
// свой код...

КонецПроцедуры;

////////////////////////////////////////////////////////////­//////////////////////////////
// УДАЛЕННЫЕ ФРАГМЕНТЫ КОДА
Процедура уфк_ПриОткрытии()
// Исходный типовой код
КонецПроцедуры;
Показать


уфф... увлекся)) Сопровождал несколько обновляемых конфигураций на упр. формах где использовал такой подход, - очень удобно.
Светлый ум; IgorS; cleaner_it; Некто A. Petti; PowerBoy; +5 Ответить
7. Armando 1401 04.11.15 01:51 Сейчас в теме
(6) unichkin, в форме можно переопределять обработчики на свои, а из своих в нужный момент вызывать типовые. Тогда в большинстве случаев процедуры-обработчики событий можно смело заменять и даже дописывать в них ничего не придется:
УстановитьДействие("ПриОткрытии", "МойОбработчикПриОткрытии");


Процедура МойОбработчикПриОткрытии(Отказ)

    // вызов типового обработкчика
    ПриОткрытии(Отказ);

    // тут наш кот

КонецПроцедуры
Показать
Batman; klinval; sanja; unichkin; cleaner_it; vbuots; PowerBoy; +7 Ответить
11. Trise 139 04.11.15 13:13 Сейчас в теме
(6) unichkin, Пункт 3.4 как раз нужен что-бы случайно не перезатереть типовые процедуры. Уточнил описание пункта.
13. unichkin 1579 05.11.15 00:08 Сейчас в теме
(11) "чего, собственно, нигде не встречал" - ключевой момент, к сожалению. Все ведь уже придумано до нас, но об этом либо не знают, либо на это кладут. По крайней мере мой опыт говорит так. И ладно бы инфостарт - ведь есть замечательный ресурс ИТС, библия каждого 1С-ника, особенно начинающего. До кучи кину-ка я ссылку вот еще на это:
Система стандартов и методик разработки конфигураций для платформы 1С:Предприятие 8.
з.ы. Для тех, кто лишен доступа к ИТС существует недельный тест-драйв - это я на всякий.
16. maxg 05.11.15 18:38 Сейчас в теме
При использовании внешних программ для сравнения/объединения пункт 3.2 неактуален.
17. maxg 05.11.15 18:42 Сейчас в теме
Подробнее можно посмотреть в этом вебинаре https://www.youtube.com/watch?v=9bfKwomErfU&feature=youtu.be
IgorXml; shelldell; Trise; unichkin; +4 Ответить
18. b-dm 174 27.11.15 13:21 Сейчас в теме
Неплохая статья по обновлению типовых конфигураций.
19. q_i 584 22.12.15 21:57 Сейчас в теме
Добавлю свои 5 коп. Как убедиться, что измененную конфигурацию обновили успешно и ничего не отвалилилось?
Итак, после обновления у нас есть 4 cf-ника:
- ПоставщикСтарая - старая конфигурация поставщика;
- ПоставщикНовая - новая конфигурация поставщика - та, на которую обновляем;
- ОсновнаяСтарая - измененная конфигурация, по сути это ПоставщикСтарая с нашими изменениями;
- ОсновнаяНовая - то, что получилось после обновления ОсновнаяСтарая с помощью ПоставщикНовая.
Теперь в двух конфигураторах сравниваем попарно:
- ПоставщикСтарая и ПоставщикНовая;
- ОсновнаяСтарая и ОсновнаяНовая.
Для каждого сравнения конфигураций формируем полный "Отчет о сравнении объектов..." (для всех объектов конфигурации) в формате "Подробно", с подчиненными объектами метаданных (см. cmp.png) и сохраняем эти отчеты в текстовые файлы. Эти два текстовых файла сравниваем с помощью любой сравнивалки текста (я использую WinMerge). Так вот не считая технической информации, такой как номера строк с изменным/удаленным кодом и т.п., эти файлы НЕ ДОЛЖНЫ ОТЛИЧАТЬСЯ! Потому что оба отчёта показывают одно и то же - разницу, которую добавила в конфигурацию 1С.
После этого сравниваем попарно:
- ПоставщикСтарая и ОсновнаяСтарая;
- ПоставщикНовая и ОсновнаяНовая.
Аналогично сохраняем отчеты о сравнении в текстовые файлы и сравниваем эти текстовые файлы. Они тоже НЕ ДОЛЖНЫ ОТЛИЧАТЬСЯ! Потому что оба отчёта показывают одно и то же - разницу, которую добавили в конфигурацию мы.
Если что-то отличается (помимо технической информации) - значит или не накатили какое-то изменение из типовой, или затерли какое-то свое изменение.
P.S. Чтобы убрать из отчетов о сравнении неинформативный хлам (такой как номера строк с изменным/удаленным кодом и т.п.), можно выполнить в текстовых файлах с отчетами следующие замены по регекспам:
1. Заменить что: ^(\s*)Объект присутствует только в(.+) конфигурации: \d+ - \d+$
Заменить на что: $1Объект присутствует только в$2 конфигурации: N - N
2. Заменить что: ^(\s*)Изменено: \d+ - \d+$
Заменить на что: $1Изменено: N - N
P.P.S. Если кому нужно - могу выложить эти замены в виде макроса для Notepad++
Прикрепленные файлы:
IgorXml; Totoro; Armando; +3 Ответить
20. Dr.ZIG 27 28.06.16 06:34 Сейчас в теме
В своих разработках использую все рекомендации из статьи, только допёр до них самостоятельно. Дополню:
1) Во многих типовых конфигурациях в процедуре "ПриСозданииНаСервере" часто используется вызов какой-либо процедуры из общих модулей, куда передаётся "ЭтотОбъект" или "ЭтаФорма", например, ОбщегоНазначения.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка). Я добавил в вызов из этой процедуры вызов своей процедуры "ПриСозданииНаСервере" в своём общем модуле, где в зависимости от переданой формы (определяется по ЭтотОбъект.ИмяФормы) вношу свои изменения на форме, например программно добавляю реквизиты формы, меняю условное оформление, добавляю кнопки, переопределяю стандартные действия и прочее. Соответственно изменений в самой форме нет, даже нет необходимости снимать с поддержки.
2) для добавления предопределённых элементов можно использовать дополнительный справочник "ПредопределённыеЭлементы", с одним лишь реквизитом "Значение", имеющий тип значения "Любая ссылка", соответственно можно к нему и через код и через запросы обращаться, получая значение из соответствующего реквизита, например, "Справочники.ПредопределённыеЭлементы.Контрагенты_ОсновнойКонтаргент.Значение" - вернёт заранее заданный элемент справочника контрагенты Или в запросе через соединение с этим справочником используя конструкцию "Значение()" в условиях к справочнику "ПредопределённыеЭлементы".
Оставьте свое сообщение