Поиск по этому блогу

вторник, 22 декабря 2015 г.

Как убедиться в том, что измененная типовая конфигурация 1С обновлена успешно?

Как убедиться, что измененную типовую конфигурацию мы обновили успешно и ничего не отвалилилось?
Итак, после обновления у нас есть 4 cf-ника:
  1. ПоставщикСтарая - старая конфигурация поставщика; 
  2. ПоставщикНовая - новая конфигурация поставщика - та, на которую обновляли; 
  3. ОсновнаяСтарая - измененная конфигурация, по сути это ПоставщикСтарая с нашими изменениями; 
  4. ОсновнаяНовая - то, что получилось после обновления ОсновнаяСтарая с помощью ПоставщикНовая. 
Теперь в двух конфигураторах сравниваем попарно:
  1. ПоставщикСтарая и ПоставщикНовая
  2. ОсновнаяСтарая и ОсновнаяНовая
Для каждого сравнения конфигураций формируем полный "Отчет о сравнении объектов..." (для всех объектов конфигурации) в формате "Подробно", с подчиненными объектами метаданных:
 

и сохраняем эти отчеты в текстовые файлы. Эти два текстовых файла сравниваем с помощью любой сравнивалки текста (я использую WinMerge).
Так вот - не считая технической информации, такой как номера строк с изменным/удаленным кодом и т.п., эти файлы НЕ ДОЛЖНЫ ОТЛИЧАТЬСЯ! Потому что оба отчёта показывают одно и то же - разницу, которую добавила в конфигурацию 1С.

После этого сравниваем попарно:
  1. ПоставщикСтарая и ОсновнаяСтарая
  2. ПоставщикНовая и ОсновнаяНовая
Аналогично сохраняем отчеты о сравнении в текстовые файлы и сравниваем эти текстовые файлы. Они тоже НЕ ДОЛЖНЫ ОТЛИЧАТЬСЯ! Потому что оба отчёта показывают одно и то же - разницу, которую добавили в конфигурацию мы.

Если что-то отличается (помимо технической информации) - значит или не накатили какое-то изменение из типовой, или затерли какое-то своё изменение.

P.S. Чтобы убрать из отчетов о сравнении неинформативный хлам (такой как номера строк с изменным/удаленным кодом и т.п.), можно выполнить в текстовых файлах с отчетами следующие замены по регекспам:
1. Заменить:
^(\s*)Объект присутствует только в(.+) конфигурации: \d+ - \d+$
на:
$1Объект присутствует только в$2 конфигурации: N - N

2. Заменить:
^(\s*)Изменено: \d+ - \d+$
на:
$1Изменено: N - N

P.P.S. Эти замены можно выполнить с помощью следующего макроса для Notepad++ (добавить в %appdata%\Notepad++\shortcuts.xml в раздел <Macros>...</Macros>)
<Macro name="&#x041E;&#x0431;&#x0440;&#x0430;&#x0431;&#x043E;&#x0442;&#x043A;&#x0430;&#x041E;&#x0442;&#x0447;&#x0435;&#x0442;&#x0430;&#x041E;&#x0421;&#x0440;&#x0430;&#x0432;&#x043D;&#x0435;&#x043D;&#x0438;&#x0438;" Ctrl="no" Alt="no" Shift="no" Key="0">
  <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
  <Action type="3" message="1601" wParam="0" lParam="0" sParam="^(\s*)&#x041E;&#x0431;&#x044A;&#x0435;&#x043A;&#x0442; &#x043F;&#x0440;&#x0438;&#x0441;&#x0443;&#x0442;&#x0441;&#x0442;&#x0432;&#x0443;&#x0435;&#x0442; &#x0442;&#x043E;&#x043B;&#x044C;&#x043A;&#x043E; &#x0432;(.+) &#x043A;&#x043E;&#x043D;&#x0444;&#x0438;&#x0433;&#x0443;&#x0440;&#x0430;&#x0446;&#x0438;&#x0438;: \d+ - \d+$" />
  <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
  <Action type="3" message="1602" wParam="0" lParam="0" sParam="$1&#x041E;&#x0431;&#x044A;&#x0435;&#x043A;&#x0442; &#x043F;&#x0440;&#x0438;&#x0441;&#x0443;&#x0442;&#x0441;&#x0442;&#x0432;&#x0443;&#x0435;&#x0442; &#x0442;&#x043E;&#x043B;&#x044C;&#x043A;&#x043E; &#x0432;$2 &#x043A;&#x043E;&#x043D;&#x0444;&#x0438;&#x0433;&#x0443;&#x0440;&#x0430;&#x0446;&#x0438;&#x0438;: N - N" />
  <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
  <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
  <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
  <Action type="3" message="1601" wParam="0" lParam="0" sParam="^(\s*)&#x0418;&#x0437;&#x043C;&#x0435;&#x043D;&#x0435;&#x043D;&#x043E;: \d+ - \d+$" />
  <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
  <Action type="3" message="1602" wParam="0" lParam="0" sParam="$1&#x0418;&#x0437;&#x043C;&#x0435;&#x043D;&#x0435;&#x043D;&#x043E;: N - N" />
  <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
  <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
