Имя: Пароль:
1C
1С v8
Найти и выборочно вернуть неизмененные объекты на поддержку без изменения
0 ЧессМастер
 
21.11.16
09:56
Всем доброе время суток !

Можно ли объекты конфигурации, которые не имеют изменений по отношению к конфигурации поставщика вернуть на поддержку без снятия всей конфигурации с поддержки и обновления с конфигурацией поставщика ?

Версия платформы 8.3.8.1964

И второй вопрос - можно ли программно найти объекты конфигурации которые сняты с поддержки (или для которых включена возможность редактирования) ? Глазами подобные объекты искать сложно и неудобно.

Поиском по форуму нашел похожую тему
Вернуть неизмененные объекты на поддержку без изменения

Но может за полтора года в движке появились изменения которые позволяют решать проблему без полного снятия конфигурации с поддержки.
1 ildary
 
21.11.16
16:02
Я писал скрипт на autoit, вроде работает (установка 1 или 5 или 10 объектов в состояние "Не редактируется". Все работает, но надо за ним приглядывать.
2 ЧессМастер
 
21.11.16
19:32
(1) можно подробности как это работает ?
3 ЧессМастер
 
21.11.16
19:47
(1) меня устроил был любой способ проставить эти признаки. хоть вручную по одному.
4 Лефмихалыч
 
21.11.16
20:27
(3) через настройку поддержки же и ставь, что мешает? Там при попытке вернуть на поддержку платформе справшивает какую-то инопланетянскую полюбень, ты говоришь: "да", она делает сравнение-объединение, в котором ты как раз можешь установить обратно на поддержку.
5 ЧессМастер
 
22.11.16
09:18
(4) мешает то что если у документа стоит признак "Редактируется с сохранением поддержки" и нет различия с конфигурацией поставщика то он не попадает в список документов по которым есть различие с конфигурацией поставщика. соответственно нельзя поставить признак "Не редактируется".

То есть последовательность следующая.
1. Конфигурация - Поддержка - Настройка поддержки.
Напротив любого реквизита документа у которого стоит признак "Редактируется с сохранением поддержки" меняю на "Объект поставщика не редактируется".
Мне система сообщает что это можно сделать только в режиме сравнения / объединения с конфигурацией поставщика.

Но поскольку по документу по реквизитам различий нет то документ просто не попадает в сравнения / объединения с конфигурацией поставщика.

В лучшем случае получается поставить замочки на формы, внося в текущие формы изменения. Потом при сравнения / объединения с конфигурацией поставщика форма попадает в  в сравнения / объединения с конфигурацией поставщика и по ней можно выставить признак "Не редактируется".

Но с реквизитами такой финт не проходит.
6 ildary
 
22.11.16
10:30
(5) Кидаю скрипт, отдаю AS IS (бекап перед началом и во время работы обязателен). За его работу на чужом компе и в чужих руках я не отвечаю, но у себя я вернул на поддержку УТ11.1 (кроме измененных). Требуется Autoit 3.3.14.2. Надо запустить данный скрипт, в конфигураторе сделать Конфигурация-Поддержка-Настройка поддержки, встать в дереве на нужный объект и нажать F7 (если не сработало - то надо поменять в коде местами 2 строки со словом "$Key2Send". Если работает, то можно нажимать F8 - исправит сразу 5 подряд объектов или F9 (18 объектов). Скрипт чувствителен к скорости компа - если что то не устраивает - на старом компе можно увеличить задержку $Pause (сейчас 65)


; Каждый сеанс восстановления надо сопровождать записью

#include <WinAPI.au3>

Dim $ConfTitle = "Конфигуратор - Управление торговлей, редакция 11.1"

Dim $Key2Send = "{DOWN}" ; Если у объектов стоит "Снят с поддержки"
Dim $Key2Send = "{UP}"   ; Если у объектов стоит "Редактируется с сохранением поддержки"

Dim $Pause = 65 ; задержка между операциями, меньше 65 опасно

Dim $IterNum = 18 ; сколько за раз сделается по F9

Dim $InstanceNumber = 7 ; для 8.3.6
Dim $InstanceNumber = 9 ; для 8.3.8

;~ #NoTrayIcon

_Main()


; 2 служебные функции для получения стиля
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   ;==>GUICtrlGetStyle

Func _GUICtrlGetStyle_Convert(ByRef $aArray)
    If UBound($aArray) = 2 Then
        $aArray[0] = '0x' & Hex($aArray[0], 4)
        $aArray[1] = '0x' & Hex($aArray[1], 8)
    EndIf
EndFunc   ;==>_GUICtrlGetStyle_Convert


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}" ) ; для 8.3.6
   Send( "+{TAB}+{TAB}" ) ; для 8.3.8
   Sleep( $Pause )
   Send( "{DOWN}" )

   Return True

EndFunc ; Change

Func KeyF7_1()

   Change()

EndFunc ; KeyF7_1

Func KeyF8_5()

   For $ii = 1 To 5

      If Not Change() Then ExitLoop

   Next

EndFunc ; KeyF8_5

Func KeyF9_Many()

   For $ii = 1 To $IterNum

      If Not Change() Then ExitLoop

   Next

EndFunc ; KeyF9_Many


Func _Main()

    HotKeySet(  "{F7}", "KeyF7_1" )
    HotKeySet(  "{F8}", "KeyF8_5" )
    HotKeySet(  "{F9}", "KeyF9_Many" )

    While 1

        Sleep( 3 * 1000 ) ;3 sec

    WEnd

EndFunc ;_Main
7 Лефмихалыч
 
22.11.16
10:31
(5) так ты фильтр "Без фильтра" поставь :)
8 Лефмихалыч
 
22.11.16
10:34
9 ЧессМастер
 
28.11.16
16:20
(6) спасибо большое - очень интересный способ
(7) да как вариант подойдет. спасибо за подсказку.

еще один момент не подскажете ?

почему иногда объект конфигурации нельзя поставить на поддержку ? этот пункт недоступен

http://imgur.com/a/6oOi5
Программист всегда исправляет последнюю ошибку.