Дополнительный журнал регистрации (управляемые формы), сравнение реквизитов и табличных частей






Дополнительный журнал регистрации (управляемые формы), сравнение реквизитов и табличных частей
Регистрирует изменения реквизитов и их табличных частей следующих типов объектов:

  1. Справочники
  2. Документы
  3. Планы видов расчета
  4. Планы видов характеристик
  5. Бизнес процессы
  6. Задачи
  7. Регистры сведений (независимые)

Форма списка журнала позволяет просмотреть все изменения в объекте в виде дерева и в отдельном окне.Ограничения:Форма отображения изменений объекта может показать максимум 4 табличные части и максимум 20 колонок в одной табличной части, кроме постоянных колонок.  Мне больше и не встречалось. Хранятся же изменения по любому количеству табличных частей и и любому количеству колонок.Для работы механизма сравнения табличных частей должен быть заполнен регистр «Ключевые колонки табличных частей», открывается по кнопке «Настройки» формы списка журнала. По умолчанию (если регистр не заполнен) система считает ключевыми колонки, у которых в свойстве «Проверка заполнения» стоит «Выдавать ошибку».Строки неограниченной длинны в табличных частях преобразует в строки ограниченной длинны (300), чтобы запрос сравнения работал. По желанию можно изменить в коде.Как устанавливать.Решение оформлено как файл конфигурации с одной подсистемой.Объединяем его со своей конфигурацией. При этом нужно снять флаги с раздела «Свойства» конфигурации и справочника «Пользователи» (предполагается, что он у вас уже есть).Всем пользователям включаем роль «ЗаписьВДополнительныйЖурналРегистрации»Решение выкладываю с открытым кодом. Буду исправлять только грубые ошибки, которые мешают адекватной работе подсистемы (пишите в каментах). Дальнейшее развитие не предполагаю ввиду сильной нехватки времени.Некоторые идеи подглядел в скриншотах других публикаций на эту тему, например: //infostart.ru/public/18588/

Дополнено 22.03.2013

Если на ваших конфигурациях выдает ошибку, связанную с определением текущего пользователя, исправьте способ определения текущего пользователя на тот, который реализован у вас. Делать это нужно в процедуре ОбработатьСобытиеПередЗаписьюОбъекта() в строке

ТекПользователь = ОбщегоНазначения.ТекущийПользователь();

 

Исправлены ошибки:

 

Выдавал ошибку при записи набора в регистре сведений без ресурсов и реквизитов.

15 Comments

  1. WellMaster

    Изменения в журнал записываются при записи/проведении? Как это влияет на скорость работы БД?

    Reply
  2. Amras

    Ошибка при выполнении обработчика — ‘ПередЗаписью’

    по причине:

    Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода СделатьЗаписьВДополнительныйЖурналРегистрацииДокументПередЗа­писью ().

    ЗУП 2.5.6.3 — При записи документа «Начисление зарплаты работникам организации»

    Reply
  3. Makushimo

    (2) Amras,

    спс, поправлю

    Reply
  4. Makushimo

    (1) WellMaster,

    предположительно незначительное, не замерял.

    Reply
  5. WellMaster

    Это довольно важный момент. Если производительность упадет, хорошего мало.

    Reply
  6. wunderland

    (1) это первый вопрос, который у меня возник, про скорость

    Reply
  7. Makushimo

    (2) Amras,

    потестил на ЗУП 2.5.63.1 (демо) запись ведется без проблем. Возможно у вас доработанная конфа.

    Подробности в студию, будем разбираться.

    Кстати эта ЗУП на обычных формах, поэтому интерфейс для просмотра результатов записи в журнал не доступен.

    Все сделано для управляемых форм.

    Reply
  8. Amras

    Попробую описать (Документ «Прием на работу в организацию» — не проведен, делаем перезапись):

    Функция ПолучитьТекстЗапросаСравненияТаблиц(Колонки)
    …
    

    При сборке запроса по:

    ТекстВТ_УдаленоИзмененоСекцияГДЕ = «ГДЕ
    | ВТ_ТаблицаПосле.НомерСтрокиПосле ЕСТЬ NULL
    |   ИЛИ («;
    
    ТекстВТ_ДобавленоИзмененоСекцияГДЕ = «ГДЕ
    | ВТ_ТаблицаДо.НомерСтрокиДо ЕСТЬ NULL
    |   ИЛИ («;
    

    Показать

    С дальнейшим соединением запроса в данном модуле:

    Если Колонка.Ключевая Тогда
    

    (всегда попадает в это место, в Иначе не попал ни разу)

    А теперь вот эти моменты:

    ТекстВТ_УдаленоИзменено = ТекстВТ_УдаленоИзмененоСекцияВыбрать+Символы.ПС+ТекстВТ_УдаленоИзмененоСекцияИЗ+ТекстВТ_УдаленоИзмененоСе­кцияГДЕ+»);»+Символы.ПС;
    

    ТекстВТ_ДобавленоИзменено = ТекстВТ_ДобавленоИзмененоСекцияВыбрать+Символы.ПС+ТекстВТ_ДобавленоИзмененоСекцияИЗ+ТекстВТ_ДобавленоИзмене­ноСекцияГДЕ+»);»+Символы.ПС;
    

    Ну и формируется примерно такой кусок в запросе:


    ГДЕ
    ВТ_ТаблицаДо.НомерСтрокиДо ЕСТЬ NULL
    ИЛИ ();
    

    При выполнение запроса он начинает ругаться на это неопределенное состояние ИЛИ ()

    П.С.

    Про управляемые формы, точно… не сообразил сразу, немного изменил правила работы для общего модуля ДополнительныйЖурналРегистрации

    Reply
  9. Makushimo

    (8) Amras,

    описанную вами ошибку исправил

    файл перезалил

    Reply
  10. Amras

    (9)

    Вот теперь все работает хорошо. Пока глубоко не копал, но показывает изменения верно. Только почему-то в разных строчках. Или это правильная логика? При более подробном рассмотрении, старое и новое отображается в двух таблицах напротив.

    Reply
  11. Amras

    Решил поиграться с отпусками организаций (доработана ТЧ Сотрудники). Читаем измения более развернуто, выдается сообщение:

    {РегистрСведений.ДополнительныйЖурналРегистрации.Форма.ФормаПросмотраИзмененияОбъекта.Форма(338)}: Поле объекта не обнаружено (ТабличнаяЧасть1ДоКолонка21)

    Элементы[«ТабличнаяЧасть»+НомерТч+»ДоКолонка»+НомерКолонки].Заголовок = ИмяКолонки;

    Вероятнее всего это произошло из за наличия в ТЧ 22 колонок. А если взять типовой расчет зарплаты (Начисление зарплаты работникам организации), то там колонок и того больше (порядка 32).

    Reply
  12. dskull86

    счето у меня вообще ниче не показывает, кнопки настроить нету, толи файл старый, хотя только вчера скачал

    Reply
  13. Makushimo

    (10) Amras,

    Это логика работы такая.

    Таблицы до и после сравниваются по ключевым полям.

    Ключевые поля по умолчанию — это поля, обязательные для заполнения (свойство поля)

    Судя по вашему скриншоту, поле «должность» и есть ключевое поле таблицы.

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

    Переопределить ключевые колонки для табличных частей можно по кнопке «Настройка» в форме списка журнала.

    Reply
  14. Makushimo

    Коллеги, обнаружил что текущая версия «Дополнительного журнала регистрации» не дружит с подсистемой БСП «Обновление версии ИБ». Когда при смене версии ИБ в конфигураторе запускаются процедуры подсистемы БСП, журнал вылетает с ошибкой при попытке зафиксировать изменения в служебных регистрах сведений.

    Временное решение — заглушить выполнение обработчика подписки СделатьЗаписьВДополнительныйЖурналРегистрацииРегистрСведений­ПередЗаписью на время работы обработчиков обновления ИБ.

    Над постоянным решением этой проблемы работаю. Выложу результат и новый файл по готовности.

    Reply
  15. Makushimo
    Reply

Leave a Comment

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