8.х Логи (как сохранить информацию об изменениия реквизитов определенных справочников)

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем andrenko, 2 фев 2011.

  1. TopicStarter Overlay
    andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26
    Имеется справочник контрагентов. Необходимо вести что-то типа логов изминения реквизитов (всех). Эти реквизиты если и меняются, то не часто.
    Вопрос как это сделать? Я так понимаю, чт есть смысл завести регистр куда все это отписывать, но как, на момент закрытия формы элемента справочника определить имеютя ли измененные реквизиты или нет? Есть ли како-либо лаконичное решение?
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ну проще всего найти конфигурацию где есть механизм "Версиофицирования объектов" (КА либо УПП) и перетянуть оттуда.

    Если создавать самому - то заводите периодический регистр сведений, и перед записью для текущего элемента справочника сравниваете каждый реквизит "СправочникОбъект" и "СправочникСсылка". Если есть расхождения значит поменяли - заносите расхождения в свой РС.
  3. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Я писал такую штуку для справочника. Реализуется не сложно, занимает не много. Основной смысл такой работы заключается в том, что ПередЗаписью() мы имеем два объекта:
    Код:
    НовыйИзмененныйОбъект = ЭтотОбъект; // измененный пользователем 
    ЗаписанныйОбъект = ЭтотОбъект.Ссылка.ПолучитьОбъект(); // старый объект в базе
    
    
    Соответственно перед записью мы можем на выбор:
    + пореквизитно сравнить оба объекта, сохранить результат анализа.
    + либо делать
    Код:
    ОбъектДо = ОбъектВXML(ЗаписанныйОбъект);
    ОбъектПосле = ОбъектВXML(ЭтотОбъект);
    
    и сохранить оба варианта объекта в регистр сведений а затем их анализировать. (я делал именно так)

    Логи ведутся с 2008 года при примерно 20 000 записей в год, для одного справочника. Тормозов, косяков замечено не было.

    В чужие разработки не заглядывал - лень ковырять, но думаю, что по такому принципу устроено большинство детальных журналов изменений, в том числе коммерческих. С уже готовыми вариантами можно ознакомиться на страницах http://infostart.ru/ возможно даже найти бесплатные.
  4. TopicStarter Overlay
    andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26
    Идея понятна, спасибо... Но мне нужно сохранить данные до изминения и после так, чтобы это было в одной записи регистра.

    а как сравнить реквизиты? всмысле что это один и тотже реквизит?
  5. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Так в чем проблема? lazy уже вам с примерами кода написал (правда в примерах сохраняется полностью весь объект, тут сами смотрите как вам лучше). Поймите: пока вы не записали элемент у вас на руках имеется две его версии: СправочникСсылка - это то что уже записанно и есть в базе, СправочникОбъект - это то что вы в данный момент собираетесь записать (т.е. это будет в базе после записи). Заносите в регистр сведений в одной строке - то что у вас есть на данный момент (из СправочникСсылка) и то что вы собираетесь записать (из СправочникОбъект).

    andrenko, вы же уже спрашивали в этой теме: http://www.1c-pro.ru/index.php?showtopic=2...mp;#entry127391 :angry:
  6. TopicStarter Overlay
    andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26
    да эт понятно. Уменя в справочнике полтора десятка реквизитов, как их сравнить? Я перебираю реквизиты циклом из отредактированной версии, но кака мне выбрать тот же реквизит из неотредактированной версии?

    в той теме речь шла сосвем о другом...

    извиняюсь - протупил:) идея ясна!
  7. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ну как же о другом. Из одной оперы:
    Код:
    НовыйИзмененныйОбъект = ЭтотОбъект; // измененный пользователем 
    ЗаписанныйОбъект = ЭтотОбъект.Ссылка.ПолучитьОбъект(); // старый объект в базе
    ......
    ......
    ......
    Для Каждого Реквизит из Справочник.Реквизиты Цикл
    Если НовыйИзмененныйОбъект[Реквизит.Имя] = ЗаписанныйОбъект[Реквизит.Имя] Тогда
    ля-ля-ля
    Иначе
    ля-ля-ля
    КонецЕсли;
    КонецЦикла;
    
  8. TopicStarter Overlay
    andrenko
    Offline

    andrenko Опытный в 1С

    Регистрация:
    20 ноя 2008
    Сообщения:
    310
    Симпатии:
    0
    Баллы:
    26
    Спасиб!
  9. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    а в сторону технологического журнала не смотрели? или в сторону программной записи в журнал регистрации?

Поделиться этой страницей