Массовое изменение реквизитов записей справочников

22 9

Сценарий позволяет установить новое значение у любого реквизита карточки справочника (табличные разделы не поддерживаются). 
Я им пользуюсь как администратор\разработчик чтобы:
1) Изменить недоступный на форме реквизит у одной или небольшого количества записей
2) Изменить значение реквизита у большого количества записей 
3) Пересохранить большое количество записей с отработкой событий (после изменений в логике/исправления ошибок)
4) Изменить значение реквизита у не утвержденной записи (или которая станет не утвержденной при сохранении) и которая используется в других объектах.

Для каждого типа реквизита свой тип поля. Для признаков подгружаются возможные значения.
Можно указать, отрабатывать ли событие при изменении реквизита и события справочника. Например, можно выполнить только событие "Сохранение после". Признак "Сохранить текущее значение" позволяет оставить прежним значение реквизита, но отработать нужные события. 

Можно выбрать записи для обновления или закрыть окно выбора, тогда сценарий спросит, обновить ли все записи



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

Противопоказания: не рекомендуется к использованию лицам, не владеющими навыками разработки в системе Directum.

Скачать сценарий (импорт через компоненту "Сценарии")

22
Авторизуйтесь, чтобы оценить материал.
5
Дамир Губаев

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

Александр Чугунов

Дамир, ну вообще меня вконтакте по ФИО и фото найти несложно)) я уже  несколько месяцев жду, когда на клабе разрешат редактировать информацию о себе... chugunenok@gmail.com

Айрат Садыков

Александр, Добрый день!

Не получается скачать сценарий. Есть возможность выслать его другим способом.

Александр Чугунов

Айрат, а какая конкретно проблема со скачиванием? Файл на гитхабе, всем доступен.

Иван Фатеев

День добрый.

Мне приспичило наложить руку на реквизиты справочника РКК, но что в вашем, Александр, сценарии, что сам пробовал - столкнулся со следующим: когда начинаю цикл по записям, первая отрабатывает нормально, логика отрабатывает. Далее настает время второй записи и вот тут у нее появляется rr.View (при первой итерации nil), в методе rr.OpenRecord есть проверка if assigned(Object.View) и тупо открывается представление второй записи и exit(), а наш с вами код просто недостегается. Может я не в курсе чего-то?

Ref = CreateReference('РКК'; ArrayOf('ГруппаДел'; 'Дата2'; 'Дополнение'; 'Дополнение2'); False)
  AddWhere = Format("%s.%s = 148322"; ArrayOf(Ref.TableName; Ref.Requisites('ГруппаДел').SQLFieldName))                       
  Ref.AddWhere(AddWhere)
  Ref.Open()
  foreach rr in Ref
      rr.OpenRecord()
      \\ логика
      rr.Save()
      rr.CloseRecord()    
  endforeach
  Ref.Close()
  Ref.DelWhere(AddWhere)

 

Александр Чугунов

 

Иван Фатеев,

Скорее всего проблема в том, что где-то в коде стандартной прикладной разработки РКК горе-разработчики делают что-то типа Object.Form. Этот вызов создает View, поэтому дальше все проверки на assigned(Object.View) возвращают true.
Так что ищите во всём коде необоснованные вызовы .Form и исправляйте на правильный вариант (либо заменяйте на другую логику, либо не выполняйте вообще в не визуальном режиме, то есть если assigned(Object.View) = false). Для поиска советую использовать утилиту ISBLScan.ViewCode
Ну или пишите в поддержку Directum.
Вот Вам пример некорректного кода, там такого много. Вместо Form.Visible надо было делать assigned(Object.View)

Иван Фатеев

Александр, вы оказались правы.

В событиях справочника сохранение до и возможность как раз вызывалось Object.Form для того или иного. Погасил их на время и все заработало.

Мне в общем-то всего ничего нужно пару реквизитов местами поменять и по мелочи, может лучше напрямую в базе апдейтом? Не до конца понимаю, нужно ли подключать здесь все эти события справочника.

 

upd спасибо за наводку)

Иван Фатеев: обновлено 17.04.2019 в 12:48
Александр Чугунов

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

Иван Фатеев

Александр, видимо вы все-таки за изменение через isbl.

А то, что отключил - проверка орфорграфии и доступность кнопок - для сценария не особо важны.

Спасибо еще раз.

Авторизуйтесь, чтобы написать комментарий