gifts2017

Обновление нетиповых конфигураций, или как убрать надоевший //{{MRG

Опубликовал Ilya Arhipov (Maddy18) в раздел Администрирование - Системное

Методика обновления нетиповых конфигураций позволяющая существенно сократить трудозатраты Или как убрать кучу лишних комментариев в коде (//{{MRG ... )

Заранее извеняюсь за то что получилось много буковок.  Для тех кто в курсе вкрадце скажу  обработк позволяет удалять //{{MRG Комментарии из текста.   Далее идет пособие по обновление нетиповой конфигурации 1C 8.


Начну пожалуй с того как я учился обновлять нетиповые конфигурации и к чему меня все это привело. 

Начал обновлять 1с еще со времен 1с 77. 

Механизм обновления в 7-ке был предельно прост. Создаем 3 базы :  1 -рабочая база, 2ая  - копия рабочей базы, 3я - пустая типовая база того же релиза.

1ую сравниваем новым релизом. 2ую с типовым релизом. 3ю с новым релизом.   

Итого в о 2ом окне сравнения мы видим все "доработки" в 3ем видим все  изменения релиза , а в основной решаем что оставляем, а что берем из нового релиза. 

После обновления проверка:  рабочая, обновленная база сравнивается с типовым релизом. Список изменений должен быть идентичен второй базе.  Если это так, то обновление сделано верно. 

 

 


 

 

 

В 8ке же все кардинально изменилось.

Начиная с того что в одной базе храниться 3 и более конфигураций. 

1 - Основная конфигурация  - Та с которой непосредственно работает программист.

2 - Конфигурация базы данных - Эта та конфигурация, на которой работает в данный момент база данных.  (т.е если вы написали пару строк в конфигураторе, то  это означает что во первых основная конфигурация и конфигурация базы данных стали не идентичны,  во вторых ) 

3 - Конфигурация поставщика - это по сути типовой релиз.

4..n конфигураций поставщика может быть много, но это тема уже совсем другой статьи. 

Этот факт позволил разработчикам в одной базе реализовать кучу вкусностей. О них конкретнее: 

п.1. - При обновлении в одной базе можно увидеть все 3 различия как в 3ех базах 77, о которых говорилось выше. (Отличие типовой базы от нового релиза, "Доработки программистов" - отличия основной конфигурации от конфигурации поставщика,  и отличие основной конфигурации от нового релиза ).

п.2. - Чисто теоретически  при обновлении может возникнуть 3 случая 

1 случай - объект изменен только в базе, а в релизе не было изменений данного объекта 

2 случай - объект изменен только в релизе, а в базе он не отличается от конфигурации поставщика 

3 случай - объект изменен и там и там.

 так вот в 8 ке 1ый и 2ой случай платформа обрабатывает автоматически. (Принимает решение из какой конфигурации взять код)

 

 

Рассмотрим 3ий случай подробнее.  По каждому объекту программисту надо читать код, и принимать решение, оставлять свой код, или взять код разработчика.  Для этих целей созданы 2 механизма: 

1 объединение с приоритетом основной конфигурации - (важнее то что сделано программистами)

2 объединение с приоритетом новой конфигурации поставщика - (важнее то что сделано в релизе) 

 После обновление в режиме объединение в коде остается куча записей взятых в тег //{{MRG ..Код с которым возникли коллизии..//}}MRG   Вот пример куска кода из Авансового отчета.

	Если ЗначениеЗаполнено(Подразделение) Тогда
		
//{{MRG[  ]
			ПредставлениеПодразделения = СокрЛП(Подразделение.Наименование);
//}}MRG[  ]
//{{MRG[  ]
//			ПредставлениеПодразделения = Подразделение.Наименование;
//}}MRG[  ]
		ОбластьМакета.Параметры.ПредставлениеПодразделения         = ПредставлениеПодразделения;
		ОбластьМакета.Параметры.КодПодразделения                   = Подразделение.Код;
	КонецЕсли;
	ОбластьМакета.Параметры.ПредставлениеПодотчетногоЛица          = ПодотчетноеЛицо;
	ОбластьМакета.Параметры.ПредставлениеПодотчетногоЛицаОт        = ПодотчетноеЛицоОт;
	ОбластьМакета.Параметры.ТабельныйНомер                         = ТабельныйНомер;
//{{MRG[  ]
//	//Изм АФМ
//	ОбластьМакета.Параметры.ДолжностьПодотчетногоЛицаПредставление = Шапка.Должность;
//	ОбластьМакета.Параметры.ПредставлениеПодразделения = Шапка.Подразделение;
//	//Конец
//}}MRG[  ]
	ОбластьМакета.Параметры.ДолжностьПодотчетногоЛицаПредставление = Должность;
	ОбластьМакета.Параметры.НомерДокумента                         = ОбщегоНазначения.ПолучитьНомерНаПечать(ЭтотОбъект);
	ОбластьМакета.Параметры.ПолученоИзКассы                        = ПолученоИзКассы;
	ОбластьМакета.Параметры.ПолученоИзКассыПоКартам                = ПолученоИзКассыПоКартам;

 

Например в этом месте кода понятно что в релизе был добавлен метод СокрЛП();

//{{MRG[  ]
                        ПредставлениеПодразделения = СокрЛП(Подразделение.Наименование);
//}}MRG[  ]
//{{MRG[  ]
//			ПредставлениеПодразделения = Подразделение.Наименование;
//}}MRG[  ]

  А в этом месте кода  были доработки какого-то АФМ ( Андропова Федора Михалыча, или еще кого-то)

//{{MRG[  ]
//	//Изм АФМ
//	ОбластьМакета.Параметры.ДолжностьПодотчетногоЛицаПредставление = Шапка.Должность;
//	ОбластьМакета.Параметры.ПредставлениеПодразделения = Шапка.Подразделение;
//	//Конец
//}}MRG[  ]
 	 
 Подведем черту:

 
 
Итак задача сводиться к тому чтобы после объеденения вычистить код от ненужных коментариев, а доработки некого АФМ оставить.
Делаем глобальный поиск по конфигурации ищем АФМ - оставляем либо адаптируем весь его текс, а для того чтобы удалить остатки я придумаю обработку по очистке тегов MRG
Довели модуль до рабочего состояния Найдя все изменения программиста, который подписался как АФМ,
        //Изм АФМ
	  ОбластьМакета.Параметры.ДолжностьПодотчетногоЛицаПредставление = Шапка.Должность;
	  ОбластьМакета.Параметры.ПредставлениеПодразделения = Шапка.Подразделение;
	//Конец

         

проверили синтаксис помошником, выделили весь модуль скопировали текст в буфер и вставили его в мою обработку - нажали 
"Убрать MRG" - все ненужные комментарии ушли. осталось только то что надо :
 
    Если ЗначениеЗаполнено(Подразделение) Тогда
		
			ПредставлениеПодразделения = СокрЛП(Подразделение.Наименование);
		ОбластьМакета.Параметры.ПредставлениеПодразделения         = ПредставлениеПодразделения;
		ОбластьМакета.Параметры.КодПодразделения                   = Подразделение.Код;
	КонецЕсли;
	
	ОбластьМакета.Параметры.ПредставлениеПодотчетногоЛица          = ПодотчетноеЛицо;
	ОбластьМакета.Параметры.ПредставлениеПодотчетногоЛицаОт        = ПодотчетноеЛицоОт;
	ОбластьМакета.Параметры.ТабельныйНомер                         = ТабельныйНомер;
	//Изм АФМ
	ОбластьМакета.Параметры.ДолжностьПодотчетногоЛицаПредставление = Шапка.Должность;
	ОбластьМакета.Параметры.ПредставлениеПодразделения = Шапка.Подразделение;
	//Конец
	ОбластьМакета.Параметры.ДолжностьПодотчетногоЛицаПредставление = Должность;
	ОбластьМакета.Параметры.НомерДокумента                         = ОбщегоНазначения.ПолучитьНомерНаПечать(ЭтотОбъект);
	ОбластьМакета.Параметры.ПолученоИзКассы                        = ПолученоИзКассы;
	ОбластьМакета.Параметры.ПолученоИзКассыПоКартам                = ПолученоИзКассыПоКартам;
 
Все обновление нетиповых превратилось только в анализ кода и в Ctrl+С, Ctrl+V.

 

С вопросами милости прошу: www.1carhipov.ru

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
ПомошникОбновления.epf
.epf 7,60Kb
29.03.14
22
.epf 1.0 7,60Kb 22 Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Александр Медведев (anig99) 30.03.14 21:21
оформление статьи "поползло". Читать нельзя.
BlackStar; bashinsky; +2 Ответить 1
2. Дмитрий Башинский (bashinsky) 31.03.14 09:29
А почему бы не выгружать файлы конфигурации в определенную папку, а обработкой брать из этой папки файлы, анализировать их и потом грузить их обратно?
3. Ilya Arhipov (Maddy18) 31.03.14 18:30
(2) bashinsky,1) не знаю как файлы конфигурации выгружать. 2) не знаю как обработанные файлы загружать обратно.
4. Ilya Arhipov (Maddy18) 31.03.14 18:43
(1) anig99, появиться время сделаю оформление читаемым.
5. Елена К (for-elenak) 02.04.14 07:38
Так и не поняла, что делает сия обработка...С любым вариантом объединения требуется проанализировать, что изменить и что оставить. Не думаю, что можно обойтись без интеллектуального вмешательства программиста...ИМХО..
CratosX; Рамзес; +2 Ответить
6. DAnry (DAnry) 03.04.14 18:48
Спасибо за статью. Обновлял я, конечно, нетиповые или "допиленные" конфигурации множество раз, а вот с //{{MRG сталкивался крайне редко (раза два наверное) и то в этих случаях конфигурации доставались мне "по наследству". Теперь буду знать причину появления сего странного кода. Хотя, по большому счету, ситуацию это существенно не меняет.
7. Роман Попов (popro) 25.04.14 13:11
Можно заменить глобальной заменой во всей конфигурации после обновления, чем выигрывает ваш способ?
8. Ilya Arhipov (Maddy18) 06.05.14 16:51
(7) popro, Если заменить глобальный заменой, то останется закомментированный старый код, который нужен как коню пятая нога.
9. Денис Vvv (EvilDoc) 06.05.14 17:14
чаще всего нужно оставить и то и то. А обработка вычистит что-либо в зависимости от режима объединения. Тч проще записывать дважды измененные процедуры в тетрадку а потом ручками добавлять необходимое. Но чаще сталкиваюсь с изменениями в разных процедурах поэтому обновляю их выборочно. Тч за обновление среднедоработанной УПП таких вот "записей в тетрадке" и ручного внесения доработок +- 10 штук) Плюс подхода - видишь результат а не доверяешь тому как обновит платформа и что вычистит обработка
v.a.ryag; +1 Ответить
10. Денис Vvv (EvilDoc) 06.05.14 17:16
(8) нужен чаще всего. Или как на счет случаев когда в одной процедуре в одной строке нужно оставить изменения а в другой обновить) Или если необходимое изменение было добавлено как новые строки. Или в обновлении новые строки)
11. Максим Жохов (ZhokhovM) 02.07.14 17:52
(3) Maddy18, легко! Нужно сделать следующее:
1.через меню Конфигурация - Выгрузить файлы конфигурации
2.через меню Конфигурация - Загрузить файлы конфигурации
Если их нет, то перетащить их самостоятельно из меню Сервис - Настройка, далее на закладке Команды выбираем слева категорию "Конфигурация", а справа выделить и перетащить их обратно в меню.
12. Ilya Arhipov (Maddy18) 02.07.14 19:26
(11) ZhokhovM,

