|
|
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
Всем привет. На данный момент в системе ведутся документы определённой структуры. Документом в системе является набор строк из разных таблиц, которые взаимосвязаны между собой. По определённому действию пользователи могут скопировать документ для параллельного внесения в него изменений. Данное действие полностью копирует в базе строки документа в те же самые таблицы. При этом таблица, которая хранит заголовки документа, ссылается на специальную таблицу архивов, где при каждом копировании добавляется строка, и заголовок копии документа уже ссылается на новую строку. Появилась следующая задача: необходима возможность сравнения разных версий одного и того же документа. Подскажите, пожалуйста, какие уже есть основные подходы к решению данной проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 17:39 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
быстро дешево и сердито - считаете хэш (crc, md5 или еще что нибудь) от всех полей, всех строк документа и сравниваете его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2015, 18:57 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
Марков Илья, так а какие подходы ? напиши процедуру, как процедура кончается документа, только чтобы сравнивала, а не копировала. Контрольные суммы применять так бессмысленно, потому что ты примерно одно усилие будешь затрачивать как на подсчет контрольной суммы, так и на полное сравнение. Вот если считать сумму в процессе пересечения, и хранить, то потом можно будет легко сказать, разные ли документы (при чем чтобы сказать, что они одинаковы, надо снова сравнивать документы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 08:07 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
SERG1257быстро дешево и сердито - считаете хэш (crc, md5 или еще что нибудь) от всех полей, всех строк документа и сравниваете его. MasterZivтак а какие подходы ? напиши процедуру, как процедура кончается документа, только чтобы сравнивала, а не копировала. Контрольные суммы применять так бессмысленно, потому что ты примерно одно усилие будешь затрачивать как на подсчет контрольной суммы, так и на полное сравнение. Вот если считать сумму в процессе пересечения, и хранить, то потом можно будет легко сказать, разные ли документы (при чем чтобы сказать, что они одинаковы, надо снова сравнивать документы) я, наверное, не точно выразился :) Под сравнением я имел виду нормальное визуальное сравнение. То есть необходимо видеть как изменился один вариант документа по сравнению с другим. У меня только приходит в голову, так это для каждого элемента документа (строки) создавать уникальный идентификатор, который будет копироваться из версии в версию. И потом по этим идентификаторам сравнить элементы. Может есть другие пути решения) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 08:41 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
Марков Илья, Пользуйте уже готовые системы и не заморачивайтесь. Все уже "украдено" до вас. Ну а если изобретаете свой "велосипед" то сравнивайте по знакам. При этом если документ не мелких размеров то логичнее разбивать на небольшие куски которые потом и сравнивать, так будете меньше тратить времени если правок мало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 09:55 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
Злой БобрМарков Илья, Пользуйте уже готовые системы и не заморачивайтесь. Все уже "украдено" до вас. Ну а если изобретаете свой "велосипед" то сравнивайте по знакам. При этом если документ не мелких размеров то логичнее разбивать на небольшие куски которые потом и сравнивать, так будете меньше тратить времени если правок мало. Не совсем понял. Например, какие готовые системы? Я и хочу узнать какие есть лучшие практики в решении этого вопроса) Документ, да, иногда бывает большим. Но структура документов и так сама по себе делится на 3 куска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 10:17 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
На самом деле мне нужно что-то подобное как например в ГАРАНТе. Интересно как там реализовано хранение документов, их изменение, сравнение и пр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 10:23 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
Марков ИльяНапример, какие готовые системы?Например, вот - www.ixbt.com/soft/abbyy-comparator.shtml А в данном случае надо подробно смотреть как именно документы и их версии хранятся в базе. Возможно, получится обойтись всего одним SQL-запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 10:24 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
Марков Ильядля каждого элемента документа (строки) создавать уникальный идентификатор, А сейчас у них нет первичного ключа? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 10:28 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
miksoftМарков ИльяНапример, какие готовые системы?Например, вот - www.ixbt.com/soft/abbyy-comparator.shtml А в данном случае надо подробно смотреть как именно документы и их версии хранятся в базе. Возможно, получится обойтись всего одним SQL-запросом. Спасибо. Интересное приложение :) но это конечно не то У меня есть только один тип документа. Вкратце структура базы данных приведена во вложении. Пользователи копируют версии документов. При копировании версии также копируются все её дочерние строки с новыми идентификаторами в первичных и внешних ключах. Строки справочников не копируются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 13:54 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovМарков Ильядля каждого элемента документа (строки) создавать уникальный идентификатор, А сейчас у них нет первичного ключа? В данном случае под уникальным идентификатором я не подразумевал первичный ключ) Первичный ключ само собой есть. Я имел ввиду, что для каждого элемента в документе (строки в базе) во всех версиях иметь один и тот же идентификатор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 13:57 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
Марков Илья, система сбалансированных показателей? :) Итого, как я понял, при копировании одного документа у вас появляется копия, которую потом изменяют, и вам хотелось сравнить оригинал и копию и получить разницу между этими двумя документами. Если "ДА!", то: 1) определитесь, информация о каких изменениях волнует пользователя при сравнении; 2) после чего можно попробовать снять требования или предложиьт варианты представления этой информации. Вариант с лёту: 1) "хочу видеть разницу между данными, которые печатаются на бланке документа" 2) вариант: формируем отчётом два текстовых файла или xml - отдаём их оба на откуп существующим утитлитам по сравнению содержания таких файлов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 15:42 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
АнатоЛой, Нет) система ведения государственных программ :) АнатоЛойИтого, как я понял, при копировании одного документа у вас появляется копия, которую потом изменяют, и вам хотелось сравнить оригинал и копию и получить разницу между этими двумя документами. Да, так и есть. Сейчас как раз пытаюсь получить основные требования. Завтра человек выходит из отпуска и я буду с ним разговаривать. Но я точно знаю, что сейчас попросят один отчёт для сравнения, потом другой, потом десятый. Поэтому хотелось бы изначально попытаться заложить такую структуру, которая будет в большинстве случаях удобной))) Вариант с лёту сделать не могу. Причина вот в чём (более подробное описание задачи): 1) все версии документов утверждаются; 2) копировать можно только утверждённые документы (для внесения в них поправок); 3) сравнение версий нужно как раз для утверждения. То есть этот процесс будет постоянным. Сначала сравнивают неутверждённую версию с утверждённой, потом только новую версию утверждают. И весь этот процесс должен происходить в системе. P.S. сейчас основная задача состоит в том, чтобы сравнивать копию с оригиналом. Но я точно знаю, что основным пользователям системы, которые ведут свои документы, было очень полезно сравнение старых версий с более новыми, между которыми может быть несколько версий. Но изначально я ориентируюсь на основную задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 16:16 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
Марков Ильясейчас основная задача состоит в том, чтобы сравнивать копию с оригиналом. Саму систему переделывать можно или ты делаешь внешнюю нашлёпку? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 16:23 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Можно. Но тоже не полностью, так как есть некоторые ограничения в используемой платформе для проектирования систем (внутренний продукт). Но их по сути тоже можно будет решить некоторыми доработками :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 16:47 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
Марков ИльяЯ имел ввиду, что для каждого элемента в документе (строки в базе) во всех версиях иметь один и тот же идентификатор. Да, это будет правильно. И первичный ключ сделать из этого идентификатора + номер версии. Это позволит делать copy-on-write и тогда нахождение различий сведётся к выборке всех записей с версиями между двумя заданными и их компоновке для вывода пользователю. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 16:52 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
Марков ИльяВариант с лёту сделать не могу. Причина вот в чём (более подробное описание задачи): 1) все версии документов утверждаются; 2) копировать можно только утверждённые документы (для внесения в них поправок); 3) сравнение версий нужно как раз для утверждения. То есть этот процесс будет постоянным. Сначала сравнивают неутверждённую версию с утверждённой, потом только новую версию утверждают. И весь этот процесс должен происходить в системе. И в чём проблема для реализации моей идеи? А) Тебе нужна идея, как сделать СВОЙ велосипед? Смотри готовые продукты ... Б) Ты не можешь использовать внешнее приложение? Ищи соответствующее приложение с API или просто API: - двух xml-файлов ; - двух текстовых файлов ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 16:54 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
Марков Илья, в конце-концов, сформировал для каждого документа отчёт в формате Word, а потом программно заставил Word сравнить два документа и отобразить пользователю :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2015, 16:59 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Спасибо. Копирование при записи, наверное, самый лучший вариант. Но к сожалению я не могу реализовать такую сборку версий на своей платформе :( Поэтому, наверное, оставлю полное копирование в текущей реализации и добавлю спец. идентификатор, который будет что-то типа естественного ключа для каждого элемента документа во всех версиях. А при изменении строк я буду сравнивать их со строками в предыдущих версиях и в случае чего буду проставлять статус "Изменена". Если строка будет добавляться, то буду проставлять статус "Добавлена", а при удалении - "Удалена". Но с изменениями есть некоторая проблема: для каких-то форм сравнения одна и та же строка изменена в случае изменения одних атрибутов, для каких-то форм - в случае изменения других атрибутов. А при каждом изменении строки добавлять для каждого изменяемого атрибута строку в спец. таблицу не очень радует :( Как мне здесь лучше поступить? Сравнивать строки при открытии отчётов? Либо сделать вместо статуса "Изменена" в поле записывать двоичные числа, где каждому биту будет соответствовать атрибут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2015, 13:12 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
АнатоЛой, Проблема в том, что сравнение должно происходить в структурированном виде, включая использование OLAP-системы) Но твоё предложение я обязательно учту))) сравнение печатных документов с помощью приложений со своими интерфейсами очень полезная и интересная идея. Но пока задача состоит не в этом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2015, 13:16 |
|
||
|
Реализация сравнений версий сложных документов
|
|||
|---|---|---|---|
|
#18+
ну поставили на update признак "Запись изменена", а дальше что? В таблице 20 полей. Как узнать какое поле было изменено? Будете сравнивать каждое поле? Или на каждое поле отдельный признак заводить? Что будете делать при изменении значения какого-нибудь справочника? Во всех документах будете показывать ИЗМЕНЕНО? Или будете вести версии значений и сопоставлять их с версиями документов? Как будете вести версии самих отчетов - например в старой версии сортировка задач по наименованию, а в новой - по приоритету - это считается за изменение или нет. еще один нюанс - например в отчете есть поле ЦЕЛИ, где цели перечислены через запятую. Удаление записи из этой таблицы будет для пользователя отображаться как изменение или как удаление? это лишь некоторые моменты, советую над ними подумать прежде чем браться за реализацию. задача сомнительная, проблем много, выхлопа мало - как уже советовали, для начала лучше остановиться на варианте сравнения pdf, doc, и удобней и надежней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2015, 18:46 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38962679&tid=1540536]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
159ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 277ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...