товарисчи не судите строго подскажитте 1сному чайнику где можно посмотреть кто и когда(и если возможно как) изменял документы в частности накладные...? В одной конторе хозяева предполагают крыска завелась
(1) zipercool,
* СЕЙЧАС - в журнале регистрации сможете увидеть только ФАКТ изменения. и то - условно.
из практики - если вопрос о серьезных моментах - слабо доказуемо.
---------
самое простое и эффективное решение, если хотите действительно поймать "за руку" :
* ставите 1с++
* через объект "Перехватчик" - прозрачно "забираете на себя" предопределенные процедуры "ПриОткрытии/ПриСозданииКонтекса" / "ПриЗаписи" / ОбработчикиПроведения и проч , в которых фиксируете во внешних файлах всю историю.
при этом - в конфу изменения вносить почти не потребуется - несколько строк в глобальнике
Если копии базы каждый день (вечером) делаете и сохраняете за каждый день свой файл например с названием-датой + монитор пользователей + на данном сайте есть для семерки1С разные отчеты-мониторинг - то есть большая вероятность получить точную информацию
Сервис-монитор пользователей-журнал регистрации-на закладке объекты ставите галочку отбор событий по объекту и выбираете, что вам нужно, тип объекта-что то из справочников или документов, объект-сам документ
(7) ula1c,
Метод отслеживания версий документа хорош, но вызывает быстрый рост базы. Стандартный механизм хорош тем, что история в текстовый файл сбрасывается. Но каждому свое! :)
(8) CoverG, методы разные бывают. Порекомендованный ula1c "Регистрирует все изменения сразу во внешней инф. базе, не влияя на размер основной инф. базы". Только сие для 1с8. Но, вероятней всего, есть аналоги и для 7.
В случае крайней необходимости (если изменять "внутренний" код конфигурации не рекомендуется) можно и самому ole робота организовать (на любом языке умеющем ole-можно даже скриптами), анализирующего вносимые изменения с определенным интервалом и отчеты для "чтения" базы робота.
Если есть острая необходимость в последующем отслеживании изменений то добавляем в код (можно воспользоваться услугами программиста):
ЗаписьЖурналаРегистрации(<Коммент>,<ТипСобытия>,<Событие>,<Объект>,<Категория>)
Я реализовывал через текстовые файлики. В отдельную папку при открытии документа записывается исходное состояние и при записи - следующее. Потом отчетом сравниваем. Все по метаданным.
В глобальном модуле.
Обрати внимание на "Изменения от" в каждом документе будет указанно когда и кто последний раз редактировал документ.
//******************************************************************************
// глКонтрольДатыДокумента(ПереданКонтекст, НачальнаяДатаДокумента)
//
// Параметры:
// ПереданКонтекст - контекст документа,из которого вызвана процедура
// НачальнаяДатаДокумента - дата документа до изменения.
//
// Возвращемое значение:
// 1 - если документу был присвоен новый номер;
// 0 - если документу не был присвоен новый номер.
//
// Описание:
// Функция определяет ситуацию, когда при изменении своей даты документ
// оказывается в другом периоде нумерации документов, проверяет уникальность
// номера документа, и, в противном случае, пытается присвоить документу
// новый уникальный номер.
// Для работы функции должна быть объявлена глобальная переменная модуля
// формы документа НачальнаяДатаДокумента. В процедуре ПриОткрытии
// в эту переменную должна быть записана дата документа.
// Функция глКонтрольДатыДокумента() вызывается из процедуры ПриЗаписи.
// В процедуре ПриЗаписи проверяется возвращаемое значение, и, если
// оно равно 1 (то есть, документу присвоен новый номер), статус возврата
// устанавливается в 0, то есть документ не записывается, а происходит возрат
// к редактированию документа.
//
Функция глКонтрольДатыДокумента(ПереданКонтекст, НачальнаяДатаДокумента) Экспорт
Перем ФлагПрисвоенияНомера; // для возвращаемого значения
ФлагПрисвоенияНомера=0;
// Назначенную для данного вида документов периодичность смены номера
// определяем из метаданных.
ПериодСменыНомера = Метаданные.Документ(ПереданКонтекст.Вид()).ПериодичностьНомера;
// В зависимости от установленной периодичности смены номеров,
// определяем разность старой и новой датами документа.
// В данном случае конкретная величина разности не важна,
// важен сам факт ее наличия.
Если ПериодСменыНомера = "Год" Тогда
РазностьДат = НачГода(НачальнаяДатаДокумента)-НачГода(ПереданКонтекст.ДатаДок);
ИначеЕсли ПериодСменыНомера = "Квартал" Тогда
РазностьДат = НачКвартала(НачальнаяДатаДокумента)-НачКвартала(ПереданКонтекст.ДатаДок);
ИначеЕсли ПериодСменыНомера = "Месяц" Тогда
РазностьДат = НачМесяца(НачальнаяДатаДокумента)-НачМесяца(ПереданКонтекст.ДатаДок);
ИначеЕсли ПериодСменыНомера = "День" Тогда
РазностьДат = НачальнаяДатаДокумента-ПереданКонтекст.ДатаДок;
Иначе
РазностьДат = 0;
КонецЕсли;
Если РазностьДат <> 0 Тогда
// В результате изменения даты документ "ушел" в другой период
// смены номера. Возможные ситуации:
// 1) в этом периоде уже существуют документы, и номер документа
// стал неуникален;
// 2) номер документа - большой, и за-за этого в последовательности
// номеров образовалась дыра.
// Все операции проверки номера выполняем с "копией" документа.
Дубликат = СоздатьОбъект("Документ."+ПереданКонтекст.Вид());
Дубликат.Новый();
Дубликат.НомерДок = ПереданКонтекст.НомерДок;
Дубликат.ДатаДок = ПереданКонтекст.ДатаДок;
// Попробуем присвоить новый номер.
// Вызов метода должен учитывать особенности нумерации
// конкретного вида
Дубликат.УстановитьНовыйНомер(СокрЛП(Константа.ПрефиксИБ) + СокрЛП(ПереданКонтекст.ЮрЛицо.ПрефиксНомеровДокументов));
// Если новый номер не равен старому, значит,
// назначение номера прошло успешно.
Если ( Дубликат.НомерДок <> ПереданКонтекст.НомерДок ) Тогда
// Запоминаем новый номер и проверяем его на уникальность
НовыйНомерДок = Дубликат.НомерДок;
Если Дубликат.НайтиПоНомеру(Дубликат.НомерДок,Дубликат.ДатаДок)=0 Тогда
// Если номер уникальный, выдаем запрос о необходимости
// назначить документу новый номер
Если Вопрос( "Дата документа была "+?(РазностьДат>0, "уменьшена", "увеличена") + " более чем на " + Нрег(ПериодСменыНомера)+"."+РазделительСтрок+
"Для документов вида """+ПереданКонтекст.ПредставлениеВида()+""" каждый "+Нрег(ПериодСменыНомера)+" нумерация начинается заново."+РазделительСтрок+
"Присвоить новый номер?","Да+Нет", 60) = "Да" Тогда
ПереданКонтекст.НомерДок = НовыйНомерДок;
// Новую дату документа запомнаем в качестве начальной даты -
// в случае возможных последующих проверок.
НачальнаяДатаДокумента=ПереданКонтекст.ДатаДок;
// Устанавливаем возвращаемое значение
ФлагПрисвоенияНомера=1;
КонецЕсли;
КонецЕсли;
КонецЕсли;
// Активизируем номер докутента
ПереданКонтекст.Активизировать("НомерДок");
КонецЕсли;
Если ФлагПрисвоенияНомера=0 тогда
ПереданКонтекст.Ответственный = ПереданКонтекст.Ответственный+"Изменения от "+Строка(ТекущаяДата())+" "+ТекущееВремя()+", выполнил(а) "+глПользователь.Наименование+РазделительСтрок+";";//ЛокНч КонецЕсли;
Возврат ФлагПрисвоенияНомера;
КонецФункции // глКонтрольДатыДокумента()
////////////////////////////////////////////////////////////////////////////////
// АЛГОРИТМЫ ПРОВЕДЕНИЯ
//
А вот чего меняли, тоже можно, но представь себе как будет расти база, хотя диверсантов думаю будет отпугивать то что теперь видно кто правил документ, притом что каждое изменение будет фиксироваться. Если надо подробней в бо при желании журнале глянуть по времени можно, либо при желании могу дописать...
Добрый день.
Ещё можно установить дополнение для конфигурации, которое записывает и хранит изменения реквизитов во внешней базе: http://infostart.ru/public/465457/