Основа быстрого и безошибочного обновления закладывается на этапе разработки или при рефакторинге кода.
Прежде всего, всегда отмечайте отредактированные участки кода. В моей компании для этого используется метка //гг, плюс один или несколько символов, идентифицирующих программиста.
Перем ТаблицаСтоимостейБезДопРасходов;//гги
//гги ТабДокумент = ПечатьАктаОбОказанииУслуг();
//гги
Если Не Проведен Тогда
Предупреждение("Запрещено печатать непроведенные документы");
возврат;
КонецЕсли;
//гги
//гги
Процедура ДополнительныеДействияПриОткрытииФормы()
...
КонецПроцедуры
Здесь «//гг» - общая метка, «и» - мой буквенный идентификатор. Такие метки быстро наносить и легко искать в модулях конфигурации.
Рядом с меткой полезно указать, с какой целью сделано это изменение. Это может быть реализация некоего технического задания, исправление ошибки и так далее. Я использую метки «//тз001», «//метка002». Детальное описание, что означает техническое задание №001 или с чем было связано внесение изменений под меткой №002, я веду в отдельном файле (также можно использовать какой-нибудь модуль самой конфигурации). Если некая процедура использована в нескольких ТЗ, я отмечаю ее несколькими метками:
//гги//тз008//тз013
Функция НазначениеСпецификации_ЛКМ_Новые() Экспорт
возврат лкпОбщегоНазначенияПолныеПрава.ПолучитьЭлементСправочника(
"ЛКМ Новые", "НазначенияИспользованияСпецификаций", "Спецификации");
КонецФункции
Заглянув в описание, можно узнать, для чего были внесены изменения. Глобальным поиском по «//тз008» можно найти все изменения, вызванные ТЗ №008 - чтобы, например, удалить их, если данное задание уже не используется, и есть желание почистить конфигурацию от «мертвого» кода.
Отмечайте изменения в интерфейсах конфигураций на обычных формах. Я делаю это в модуле приложения:
//гги Интерфейс УправлениеПроизводством добавлено меню "Дополнительно"
При изменениях в визуальных элементах формы делайте комментарии в модуле формы:
//гги добавлены вкладки ДатаОтгрузки, ОтветственноеХранение
//на вкладке Дополнительно кнопка Логистам
Это важно потому, что отличия элементов форм не видны при сравнении/объединении. По возможности добавляйте свои элементы форм программно – тогда перенос изменений при обновлении сведется к копированию/вставке кусков кода. Это можно делать на обычных и на управляемых формах:
Обычные формы:
Индекс = ЭлементыФормы.Товары.Колонки.Индекс(ЭлементыФормы.Товары.Колонки.Артикул);
Колонка = ЭлементыФормы.Товары.Колонки.Вставить(Индекс, "Транспортная упаковка");
Колонка.Имя = "ТранспортнаяУпаковка";
Колонка.УстановитьЭлементУправления(Тип("ПолеВвода"));
Колонка.Данные = "ТранспортнаяУпаковка";
Колонка.ТолькоПросмотр = Ложь;
Колонка.Ширина = 15;
Колонка.Видимость = Истина;
Колонка.ЭлементУправления.УстановитьДействие("ПриИзменении", Новый Действие("ТоварыТранспортнаяУпаковкаПриИзменении"));
Управляемые формы:
ЭлементРодитель = Элементы.Продукция;
ЭлементПередКоторымВставить = Элементы.ПродукцияНазначение;
НовыйЭлемент = Элементы.Вставить("НаименованиеПереработчика",
Тип("ПолеФормы"),
ЭлементРодитель,
ЭлементПередКоторымВставить);
НовыйЭлемент.ПутьКДанным = "Объект.Продукция.НаименованиеПереработчика";
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
Но без фанатизма – на обычных формах проще выделить мышкой и скопировать-вставить десяток элементов на добавленной странице, чем создавать их все программным способом, задавая расположение и привязки - пусть даже в перспективе это придется делать 10 или 100 раз. Однажды я перенес все многочисленные изменения форм УПП в код, а завод через полгода обанкротился.
На управляемых формах вносить изменения в форму через программный код полезно почти всегда – особенно в случае использования при обновлении внешней программы типа kDiff3 (см. ниже).
Описание изменений прав можно делать в модуле объекта или в модуле приложения, отмечая их дополнительным тегом "//правагг":
В модуле менеджера объекта:
//гги//правагг ЭкономистЦеха все; МенеджерПоЗаказам, МенеджерПоПродажам чтение
В модуле приложения:
//гги//правагг убрал доступ у роли Пользователь к
//всё Спр.ЗначенияПоказателейАнализовНоменклатуры,
//всё Спр.НормативныеДокументыСертификацииНоменклатуры,
//всё РС.НормативныеДокументыСертификацииНоменклатуры
//редактирование Спр.СерииНоменклатуры
//всё Док.СертификацияНоменклатуры
Перенос изменений в стандартных ролях – наиболее трудоемкий и неавтоматизируемый процесс. Поэтому старайтесь не изменять стандартные роли – вместо этого создавайте свои. Если вы хотите добавить права к своему справочнику менеджерам по продажам, сделайте новую роль префикс_МенеджерПоПродажам, назначьте ей права к своему справочнику, и добавьте эту роль пользователям. Другой возможный подход - добавление своих атомарных ролей, например префикс_РедактированиеСправочника_ТипыПродукции
Новые объекты и реквизиты объектов отмечайте префиксом из 2-3 символов, после которых идет символ подчеркивания. Так будет проще отличить объекты, добавленные программистом от объектов, которые удалены из конфигурации поставщика, но по той или иной причине остались в конфигурации базы данных, и вообще добавит порядка в вашу конфигурацию.
мт_ОбщегоНазначения (общий модуль)
мт_ЗначимыеПоставщики (регистр сведений)
мт_ЦенаЗакупки (реквизит документа)
Добавленные объекты располагайте внизу ветки дерева конфигурации:
После обновления они будут «уползать» вверх (например, если до обновления в конфигурации поставщика было 100 справочников, а стало 102, то после обновления справочники будут располагаться в таком порядке: с 1 по 100 строку - справочники конфигурации поставщика, потом ваши справочники, потом остальные справочники конфигурации поставщика). Не ленитесь восстановить порядок – переместите ваши объекты вниз. Недопустимо, чтобы ваши объекты были раскиданы по всему дереву конфигурации, вперемешку с объектами поставщика. Кроме очевидного беспорядка, это может привести к затруднениям при переносе изменений при обновлении. Старайтесь располагать ваши объекты в алфавитном порядке.
Не добавляйте свои отчеты и обработки в дерево конфигурации. Их место - в дополнительных отчетах и обработках или в расширении.
Итак, если в конфигурации у вас теперь порядок, то перенос изменений при обновлении происходит так: открываются две базы данных – с обновленной и необновленной конфигурациями. Глобальным поиском по меткам //гг (со снятым флажком «Искать слово целиком») выводятся метки в старой и новой конфигурации. Просматривайте вхождения по порядку, находите недостающие строки в новой конфигурации, переносите эти куски кода из старой. Ранее, при отображении дерева измененных объектов, запишите, какие роли и интерфейсы у вас дважды изменены (просмотр дважды измененных объектов – стандартный этап при использовании внешней программы, о чем ниже). Перенесите изменения в дважды измененных ролях, используя поиск по «//правагг». Перенесите изменения в дважды измененных интерфейсах, используя пометки в общем модуле.
Крайне полезно использовать внешнюю программу для анализа изменений в модулях при обновлении. Я использую kDiff3. Здесь я не буду описывать работу с ней; описание можно найти на сайте 1С или на других сайтах. Использование внешней программы ускоряет обновление в десятки раз, обязательно освойте ее.