Технология доработок типовой конфигурации 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, ЗУП 2.5, БУХ 2.0: НДС, ЕФС-1, Расчет страховых взносов, Мобилизация, Статистика, Электронные трудовые книжки, 2-НДФЛ, Регламентированная отчетность, Кадровый учет, Прослеживаемость импортных товаров

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

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

19900 руб.

01.04.2020    140623    678    352    

232

Автоматическое подтверждение легальности обновления базы или как обновить 100 типовых баз 1С за 5 часов

DevOps и автоматизация разработки Обновление 1С Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Расширение для конфигураций 1С для автоматического подтверждения легальности обновления и выполнения обработчиков обновления при пакетном автоматическом обновлении большого числа баз 1С. А также сам модуль обработки по автоматическому обновлению баз.

2 стартмани

08.05.2019    24214    54    VPanin56    26    

26

Ссылочная константа содержит недопустимый ссылочный номер таблицы

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

На связи Сергей Скирдин, технический директор ИТ-интегратора «Белый код». Сегодня расскажу, как решить одну из проблем, с которой можно столкнуться при обновлении конфигурации 1С.

19.03.2024    842    sergey.skirdin    3    

13

Скрипт для обновления базы с расширением из хранилища

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

Небольшая оптимизация рабочего времени через скрипт обновления базы 1С с расширением из хранилища конфигураций.

22.01.2024    1119    ke.92@mail.ru    2    

24

Многопоточное обновление 1С: Управление холдингом

Обновление 1С 8.3.14 1С:Управление холдингом Абонемент ($m)

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

1 стартмани

10.01.2024    3181    saver77    18    

24

Не обновляется типовая конфигурация 1С через конфигуратор

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

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

29.11.2023    1353    shestopalovpro    4    

7

Принудительный запуск дополнительных процедур обработки данных после обновления

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

Ручной запуск процедур обработки обработчиков после обновлений. Может быть полезно стажерам, консультантам, разработчикам, администраторам, всем, кто обновляет информационные базы.

1 стартмани

20.11.2023    603    6    IvanTerentev    0    

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 1559 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 1559 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 1399 03.11.15 22:06 Сейчас в теме
"3.4" может стать узким местом, когда над конфигурацией работают разные люди. Все не заставишь где-то еще описывать внесенные изменения.
10. Trise 139 04.11.15 13:05 Сейчас в теме
(4) Armando, тоже верно. Добавлю аргументов в мою пользу: это можно рассматривать как требования от Заказчика, что-бы не перетереть изменения от исполнителей, особенно, когда их несколько и исполнитель не выполняет обновление.
6. unichkin 1559 04.11.15 01:13 Сейчас в теме
Уже давно есть подходы по "мягкой" доработке типовых - все описано на инфостарте. В тех случаях, когда доработка разовая - пригодится эта статья. От себя лишь добавлю, что желательно не просто комментировать код, а выносить изменения в отдельные блоки. Например - нужно доработать обработчик "ПриОткрытии". Не надо лепить код непосредственно туда - создайте буферный вызов, поместите его в самый конец модуля, и работайте в нем! Т.е. вот так:

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

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

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

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

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


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

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

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

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

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

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

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

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

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


уфф... увлекся)) Сопровождал несколько обновляемых конфигураций на упр. формах где использовал такой подход, - очень удобно.
Светлый ум; IgorS; cleaner_it; Некто A. Petti; PowerBoy; +5 Ответить
7. Armando 1399 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 1559 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 171 27.11.15 13:21 Сейчас в теме
Неплохая статья по обновлению типовых конфигураций.
19. q_i 577 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) для добавления предопределённых элементов можно использовать дополнительный справочник "ПредопределённыеЭлементы", с одним лишь реквизитом "Значение", имеющий тип значения "Любая ссылка", соответственно можно к нему и через код и через запросы обращаться, получая значение из соответствующего реквизита, например, "Справочники.ПредопределённыеЭлементы.Контрагенты_ОсновнойКонтаргент.Значение" - вернёт заранее заданный элемент справочника контрагенты Или в запросе через соединение с этим справочником используя конструкцию "Значение()" в условиях к справочнику "ПредопределённыеЭлементы".
Оставьте свое сообщение