|
v7: Журнал регистрации (готовые решения) | ☑ | ||
---|---|---|---|---|
0
pofigos
12.07.12
✎
12:52
|
Всех приветствую.
Прошу прощения, если данный вопрос уже поднимался.. Может кто подсказать, есть ли какое-то готовое решение расширенного журнала регистрации. Необходимо знать что именно было сделано пользователем... Вплоть до добавлении строки в документе, изменения даты или любого реквизита, с указанием его. Желательно еще конечно, как тот или иной документ повлиял на регистры... Почему спросил готовый, времени мало писать самому с нуля, но если не будет, придется. а что творят пользователи, что так скачут остатки понять не могу... Никто не признается, хоть в тиски зажимай и пытай. Заранее спасибо. |
|||
1
Kavar
12.07.12
✎
12:53
|
Версирование. переходите на УПП там это реализовано.
|
|||
2
andrewalexk
12.07.12
✎
12:54
|
(0) :)) "Желательно еще конечно, как тот или иной документ повлиял на регистры.."...глубоко копаешь
|
|||
3
viktor_vv
12.07.12
✎
12:54
|
Такую хрень использую.
http://1c.proclub.ru/modules/mydownloads/personal.php?lid=5409&cid=5 |
|||
4
1Сергей
12.07.12
✎
12:55
|
Journal.dll
|
|||
5
1Сергей
12.07.12
✎
12:55
|
а, не... не то
|
|||
6
pofigos
12.07.12
✎
12:57
|
(2) Уж как есть. Просто не понятно, как могут провести отгрузку, если на складе нет товара. Стоят четкие ограничения на выписку товара... Вот и интересно кто и что делает. Даже интересно как??
(3) Спасибо, буду смотреть |
|||
7
Ёпрст
12.07.12
✎
12:58
|
(3) медленно это всё..
|
|||
8
Скользящий
12.07.12
✎
13:01
|
это в Семерке?
|
|||
9
Vladal
12.07.12
✎
13:01
|
(0) Я создавал дополнительный служебный документ, в реквизитах которого хранил
- ссылку на редактируемый документ - значение реквизита - итоги полей ТЧ до и после правки - дату, время и автора правки. Всё это делалось программно и только для проведенных документов, т.к. манагеры могли несколько раз менять (дописывать) свои заявки и корректировать их. |
|||
10
pofigos
12.07.12
✎
13:03
|
(8) Да, семерка
(9) В свое время в одной из компаний было реализовано на справочниках. Мысль ясна, примерно так и думал делать, правда когда будет свободное время. |
|||
11
Mikeware
12.07.12
✎
13:04
|
(10) "думал делать"....
там делать - пара часов, с отладкой - день. |
|||
12
dk
12.07.12
✎
13:04
|
делал такое, тут вроде кусками выкладывал
суть в ПриЗаписи сравниваешь все реквизиты Контекст и ТекущийДокумент() / ТекущийЭлемент() |
|||
13
pofigos
12.07.12
✎
13:05
|
(11) с учетом текущей работы, времени не так много... вечером займусь
|
|||
14
pofigos
12.07.12
✎
13:08
|
Спасибо за наводки и ссылки всем.
|
|||
15
Vladal
12.07.12
✎
13:15
|
(14) Вот нашел старый код:
Процедура глРедактирование(Конт,Режим,Элемент,ОписаниеИзменения="",ПредЗначение="") Экспорт Перем Цель; Если Режим=5 Тогда Если Элемент.Вид()="Редактирование" Тогда Возврат; Иначе Конт=Элемент; КонецЕсли; ИначеЕсли (ПустоеЗначение(Элемент)=0) и (Режим<>7) Тогда Конт=Элемент; ИначеЕсли (ПустоеЗначение(Конт)=1) Тогда Возврат; КонецЕсли; Если Режим=1 Тогда Цель="Просмотр"; ИначеЕсли Режим=2 Тогда Цель="Печать"; ИначеЕсли Режим=3 Тогда Предупреждение("Вы редактируете проведенный документ!", глТаймаут); Если ВвестиСтроку(Цель,"Цель редактирования",40)<>1 Тогда СтатусВозврата(0); КонецЕсли; Если ПустоеЗначение(Цель)=1 Тогда Цель="Редактирование без описания причины"; КонецЕсли; ИначеЕсли Режим=4 Тогда Цель="Удаление проведения"; ИначеЕсли Режим=5 тогда Цель="Удаление документа"; ИначеЕсли Режим=6 тогда Цель="Редактирование" ИначеЕсли Режим=7 тогда Цель="Удаление строки"; КонецЕсли; сПольз = СоздатьОбъект("Справочник.Пользователи"); сПольз.НайтиПоКоду(ИмяПользователя()); ДокРедактирования = СоздатьОбъект("Документ.Редактирование"); Если ДокРедактирования.НайтиПоНомеру(Конт.НомерДок)=0 Тогда ДокРедактирования.Новый(); //ДокРедактирования.Автор = сПольз.ТекущийЭлемент(); ДокРедактирования.НомерДок = Конт.НомерДок; ДокРедактирования.ДатаДок = ТекущаяДата(); ДокРедактирования.Док = Конт.ТекущийДокумент(); КонецЕсли; ДокРедактирования.НоваяСтрока(); ДокРедактирования.ДатаПравки = ТекущаяДата(); ДокРедактирования.ВремяПравки = ТекущееВремя(); ДокРедактирования.АвторРед = сПольз.Наименование; ДокРедактирования.Описание = Цель; ДокРедактирования.ПредЗначение = ПредЗначение; Попытка Если ПустоеЗначение(Элемент)=1 Тогда Рекв=Конт.Форма.АктивныйЭлемент(); Если ПустоеЗначение(Конт.Форма.АктивныйЭлемент())=1 Тогда Возврат; Иначе Если Режим=2 Тогда Значен= "Печать"; ИначеЕсли (Режим<>4)или(Режим<>5)или(Режим<>7) Тогда Попытка Значен = Конт.ПолучитьАтрибут(Конт.Форма.АктивныйЭлемент()); Исключение Значен = Элемент; КонецПопытки; Иначе Значен = Элемент; КонецЕсли; КонецЕсли; Иначе Рекв=""; Значен=Строка(Элемент); КонецЕсли; Исключение Конецпопытки; ДокРедактирования.Реквизит = Рекв; ДокРедактирования.Значение =Строка(Значен); ДокРедактирования.Записать(); КонецПроцедуры |
|||
16
Vladal
12.07.12
✎
13:18
|
А в элементах формы, для которых надо отслеживать изменения, писал в формулу эту процедурку:
глРедактирование(Контекст,3,) Идея по-моему на hare или проклабе была. |
|||
17
Mikeware
12.07.12
✎
13:18
|
(15) документ - не айс. (нагрузка на 1сджорнал)
вот скопипиздженное лет 8 назад откуда-то, работает без проблем... Процедура АудитДокумента(Конт,КомментарийДействия="перезаписан") Экспорт //Если ТипЗначенияСтр(Конт) <> "ГрупповойКонтекст" Тогда // СтатусВозврата(0); // Возврат; //КонецЕсли; // документ еще не был записан - он новый Если Конт.ТекущийДокумент().Выбран() = 0 Тогда //АудитЗапись(Конт,"записан новый"); Возврат; КонецЕсли; ВидДок = Конт.Вид(); МетДок=Метаданные.Документ(ВидДок); // Ищем прежднюю запись документа с тем, что БЫЛО // Если не удается, то увы... СтДок = СоздатьОбъект("Документ."+ВидДок); Если СтДок.НайтиДокумент(Конт.ТекущийДокумент()) = 0 Тогда Возврат; КонецЕсли; //[*]MS@ТКП, 05.02.2010 //АудитЗапись(Конт,"перезаписан"); // ------------- АудитЗапись(Конт, КомментарийДействия); //[*]_ //ЧТО изменяют Реквием = ""+СтДок.ДатаДок+";"+СтДок.ПолучитьВремя()+";"+Конт.ПредставлениеВида()+";"+Конт.НомерДок+";"+Строка(РабочаяДата())+";"+ТекущееВремя()+";"+ИмяКомпьютера()+";"+ИмяПользователя()+";"; // ------ В РЕКВИЗИТАХ ДОКУМЕНТА -------- //Дата и номер документа СтДанные = Строка(СтДок.ДатаДок); НовДанные = Строка(Конт.ДатаДок); Если СтДанные <> НовДанные Тогда ДокИзмененияЗапись("ДатаДок","<"+СтДанные+"> на <"+НовДанные+">"); КонецЕсли; СтДанные = СокрЛП(Строка(СтДок.НомерДок)); НовДанные = СокрЛП(Строка(Конт.НомерДок)); Если СтДанные <> НовДанные Тогда ДокИзмененияЗапись("НомерДок","<"+СтДанные+"> на <"+НовДанные+">"); КонецЕсли; // ------ В ОБЩИХ РЕКВИЗИТАХ ДОКУМЕНТА -------- Для инд=1 по Метаданные.ОбщийРеквизитДокумента() Цикл Идентиф=Метаданные.ОбщийРеквизитДокумента(инд).Идентификатор; СтДанные = СтДок.ПолучитьАтрибут(Идентиф); НовДанные = Конт.ПолучитьАтрибут(Идентиф); Если СтДанные <> НовДанные then ДокИзмененияЗапись(Идентиф,"<"+Строка(СтДанные)+">на<"+Строка(НовДанные)+">"); КонецЕсли; КонецЦикла; // ------ В РЕКВИЗИТАХ ШАПКИ ДОКУМЕНТА -------- Для Инд=1 по МетДок.РеквизитШапки() Цикл Идентиф=МетДок.РеквизитШапки(Инд).Идентификатор; СтДанные = СтДок.ПолучитьАтрибут(Идентиф); НовДанные = Конт.ПолучитьАтрибут(Идентиф); Если СтДанные <> НовДанные Тогда ДокИзмененияЗапись(Идентиф,"<"+Строка(СтДанные)+">на<"+Строка(НовДанные)+">"); КонецЕсли; КонецЦикла; // ------ В РЕКВИЗИТАХ ТАБЛИЧНОЙ ЧАСТИ -------- СтСписок=СоздатьОбъект("СписокЗначений"); НовСписок=СоздатьОбъект("СписокЗначений"); СтСписок1=СоздатьОбъект("СписокЗначений"); НовСписок1=СоздатьОбъект("СписокЗначений"); СтДок.ВыбратьСтроки(); Пока СтДок.ПолучитьСтроку() = 1 Цикл РезСтрока="^"; Для Инд=1 по МетДок.РеквизитТабличнойЧасти() Цикл Идентиф=МетДок.РеквизитТабличнойЧасти(Инд).Идентификатор; СтДанные = СтДок.ПолучитьАтрибут(Идентиф); РезСтрока=РезСтрока+СокрЛП(Строка(СтДанные))+"^"; КонецЦикла; СтСписок.ДобавитьЗначение(РезСтрока); КонецЦикла; Конт.ВыбратьСтроки(); Пока Конт.ПолучитьСтроку() = 1 Цикл РезСтрока="^"; Для Инд=1 по МетДок.РеквизитТабличнойЧасти() Цикл Идентиф=МетДок.РеквизитТабличнойЧасти(Инд).Идентификатор; НовДанные = Конт.ПолучитьАтрибут(Идентиф); РезСтрока=РезСтрока+СокрЛП(Строка(НовДанные))+"^"; КонецЦикла; НовСписок.ДобавитьЗначение(РезСтрока); КонецЦикла; КолСт=СтСписок.РазмерСписка(); КолНов=НовСписок.РазмерСписка(); Для Инд=1 по КолСт Цикл НайдСтрока=СтСписок.ПолучитьЗначение(Инд); ТочкаНовая=НовСписок.НайтиЗначение(НайдСтрока); Если ТочкаНовая=0 Тогда СтСписок1.ДобавитьЗначение(НайдСтрока); КонецЕсли; КонецЦикла; Для Инд=1 по КолНов Цикл НайдСтрока=НовСписок.ПолучитьЗначение(Инд); ТочкаСтарая=СтСписок.НайтиЗначение(НайдСтрока); Если ТочкаСтарая=0 Тогда НовСписок1.ДобавитьЗначение(НайдСтрока); КонецЕсли; КонецЦикла; СтСписок=""; НовСписок=""; КолСт=СтСписок1.РазмерСписка(); КолНов=НовСписок1.РазмерСписка(); СтСписок1.Сортировать(); НовСписок1.Сортировать(); НН=Макс(КолСт,КолНов); Для Инд=1 по НН Цикл Если КолСт>=Инд Тогда СтДанные=СтСписок1.ПолучитьЗначение(Инд); ДокИзмененияЗапись("Старая строка",Строка(СтДанные)); КонецЕсли; Если КолНов>=Инд Тогда НовДанные=НовСписок1.ПолучитьЗначение(Инд); ДокИзмененияЗапись("Новая строка",Строка(НовДанные)); КонецЕсли; КонецЦикла; //Конт.ДатаВремя=ЧислоДатаВремя(); КонецПроцедуры |
|||
18
Vladal
12.07.12
✎
13:20
|
(6) 1) задним числом это всё делается. Был приход, продали, потом партию удалили или перепровели приход и быдлокод сформировал новую партию.
|
|||
19
Vladal
12.07.12
✎
13:20
|
(17) Взял на заметку
|
|||
20
pofigos
12.07.12
✎
13:24
|
(17) Спасибо.
(18) Теоретически это понятно. Вопрос в том, что правится код от прошлых людей.. и в хорошем кол-ве. Ставлю временные заплатки и ограничения. Все равно умудряются как-то. С правами разобраться еще надо на перепроведение, снятие с проведения, пометки на удаление и тем более изменения даты документов. |
|||
21
Mikeware
12.07.12
✎
13:47
|
(20) объект Перехватчик.
Этим прсечешь программные... если сиквел - триггер на журнал, будешь знать, на какую глубину в задницу залазили... |
|||
22
Скользящий
12.07.12
✎
14:24
|
в рабочей базе на прошлой работе стояло такое решение. Если мне напомнишь вечером в аську, кину мдшник.
|
|||
23
pofigos
12.07.12
✎
14:27
|
(22) Спасибо, но на основании (17) и с подсказкой (21) к вечеру будет работать. Этого будет более, чем достаточно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |