Очень часто бывает необходимо вести логи изменения документов. Кто когда и что правил в документе? С какого компьютера и т.д. Я много раз сталкивался с такой необходимостью, и, в результате был создан почти универсальный алгоритм.
Принцип его работы предельно простой: при открытии документа в предопределенной процедуре организовывается вызов процедуры глобального модуля, в котором делается сохранение всех необходимых реквизитов документа в список значений. Необходимые реквизиты - это все реквизиты шапки и итоги по итоговым реквизитам табличной части. Я считаю, что этого достаточно.
После того, как документ был открыт - при записи или при проведении устанавливается флаг.
Далее в предопределенной процедуре при закрытии формы документа анализируется необходимость сравнения - и осуществляется вызов процедуры глобального модуля для сравнения документов. При наличии расхождений - пишется лог.
Лог представлен в виде трех справочников: Лог (в него заносятся документы), История (подчиненный справочник: в него заносится кто и когда правил), Запись (подчиненный справочник: хранит сами изменения).
Для просмотра лога предназначена специальная обработка, которая приводит лог в удобочитаемый вид: используются три таблицы значений на форме диалога.
Теперь рассмотрим непосредственно все вышеперечисленые моменты.
Для начала - структура справочников:
А теперь я приведу кусок описания структуры метаданных, который касается этих справочников (для краткости ненужные свойства вырезаны):
- Справочник
- Идентификатор "Лог"
- Синоним
- Комментарий "Изменяемые документы"
- Владелец
- КоличествоУровней "1"
- ДлинаКода "0"
- ДлинаНаименования "0"
- СерииКодов "ВПределахПодчинения"
- ТипКода "Текстовый"
- ОсновноеПредставление "ВВидеНаименования"
- КонтрольУникальности "0"
- АвтоНумерация "1"
- ГруппыВпереди "1"
- Реквизит
- Идентификатор "Док"
- Синоним
- Комментарий "Документ"
- Тип "Документ"
- Вид
- Длина "0"
- Точность "0"
- НеОтрицательный "0"
- РазделятьТриады "0"
- Периодический "0"
- Сортировка "1"
- Отбор "0"
- РучноеИзменение "1"
- ИзменяетсяДокументами "0"
- Использование "ДляЭлемента"
- Реквизит
- Идентификатор "НомерДок"
- Синоним
- Комментарий
- Тип "Число"
- Вид
- Длина "6"
- Точность "0"
- НеОтрицательный "1"
- РазделятьТриады "0"
- Периодический "0"
- Сортировка "0"
- Отбор "0"
- РучноеИзменение "1"
- ИзменяетсяДокументами "0"
- Использование "ДляЭлемента"
- Реквизит
- Идентификатор "ДатаДок"
- Синоним
- Комментарий
- Тип "Дата"
- Вид
- Длина "0"
- Точность "0"
- НеОтрицательный "0"
- РазделятьТриады "0"
- Периодический "0"
- Сортировка "0"
- Отбор "0"
- РучноеИзменение "1"
- ИзменяетсяДокументами "0"
- Использование "ДляЭлемента"
- Реквизит
- Идентификатор "ВремяДок"
- Синоним
- Комментарий
- Тип "Строка"
- Вид
- Длина "10"
- Точность "0"
- НеОтрицательный "0"
- РазделятьТриады "0"
- Периодический "0"
- Сортировка "0"
- Отбор "0"
- РучноеИзменение "1"
- ИзменяетсяДокументами "0"
- Использование "ДляЭлемента"
- Реквизит
- Идентификатор "ВидДок"
- Синоним
- Комментарий
- Тип "Строка"
- Вид
- Длина "30"
- Точность "0"
- НеОтрицательный "0"
- РазделятьТриады "0"
- Периодический "0"
- Сортировка "0"
- Отбор "0"
- РучноеИзменение "1"
- ИзменяетсяДокументами "0"
- Использование "ДляЭлемента"
- Реквизит
- Идентификатор "Автор"
- Синоним
- Комментарий
- Тип "Справочник"
- Вид "Пользователи"
- Длина "0"
- Точность "0"
- НеОтрицательный "0"
- РазделятьТриады "0"
- Периодический "0"
- Сортировка "0"
- Отбор "0"
- РучноеИзменение "1"
- ИзменяетсяДокументами "0"
- Использование "ДляЭлемента"
- Реквизит
- Идентификатор "Удален"
- Синоним
- Комментарий
- Тип "Число"
- Вид
- Длина "1"
- Точность "0"
- НеОтрицательный "1"
- РазделятьТриады "0"
- Периодический "0"
- Сортировка "0"
- Отбор "0"
- РучноеИзменение "1"
- ИзменяетсяДокументами "0"
- Использование "ДляЭлемента"
- Справочник
- Идентификатор "История"
- Синоним
- Комментарий
- Владелец "Справочник.Лог"
- КоличествоУровней "1"
- ДлинаКода "6"
- ДлинаНаименования "0"
- СерииКодов "ВПределахПодчинения"
- ТипКода "Числовой"
- ОсновноеПредставление "ВВидеКода"
- КонтрольУникальности "1"
- АвтоНумерация "2"
- ГруппыВпереди "1"
- Реквизит
- Идентификатор "ДатаПравки"
- Синоним
- Комментарий
- Тип "Дата"
- Вид
- Длина "0"
- Точность "0"
- НеОтрицательный "0"
- РазделятьТриады "0"
- Периодический "0"
- Сортировка "0"
- Отбор "0"
- РучноеИзменение "1"
- ИзменяетсяДокументами "0"
- Использование "ДляЭлемента"
- Реквизит
- Идентификатор "ВремяПравки"
- Синоним
- Комментарий
- Тип "Строка"
- Вид
- Длина "10"
- Точность "0"
- НеОтрицательный "0"
- РазделятьТриады "0"
- Периодический "0"
- Сортировка "0"
- Отбор "0"
- РучноеИзменение "1"
- ИзменяетсяДокументами "0"
- Использование "ДляЭлемента"
- Реквизит
- Идентификатор "АвторИзменений"
- Синоним
- Комментарий
- Тип "Справочник"
- Вид "Пользователи"
- Длина "0"
- Точность "0"
- НеОтрицательный "0"
- РазделятьТриады "0"
- Периодический "0"
- Сортировка "0"
- Отбор "0"
- РучноеИзменение "1"
- ИзменяетсяДокументами "0"
- Использование "ДляЭлемента"
- Реквизит
- Идентификатор "ПК"
- Синоним
- Комментарий
- Тип "Строка"
- Вид
- Длина "30"
- Точность "0"
- НеОтрицательный "0"
- РазделятьТриады "0"
- Периодический "0"
- Сортировка "0"
- Отбор "0"
- РучноеИзменение "1"
- ИзменяетсяДокументами "0"
- Использование "ДляЭлемента"
- Реквизит
- Идентификатор "Права"
- Синоним
- Комментарий
- Тип "Строка"
- Вид
- Длина "30"
- Точность "0"
- НеОтрицательный "0"
- РазделятьТриады "0"
- Периодический "0"
- Сортировка "0"
- Отбор "0"
- РучноеИзменение "1"
- ИзменяетсяДокументами "0"
- Использование "ДляЭлемента"
- Справочник
- Идентификатор "Запись"
- Синоним
- Комментарий
- Владелец "Справочник.История"
- КоличествоУровней "1"
- ДлинаКода "0"
- ДлинаНаименования "0"
- СерииКодов "ВПределахПодчинения"
- ТипКода "Числовой"
- ОсновноеПредставление "ВВидеКода"
- КонтрольУникальности "1"
- АвтоНумерация "2"
- ГруппыВпереди "1"
- Реквизит
- Идентификатор "Показатель"
- Синоним
- Комментарий
- Тип "Строка"
- Вид
- Длина "30"
- Точность "0"
- НеОтрицательный "0"
- РазделятьТриады "0"
- Периодический "0"
- Сортировка "0"
- Отбор "0"
- РучноеИзменение "1"
- ИзменяетсяДокументами "0"
- Использование "ДляЭлемента"
- Реквизит
- Идентификатор "Было"
- Синоним
- Комментарий
- Тип "Строка"
- Вид
- Длина "30"
- Точность "0"
- НеОтрицательный "0"
- РазделятьТриады "0"
- Периодический "0"
- Сортировка "0"
- Отбор "0"
- РучноеИзменение "1"
- ИзменяетсяДокументами "0"
- Использование "ДляЭлемента"
- Реквизит
- Идентификатор "Стало"
- Синоним
- Комментарий
- Тип "Строка"
- Вид
- Длина "30"
- Точность "0"
- НеОтрицательный "0"
- РазделятьТриады "0"
- Периодический "0"
- Сортировка "0"
- Отбор "0"
- РучноеИзменение "1"
- ИзменяетсяДокументами "0"
- Использование "ДляЭлемента"
[1]-[2]-[3]
|