Недавно пришлось реализовать выгрузку изменений из хранилища 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-2024 awa
-ne
-NotExclusively
открыть базу не монопольно (Это небезопасно, возможны ошибки!).
А почему штатными средствами не обошлись?
https://github.com/Stepa86/1C-Gitter/blob/master/src/CommonModules/ПакетныйРежим/Ext/Modul e.bsl#L2
Например вот так:
(1)
Например вот так:
До этого и обходился штатными средствами, но для конфигураций в которых указан режим совместимости 8.2.13 и ниже
отчет выдается в другом формате он мне не подходил в нем нет нужных мне сведений:
нет версии, нет пользователя, нет даты версии, нет признака (добавлен, изменен, удален) или не было комментария.
+ сведений группируются по объектам метаданных.
Возможно, что то делал не так, но не получилось сформировать нужный мне отчет.
А почему не пользоваться не монопольным доступом утилиты?
я лично уже несколько лет юзаю этот режим с боевыми хранилищами для gitsync, проблем ни разу не было 🙂
(3)
я лично уже несколько лет юзаю этот режим с боевыми хранилищами для gitsync, проблем ни разу не было 🙂
Должен был предупредить, тех кто собирается использовать.
У меня просто такой практики еще нет, поэтому доверяюсь описанию к Tool_1CD.
Да и не я один юзаю gitsync в течение нескольких лет,
так что немонопольный доступ правильно работает и в бою можно юзать.
(5)
так что немонопольный доступ правильно работает и в бою можно юзать.
Спасибо, поправил описание.
Соглашусь с artbear: Tool_1CD корректно работает с файлом боевого хранилища уже давно и не на одном проекте.
Можно и не заморачиваться на постоянное копирование
(0) Работает. К тому же быстро работает. Очень крутая вещь. По задумке 1С, это можно получить парсингом файла по истории хранилища, который формируется при пакетном запуске конфигуратора:
но беда в том, что этот отчет формируется некорректно — всегда с группировкой по объектам, а не по комментариям (если я правильно помню, я даже посылал такую ошибку в 1С).
Не знал, что Tool_1CD умеет работать в командной строке, это тоже полезно было. Будем брать на вооружение.
(8)
Александр, спасибо за отзыв.
Для конфигураций в которых указан режим совместимости 8.2.16 и выше, отчет для парсинга выходит нормальный.
А вот для тех, что в режиме совместимости 8.2.13 и ниже то там да беда.
(8)
Эту возможность @awa (Валерий Агеев) по нашим просьбам давно добавил, сначала даже в GUI-версию
(10) Извиняюсь за оффтоп, а эта программка случайно не может захватывать объекты в хранилище под определенным пользователем?
(11)
Добрый день, Дмитрий.
Нет, такого функционала в ней не заложено.
Спасибо. Возникла подобная задача, очень кстати подвернулась ваша конфигурация. С некоторыми допилами обработка заработала на нашем проекте.
Что хотелось бы добавить:
1. Почему-то вы не считываете версию конфигурации и метку из истории хранилища.
2. Если решение в виде конфигурации, то разумно было бы добавить подсистему, роль (не «ПолныеПрава», а на запуск обработки). В общем оформить в виде готового к объединению и внедрению решения. Я добавлял еще регистр сведений для хранения истории, регламентное задание для обновления регистра сведений по истории хранилища, подсистему, константы, роли.
3. Ловлю ошибки вида:
Ошибка! Не найдена строка в «мТЗИменаКлассов» для CLASSID = f2de87a8-64e5-45eb-a22d-b3aedab050e7
Ошибка! Не найдена строка в «мТЗИменаКлассов» для CLASSID = 274bf899-db0e-4df6-8ab5-67bf6371ec0b
Ошибка! Не найдена строка в «мТЗИменаКлассов» для CLASSID = d3b5d6eb-4ea2-4610-a3e2-624d4e815934
4. Уж извините, что придираюсь, но хотелось бы некой чистоты кода. Я имею в виду удаление отладочных комментариев, описание к экспортным процедурам и т. д. Например, вот это:
Что за тромбон, простите? Я что-то не знаю в синтаксисе 1С? 🙂
Но в целом, все работает. Конечно, ставлю звездочку.
(13)
Добрый день, Виталий.
Спасибо за отзыв.
Версия конфигурации считывается, по поводу метки — она не выгружается и в типовой выгрузке, только комментарий выгружается.
Согласен с Вами, но данное решение не планировалось как готовое к объединению с чем то. Данная загрузка используется в конфигурации «Управление задачами»https://infostart.ru/public/552480/
Это ошибки означают, что в макете «ИменаКлассов» нет записи для CLASSID.
Можете сказать из какой конфигурации такие ошибки появляются?
Если есть возможность, то скиньте конфигурацию и добавлю запись в макет.
Как вариант, могу выложить на Github данную разработку и там через Pull request исправите то, о чем описываете.
Но в целом, все работает. Конечно, ставлю звездочку.
Что касается Тромбон, данный подход был взять из мастер группы профессионального программирования от Евгения Гилева и Насипова Фарита.
Данной инструкции препроцессора в 1с точно нет, поэтому весь код который обрамлен этой конструкцией будет удален в режиме исполнения. Но при написании кода, данный подход позволяет избежать ошибок синтаксических, т.к. становятся доступны методы вызываемые через точку. Чаще всего данную конструкцию удобно использовать в подписках на событиях, там есть Источник, чтобы обратиться к его методам или свойствам достаточно вставить такую конструкцию:
(14)
Что касается Тромбон, данный подход был взять из мастер группы профессионального программирования от Евгения Гилева и Насипова Фарита.
Данной инструкции препроцессора в 1с точно нет, поэтому весь код который обрамлен этой конструкцией будет удален в режиме исполнения. Но при написании кода, данный подход позволяет избежать ошибок синтаксических
Мы пишем
Без Тромбона ) и сворачивается
(15)
С тромбоном всегда веселее 🙂
(14)
Я имею в виду версию конфигурации поставщика. Она есть в истории хранилища, но нет в обработке.
УПП с большим числом доработок. Но я так понимаю, сама конфигурация не обязательна. Можно добавить новые объекты во все возможные ветки конфигурации и поместить в хранилище.
Интересный метод. Спасибо. Я обычно скрываю подобный код под комментарием.
UPDATE 090817:
* В обработку добавлена колонка «Версия конфигурации».
* В макет классов добавлены объекты: РегистрРасчета, Форма списка регистра расчета, Перерасчет регистра расчета,
Форма регистра бухгалтерии, НумераторДокументов.
* Добавлен реквизит «Вывести служебную таблицу» по этой таблице, можно определить класс объекта.
* Убраны лишние закомментированные блоки.
(13)
Добавил.
Добавил в макет классов новые классы, теперь ошибки должны уйти.
Убрал часть закомментированных блоков, теперь должно быть чище немного.
(14)
Добрый день, вместо Тромбон (что режет глаз) лучше писать:
#Если Клиент И Не Клиент Тогда
…
#КонецЕсли
(20)
#Если Клиент И Не Клиент Тогда
…
#КонецЕсли
Добрый день, Алексей.
Тут дело привычки, просто тромбон это гарантированное имя, по которому код точно не выполнится.
А вот инструкция препроцессора:
За нее всегда будет цепляться глаз и каждый раз надо думать, а вдруг тот кто писал это просто ошибся и зря поставил такое не выполнимое условие.
(21)
Добрый день!
У меня такая конструкция даже добавлена в шаблон под названием «Заглушка», чтобы никто глазами не спотыкался, можно добавить комментарий ), а по поводу несуществующих команд препроцессору, вдруг их перестанут поддерживать и они станут вызывать ошибку (гипотетически) ?
Про привычки — согласен, люди ко всему привыкают )
(22)
Добрый день, Алексей.
по поводу:
Сомневаюсь, что такое случиться, это будет означать, что могут быть проблемы и по другим конструкция препроцессора (если кто то в коде указал неправильное имя конструкции например &НаКлиенте1), что повлечет проблемы. Думаю вряд ли фирма 1с, пойдет на такой шаг.
Но даже если такое случиться, слово Тромбон отлично подходит для глобальной замены во всей конфигурации =)
UPDATE 081217:
* В макет классов добавлены объекты: общие реквизиты.
(24)
Добрый день, Александр.
Спасибо за отзыв, приятно, что обработка Вам пригодилась.
0fffc09c-8f4c-47cc-b41c-8d5c5a221d79 HTTPСервис
Подскажите как точно называется HTTPСервис? Он также проходит и при типовой выгрузке 1с?
Да, с этим уже столкнулся где то 2-3 недели назад, все некогда было обновить обработку. Спасибо.
-BlobToFile yes
и
-ParseBlob no
Подскажите, куда Вы их добавили? Тоже добавлю в основную версию.
Самое правильное было ускорение, это если бы утилита Tool_1CD могла накладывать отбор на версии, которые надо выгружать.
У нас более 9000 версий, загружается через регл. задание, но для нас 5-10 минут это не проблема.
Добавлю в описании.
(24) Александр,
выложил на Github конфигурацию:https://github.com/BlizD/HistoryStorage
(26)
— не понял вопрос, это объект в ветке Общие — HTTP-сервисы, появились в платформе 8.3.
добавил в функцию ВыгрузитьТаблицыХранилищаВФайлы, получилось вот так:
Показать
согласен, но думаю, навряд ли автор это доработает.
(26)
подскажите, для чего используете историю? При регламентной загрузке у меня только такие идеи к использованию:
1. самые часто/редко меняемые объекты — определять, нужен ли рефакторинг.
2. количество версий за период по программистам — для определения тренда скорости.
В онлайн-режиме можно было это дело связать с системой учета задач и ошибок.
(28)
Александр,
Есть типовая (платформенная) выгрузка истории изменений из хранилища. И есть вот эта альтернативная выгрузка.
Важно, чтобы и типовая и альтернативная выгрузка на выходе получало одинаковое имя класса.
Типовая выгрузка это примерно вот такая строка запуска конфигуратора с ключами:
(29)
1. самые часто/редко меняемые объекты — определять, нужен ли рефакторинг.
2. количество версий за период по программистам — для определения тренда скорости.
Это используется в конфигурации Управление задачамиhttps://infostart.ru/public/552480/
Если в двух словах, то измененные метаданные связываются с конкретными задачами.
А задачи в свою очередь собираются в релиз, в документ выпуск релиза.
В котором уже видно, какие метаданные необходимо перенести в рабочую базу по этому релизу.
Вот пример видео на эту тему:
https://www.youtube.com/watch?v=XzWCFyrIPcI
(30)
Важно, чтобы и типовая и альтернативная выгрузка на выходе получало одинаковое имя класса.
как использовать типовую выгрузку? Я не в курсе этого. Если речь об отчете по истории хранилища, так в нем нет идентификаторов.
(32)
Да, речь об отчете.
Неправильно выразился, да там нет идентификаторов.
Скажу по другому, важно, чтобы в альтернативной выгрузке было ровно такое же имя для метаданных, что и в типовой.
Чтобы не получилось так, что в типовой объект называется «HTTP-Сервис», а в альтернативной «HTTPСервис» т.е. без дефиса.
(33) да, так и называется HTTPСервис 🙂
(34)
Спасибо добавлю в обработку чуть позже
UPDATE 241217:
* В макет классов добавлены объекты: HTTPСервис
UPDATE 270118:
* Исправил ошибку при получении строки родителя по OBJID. Оказывается он может повторяться, если старый объект был удален, то для нового может быть этот же OBJID.
Доброе утро!
Тема весьма актуальная.
Нужно кое-что поправить:
1. Фильтрация нужна по дате.
2. Отчет о проделанной работе сотрудника
(выводить комментарии и метки за период).
3. Необходима кнопка «Печать».
4. Множественный выбор каталогов хранилищ.
С уважением
(38)
Доброе утро, Николай.
По поводу пожеланий к обработке.
https://infostart.ru/public/552480/ )
Большую часть описанных вещей можно получить в конфигурации:
* Управление задачами: Канбан доска (
В данной конфигурации необходимо открыть справочник «История конфигурации».
Там можно и отфильтровать по дате и вывести список и отфильтровать по конфигурациям.
Если все же кто то хочет доработать именно эту обработку то тоже не против.
https://github.com/BlizD/HistoryStorage
Обработка выложена на Github любой желающий может ее доработать.
* Адрес проекта на GitHub:
Как доработать обработку, можно почитать вот тут:
https://infostart.ru/public/691382/ )
* Github и 1С. Пошаговая инструкция на конкретном примере (