Кто исправил первичку в 1С
3720
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 строку кода покупать.
Сейчас читают
А вы изменяли?
71503
351
Уважение к кандидатам.
6149
67
Мы выбираем, нас выбирают...не совпадает
12762
90
Под что модуль написан? Под 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-ки можно использовать подписку на события; только ещё вопрос: "нужно отлавливать и интерактивные изменения и групповые обработки"?
С ТЧ, думаю, просто при анализе пересортировывать под свой шаблон (Цена, Номенклатура, ...)
Задачка не такая простая. В логе хранить и искать будет сложновасто, имхо ...; Миграция лога из ПБ-ЦБ, ЦБ-ПБ проходит?