Благодарности
Благодарю Федора Езеева за создание и распространение такой утилиты, как GComp (http://1c.alterplast.ru/gcomp/);
Алексея (alexqc) за создание и распространение утилиты ConfStarter (//infostart.ru/public/14304/);
Ларри Уолла за создание языка программирования PERL и PERL-сообщество, продолжающее его развивать;
Авторов таких утилит, как diff и diff3 и тех, кто перенёс эти утилиты на платформу windows http://gnuwin32.sourceforge.net/packages/diffutils.htm
https://github.com/emanspeaks/Diffutils64 - версия для x64, без установщика. Я ставил x86 (ссылка выше), затем заменил бинарники в Program Files
Компанию ActiveState за windows-версию PERL 5 (http://www.activestate.com/activeperl)
Обновление
2018/01/23. В связи с переездом на x64 модифицирована часть файлов.
Добавлен конфигурационный файл vars.bat, содержащий ссылки на исполняемые файлы 1c и unrar.exe
Предисловие
Данная методика работает наиболее эффективно и с минимальными ручными изменениями для конфигураций, чьи модификации накладывались на типовую, а не наоборот. В противном случае, после первого обновления по данной методике, возможно, потребуется дополнительная доработка конфигурации.
Методика разработана в 2009 году и используется по сегодняшний день практически без изменений. С её помощью обновляются программы 1С Бухгалтерия 7.7, УСН, Зарплата и Кадры. Обновление занимает 15-20 минут с использованием RAM-диска.
Методика основана на трехстороннем сравнении 3-х конфигураций: Типовой, модифицированной Типовой и новой Типовой.
Методика основана на следующих принципах:
1. Обновление реквизитов, форм и таблиц осуществляется стандартным методом объединения 1С
2. Объединение текстов модулей производится методом diff3 с последующей автоматической зачисткой конфликтов 1с.orig <-> 1c.new, так как они не содержат модификаций.
3. Если форма или таблица не подвергались модификации, то принудительно подставляется форма 1C.new.
4. Контроль конфликтов осуществляется через Полный синтаксический контроль. Diff3 выделяет знаками "<", "|", ">" части текста, которые менялись и в новой типовой и в модифицированной. А эти знаки, сами по себе, не являются кодом встроенного языка 1С.
Методика основана на следующих инструментах:
1. Набор bat-скриптов, автоматизирующих основные этапы обновлений.
2. Утилита GComp для разборки/сборки MD-файла
3. Утилита ConfStarter для автоматического обновления результирующей базы обновлённым MD-файлом
4. Утилит diff и diff3 для сравнения текстовых файлов и автоматического внесения правок.
5. Набора PERL-скриптов, осуществляющих автоматизирующих процесс сравнения и склейки модификаций.
Утилиты тестировались в среде x32 и x64. Рекомендуется, при необходимости, исправить явно указанные пути в vars.bat.
Начало
1. Установить ActivePerl версии 5.
1.1. Убедиться в ассоциации файлов .pl с файлом perl.exe.
2. Установить DiffUtils for Windows.
2.1. Убедиться, что утилиты доступны через переменную окружения PATH.
3. Установить UnRAR for Windows (http://www.rarlab.com/rar_add.htm)
4. Скачать и установить утилиты GComp и ConfStarter. Убедиться, что пути к ним есть в переменной окружения PATH
5. Скачать архив с утилитами update77.zip.
Методика
Термины
1с.ORIGinal. Типовая конфигурация, на которой базируется модифицированная.
1c.NEW. Типовая конфигурация, до которой обновляем.
MODified. Промежуточная конфигурация, используемая для обновления форм и таблиц.
original. Модифицированная конфигурация. Которую обновляем.
work. Рабочая конфигурация, в которой происходит склейка
result. Результирующая конфигурация. Результат обновления до типовой с сохраненим модификаций.
Порядок обновления
1. Создать папку c:\update
2. Распаковать в c:\update\ файлы архива update77.zip
2.1. Отредактировать пути в файле vars.bat
3.1 Запустить файл prepare1.5.bat. Будут созданы каталоги и скрипт ставится на паузу
+old +1c.XXX +1c.YYY
3.2. В этом месте нужно скопировать MD файл (или базу) обновляемой конфигурации в каталог OLD.
3.3. В каталог 1c.XXX нужно скопировать MD файл Типовой конфигурации, на которой базируется модифицированная. Должен быть оригинальный файл MD для ПРОФ версии. С Базовой GComp не работает. Каталог можно переименовать в 1C.<Номер версии>. Например, 1С.262
Порядок каталогов важен! При определении старой-новой версии конфигурации используется обычная сортировка.
3.4. В каталог 1c.YYY нужно скопировать MD файл Новой Типовой конфигурации.
Должен быть оригинальный файл MD для ПРОФ версии. Каталог можно переименовать в 1C.Номер версии. Например, 1С.270
3.5. Нажать Enter в окне скрипта.
3.6. Запустится Конфигуратор для каталога c:\update\WORK.
Нужно выполнить обновление в режиме объединения с приоритетом текущей конфигурации. Обновляемся на 1C.NEW. Т.е. новую типовую. Сохраняем, закрываем конфигуратор.
3.7. Скрипт делает технологические каталоги и копии. Распаковывает src.rar в подкаталог src
+old +1c.XXX +1c.YYY +result +work +src +1c.new +1c.original +modified +work +original
3.8. Жмём Enter. Скрипт закрыватся.
4. Заходим в src и запускаем 0.make.bat. Ждём паузы ("Для продолжения нажмите любую клавишу...")
5. Запускаем Конфигуратор в каталог c:\update\result. Делаем полный синтаксический контроль. При обнаружении ошибок на знаки "<", "|", ">" анализируем текст конфикта и правим код.
Обновление завершено. Дальше - работа напильником. Правка форм и таблиц.
Дополнения, баги и фичи
1. Предполагается, что 1С установлена в c:\Program Files\1cv77\BIN\1cv7.exe. Если исполняемый файл 1С отличается, то необходимо исправить это в файле 7.update.result.bat и вернуть его обратно в src.rar
Все настройки к исполняемому файлу 1С и UnRar хранятся в файле vars.bat
2. При частых обновлениях, возможно наложение нескольких безимянных групп на формах объектов (например, форма элемента Справочник.Сотрудники в ЗиК).
3. При обновлении в режиме объединения, 1С делает следующие "косяки":
3.1. Если MOD-реквизит был неограниченной длины, а в 1C.NEW-типовой - ограниченной, то 1С поставит ограниченную длину, что чревато потерями данных.Тоже касается длины Наименования справочника, если она была увеличена по сравнению с типовой.
3.2. То же касается констант.
3.3. Не сохраняется Ввод на основании.
3.4. Не сохраняется Периодичность номера документа ("В пределах года" и т.д.)
4. Для 1С Бухгалтерии у документа ПоступлениеМатериалов возможно "пропадание" двух текстовых колонок в МЧ, из-за того, что GComp выгружает их с одинаковым идентификатором (Себестоимость и ВсегоСебестоимость). Наличие бага проверяется простым открытием формы документа после обновления. Исправляется воссозданием колонок.
5. При изменениях в типовых печатных формах возможно дублирование печатных форм (т.е. 1С.NEW форма + модифицированная). Связано с внутренними идентификаторами.
6. В каталоге src создаются 2 лог-файла объединения форм:
result. Содержит указание метода подмены модулей с путями (если объединение кода не требуется, а код модуля не менялся)
result2. Содержит указание форм, возможно, требующих проверки. Значит форма менялась и 1С и Вами.
Исправления
1. По досадному недоразумению в первую публикацию ошибочно был залит тестовый файл prepare1.2.bat
В нём нужно заменить (строки 23-28)
xcopy /y /e old\*.* result\
for /F %%A in ('dir /on /b 1c.*') do (
copy /y %%A\1cv7.md work\
goto NEXT2
)
:NEXT2
на
xcopy /y /e old\*.* result\
xcopy /y /e old\*.* work\Исправленный файл в архиве перезалит
2. Добавлен конфигурационный файл vars.bat, содержащий пути к 1c и unrar.
Стартовый файл переименован в prepare1.5.bat