Отчет "История изменения объектов" на СКД для БП 3.0, УТ 11, КА 2, ERP 2 (версии объектов) с использованием версионирования объектов




Отчет «История изменения объектов» предназначен для отслеживания изменений справочников и документов в базах 1С. Позволяет выводить сводную таблицу изменений одновременно по всем отобранным объектам. Работает в конфигурациях БП 3.0, УТ 11, КА 2.0, ERP 2.

В отчете используется типовой механизм версионирования объектов, поэтому для его работы необходимо включить этот функционал. 

Для получения результата отчета необходимо указать период, за который будут выводиться изменения объектов, указать требуемые справочники или документы.

В отчете имеется возможность отбирать объекты по заданному параметру, например требуется ГлавБуху узнать кто в закрытом периоде правил документы — выбираем нужный вид документа, указываем период больше даты закрытия периода (например закрыли март первого апреля. соответственно ставим период больше первого апреля), а в отборе ставим дату документа меньше даты окончания закрытого периода (31 марта в нашем примере). 

Или другой пример, когда администратору требуется выяснить кто что правил за определенный период в определенных объектах ИБ.

Отчет реализован на управляемых формах под конфигурацию ERP 2, БП 3.0, УТ 11, КА 2.0

Преимуществом отчета является возможность отбора по параметрам объектов и вывод в одном окне изменений по отобранному ряду объектов. Типовой функционал позволяет получить информацию по изменениям только по одному объекту.

Для более быстрого выполнения отчета рекомендуется устанавливать более точный отбор по типам объектов базы данных либо более короткий период выборки.

Тестирование производилось на конфигурации Бухгалтерия предприятия 3.0 (3.0.43.253) и платформе 1С:Предприятие 8.3  (8.3.10.2561). так же протестировано на конфигурациях 1С:ERP Управление предприятием 2 (2.4.5.118),  Комплексная автоматизация, редакция 2 (2.4.5.118), Управление Торговлей 11 (11.4.3.167) 

Версия отчета для обычных форм: //infostart.ru/public/833067/

