Хранилище 1С. Просмотр истории хранилища обработкой


Всем привет.
Недавно пришлось реализовать выгрузку изменений из хранилища 1С для конфигураций, у которых установлен режим совместимости 8.2.13 и ниже. В рамках задачи появилась вот эта обработка, решил ее выложить отдельно, вдруг кому-то еще пригодится.

Адрес проекта на GitHub: https://github.com/BlizD/HistoryStorage

Выгрузка таблиц из хранилища выполняется программой Tool_ 1 C D (автор Валерий Агеев дал разрешение на использование). 

 

Спасибо, Александру за доп сведения:

на версии платформы 8.3.5.1383 у меня не заработало правильно. Файл читался, но типы "дата",

"булево" загружались строкой. Пришлось сделать парсинг строк.

UPDATE 270118:  

* Исправил ошибку при получении строки родителя по OBJID. Оказывается он может повторяться, если старый объект был удален, то для нового может будет этот же OBJID.

UPDATE 241217:  

* В макет классов добавлены объекты: HTTPСервис

UPDATE 081217:  

* В макет классов добавлены объекты: общие реквизиты.

UPDATE 090817:  

* В обработку добавлена колонка "Версия конфигурации".
* В макет классов добавлены объекты: РегистрРасчета, Форма списка регистра расчета, Перерасчет регистра расчета, 
Форма регистра бухгалтерии, НумераторДокументов.
* Добавлен реквизит "Вывести служебную таблицу" по этой таблице, можно определить класс объекта.
* Убраны лишние закомментированные блоки.

 

UPDATE 070717:  

Можно использовать и без копирования файла хранилища, это безопасно, по заверению тех кто уже давно использует Tool_1CD:

Артур Аюханов (artbear): А почему не пользоваться не монопольным доступом утилиты? 
я лично уже несколько лет юзаю этот режим с боевыми хранилищами для gitsync, проблем ни разу не было 🙂

Артур Аюханов (artbear): Да и не я один юзаю gitsync в течение нескольких лет, 
так что немонопольный доступ правильно работает и в бою можно юзать.

 

Пример работы:

В публикации файл выгрузки базы DT.
. 

 

 

Старое описание

ВНИМАНИЕ! Используйте данную обработку в качестве эксперимента. 

ВНИМАНИЕ! Из за того, что выгрузка таблиц происходит не в монопольном режиме, поэтому лучше копируйте файл хранилище 1cv8ddb.1CD в другое место и просматривайте его. 

Из справки к Tool_1 C D
.

d:CloudDevTasksTool_1CD>ctool_1cd /?
cTool_1CD (с) 2009-2026 awa

-ne
-NotExclusively
открыть базу не монопольно (Это небезопасно, возможны ошибки!).

 

 

 

 

