Подмена регистратора

  1. 6 г. назад
    29.11.2017 12:24:38 отредактировано bvn13

    Как в движениях документа подменить регистратора средствами скуля?

    andrewalexk

  2. адейтом

  3. как определить регистратора?

    _RecorderTRef Регистратор
    _RecorderRRef Регистратор

  4. где эти данные лежат?

    Ответы: (5)
  5. _RecorderRRef - регистратор
    RecorderTRef - тип ссылки регистратора

    Ответы: (14)
  6. bvn13 где эти данные лежат?

    в
    _AccumRg**** - основная табличка регистра

    Ответы: (6) (13)
  7. (5) если это регистр накопления. Регистр сведений сколько помню в чем то типа InfoReg хранится

    Ответы: (8) (13)
  8. ну еще в табличке изменений регистра

  9. (6) ну да.
    Врят ли ему в рег сведений это надо :)

    Ответы: (9)
  10. (8) Тогда еще в таблице итогов надо подменять, но лучше штатными средствами пересчитать итоги по регистру

    Ответы: (10)
  11. (9) че ? В табличке итогов нет регистратора и не будет :)

    Ответы: (12)
  12. ну и итоги не изменятся от слова совсем, их пересчитывать не надо

  13. 29.11.2017 12:39:16 отредактировано sda553

    (10) а, ну да. Согласен

  14. sda553 (5) если это регистр накопления. Регистр сведений сколько помню в чем то типа InfoReg хранится

    накопления, да

  15. Ёпрст _RecorderRRef - регистратор
    RecorderTRef - тип ссылки регистратора

    где инфа хранится? вот есть у меня документ в 1С, как определить запросом скуль, какие значения этих полей соответствуют этому конкретному доку по УИД?

    Ответы: (15) (17)
  16. (14) получаешь ПолучитьСтруктуруХраненияБазыДанных
    Из неё получаешь имя интересующей тебя таблички в sql
    далее получаешь XMLСтрока(ССылкаНаТвойДокументИЗ1с);
    её приводишь к бинарному виду, пихаешь в запрос.

    Ответы: (17)
  17. на вот, в помощь:

    // Преобразует строку УИДа в строку GUID'а
    //
    Функция ПолучитьGUIDПоУИД(Знач УИД) Экспорт
        
        УИД_0 = СтрЗаменить(УИД, "-", "");
        GUID  = "0x" + ВРег(Сред(УИД_0, 17, 4) + Прав(УИД_0, 12) + Сред(УИД_0, 13, 4) + Сред(УИД_0, 9, 4) + Лев(УИД_0, 8));
            
        Возврат GUID; 
        
    КонецФункции
    
    
    
    // Преобразует строку GUID'а в строку УИДа
    //
    Функция ПолучитьУИДПоGUID(Знач GUID) Экспорт
        
        GUID = Прав(GUID, СтрДлина(GUID) - 2);
        УИД = НРег(Строка(Прав(GUID, 8) + "-" + Сред(GUID, 21, 4) + "-" + Сред(GUID, 17, 4) + "-" + Лев(GUID, 4)  + "-" + Сред(GUID, 5, 12)));
        
        Возврат УИД;
        
    КонецФункции
    Ответы: (18)
  18. Ёпрст (14) получаешь ПолучитьСтруктуруХраненияБазыДанных
    Из неё получаешь имя интересующей тебя таблички в sql
    далее получаешь XMLСтрока(ССылкаНаТвойДокументИЗ1с);
    её приводишь к бинарному виду, пихаешь в запрос.

    а RecorderTRef как определить?

    Ответы: (21)
  19. Ёпрст на вот, в помощь:

    // Преобразует строку УИДа в строку GUID'а
    //
    Функция ПолучитьGUIDПоУИД(Знач УИД) Экспорт
        
        УИД_0 = СтрЗаменить(УИД, "-", "");
        GUID  = "0x" + ВРег(Сред(УИД_0, 17, 4) + Прав(УИД_0, 12) + Сред(УИД_0, 13, 4) + Сред(УИД_0, 9, 4) + Лев(УИД_0, 8));
            
        Возврат GUID; 
        
    КонецФункции
    
    
    
    // Преобразует строку GUID'а в строку УИДа
    //
    Функция ПолучитьУИДПоGUID(Знач GUID) Экспорт
        
        GUID = Прав(GUID, СтрДлина(GUID) - 2);
        УИД = НРег(Строка(Прав(GUID, 8) + "-" + Сред(GUID, 21, 4) + "-" + Сред(GUID, 17, 4) + "-" + Лев(GUID, 4)  + "-" + Сред(GUID, 5, 12)));
        
        Возврат УИД;
        
    КонецФункции

    этим получается _RecorderRRef ?

  20. Зачем скулем это делать?

    Ответы: (20)
  21. (19) смотри. в регистре накопления 137 млн записей. в монопольном режиме это будет оооооочень долго. база 24/7 нонстоп с большим количеством записей (до 10 тыс реализаций в день) работает. сечешь?

    Ответы: (22)
  22. (17)
    _RecorderTRef - длина 4 байта, хранит идентификатор типа документа-регистратора в шестнадцатеричном виде.
    например, 0x0000008F - это 143 в десятичной, т.е тип документа_Document143

    т.е тебе для изменения типа нужно найти имя таблички нужного типа и перевести его название (цифровую часть) в 16-ое число. Усё

    Ответы: (23)
  23. (20) апдейт займёт меньше минуты

    Ответы: (23) (24)
  24. (21) ага, ясно.
    (22) нельзя. идея делать это регламентом в фоне.

  25. (22) кроме апдейта не забыть реиндекс таблицы и связанных, если это РС то проблем не должно быть, а если регистр накоплений - беда.

  26. так... а что по поводу реиндекса?

  27. как его запустить из Скуля?

    Ответы: (27)
  28. (26)
    https://msdn.microsoft.com/ru-ru/library/ms181671(v=SQL.120).aspx

    но, тебе оно не нужно.

  29. Типа update не подразумевает обновление индекса )

    Ответы: (31)
  30. почти 20 лет занимаюсь 1С-ом и всегда удивляли подобные задачи на форумах. сначала мы пытаемся [...] методологию движка 1С, а потом сильно возмущаемся косяками в учете или в базе...

  31. Видимо ты не видал больших ху баз

    Ответы: (33)
  32. MIK Типа update не подразумевает обновление индекса )

    это правда? но это же совсем нелогично. в не 1С базе я могу делать апдейты, и что, я сам должен заботиться о реиндексировании? бред

    Ответы: (34)
  33. Не надо там ничего реиндексировать потом.

  34. (30) какая разница, какого размера база?...

    Ответы: (35)
  35. bvn13 это правда? но это же совсем нелогично. в не 1С базе я могу делать апдейты, и что, я сам должен заботиться о реиндексировании? бред

    Это

    -image-

  36. (33) иногда реструктуризации от 1С можно просто не дождаться

  37. все успешно перенеслось.

  38. итоги не надо пересчитывать?

    Ответы: (38)
  39. (37) нет

  40. там нет регистратора

или зарегистрируйтесь чтобы ответить!