42 Comments

  1. strelec13

    Функция ОтобратьОбъектыСервер()



    Выборка = Документы[ОтобранныйОбъект.Значение].Выбрать();



    Пока Выборка.Следующий() Цикл

    НоваяСтрока = РезультатОтбора.Добавить();

    ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);

    КонецЦикла;

    ———————————————

    Работает долго заполнение свойств (если несколько сот тыс. документов или весь период несколько лет), т.е. выборка происходит за весь период.

    Предлагаю в шапку обработки добавить второй период, где можно задать период для выборки документов (РезультатОтбора), что немного сократит время обработки.

    Например:

    Выборка = Документы[ОтобранныйОбъект.Значение].Выбрать(ДатаНачало, ДатаОкончания);

    Reply
  2. mrm1212

    (1)

    Юрий, задать период для выборки документов можно во вкладке отбор, задав два отбора: дата документа больше и дата документа меньше, соответственно, в выборку попадут только документы удовлетворяющие этому отбору, также можно сократить выборку задав отбор и по любому другому реквизиту документа или справочника!

    Reply
  3. strelec13

    Спасибо, но я это пробовал использовать и этот обор влияет только на дату КОГДА ИЗМЕНЯЛИ документы, а не на отбор по дате самих документов, которые выбираются и обрабатываются за ВЕСЬ ПЕРИОД:

    Выборка = Документы[ОтобранныйОбъект.Значение].Выбрать();

    Т.е. есть дата когда я изменял эти документы и даты когда были созданы эти документы. Да обработка отфильтрует и покажет результаты по дате изменений, но при этом выборка и заполнение свойств обрабатывает ВЕСЬ ПЕРИОД:

    Пока Выборка.Следующий() Цикл

    НоваяСтрока = РезультатОтбора.Добавить();

    ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);

    КонецЦикла;

    Как уже писал сотен тыс. документов или за несколько лет. Например по вашему отбору я укажу весь 2018г. И обработка мне покажет только изменения которые пользователи делали в 2018 году, но при этом лишнее время тратится на обработку (заполнение свойств) за 20хх — 2018г.г. А мое предложение сократить время за счет отбора даты по созданию документов. Тогда я мог бы указать во втором периоде только 2018 г. или 2017-2018г.г., что сократит время обработки.

    Выборка = Документы[ОтобранныйОбъект.Значение].Выбрать(ДатаНачало, ДатаОкончания), где указвается период по дате создания документов (если пользователь обработки анализирует документы, а не справочники).

    При Вашем желании или если любопытно, могу выслать уже работающий вариант Вашей обработки с моим предложением. Хотя там конечно ни чего сложного.

    Конечно мое предложение актуально для баз больших объемов. И как бы Вы не рекомендовали в своей обработке применять оптимальный отбор , чтобы обработка быстрей работала, при больших объемах мое замечание не избежать, по затрате времени в холостую всех документов (выбранного типа) за весь период по дате создания.

    Reply
  4. mrm1212

    (3)

    Да, Юрий, я Вас понял, действительно в обработке идет подбор выбранных типов документов за весь период, а затем компануется и отбирается в СКД…

    Ваш вариант хороший, но работать будет только для документов…нужно подумать как оптимизировать обработку..

    Reply
  5. strelec13

    Вашей обработке цены нет, а Вы ее за 1 мани. Там есть похожая обработка за 2500 руб.. Там свои плюсы, но плюсы непринципиальные для тех кому такая цена непомерная.

    Reply
  6. mrm1212

    Спасибо, Юрий! подумаю о поднятии цены! =)))

    Reply
  7. strelec13

    Бесценность Вашей обработки безусловно кроме функционала и результата, еще и в ее дешевизне, в смысле очень доступная для многих 🙂

    Reply
  8. svetak

    Скажите, для ERP отработает? В преамбуле заявлено, но далее в описании я не нашла.

    Reply
  9. mrm1212

    (8) Светлана, отчет должен работать и на ERP2, но все может быть, Вы мне напишите релиз вашей программы, я протестирую и отпишусь по результатам.

    Reply
  10. mrm1212

    (8) Светлана, протестил на 1С:ERP Управление предприятием 2 (2.4.5.118) — отчет работает, пользуйтесь!

    Reply
  11. leksv

    Подскажите, а есть отбор по номенклатуре для документов?

    Reply
  12. mrm1212

    (11) Нет, отбор производится по реквизитам документа без табличных частей.

    Reply
  13. strelec13

    1. Заменил у себя следующий кусок кода:

    //| И ВерсииОбъектовПервые.НомерВерсии = 1

    | И ВерсииОбъектовПервые.НомерВерсии = ВерсииОбъектов.НомерВерсии — 1

    Почему? Если взять отбор изменений по дате например один день, то мы видим сравнение только первого и последнего вариантов («Изменения между версией 1 и 7» когда изменения были и в другие дни), а реально нужно видеть сравнение последнего варианта и предыдущего, мы же выбрали один день чтобы видеть какие изменения были в этот день (пример «Изменения между версией 6 и 7») если конечно 1-5 варианты не были за выбранный день.

    2. Иногда ошибка, которую не определил в этом месте:

    Функция РазборПредставленияОбъектаXML(ДанныеВерсии, Ссылка)



    ЧтениеXML.УстановитьДвоичныеДанные(ДвоичныеДанные);



    Может после этого моего изменения или ошибка еще была ранее.

    Внес следующие изменения (звездочками обрамление измененного кода):

    Функция СформироватьОтчет(..)



    Пока Выборка.Следующий() Цикл



    Если НЕ ВерсияОбъекта = Неопределено Тогда

    ********

    Попытка

    Результат = РазборПредставленияОбъектаXML(ВерсияОбъекта, Выборка.Объект);

    Исключение

    Продолжить;

    КонецПопытки;


    ********



    Если ЗначениеОбъекта <> Выборка.Объект Тогда



    Если Выборка.НомерВерсии > 1 Тогда

    ВерсияОбъекта1 = Выборка.ВерсияОбъекта1.Получить();

    *******

    Попытка

    Результат1 = РазборПредставленияОбъектаXML(ВерсияОбъекта1, Выборка.Объект);

    Исключение

    Продолжить;

    КонецПопытки;

    *******

    Reply
  14. mrm1212

    (13)

    Добрый день, Юрий!

    я строил в отчете такую логику: по заданному периоду в результат выводятся объекты, изменяемые в этот период, но изменения выводятся по отношению к оригиналу.

    а ошибка возможно стала вылетать из-за произведенных изменений:

    «//| И ВерсииОбъектовПервые.НомерВерсии = 1

    | И ВерсииОбъектовПервые.НомерВерсии = ВерсииОбъектов.НомерВерсии — 1″, но это нужно разбираться..и при данных изменениях в отчет ведь не попадут изменения сделанные в выбранный день, но у которых НомерВерсии = 1 или я ошибаюсь?

    Reply
  15. strelec13

    День добрый!

    У меня все работает. Например когда пользователь хочет узнать ПОСЛЕДНИЕ изменения, а в выбранный период не попали варианты 1,2,3, но попали 4 и 5, то увидим «Изменения между версией 4 и 5». Т.е. какие варианты попадут в выбранный период такие варианты и будут сравниваться. Если варьируем разными периодами то можем увидеть все варианты.

    Если ничего не менять, то всегда будем видеть Ваш вариант между 1-ым и последним вариантами. Например «Изменения между версией 1 и 5». В результате не увидим изменения между 1-2; 2-3; 3-4 и 4-ым и 5-ым вариантом, если варианты 1,2,3,4 не попали в выбранный период

    Reply
  16. svetak

    Спасибо, купила.

    Коллеги а есть отчет для ERP, который работает как в УПП была встроенная история версий объекта? Когда выделяешь пару версий, и в таблице показывалось сравнение по измененным объектам с «заливкой» цветами изменений.

    Reply
  17. mrm1212

    (16) вроде что-то такое когда-то попадалось в поиске, но не скачивал..

    Reply
  18. mrm1212

    (16) А вообще зачем Вам такой отчет, когда есть типовой, который вызывается через сам объект — История изменений

    Reply
  19. svetak

    По справочникам не показывает историю версий (по включенным для версионирования я имею в виду), в частности организации и контрагенты

    Reply
  20. mrm1212

    (19) да вроде все отрабатывает..может у Вас не было изменений?

    Reply
  21. svetak

    Ваш отчет отрабатывает (который я скачала).

    Я отвечала на вопрос — «А вообще зачем Вам такой отчет, когда есть типовой, который вызывается через сам объект — История изменений»,

    в том то и дело , что без вашего отчета — через сам объект справочника в типовой erp (из элемента справочника Организации например или Контрагенты ) я не могу вызвать историю изменений, версионирование настроено. Ваш отчет то показал несколько версий.

    В документах — да, включается возможность вызвать Историю, в справочниках я не нашла.

    Reply
  22. mrm1212

    (21) для примера посмотрите в карточке контрагента во вкладочке «Еще»..возможно там прячется.

    Reply
  23. svetak

    Спасибо, по контрагентам нашла. Из карточки, только не там где привычная кнопка ЕЩЕ, а выше где гипер-ссылки на банковские счета, договоры, подписки и еще…

    А вот изменения по справочнику Организации типовым способом не смогла найти.

    Reply
  24. mrm1212

    (23) ERP нет под рукой, но, думаю, в УТ идентично:

    Reply
  25. svetak

    (24) Все, спасибо громадное! Лошара я-)) Во-первых по организациям смотрела по кнопке Еще не из карточки организации, а журнала списков организаций, во вторых восстанавливала данные для проверки из копии с включенным версионированием позже по дате.

    Reply
  26. VerunchikNe

    Добрый день, скачала отчет, в надежде анализировать строки ТЧ, но этого функционала нет..плохо

    Reply
  27. mrm1212

    (26) Добрый день, только завтра смогу посмотреть в чем причина, напишу Вам!

    Reply
  28. mrm1212

    (26) В отчет добавлена возможность анализа изменения строк табличной части.

    в модуле формы:

    //Для каждого РеквизитТЧ Из СтрокаТЧНовая Цикл

    Для каждого РеквизитТЧ Из СтрокаТЧ Цикл

    Reply
  29. zaika007

    У меня ошибка. Платформа 8.3.13.1513

    {ВнешняяОбработка.ОтчетИсторияИзмененияОбъектовУФ.Форма.Форма.Форма(717)}: Ошибка при вызове метода контекста (УстановитьДвоичныеДанные)

    ЧтениеXML.УстановитьДвоичныеДанные(ДвоичныеДанные);

    по причине:

    Несоответствие типов (параметр номер ‘1’)

    по причине:

    Несоответствие типов (параметр номер ‘1’)

    Несоответствие типов (параметр номер ‘1’)

    Reply
  30. mrm1212

    (29) проверил на платформе 8.3.13.1513 управление торговлей — полет нормальный! все работает..на какой конфигурации запускаете? у Вас типовая конфигурация, доработок не было? может какие-то отборы дополнительные делаете??

    Reply
  31. zaika007

    (30)нет стандартный запускаю.

    Как тут описано добавила вчера, заработал не знаю насколько правильный.

    1. Заменил у себя следующий кусок кода:

    //| И ВерсииОбъектовПервые.НомерВерсии = 1
    | И ВерсииОбъектовПервые.НомерВерсии = ВерсииОбъектов.НомерВерсии — 1 

    Почему? Если взять отбор изменений по дате например один день, то мы видим сравнение только первого и последнего вариантов («Изменения между версией 1 и 7» когда изменения были и в другие дни), а реально нужно видеть сравнение последнего варианта и предыдущего, мы же выбрали один день чтобы видеть какие изменения были в этот день (пример «Изменения между версией 6 и 7») если конечно 1-5 варианты не были за выбранный день.

    2. Иногда ошибка, которую не определил в этом месте:

    Функция РазборПредставленияОбъектаXML(ДанныеВерсии, Ссылка)
    …
    ЧтениеXML.УстановитьДвоичныеДанные(ДвоичныеДанные);
    …
    Может после этого моего изменения или ошибка еще была ранее.
    Внес следующие изменения (звездочками обрамление измененного кода):
    Функция СформироватьОтчет(..)
    …
    Пока Выборка.Следующий() Цикл
    …
    Если НЕ ВерсияОбъекта = Неопределено Тогда
    ********
    Попытка
    Результат = РазборПредставленияОбъектаXML(ВерсияОбъекта, Выборка.Объект);
    Исключение
    Продолжить;
    КонецПопытки;
    ********
    …
    Если ЗначениеОбъекта <> Выборка.Объект Тогда
    …
    Если Выборка.НомерВерсии > 1 Тогда
    ВерсияОбъекта1 = Выборка.ВерсияОбъекта1.Получить();
    *******
    Попытка
    Результат1 = РазборПредставленияОбъектаXML(ВерсияОбъекта1, Выборка.Объект);
    Исключение
    Продолжить;
    КонецПопытки;
    *******

    Показать

    Reply
  32. 4815162342

    Подскажите, когда формирую по контрагенту, адрес выдает кучу строк. Можно как-то заполнять только представление

    Reply
  33. mrm1212

    Нет, к сожалению обработка как видит изменения, так их и выводит, изменения так записываются в базе, поэтому так и происходит их вывод.

    Reply
  34. angels_it

    При перепроведении (без изменений к самом документе) документа и формировании отчета

    Reply
  35. angels_it

    И в догонку вопрос: Если обьект новый, почему он вообще не отображается в отчетах?

    Reply
  36. mrm1212

    (34) в ближайшее время разберусь с этой ситуацией.

    Reply
  37. mrm1212

    (35) данный отчет выводит только изменения объектов, т.к. в новом объекте не было изменений, то и в отчет ничего не попадает.

    Reply
  38. angels_it

    (37)

    данный отчет выводит только изменения объектов, т.к. в новом объекте не было изменений, то и в отчет ничего не попадает.

    Причем изменения то получаются, но проверка ставится на номер версии. Этот момент доделали, лечится небольшой заглушкой проверки номера версии, ВЕрсия №1 — Всегда создание объекта. Его можно не прокидывать, а также сообщать со ссылкой на объект с комментарием, что объект новый.

    Reply
  39. angels_it

    (36)

    А вот этот момент повторяется только на серверных базах.

    Причем без разницы, новый документ создается и проводится, или старый перепроводится. Факт такой, что перепроведение — без изменения — выдает такую ошибку. Связано с тем, насколько я понял,что перепроведение без изменений не пишет в регистр xml данных, просто отражает факт изменения.

    У себя вылечили заглушкой проверки, опять же, с комментарием что «Что то менялось, скорее всего перепроводилось». Т.к. все остальные изменения корректно обрабатываются.

    НО хотелось бы корректно это обработать.

    Reply
  40. mrm1212

    (39) Добрый день, коллеги, смоделировал у себя на УТ11 такую ситуацию, перепровел старый документ, отчет отрабатывает без ошибок.

    Reply
  41. angels_it

    (40)

    БП 3, КОРП, последний релиз, Постгрес, сервер 1С х64.

    Работает только с заглушкой

    Reply
  42. mrm1212

    (41) к сожалению, могу проверить только на скуле, все работает без ошибок..видимо по-разному отрабатывает на разных серверах…

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *