|
История документа | ☑ | ||
|---|---|---|---|---|
|
0
shola
13.06.07
✎
14:14
|
помогите, дело в том, что необходимо придумать оптимальное программное решение для просмотра истории изменения документа
|
|||
|
1
Мулька
13.06.07
✎
14:15
|
ДБФ / СКЛ ?
|
|||
|
2
Лефмихалыч
13.06.07
✎
14:18
|
(0) много вариантов. Например, создать служебный документ, вводимый автоматом на основании текущего при записи. В этом документе хранить значения полей доумента.
|
|||
|
3
Kondarat
13.06.07
✎
14:21
|
||||
|
4
Лефмихалыч
13.06.07
✎
14:27
|
(0) кстати, фпоиск! Со словами: "история изменения документ"
|
|||
|
5
КапЛей
13.06.07
✎
14:29
|
Процедура глРегистрацияИзменений(Конт, Проц="") Экспорт
Перем ТЗ, ТЧ, ТзПред, Предст; Попытка Конт = Конт.ТекущийДокумент(); Исключение Возврат; КонецПопытки; Если ПустоеЗначение(Конт) = 1 Тогда Возврат; КонецЕсли; ВидДок = Конт.Вид(); ИдДок = ЗначениеВСтрокуВнутр(Конт); ИдДок = Число(Сред(ИдДок, Найти(ИдДок, " "))); // Организация ФС ИмяКаталога1 = Шаблон("[КаталогИБ()]Log\"); ИмяКаталога2 = Шаблон("[КаталогИБ()]Log\[ВидДок]\"); ИмяКаталога3 = Шаблон("[КаталогИБ()]Log\[ВидДок]\[ИдДок]\"); Если ФС.СуществуетФайл(ИмяКаталога1) = 0 Тогда ФС.СоздатьКаталог(ИмяКаталога1); КонецЕсли; Если ФС.СуществуетФайл(ИмяКаталога2) = 0 Тогда ФС.СоздатьКаталог(ИмяКаталога2); КонецЕсли; Если ФС.СуществуетФайл(ИмяКаталога3) = 0 Тогда ФС.СоздатьКаталог(ИмяКаталога3); КонецЕсли; Т = СоздатьОбъект("Текст"); ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.Выгрузить(ТзПред); ТЗ.НоваяКолонка("Автор"); ТЗ.НоваяКолонка("Дата"); ТЗ.НоваяКолонка("Время"); ТЗ.НоваяКолонка("Шапка"); ТЗ.НоваяКолонка("ТЧ"); СзШ = СоздатьОбъект("СписокЗначений"); Нули = "00000"; ИмяФайла = ФС.НайтиПервыйФайл(ИмяКаталога3+"*.txt"); ПослФайл = ИмяФайла; Пока ИмяФайла <> "" Цикл ПослФайл = ИмяФайла; ИмяФайла = ФС.НайтиСледующийФайл(); КонецЦикла; Если (ПустоеЗначение(ПослФайл) = 0) и (Проц = "ПриОткрытии") Тогда Возврат; КонецЕсли; Если ПослФайл = "" Тогда ИмяФайла = Нули; Иначе ИмяФайла = Прав(Нули + (Число(ПослФайл)+1), 5); КонецЕсли; СзШ.Установить("ДатаДок", Конт.ДатаДок); СзШ.Установить("НомерДок", Конт.НомерДок); Мтд = Метаданные.Документ(ВидДок); Для Ном = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл ИдРек = Метаданные.ОбщийРеквизитДокумента(Ном).Идентификатор; Если ИдРек = "Изменил" Тогда Продолжить; КонецЕсли; Если ИдРек = "НомерДляОтбора" Тогда Продолжить; КонецЕсли; ЗнРек = Конт.ПолучитьАтрибут(ИдРек); СзШ.Установить(ИдРек, ЗнРек); КонецЦикла; Для Ном = 1 По Мтд.РеквизитШапки() Цикл ИдРек = Мтд.РеквизитШапки(Ном).Идентификатор; ЗнРек = Конт.ПолучитьАтрибут(ИдРек); СзШ.Установить(ИдРек, ЗнРек); КонецЦикла; СтрокаТЧ = ""; Для Ном = 1 По Мтд.РеквизитТабличнойЧасти() Цикл ИдРек = Мтд.РеквизитТабличнойЧасти(Ном).Идентификатор; Если СтрокаТЧ = "" Тогда СтрокаТЧ = ИдРек; Иначе СтрокаТЧ = СтрокаТЧ + ","+ИдРек; КонецЕсли; КонецЦикла; Конт.ВыгрузитьТабличнуюЧасть(ТЧ); ЕстьИзменения = 0; Если ПустоеЗначение(ПослФайл) = 0 Тогда ЗначениеИзФайла(ИмяКаталога3+ПослФайл, ТзПред); ПредСзШ = ТзПред.ПолучитьЗначение(1, "Шапка"); ПредТЧ = ТзПред.ПолучитьЗначение(1, "ТЧ"); Если ТипЗначенияСтр(ПредТЧ) <> "ТаблицаЗначений" Тогда ТЧ.Выгрузить(ПредТЧ); ПредТЧ.УдалитьСтроки(); КонецЕсли; Если ПредСзШ.Получить("ДатаДок") <> СзШ.Получить("ДатаДок") Тогда ЕстьИзменения = 1; КонецЕсли; Если ПредСзШ.Получить("НомерДок") <> СзШ.Получить("НомерДок") Тогда ЕстьИзменения = 1; КонецЕсли; Если ЕстьИзменения = 0 Тогда Для Ном = 1 По СзШ.РазмерСписка() Цикл ТекЗн = СзШ.ПолучитьЗначение(Ном, Предст); Если ПредСзШ.Получить(Предст) <> ТекЗн Тогда ЕстьИзменения = 1; Прервать; КонецЕсли; КонецЦикла; КонецЕсли; Если (ТЧ.КоличествоСтрок() <= 1000) и (ПредТЧ.КоличествоСтрок() <= 1000) Тогда ПредТЧ.НоваяКолонка("_СравнениеТЗ"); ПредТЧ.ВыбратьСтроки(); Пока ПредТЧ.ПолучитьСтроку() = 1 Цикл Состояние(ПредТЧ.НомерСтроки); ПредТЧ._СравнениеТЗ = -1; КонецЦикла; ТЧ.НоваяКолонка("_СравнениеТЗ"); ТЧ.ВыбратьСтроки(); Пока ТЧ.ПолучитьСтроку() = 1 Цикл Состояние(ТЧ.НомерСтроки); ТЧ._СравнениеТЗ = 1; КонецЦикла; КолСтр1 = ПредТЧ.КоличествоСтрок(); КолСтр2 = ТЧ.КоличествоСтрок(); Если КолСтр2 <> 0 Тогда ПредТЧ.КоличествоСтрок(КолСтр1+КолСтр2); КонецЕсли; Если КолСтр2 <> 0 Тогда Если КолСтр1 = 0 Тогда ТЧ.Выгрузить(ПредТЧ); Иначе ПредТЧ.Заполнить(ТЧ, КолСтр1+1); КонецЕсли; КонецЕсли; ПредТЧ.Свернуть(СтрокаТЧ, "_СравнениеТЗ"); ПредТЧ.Сортировать("_СравнениеТЗ"); Если ПредТЧ.КоличествоСтрок() > 0 Тогда Если (ПредТЧ.ПолучитьЗначение(1,"_СравнениеТЗ") <> 0) или (ПредТЧ.ПолучитьЗначение(ПредТЧ.КоличествоСтрок(),"_СравнениеТЗ") <> 0) Тогда ЕстьИзменения = 1; КонецЕсли; КонецЕсли; КонецЕсли; Иначе ЕстьИзменения = 1; КонецЕсли; Если ЕстьИзменения = 1 Тогда ТЗ.НоваяСтрока(); Если ПустоеЗначение(ПослФайл) = 1 Тогда //ТЗ.Автор = ""; Иначе ТЗ.Автор = ?(ПустоеЗначение(ПолноеИмяПользователя())=0,ПолноеИмяПользователя(),ИмяПользователя()); КонецЕсли; ТЗ.Дата = ТекущаяДата(); ТЗ.Время = ТекущееВремя(); ТЗ.Шапка = СзШ; Если ТЧ.КоличествоСтрок() <= 1000 Тогда Попытка ТЧ.УдалитьКолонку("_СравнениеТЗ"); Исключение КонецПопытки; ТЗ.ТЧ = ТЧ; КонецЕсли; ЗначениеВФайл(ИмяКаталога3+ИмяФайла+".TXT", ТЗ); КонецЕсли; ТЗ = 0; ФС.НайтиПервыйФайл(КаталогИБ()); КонецПроцедуры // глРегистрацияИзменений() откуда взял уже не помню. вроде с инфостарта. и отчетик по изменениям там же валялся. клиенты довольны. |
|||
|
6
BSV
13.06.07
✎
15:31
|
(5) Тогда уж и отчет куда-нибудь выложи.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |