Версионирование объектов в 1С

Когда то видел реализацию «истории записей» — версионирования, на стороне программы, работающей с SQL базой. Перед изменением записи, из базы получалась старая версия, записывалась в XML и полученная строка XML записывалась в отдельную таблицу версий.
Изначально, в своей программе планировал версионирование сделать когда нибудь потом, какой то срочной необходимости не было. Помню, было желание где-то использовать тип данных jsonb, как только додумался до простой и лаконичной реализации версионирования на стороне SQL, не сделать не смог. Всего лишь одна таблица версий с 5 колонками и одна триггерная функция в 3 строчки кода.
Для описания реализации одной таблицы версий мало, поэтому придется описать еще несколько таблиц для примера.
Практически во всех базах данных, за редким исключением, есть таблица users – пользователи. Историю изменений — версий пользователя полезно хранить, например, для возможности откатится на старую версию, силами самого пользователя.
Пример таблицы пользователей:
Последние два поля на картинке, нужны для таблицы версий, также их можно назвать «автор версии» и «дата версии», но, при желании, можно обойтись без них.
Таблица версий:
Триггерная функция для сохранения версий:
Первые два поля заполняются из сохраняемой записи OLD.changestamp и OLD.userid.
В таблице версий, могут храниться не только записи таблицы users, третье поле MD5 хеш имени версионируемой таблицы, преобразованный в uuid.
В примерах ранее описана очень простая структура, но, как правило, у различных справочных данных могут быть дополнительные таблицы, с отношением «один ко многим».
Например, таблица «Группы пользователей».
И вторая таблица «Пользователи групп», состав группы — пользователи входящие в группу.
Для того, чтобы не усложнять простой механизм версионирования можно сделать небольшое дублирование данных в таблице групп, добавить jsonb поле, повторяющее структуру таблицы «Пользователи групп».
Для упрощения работы с задублированными данными, можно сделать дополнительную триггерную функцию, при INSERT или UPDATE, заполняющее таблицу «Пользователи групп» из jsonb поля.
Описанное выше дублирование, нужно только, когда требуется часто и максимально быстро получить данные из таблицы. Например, если часто делается запрос к таблице «Пользователи групп» для определения входит ли пользователь в группу Администраторы. В остальных случаях, данные можно получать запросом прямо из поля jsonb, и не использовать дублирующую таблицу.

Совет. Если вы долго работаете с одним документом, вам, возможно, понадобится вернуться к одному из предыдущих вариантов файла. Для этого нужно воспользоваться возможностью создания версий документа. Версии позволяют фиксировать изменения, внесенные в документ в определенный момент времени. При использовании версий экономится место на диске, так как сохраняется не полное содержимое документа, а только различия между ними. Если сохранены несколько вариантов документа, то у вас всегда будет возможность вернуться к предыдущему и открыть, распечатать или удалить его.

В редакторе Word в любой момент можно, например, сохранить вариант текста, отправленный на рецензирование, а после внесения всех исправлений сохранить его как другую версию. 
Для управления версиями необходимо выбрать «Файл | Версии». В открывшемся окне «Версии документа» будет отображен список всех ранее сохраненных версий. Для сохранения версий необходимо нажать кнопку «Сохранить» и в появившемся окне сделать комментарии (заметки) к сохраняемой версии. 
Открыть любую из ранее сохраненных ранее версий можно воспользовавшись пунктом «Открыть» окна «Версии». А кнопка «Заметки» позволит отобразить заметки выделенной версии документа. 
В MS Word можно включить режим автоматического сохранения версии документа при каждом его закрытии. Это бывает полезно, если необходимо фиксировать информацию о том, кто и когда вносил исправления. Для этого отметьте галочкой опцию «Автоматически сохранять версию при закрытии» в окне «Версии». 
Кроме сохранения версий в Word можно делать резервную копию документа. Если по какой-то причине изменения в вашем документе не были сохранены, можно восстановить хотя бы некоторые из них, воспользовавшись резервной копией. Для автоматического создания резервной копии выберите пункт меню «Сервис | Параметры». В открывшемся окне перейдите на вкладку «Сохранение» и пометьте переключатель «Всегда создавать резервную копию». 
Сохраненная резервная копия — это файл с именем «Копия имя_файла». Ее можно отыскать в любой момент в той же папке, в которой сохранен основной файл, и работать с ней точно так же, как с обычным документом.

При очередном обновлении MS Excel убил мне изменения, которые я вносил в файл последние несколько часов, почему-то не сохранив никаких временных файлов, из которых бы можно было восстановить последние изменения в документе. Если бы я хранил в файлы в Cloud SharePoint, то конечно же никаких бы проблем не было, т.к. там версионность включена по умолчанию, но файл лежал на моём локальном жёстком диске.
Но я вспомнил, что в Windows 10 же тоже есть встроенная версионность файлов, что в общем видно на соответствующей вкладке в свойствах файла, только я её никогда не включал:

И тут я собственно задумался, а как же её включить? Пошёл в панель управления, в раздел «История файлов”, и вижу, что включить историю я не могу. т.к. в моём ноутбуке только один жёсткий диск, и Windows отказывается хранить историю файлов на том же диске, где и сами фалы. Что на самом деле не очень логично, т.к. версионность файлов и бэкап — это немного разные вещи, и я не вижу никаких проблем в том, чтобы хранить предыдущие версии файлов в том же диске.

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

Но мне это не интересно, у меня ноутбук — это портативное устройство, где все документы, включая их предыдущие версии, должны быть доступны в автономном режиме. Да у меня есть BackUp на домашнем NAS, часть документов синхронизирую в облако, но это всё не то. В общем, я решил не сдаваться и подключить сетевой диск, который всегда будет доступен в автономном режиме. Для этого на своём диске C:\ я создал папку PREV_VERSIONS, и подключил секретный сетевой диск : \\127.0.0.1\с\PREV_VERSION

Windows без проблем его принял в качестве диска для хранения версий файлов.

По умолчанию версионность включается только для папки «Мои Документы”, поэтому остальные папки нужно добавить в панели управления: Обновление и безопасность \ Служба архивации \ Другие параметры, выбрать «+ Добавить папку”. После чего можно нажать «Архивировать сейчас” для первичного архивирования всего содержимого — оно будет долгим, все остальные будут проходить быстро, т.к. в резервное копирование попадают только изменённые файлы. Можно выбрать, как часто сохранять резервные копии. От 10 минут до 1 дня.

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

PS: Как я писал выше, не путаем BackUp и версионность файлов — это разные вещи. BackUp действительно нужно хранить не просто на другом диске, а в другом месте, а лучше в нескольких.
PS2: Да, забыл сказать, что автоматически сохраняемые версии документов MS Office хранит в папке: c:\Users\имя_пользователя\AppData\Roaming\Microsoft\ — так что эту папку лучше тоже добавить к списку архивируемых. Тогда в случае, если после сбоя Excel удалит или повредит временные файлы автоматического сохранения, их тоже можно будет восстановить.