В процессе сопровождения и доработки типовых конфигураций разработчики часто включают возможность редактирования для всей конфигурации или отдельных ее объектов. Со временем часть объектов (документов, справочников, реквизитов) остается полностью идентичной эталону поставщика, однако признак «Редактируется с сохранением поддержки» (желтый куб с карандашом) продолжает мешать штатному обновлению. Попытка вручную изменить правило поддержки прямо в форме настройки приводит к сообщению платформы о том, что действие возможно только в режиме сравнения и объединения. Разберем детально, почему так происходит и как вернуть неизмененные объекты на строгую поддержку поставщика (под «замок»).
Проанализируем логику работы платформы 1С:Предприятие при управлении правилами поддержки. При попытке переключить правило непосредственно в окне настройки поддержки пункт «Объект поставщика не редактируется» часто оказывается серым (недоступным для выбора). Выясним основные технические причины такого поведения:
Рассмотрим стандартный и наиболее безопасный алгоритм восстановления правил поддержки без полного снятия базы с поддержки. Основная сложность, с которой сталкиваются специалисты: если объект не имеет различий с эталоном, механизм сравнения по умолчанию скрывает его из списка, не позволяя изменить правило. Разберем по шагам, как обойти это ограничение.
Конфигурация — Поддержка — Настройка поддержки. В открывшемся окне нажмем кнопку Сохранить в файл и сохраним файл с расширением .cf. Это эталонная конфигурация текущего релиза без пользовательских правок.Конфигурация — Сравнить, объединить с конфигурацией из файла и укажем ранее выгруженный файл .cf.Если конфигурация сильно разветвлена, а ручное переключение правил через сравнение вызывает трудности или требует точечной обработки большого массива элементов, можно автоматизировать рутинные нажатия клавиш в окне настройки поддержки. Рассмотрим пример специализированного скрипта для утилиты AutoIt, который эмулирует действия разработчика в интерфейсе конфигуратора платформы 1С.
Разберем код скрипта, использующего горячие клавиши для пакетного изменения правил:
; Скрипт автоматизации возврата правил поддержки для AutoIt
#include <WinAPI.au3>
Dim $ConfTitle = "Конфигуратор - Управление торговлей, редакция 11.1"
Dim $Key2Send = "{UP}" ; Направление выбора для состояния "Редактируется с сохранением поддержки"
Dim $Pause = 65 ; Задержка между операциями в миллисекундах
Dim $IterNum = 18 ; Количество итераций для массовой обработки
Dim $InstanceNumber = 9 ; Номер экземпляра элемента формы для версии платформы 8.3.8
Func GUICtrlGetStyle($hWnd)
If Not IsHWnd($hWnd) Then
$hWnd = GUICtrlGetHandle($hWnd)
EndIf
Local $aReturn = [_WinAPI_GetWindowLong($hWnd, $GWL_STYLE), _WinAPI_GetWindowLong($hWnd, $GWL_EXSTYLE)]
Return $aReturn
EndFunc
Func Change()
; Передаем клик в окно настройки поддержки для вызова редактирования правила
$Res = ControlClick($ConfTitle, "", "[CLASS:V8FormElement; INSTANCE:" & $InstanceNumber & "]")
If $Res = 0 Then Return False
Sleep(30)
Send("{ENTER}")
Sleep($Pause / 2)
If Not WinExists("Настройка правил поддержки") Then Return False
; Проверяем доступность переключателя "Объект поставщика не редактируется"
$hnd = ControlGetHandle("Настройка правил поддержки", "", "[CLASS:V8FormElement; INSTANCE:6]")
If $hnd = 0 Then Return False
Local $aArray = GUICtrlGetStyle($hnd)
If $aArray[0] = 1577058304 Then Return False ; Элемент заблокирован (группа или объект без поддержки)
; Применяем выбор правила и закрываем диалог
Send($Key2Send & "{TAB}{SPACE}{ENTER}")
Sleep($Pause)
; Переходим к следующей строке дерева
Send("+{TAB}+{TAB}")
Sleep($Pause)
Send("{DOWN}")
Return True
EndFunc
Func KeyF7_1()
Change()
EndFunc
Func KeyF8_5()
For $ii = 1 To 5
If Not Change() Then ExitLoop
Next
EndFunc
Func KeyF9_Many()
For $ii = 1 To $IterNum
If Not Change() Then ExitLoop
Next
EndFunc
HotKeySet("{F7}", "KeyF7_1")
HotKeySet("{F8}", "KeyF8_5")
HotKeySet("{F9}", "KeyF9_Many")
While 1
Sleep(3000)
WEnd
Перед запуском скрипта обязательно создадим резервную копию информационной базы. Для работы откроем окно Конфигурация — Поддержка — Настройка поддержки, спозиционируемся на целевом объекте и используем клавиши F7 (один шаг), F8 (5 шагов) или F9 (пакет из 18 объектов).
Проанализируем задачу поиска измененных объектов. Во встроенном языке 1С прикладной объект Метаданные не предоставляет программных свойств или методов для чтения правил поддержки (таких как состояние замка). Тем не менее выявить измененные объекты без ручного просмотра структуры можно следующими методами:
Конфигурация — Сравнить конфигурации. В качестве первой выберем основную конфигурацию, в качестве второй — конфигурацию поставщика. В окне отчета настроим фильтрацию по признаку наличия различий. Это сформирует наглядный список всех доработанных объектов./DumpConfigToFiles. В результирующем каталоге файлы метаданных формата XML содержат служебную информацию о статусе поддержки, которую можно легко обработать регулярными выражениями или скриптами./CompareConfiguration позволяет автоматически сформировать отчет о расхождениях конфигурации с эталоном поставщика в текстовый файл.