</Macro>

10 комментариев:

  1. К сожалению, иногда после обновлений перемешивается порядок объектов, и при сравнении может получиться каша. Когда единичные объекты, то в принципе не страшно, а когда много - приходится предварительно выстраивать порядок.

    ОтветитьУдалить
    Ответы
    1. Спасибо за Ваш комментарий!
      Если в обновлении поменяется порядок объектов, то порядок объектов станет другим и в конфигурации "ПоставщикНовая", и в конфигурации "ОсновнаяНовая" (если обновлять с установкой порядка из "конфигурации поставщика"). Поэтому на данную методику порядок объектов теоретически (!) особо влиять не должен.

      Удалить
    2. Вот сейчас как раз возимся с этим, в УПП в релизе 1.3.112 по сравнению с 1.3.106 поменялся порядок типовых объектов (которые еще при этом изменены и видны в отчете о сравнении), и сравнение отчетов о сравнении перекашивает, механизм сравнения с какого-то момента начинает сравнивать не соответствующие друг-другу тексты и все становится красным. Ищем способы, как это обойти. Можно, конечно, вручную текст в отчетах о сравнении перенести в нужные места, но это может оказаться трудоемко.

      Удалить
  2. Уточню, что я веду речь про сравнение №2:

    ПоставщикСтарая и ОсновнаяСтарая;
    ПоставщикНовая и ОсновнаяНовая.

    То есть я проверяю все ли наши изменения переехали в конфигурацию с новым релизом. Сравнение №1, где проверяются изменения внесенные 1С (поставщиком), я не делаю, потому что это вроде бы избыточно, сравнение №2 и так покажет отличие, если какое-то изменение от 1С потеряли. Я так понимаю, любое из этих сравнений достаточно для полной проверки, просто я оперирую именно проверкой сохранения именно наших изменений.
    Вот при этой проверке возникают сложности, если 1С меняет порядок типовых объектов. Мы выкрутились так: Для сравнения ПоставщикСтарая и ОсновнаяСтарая приводим в конфигурации ОсновнаяСтарая порядок объектов к порядку в ОсновнаяНовая (при помощи объединения с выключенным флагами). Тогда в отчете о сравнении "ПоставщикСтарая - ОсновнаяСтарая" порядок объектов такой же, что и в "ПоставщикНовая - ОсновнаяНовая", но есть минус - показываются отличия от порядка типовой ПоставщикСтарая. Но эти надписи "изменен порядок объекта" просто пропускаем, так как знаем из-за чего они.

    ОтветитьУдалить
    Ответы
    1. Спасибо за Ваши дополнения!
      По поводу избыточности первого сравнения (ПС-ПН и ОС-ОН), похоже на то. Но для верности от него отказываться пока не буду. )))

      Удалить
  3. Фигня кака-то, при изменении формирования текста запроса, или изменении метода функции, изменения внесённые ранее приходится "творчески" переосмысливать, читай разрабатывать заново.
    Вывод: фиг сойдутся файлы сравнения Старый-Старый и Новый-Новый.

    ОтветитьУдалить
    Ответы
    1. Они и не должны "сходиться" один в один, а прямо идентичными не будут никогда с вероятностью 99,9(9)% (спасибо за это как минимум какому-нибудь "Порядок объекта изменен").
      Но это не проблема, потому что Вы знаете какой "переосмысленный" код Вы добавили в конфигурацию, и поэтому наличие этих различий Вас нисколько не смутит. (Как раз таки должно смутить их отсутствие)
      Что касается "изменений формирования текста запроса" или "изменении метода функции", то тут очень важно каким образом изначально вносились изменения в исходную конфигурацию. Уже существуют более-менее устоявшиеся методики как добавить необходимые изменения 1с-вскую конфигурацию таким образом, чтобы потом можно было обновлять эту доработанную конфигурацию с минимальными потерями времени и нервов (это и подписки на события, и программное изменение форм вместо их правки в редакторе форм, и прочее, и подобное). Если придерживаться этих методик, то к "творческому" переосмыслению и разработке заново придётся прибегать крайне редко.

      Удалить
  4. При подготовке обновления в EDT, похоже, это не работает. Если сравнить размеры файлов ПоставщикСтарая_ОсновнаяСтарая и
    ПоставщикНовая_ОсновнаяНовая, то первый имеет на два порядка меньший размер, чем второй.

    ОтветитьУдалить
    Ответы
    1. На 2 порядка - это вряд ли. А в 2 раза - запросто. Скорее всего один из cf-ников содержит только конфигурацию поставщика, а второй конфигурацию поставщика + основную (изменённую) конфигурацию.

      Удалить
  5. Ещё полезные замены:

    ^(\s*)- \*\*\*Группировка строк <(\d|\s)+ - (\d|\s)+> - <(\d|\s)+ - (\d|\s)+>$
    на
    $1- ***Группировка строк <N - N> - <N - N>

    ^(\s*[<>]\s*)"#" - "R\d+"$
    на
    $1"#" - "RN"

    ОтветитьУдалить