39 Comments

  1. JohnyDeath

    А почему штатными средствами не обошлись?

    Например вот так: https://github.com/Stepa86/1C-Gitter/blob/master/src/CommonModules/ПакетныйРежим/Ext/Modul­e.bsl#L2

    Reply ↓
  2. BlizD

    (1)

    А почему штатными средствами не обошлись?

    Например вот так: https://github.com/Stepa86/1C-Gitter/blob/master/src/CommonModules/ПакетныйРежим/Ext/Modul­­e.bsl#L2

    До этого и обходился штатными средствами, но для конфигураций в которых указан режим совместимости 8.2.13 и ниже

    отчет выдается в другом формате он мне не подходил в нем нет нужных мне сведений:

    нет версии, нет пользователя, нет даты версии, нет признака (добавлен, изменен, удален) или не было комментария.

    + сведений группируются по объектам метаданных.

    Возможно, что то делал не так, но не получилось сформировать нужный мне отчет.

    Reply ↓
  3. artbear

    А почему не пользоваться не монопольным доступом утилиты?

    я лично уже несколько лет юзаю этот режим с боевыми хранилищами для gitsync, проблем ни разу не было 🙂

    Reply ↓
  4. BlizD

    (3)

    А почему не пользоваться не монопольным доступом утилиты?

    я лично уже несколько лет юзаю этот режим с боевыми хранилищами для gitsync, проблем ни разу не было 🙂

    Должен был предупредить, тех кто собирается использовать.

    У меня просто такой практики еще нет, поэтому доверяюсь описанию к Tool_1CD.

    Reply ↓
  5. artbear

    Да и не я один юзаю gitsync в течение нескольких лет,

    так что немонопольный доступ правильно работает и в бою можно юзать.

    Reply ↓
  6. BlizD

    (5)

    Да и не я один юзаю gitsync в течение нескольких лет,

    так что немонопольный доступ правильно работает и в бою можно юзать.

    Спасибо, поправил описание.

    Reply ↓
  7. JohnyDeath

    Соглашусь с artbear: Tool_1CD корректно работает с файлом боевого хранилища уже давно и не на одном проекте.

    Можно и не заморачиваться на постоянное копирование

    Reply ↓
  8. gubanoff

    (0) Работает. К тому же быстро работает. Очень крутая вещь. По задумке 1С, это можно получить парсингом файла по истории хранилища, который формируется при пакетном запуске конфигуратора:

    /ConfigurationRepositoryReport <имя файла> [-NBegin <номер версии>] [-NEnd <номер версии>] [-GroupByObject] [-GroupByComment] — построение отчета по истории хранилища.
    

    но беда в том, что этот отчет формируется некорректно — всегда с группировкой по объектам, а не по комментариям (если я правильно помню, я даже посылал такую ошибку в 1С).

    Не знал, что Tool_1CD умеет работать в командной строке, это тоже полезно было. Будем брать на вооружение.

    Reply ↓
  9. BlizD

    (8)

    Александр, спасибо за отзыв.

    но беда в том, что этот отчет формируется некорректно — всегда с группировкой по объектам, а не по комментариям (если я правильно помню, я даже посылал такую ошибку в 1С).

    Для конфигураций в которых указан режим совместимости 8.2.16 и выше, отчет для парсинга выходит нормальный.

    А вот для тех, что в режиме совместимости 8.2.13 и ниже то там да беда.

    Reply ↓
  10. artbear

    (8)

    Не знал, что Tool_1CD умеет работать в командной строке, это тоже полезно было. Будем брать на вооружение.

    Эту возможность @awa (Валерий Агеев) по нашим просьбам давно добавил, сначала даже в GUI-версию

    Reply ↓
  11. Fatov_DI

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

    Reply ↓
  12. BlizD

    (11)

    Добрый день, Дмитрий.

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

    Нет, такого функционала в ней не заложено.

    Reply ↓
  13. Tavalik

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

    Что хотелось бы добавить:

    1. Почему-то вы не считываете версию конфигурации и метку из истории хранилища.

    2. Если решение в виде конфигурации, то разумно было бы добавить подсистему, роль (не «ПолныеПрава», а на запуск обработки). В общем оформить в виде готового к объединению и внедрению решения. Я добавлял еще регистр сведений для хранения истории, регламентное задание для обновления регистра сведений по истории хранилища, подсистему, константы, роли.

    3. Ловлю ошибки вида:

    Ошибка! Не найдена строка в «мТЗИменаКлассов» для CLASSID = a2cb086c-db98-43e4-a1a9-0760ab048f8d

    Ошибка! Не найдена строка в «мТЗИменаКлассов» для CLASSID = f2de87a8-64e5-45eb-a22d-b3aedab050e7

    Ошибка! Не найдена строка в «мТЗИменаКлассов» для CLASSID = 274bf899-db0e-4df6-8ab5-67bf6371ec0b

    Ошибка! Не найдена строка в «мТЗИменаКлассов» для CLASSID = d3b5d6eb-4ea2-4610-a3e2-624d4e815934

    4. Уж извините, что придираюсь, но хотелось бы некой чистоты кода. Я имею в виду удаление отладочных комментариев, описание к экспортным процедурам и т. д. Например, вот это:

        #Если Тромбон тогда
    ТЗИзФайла = Новый ТаблицаЗначений;
    #Конецесли

    Что за тромбон, простите? Я что-то не знаю в синтаксисе 1С? 🙂

    Но в целом, все работает. Конечно, ставлю звездочку.

    Reply ↓
  14. BlizD

    (13)

    Добрый день, Виталий.

    Спасибо за отзыв.

    1. Почему-то вы не считываете версию конфигурации и метку из истории хранилища.

    Версия конфигурации считывается, по поводу метки — она не выгружается и в типовой выгрузке, только комментарий выгружается.

    2. Если решение в виде конфигурации, то разумно было бы добавить подсистему, роль (не «ПолныеПрава», а на запуск обработки). В общем оформить в виде готового к объединению и внедрению решения. Я добавлял еще регистр сведений для хранения истории, регламентное задание для обновления регистра сведений по истории хранилища, подсистему, константы, роли.

    Согласен с Вами, но данное решение не планировалось как готовое к объединению с чем то. Данная загрузка используется в конфигурации «Управление задачами» https://infostart.ru/public/552480/

    3. Ловлю ошибки вида:

    Это ошибки означают, что в макете «ИменаКлассов» нет записи для CLASSID.

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

    Если есть возможность, то скиньте конфигурацию и добавлю запись в макет.

    4. Уж извините, что придираюсь, но хотелось бы некой чистоты кода. Я имею в виду удаление отладочных комментариев, описание к экспортным процедурам и т. д. Например, вот это:

    Как вариант, могу выложить на Github данную разработку и там через Pull request исправите то, о чем описываете.

    Что за тромбон, простите? Я что-то не знаю в синтаксисе 1С? 🙂

    Но в целом, все работает. Конечно, ставлю звездочку.

    Что касается Тромбон, данный подход был взять из мастер группы профессионального программирования от Евгения Гилева и Насипова Фарита.

    Данной инструкции препроцессора в 1с точно нет, поэтому весь код который обрамлен этой конструкцией будет удален в режиме исполнения. Но при написании кода, данный подход позволяет избежать ошибок синтаксических, т.к. становятся доступны методы вызываемые через точку. Чаще всего данную конструкцию удобно использовать в подписках на событиях, там есть Источник, чтобы обратиться к его методам или свойствам достаточно вставить такую конструкцию:

    #Если Тромбон Тогда
    Источник = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
    #Конецесли
    Reply ↓
  15. kiruha

    (14)


    Что касается Тромбон, данный подход был взять из мастер группы профессионального программирования от Евгения Гилева и Насипова Фарита.

    Данной инструкции препроцессора в 1с точно нет, поэтому весь код который обрамлен этой конструкцией будет удален в режиме исполнения. Но при написании кода, данный подход позволяет избежать ошибок синтаксических

    Мы пишем

    Если Ложь Тогда
    Источник = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
    Конецесли

    Без Тромбона ) и сворачивается

    Reply ↓
  16. BlizD

    (15)

    С тромбоном всегда веселее 🙂

    Reply ↓
  17. Tavalik

    (14)

    Версия конфигурации считывается, по поводу метки — она не выгружается и в типовой выгрузке, только комментарий выгружается.

    Я имею в виду версию конфигурации поставщика. Она есть в истории хранилища, но нет в обработке.

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

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

    Данной инструкции препроцессора в 1с точно нет, поэтому весь код который обрамлен этой конструкцией будет удален в режиме исполнения

    Интересный метод. Спасибо. Я обычно скрываю подобный код под комментарием.

    Reply ↓
  18. BlizD

    UPDATE 090817:

    * В обработку добавлена колонка «Версия конфигурации».

    * В макет классов добавлены объекты: РегистрРасчета, Форма списка регистра расчета, Перерасчет регистра расчета,

    Форма регистра бухгалтерии, НумераторДокументов.

    * Добавлен реквизит «Вывести служебную таблицу» по этой таблице, можно определить класс объекта.

    * Убраны лишние закомментированные блоки.

    Reply ↓
  19. BlizD

    (13)

    1. Почему-то вы не считываете версию конфигурации и метку из истории хранилища.

    Добавил.

    3. Ловлю ошибки вида:

    Добавил в макет классов новые классы, теперь ошибки должны уйти.

    4. Уж извините, что придираюсь, но хотелось бы некой чистоты кода. Я имею в виду удаление отладочных комментариев, описание к экспортным процедурам и т. д. Например, вот это:

    Убрал часть закомментированных блоков, теперь должно быть чище немного.

    Reply ↓
  20. AKnyazkov

    (14)

    Добрый день, вместо Тромбон (что режет глаз) лучше писать:

    #Если Клиент И Не Клиент Тогда

    …

    #КонецЕсли

    Reply ↓
  21. BlizD

    (20)

    Добрый день, вместо Тромбон (что режет глаз) лучше писать:

    #Если Клиент И Не Клиент Тогда

    …

    #КонецЕсли

    Добрый день, Алексей.

    Тут дело привычки, просто тромбон это гарантированное имя, по которому код точно не выполнится.

    А вот инструкция препроцессора:

    #Если Клиент И Не Клиент Тогда 

    За нее всегда будет цепляться глаз и каждый раз надо думать, а вдруг тот кто писал это просто ошибся и зря поставил такое не выполнимое условие.

    Reply ↓
  22. AKnyazkov

    (21)

    Добрый день!

    У меня такая конструкция даже добавлена в шаблон под названием «Заглушка», чтобы никто глазами не спотыкался, можно добавить комментарий ), а по поводу несуществующих команд препроцессору, вдруг их перестанут поддерживать и они станут вызывать ошибку (гипотетически) ?

    Про привычки — согласен, люди ко всему привыкают )

    Reply ↓
  23. BlizD

    (22)

    Добрый день, Алексей.

    по поводу:

    вдруг их перестанут поддерживать и они станут вызывать ошибку (гипотетически) ?

    Сомневаюсь, что такое случиться, это будет означать, что могут быть проблемы и по другим конструкция препроцессора (если кто то в коде указал неправильное имя конструкции например &НаКлиенте1), что повлечет проблемы. Думаю вряд ли фирма 1с, пойдет на такой шаг.

    Но даже если такое случиться, слово Тромбон отлично подходит для глобальной замены во всей конфигурации =)

    Reply ↓
  24. gubanoff
    Reply ↓
  25. BlizD

    UPDATE 081217:

    * В макет классов добавлены объекты: общие реквизиты.

    Reply ↓
  26. BlizD

    (24)

    Добрый день, Александр.

    Спасибо за отзыв, приятно, что обработка Вам пригодилась.

    1. Добавил имя класса HTTPСервис

    0fffc09c-8f4c-47cc-b41c-8d5c5a221d79 HTTPСервис

    Подскажите как точно называется HTTPСервис? Он также проходит и при типовой выгрузке 1с?

    2. Не хватает имени класса ОбщийРеквизит, но у меня такого пока нет, поэтому и проблем нет.

    Да, с этим уже столкнулся где то 2-3 недели назад, все некогда было обновить обработку. Спасибо.

    что сделал — добавил параметры

    -BlobToFile yes

    и

    -ParseBlob no

    Подскажите, куда Вы их добавили? Тоже добавлю в основную версию.

    6. Для хранилища с числом версий около 3000 выгрузка-загрузка истории с выделением BLOB файлов занимает около 5 минут. Без выделения blob будет быстрее, но нужно следить, чтобы памяти хватало на сервере 1С. В связи с этим самый печальный вывод — для оперативной работы в онлайн-режиме это медленно (даже для маленьких хранилищ). Поэтому ряд бонусов от истории хранилища невозможно использовать. Остается вариант с регламентной загрузкой по расписанию, но это не онлайн-режим.

    Самое правильное было ускорение, это если бы утилита Tool_1CD могла накладывать отбор на версии, которые надо выгружать.

    У нас более 9000 версий, загружается через регл. задание, но для нас 5-10 минут это не проблема.

    на версии платформы 8.3.5.1383 у меня не заработало правильно. Файл читался, но типы «дата», «булево» загружались строкой. Пришлось сделать парсинг строк.

    Добавлю в описании.

    Reply ↓
  27. BlizD

    (24) Александр,

    выложил на Github конфигурацию: https://github.com/BlizD/HistoryStorage

    Reply ↓
  28. gubanoff

    (26)

    Подскажите как точно называется HTTPСервис? Он также проходит и при типовой выгрузке 1с?

    — не понял вопрос, это объект в ветке Общие — HTTP-сервисы, появились в платформе 8.3.

    Подскажите, куда Вы их добавили? Тоже добавлю в основную версию.

    добавил в функцию ВыгрузитьТаблицыХранилищаВФайлы, получилось вот так:

      ДобавитьВКомандуКлючЗначение(ТекстКоманды,,ИмяФайлаХранилища);
    ДобавитьВКомандуКлючЗначение(ТекстКоманды,»-ne»);
    ДобавитьВКомандуКлючЗначение(ТекстКоманды,»-ex»,КаталогВыгрузкиФайлов);
    ДобавитьВКомандуКлючЗначение(ТекстКоманды,»USERS,HISTORY,VERSIONS,OBJECTS»);
    Если ОбщиеПараметры.мХранилищеКонфигурации.ВыгружатьBLOBОтдельно Тогда
    ДобавитьВКомандуКлючЗначение(ТекстКоманды,»-BlobToFile yes»);
    ДобавитьВКомандуКлючЗначение(ТекстКоманды,»-ParseBlob no»);
    КонецЕсли;
    

    Показать

    Самое правильное было ускорение, это если бы утилита Tool_1CD могла накладывать отбор на версии, которые надо выгружать.

    согласен, но думаю, навряд ли автор это доработает.

    Reply ↓
  29. gubanoff

    (26)

    У нас более 9000 версий, загружается через регл. задание, но для нас 5-10 минут это не проблема.

    подскажите, для чего используете историю? При регламентной загрузке у меня только такие идеи к использованию:

    1. самые часто/редко меняемые объекты — определять, нужен ли рефакторинг.

    2. количество версий за период по программистам — для определения тренда скорости.

    В онлайн-режиме можно было это дело связать с системой учета задач и ошибок.

    Reply ↓
  30. BlizD

    (28)

    Александр,

    — не понял вопрос, это объект в ветке Общие — HTTP-сервисы, появились в платформе 8.3.

    Есть типовая (платформенная) выгрузка истории изменений из хранилища. И есть вот эта альтернативная выгрузка.

    Важно, чтобы и типовая и альтернативная выгрузка на выходе получало одинаковое имя класса.

    Типовая выгрузка это примерно вот такая строка запуска конфигуратора с ключами:

    «C:Program Files (x86)1cv88.3.9.2170in1cv8.exe» DESIGNER  /F «D:Storage_transitKons» /N «UserStorage» /P «123» /ConfigurationRepositoryF «D:StorageKons» /ConfigurationRepositoryN «UserStorage» /ConfigurationRepositoryP «123» /ConfigurationRepositoryReport «C:\TempStorageHistory_08122017_114726.mxl» -NBegin «183»
    Reply ↓
  31. BlizD

    (29)

    подскажите, для чего используете историю? При регламентной загрузке у меня только такие идеи к использованию:

    1. самые часто/редко меняемые объекты — определять, нужен ли рефакторинг.

    2. количество версий за период по программистам — для определения тренда скорости.

    Это используется в конфигурации Управление задачами https://infostart.ru/public/552480/

    Если в двух словах, то измененные метаданные связываются с конкретными задачами.

    А задачи в свою очередь собираются в релиз, в документ выпуск релиза.

    В котором уже видно, какие метаданные необходимо перенести в рабочую базу по этому релизу.

    Вот пример видео на эту тему:

    https://www.youtube.com/watch?v=XzWCFyrIPcI

    Reply ↓
  32. gubanoff

    (30)

    Есть типовая (платформенная) выгрузка истории изменений из хранилища. И есть вот эта альтернативная выгрузка.

    Важно, чтобы и типовая и альтернативная выгрузка на выходе получало одинаковое имя класса.

    как использовать типовую выгрузку? Я не в курсе этого. Если речь об отчете по истории хранилища, так в нем нет идентификаторов.

    Reply ↓
  33. BlizD

    (32)

    как использовать типовую выгрузку? Я не в курсе этого. Если речь об отчете по истории хранилища, так в нем нет идентификаторов.

    Да, речь об отчете.

    Неправильно выразился, да там нет идентификаторов.

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

    Чтобы не получилось так, что в типовой объект называется «HTTP-Сервис», а в альтернативной «HTTPСервис» т.е. без дефиса.

    Reply ↓
  34. gubanoff

    (33) да, так и называется HTTPСервис 🙂

    Reply ↓
  35. BlizD

    (34)

    Спасибо добавлю в обработку чуть позже

    Reply ↓
  36. BlizD

    UPDATE 241217:

    * В макет классов добавлены объекты: HTTPСервис

    Reply ↓
  37. BlizD

    UPDATE 270118:

    * Исправил ошибку при получении строки родителя по OBJID. Оказывается он может повторяться, если старый объект был удален, то для нового может быть этот же OBJID.

    Reply ↓
  38. zekrus

    Доброе утро!

    Тема весьма актуальная.

    Нужно кое-что поправить:

    1. Фильтрация нужна по дате.

    2. Отчет о проделанной работе сотрудника

    (выводить комментарии и метки за период).

    3. Необходима кнопка «Печать».

    4. Множественный выбор каталогов хранилищ.

    С уважением

    Reply ↓
  39. BlizD

    (38)

    Доброе утро, Николай.

    По поводу пожеланий к обработке.

    Большую часть описанных вещей можно получить в конфигурации:

    * Управление задачами: Канбан доска (https://infostart.ru/public/552480/)

    В данной конфигурации необходимо открыть справочник «История конфигурации».

    Там можно и отфильтровать по дате и вывести список и отфильтровать по конфигурациям.

    Если все же кто то хочет доработать именно эту обработку то тоже не против.

    Обработка выложена на Github любой желающий может ее доработать.

    * Адрес проекта на GitHub: https://github.com/BlizD/HistoryStorage

    Как доработать обработку, можно почитать вот тут:

    * Github и 1С. Пошаговая инструкция на конкретном примере (https://infostart.ru/public/691382/)

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *