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

Программирование - Инструментарий

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

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

UPDATE 090817:  

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

UPDATE 070717:  

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

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

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

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

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

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

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

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

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

.

d:\Cloud\Dev\Tasks\Tool_1CD>ctool_1cd /?
cTool_1CD (с) 2009-2017 awa

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

Скачать файлы

Наименование Файл Версия Размер
Хранилище 1с. Просмотр истории обработкой:
.dt 781,68Kb
06.07.17
17
.dt 090817 781,68Kb 17 Скачать

См. также

Комментарии
1. Евгений Мартыненков (JohnyDeath) 290 06.07.17 21:34 Сейчас в теме
2. Антон Иванов (BlizD) 247 06.07.17 21:51 Сейчас в теме
(1)
А почему штатными средствами не обошлись?
Например вот так: https://github.com/Stepa86/1C-Gitter/blob/master/src/CommonModules/ПакетныйРежим/Ext/Modul­­e.bsl#L2


До этого и обходился штатными средствами, но для конфигураций в которых указан режим совместимости 8.2.13 и ниже
отчет выдается в другом формате он мне не подходил в нем нет нужных мне сведений:
нет версии, нет пользователя, нет даты версии, нет признака (добавлен, изменен, удален) или не было комментария.
+ сведений группируются по объектам метаданных.

Возможно, что то делал не так, но не получилось сформировать нужный мне отчет.
Bukaska; gubanoff; artbear; awa; JohnyDeath; +5 Ответить
3. Артур Аюханов (artbear) 882 07.07.17 10:49 Сейчас в теме
А почему не пользоваться не монопольным доступом утилиты?
я лично уже несколько лет юзаю этот режим с боевыми хранилищами для gitsync, проблем ни разу не было :)
4. Антон Иванов (BlizD) 247 07.07.17 11:01 Сейчас в теме
(3)
А почему не пользоваться не монопольным доступом утилиты?
я лично уже несколько лет юзаю этот режим с боевыми хранилищами для gitsync, проблем ни разу не было :)


Должен был предупредить, тех кто собирается использовать.
У меня просто такой практики еще нет, поэтому доверяюсь описанию к Tool_1CD.
5. Артур Аюханов (artbear) 882 07.07.17 11:15 Сейчас в теме
Да и не я один юзаю gitsync в течение нескольких лет,
так что немонопольный доступ правильно работает и в бою можно юзать.
JohnyDeath; +1 Ответить
6. Антон Иванов (BlizD) 247 07.07.17 11:29 Сейчас в теме
(5)
Да и не я один юзаю gitsync в течение нескольких лет,
так что немонопольный доступ правильно работает и в бою можно юзать.


Спасибо, поправил описание.
7. Евгений Мартыненков (JohnyDeath) 290 07.07.17 12:48 Сейчас в теме
Соглашусь с artbear: Tool_1CD корректно работает с файлом боевого хранилища уже давно и не на одном проекте.
Можно и не заморачиваться на постоянное копирование
8. Александр Губанов (gubanoff) 44 07.07.17 15:21 Сейчас в теме
(0) Работает. К тому же быстро работает. Очень крутая вещь. По задумке 1С, это можно получить парсингом файла по истории хранилища, который формируется при пакетном запуске конфигуратора:
/ConfigurationRepositoryReport <имя файла> [-NBegin <номер версии>] [-NEnd <номер версии>] [-GroupByObject] [-GroupByComment] — построение отчета по истории хранилища. 


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

Не знал, что Tool_1CD умеет работать в командной строке, это тоже полезно было. Будем брать на вооружение.
9. Антон Иванов (BlizD) 247 07.07.17 15:32 Сейчас в теме
(8)
Александр, спасибо за отзыв.

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


Для конфигураций в которых указан режим совместимости 8.2.16 и выше, отчет для парсинга выходит нормальный.
А вот для тех, что в режиме совместимости 8.2.13 и ниже то там да беда.
10. Артур Аюханов (artbear) 882 07.07.17 15:55 Сейчас в теме
(8)
Не знал, что Tool_1CD умеет работать в командной строке, это тоже полезно было. Будем брать на вооружение.

Эту возможность @awa (Валерий Агеев) по нашим просьбам давно добавил, сначала даже в GUI-версию
11. Дмитрий Фатов (Fatov_DI) 20.07.17 10:03 Сейчас в теме
(10) Извиняюсь за оффтоп, а эта программка случайно не может захватывать объекты в хранилище под определенным пользователем?
12. Антон Иванов (BlizD) 247 20.07.17 11:27 Сейчас в теме
(11)
Добрый день, Дмитрий.

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


Нет, такого функционала в ней не заложено.
13. Виталий Онянов (Tavalik) 543 01.08.17 19:21 Сейчас в теме
Спасибо. Возникла подобная задача, очень кстати подвернулась ваша конфигурация. С некоторыми допилами обработка заработала на нашем проекте.

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

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С? :)

Но в целом, все работает. Конечно, ставлю звездочку.
14. Антон Иванов (BlizD) 247 02.08.17 09:18 Сейчас в теме
(13)
Добрый день, Виталий.
Спасибо за отзыв.

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

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

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

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


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

Это ошибки означают, что в макете "ИменаКлассов" нет записи для CLASSID.
Можете сказать из какой конфигурации такие ошибки появляются?
Если есть возможность, то скиньте конфигурацию и добавлю запись в макет.

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


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

Что за тромбон, простите? Я что-то не знаю в синтаксисе 1С? :)
Но в целом, все работает. Конечно, ставлю звездочку.


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

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

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

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

Без Тромбона ) и сворачивается
16. Антон Иванов (BlizD) 247 09.08.17 08:20 Сейчас в теме
(15)
С тромбоном всегда веселее :)
17. Виталий Онянов (Tavalik) 543 09.08.17 12:44 Сейчас в теме
(14)
Версия конфигурации считывается, по поводу метки - она не выгружается и в типовой выгрузке, только комментарий выгружается.

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

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

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

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

Интересный метод. Спасибо. Я обычно скрываю подобный код под комментарием.
20. Алексей Князьков (AKnyazkov) 09.10.17 09:15 Сейчас в теме
(14)
Добрый день, вместо Тромбон (что режет глаз) лучше писать:
#Если Клиент И Не Клиент Тогда
...
#КонецЕсли
21. Антон Иванов (BlizD) 247 09.10.17 14:15 Сейчас в теме
(20)
Добрый день, вместо Тромбон (что режет глаз) лучше писать:
#Если Клиент И Не Клиент Тогда
...
#КонецЕсли


Добрый день, Алексей.
Тут дело привычки, просто тромбон это гарантированное имя, по которому код точно не выполнится.
А вот инструкция препроцессора:
#Если Клиент И Не Клиент Тогда 

За нее всегда будет цепляться глаз и каждый раз надо думать, а вдруг тот кто писал это просто ошибся и зря поставил такое не выполнимое условие.
22. Алексей Князьков (AKnyazkov) 10.10.17 17:06 Сейчас в теме
(21)
Добрый день!
У меня такая конструкция даже добавлена в шаблон под названием "Заглушка", чтобы никто глазами не спотыкался, можно добавить комментарий ), а по поводу несуществующих команд препроцессору, вдруг их перестанут поддерживать и они станут вызывать ошибку (гипотетически) ?
Про привычки - согласен, люди ко всему привыкают )
23. Антон Иванов (BlizD) 247 11.10.17 11:44 Сейчас в теме
(22)
Добрый день, Алексей.

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


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

Но даже если такое случиться, слово Тромбон отлично подходит для глобальной замены во всей конфигурации =)
18. Антон Иванов (BlizD) 247 09.08.17 18:30 Сейчас в теме
UPDATE 090817:

* В обработку добавлена колонка "Версия конфигурации".
* В макет классов добавлены объекты: РегистрРасчета, Форма списка регистра расчета, Перерасчет регистра расчета,
Форма регистра бухгалтерии, НумераторДокументов.
* Добавлен реквизит "Вывести служебную таблицу" по этой таблице, можно определить класс объекта.
* Убраны лишние закомментированные блоки.
19. Антон Иванов (BlizD) 247 09.08.17 18:32 Сейчас в теме
(13)
1. Почему-то вы не считываете версию конфигурации и метку из истории хранилища.

Добавил.

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


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

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


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