Вау! Сколько лет занимаю 1С, про этот способ не знал. Спасибо за наводку.
13. Максим Жохов (ZhokhovM) 03.07.14 09:58
14. Илья (Dr_DelProg) 11.10.14 20:10
Задумка хорошая. Судя по тому, что написано в описании - как раз то, что искал. Жалко в закрытом доступе - скачать нельзя.
15. Илья (Dr_DelProg) 11.10.14 21:41
Написал такую же, короче.
Теперь можно сколько угодно большие изменения в обновлении делать без потери собственного кода. Мануалка на форме обработки. Сделано под УФ 8.3.
Прикрепленные файлы:
ОчисткаMRG.epf
16. Илья (Dr_DelProg) 11.10.14 22:22
Не даёт в личку ответить. Скинь на dr_delprog-цобакен-мэйл.ru.
Спасибо.
17. Илья (Dr_DelProg) 11.10.14 23:00
В платформу такое не встраивают, видимо потому, что объединение работает через... не всегда правильно работает. Строки путает местами, блоки по странному выделяет - натыкался многократно. Так что после всей нашей автоматизации всё же стоит сделать сравнение объединение с конфигурацией поставщика и проверить, что кроме наших доработок старого кода не осталось. Проверка синтаксиса не всегда такое видит.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа