Заранее извеняюсь за то что получилось много буковок. Для тех кто в курсе вкрадце скажу обработк позволяет удалять //{{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