Кто исправил первичку в 1С
3731
12
Есть такая разработка: Бизнес-Плюс:Журнал изменений
http://infostart.ru/projects/3112/
Кто использует это у себя в работе??? Стоит ли покупать и есть глюки???
Может самому стоит написать такое же.
P.S. Есть контора с Четырьмя филиалами. Народу хватает. Шалавливых ручек тоже хватает. Директор поставил задачу по изменению документов. В связи с этим и спрашиваю.
http://infostart.ru/projects/3112/
Кто использует это у себя в работе??? Стоит ли покупать и есть глюки???
Может самому стоит написать такое же.
P.S. Есть контора с Четырьмя филиалами. Народу хватает. Шалавливых ручек тоже хватает. Директор поставил задачу по изменению документов. В связи с этим и спрашиваю.
Я думаю что можно и самому. На ПриЗаписи первички поставить какой то контроллер и счастье. Чтобы восстанавливать версии документа я бы делал сохранение в базу в виде хранилищаЗначения, ну или на сторонний ресурс в виде xml
Да можно и самому. У меня подобная разработка была на 7.7 написана.
Много где у моих клиентов стоит и работает. Просто работы сейчас много и тратить время на разработку просто некогда.
Вот и интересуюсь отзывами, может у кого стоит подобная разработка.
А купить то ее не проблема. 9000 на сегодня не ообо большие деньги.
Много где у моих клиентов стоит и работает. Просто работы сейчас много и тратить время на разработку просто некогда.
Вот и интересуюсь отзывами, может у кого стоит подобная разработка.
А купить то ее не проблема. 9000 на сегодня не ообо большие деньги.
Да можно конечно.... только база будет пухнуть в несколько раз быстрее.. Либо инфу журнала раз в месяц-два обрезать и архивировать
А что делать, если бухгалтер говорит что нетрогала документ, а я по логам вижу что ее работа, как доказать.
P.S.
Каждый косяк имеет ФИО.
P.S.
Каждый косяк имеет ФИО.
Логи предъявить
и желательно не только ей, а еще ее начальству
и желательно не только ей, а еще ее начальству
Да, иногда бываеют ситуации, когда всем пользователям охота камеру позади поставить и монитор с клавиатурой снимать...
Есть у меня такая разработка, но что то учитывая озвученные вами 9 тыс - вам что то посложнее нужно чем у меня есть, т.к. модуль который этим занимается у меня всего 161 строку, как то дороговато за 9 тыс руб 161 строку кода покупать.
Есть у меня такая разработка, но что то учитывая озвученные вами 9 тыс - вам что то посложнее нужно чем у меня есть, т.к. модуль который этим занимается у меня всего 161 строку, как то дороговато за 9 тыс руб 161 строку кода покупать.
Сейчас читают
Строительство за Оперным
16680
251
Староновогодний дозор
2328
40
RAV4 vs Suzuki Grand Vitara (Модели 2011г.)
6427
46
Под что модуль написан? Под 7 или 8?
да кстати
есть же замечательные проги скринлоггеры и кейлоггеры.. которые гораздо дешевле озвученных сумм. тут уж никто не отвертится
есть же замечательные проги скринлоггеры и кейлоггеры.. которые гораздо дешевле озвученных сумм. тут уж никто не отвертится
Под 7.7 выкладываю вобщее обозрение
Процедура Log(Конт,Рекв) Экспорт
Док=СоздатьОбъект("Документ");
Если ПустоеЗначение(Конт.ТекущийДокумент()) = 1 Тогда
//Сообщить("Нет его.");
Возврат;
КонецЕсли;
Если Док.НайтиДокумент(Конт.ТекущийДокумент()) = 0 Тогда
Возврат;
КонецЕсли;
// С реквизитами шапки все просто и пушисто. Проблемы позже будут.
МетаД=Метаданные.Документ(Конт.Вид());
Для нн = 1 по МетаД.РеквизитШапки() Цикл
РеквИД=МетаД.РеквизитШапки(нн).Идентификатор;
СтароеЗначение=Док.ПолучитьАтрибут(РеквИД);
НовоеЗначение=Конт.ПолучитьАтрибут(РеквИД);
Если СтароеЗначение НовоеЗначение Тогда
ЗаписьЖурналаРегистрации("# Изменился реквизит "+СокрЛП(РеквИД)+" старое значение "+СокрЛП(СтароеЗначение)+" новое значение "+СокрЛП(НовоеЗначение),,,Конт.ТекущийДокумент(),);
КонецЕсли;
КонецЦикла;
//А вот теперь проблемы. ТАБЛИЧНАЯ ЧАСТЬ. Посмотрим как ее лучше сделать.
Если СокрЛП(Рекв) ="" Тогда
Возврат;
КонецЕсли;
ТабНовая=СоздатьОбъект("ТаблицаЗначений");
ТабСтарая=СоздатьОбъект("ТаблицаЗначений");
СписокНовая=СоздатьОбъект("СписокЗначений");
СписокСтарая=СоздатьОбъект("СписокЗначений");
Конт.ВыгрузитьТабличнуюЧасть(ТабНовая);
Док.ВыгрузитьТабличнуюЧасть(ТабСтарая);
ТабНовая.УдалитьКолонку(1);
ТабСтарая.УдалитьКолонку(1);
ТабНовая.ВыбратьСтроки();
Пока ТабНовая.ПолучитьСтроку() = 1 Цикл
НомСтр=0;
НомКол=0;
СписокНовая.УдалитьВсе();
СписокСтарая.УдалитьВсе();
Если ТабСтарая.НайтиЗначение(ТабНовая.ПолучитьЗначение(ТабНовая.НомерСтроки,Рекв),НомСтр,НомКол) = 0 Тогда
ТабНовая.Выгрузить(СписокНовая,ТабНовая.НомерСтроки,ТабНовая.НомерСтроки);
ЗаписьЖурналаРегистрации("# Добавлена строка : "+СокрЛП(СписокНовая.ВСтрокуСРазделителями()),,,Конт.ТекущийДокумент(),);
Иначе
ТабНовая.Выгрузить(СписокНовая,ТабНовая.НомерСтроки,ТабНовая.НомерСтроки);
ТабСтарая.Выгрузить(СписокСтарая,НомСтр,НомСтр);
Если СокрЛП(СписокНовая.ВСтрокуСРазделителями()) СокрЛП(СписокСтарая.ВСтрокуСРазделителями()) Тогда
ЗаписьЖурналаРегистрации("# Изменена строка(была):"+СокрЛП(СписокСтарая.ВСтрокуСРазделителями()),,,Док.ТекущийДокумент(),);
ЗаписьЖурналаРегистрации("# Изменена строка(стала):"+СокрЛП(СписокНовая.ВСтрокуСРазделителями()),,,Конт.ТекущийДокумент(),);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТабСтарая.ВыбратьСтроки();
Пока ТабСтарая.ПолучитьСтроку() = 1 Цикл
НомСтр=0;
НомКол=0;
СписокСтарая.УдалитьВсе();
Если ТабНовая.НайтиЗначение(ТабСтарая.ПолучитьЗначение(ТабСтарая.НомерСтроки,Рекв),НомСтр,НомКол) = 0 Тогда
ТабСтарая.Выгрузить(СписокСтарая,ТабСтарая.НомерСтроки,ТабСтарая.НомерСтроки);
ЗаписьЖурналаРегистрации("# Удалена строка : "+СокрЛП(СписокСтарая.ВСтрокуСРазделителями()),,,Конт.ТекущийДокумент(),);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Во вложении файл, который ставится в глобальный модуль.
Вызов производится в процедуре ПриЗаписи.
С указанием главного поля, по которому производится поиск.
Так в документе Реализация вызов будет выглядеть
Log(Контекст,"Номенклатура");
Это я писал в 2001 году.
Процедура Log(Конт,Рекв) Экспорт
Док=СоздатьОбъект("Документ");
Если ПустоеЗначение(Конт.ТекущийДокумент()) = 1 Тогда
//Сообщить("Нет его.");
Возврат;
КонецЕсли;
Если Док.НайтиДокумент(Конт.ТекущийДокумент()) = 0 Тогда
Возврат;
КонецЕсли;
// С реквизитами шапки все просто и пушисто. Проблемы позже будут.
МетаД=Метаданные.Документ(Конт.Вид());
Для нн = 1 по МетаД.РеквизитШапки() Цикл
РеквИД=МетаД.РеквизитШапки(нн).Идентификатор;
СтароеЗначение=Док.ПолучитьАтрибут(РеквИД);
НовоеЗначение=Конт.ПолучитьАтрибут(РеквИД);
Если СтароеЗначение НовоеЗначение Тогда
ЗаписьЖурналаРегистрации("# Изменился реквизит "+СокрЛП(РеквИД)+" старое значение "+СокрЛП(СтароеЗначение)+" новое значение "+СокрЛП(НовоеЗначение),,,Конт.ТекущийДокумент(),);
КонецЕсли;
КонецЦикла;
//А вот теперь проблемы. ТАБЛИЧНАЯ ЧАСТЬ. Посмотрим как ее лучше сделать.
Если СокрЛП(Рекв) ="" Тогда
Возврат;
КонецЕсли;
ТабНовая=СоздатьОбъект("ТаблицаЗначений");
ТабСтарая=СоздатьОбъект("ТаблицаЗначений");
СписокНовая=СоздатьОбъект("СписокЗначений");
СписокСтарая=СоздатьОбъект("СписокЗначений");
Конт.ВыгрузитьТабличнуюЧасть(ТабНовая);
Док.ВыгрузитьТабличнуюЧасть(ТабСтарая);
ТабНовая.УдалитьКолонку(1);
ТабСтарая.УдалитьКолонку(1);
ТабНовая.ВыбратьСтроки();
Пока ТабНовая.ПолучитьСтроку() = 1 Цикл
НомСтр=0;
НомКол=0;
СписокНовая.УдалитьВсе();
СписокСтарая.УдалитьВсе();
Если ТабСтарая.НайтиЗначение(ТабНовая.ПолучитьЗначение(ТабНовая.НомерСтроки,Рекв),НомСтр,НомКол) = 0 Тогда
ТабНовая.Выгрузить(СписокНовая,ТабНовая.НомерСтроки,ТабНовая.НомерСтроки);
ЗаписьЖурналаРегистрации("# Добавлена строка : "+СокрЛП(СписокНовая.ВСтрокуСРазделителями()),,,Конт.ТекущийДокумент(),);
Иначе
ТабНовая.Выгрузить(СписокНовая,ТабНовая.НомерСтроки,ТабНовая.НомерСтроки);
ТабСтарая.Выгрузить(СписокСтарая,НомСтр,НомСтр);
Если СокрЛП(СписокНовая.ВСтрокуСРазделителями()) СокрЛП(СписокСтарая.ВСтрокуСРазделителями()) Тогда
ЗаписьЖурналаРегистрации("# Изменена строка(была):"+СокрЛП(СписокСтарая.ВСтрокуСРазделителями()),,,Док.ТекущийДокумент(),);
ЗаписьЖурналаРегистрации("# Изменена строка(стала):"+СокрЛП(СписокНовая.ВСтрокуСРазделителями()),,,Конт.ТекущийДокумент(),);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТабСтарая.ВыбратьСтроки();
Пока ТабСтарая.ПолучитьСтроку() = 1 Цикл
НомСтр=0;
НомКол=0;
СписокСтарая.УдалитьВсе();
Если ТабНовая.НайтиЗначение(ТабСтарая.ПолучитьЗначение(ТабСтарая.НомерСтроки,Рекв),НомСтр,НомКол) = 0 Тогда
ТабСтарая.Выгрузить(СписокСтарая,ТабСтарая.НомерСтроки,ТабСтарая.НомерСтроки);
ЗаписьЖурналаРегистрации("# Удалена строка : "+СокрЛП(СписокСтарая.ВСтрокуСРазделителями()),,,Конт.ТекущийДокумент(),);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Во вложении файл, который ставится в глобальный модуль.
Вызов производится в процедуре ПриЗаписи.
С указанием главного поля, по которому производится поиск.
Так в документе Реализация вызов будет выглядеть
Log(Контекст,"Номенклатура");
Это я писал в 2001 году.
Согласен есть, но это не то.
А под 8.1 напишу ка я сам. Хоть директор и сказал что если устроит, то купим, но мне не нравится ответ :
Valet 17.12.2008 12:42:45
Будет ли считаться изменением, если пользователь изменит сортировку табличной части (справочника или документа).
И как модуль отреагирует на это?
Посчитает что данные во всех строках поменялись?
[+]: Мать Тереза hit bazilio
3.
+ -
der_kicker 17.12.2008 13:09:30
(2) спасибо за вопросда, зафиксируются изменения во всех строках табличной части
[+]: bazilio
Вот это то и не нравится. Моя обработка в 7.7 не фиксировала изменения если тупа отсортировали табличную часть.
А под 8.1 напишу ка я сам. Хоть директор и сказал что если устроит, то купим, но мне не нравится ответ :
Valet 17.12.2008 12:42:45
Будет ли считаться изменением, если пользователь изменит сортировку табличной части (справочника или документа).
И как модуль отреагирует на это?
Посчитает что данные во всех строках поменялись?
[+]: Мать Тереза hit bazilio
3.
+ -
der_kicker 17.12.2008 13:09:30
(2) спасибо за вопросда, зафиксируются изменения во всех строках табличной части
[+]: bazilio
Вот это то и не нравится. Моя обработка в 7.7 не фиксировала изменения если тупа отсортировали табличную часть.
//Будет ли считаться изменением, если пользователь изменит сортировку табличной части (справочника или документа).
И как модуль отреагирует на это?
//
если документ, справочник после этого записан - то однозначно необходимо зафиксировать.
имхо конечно
но - к приему инвентарка.
5-10 тыс позиций (условно)
табличную часть отсортировали по артикулам - с бумажным (подписанным) вариантом уже не сходится.
ну или расходка, или перемещение.
И как модуль отреагирует на это?
//
если документ, справочник после этого записан - то однозначно необходимо зафиксировать.
имхо конечно
но - к приему инвентарка.
5-10 тыс позиций (условно)
табличную часть отсортировали по артикулам - с бумажным (подписанным) вариантом уже не сходится.
ну или расходка, или перемещение.
Как-то приходилось делать "Быструю сверку баз" для 8.1 (архивная - рабочая или центральная - периферийная)
общая идея - создавать по набору реквизитов уникализитор
Тут попроще, хотя тот алгоритм позволит ускорить работу
для 8-ки можно использовать подписку на события; только ещё вопрос: "нужно отлавливать и интерактивные изменения и групповые обработки"?
С ТЧ, думаю, просто при анализе пересортировывать под свой шаблон (Цена, Номенклатура, ...)
Задачка не такая простая. В логе хранить и искать будет сложновасто, имхо ...; Миграция лога из ПБ-ЦБ, ЦБ-ПБ проходит?
общая идея - создавать по набору реквизитов уникализитор
Тут попроще, хотя тот алгоритм позволит ускорить работу
для 8-ки можно использовать подписку на события; только ещё вопрос: "нужно отлавливать и интерактивные изменения и групповые обработки"?
С ТЧ, думаю, просто при анализе пересортировывать под свой шаблон (Цена, Номенклатура, ...)
Задачка не такая простая. В логе хранить и искать будет сложновасто, имхо ...; Миграция лога из ПБ-ЦБ, ЦБ-ПБ проходит?
ТОП 5
1
2
3
4