Механизм автозаполнения реквизитов объектов




МойОбъект.МойРеквизит = Справочники.ТипаСправочник.НайтиПоКоду(ТипаКод);

Знакомо? А надежно? Но иногда ведь надо… Грустно. Но теперь есть выход! Достаточно вставить только 1 строку в код при открытии или создании формы, а остальное просто настроить. В итоге код вообще не пишем, а надежность растет!

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

Возникает извечный русский вопрос «ЧТО ДЕЛАТЬ?». В качестве выхода можно использовать планы видов характеристик с настройками пользователей, дописать их. Аналогично работает типовой механизм в упп. Однако придется после внесения изменений делать обновление, что при большом количестве работающих постоянно 24/7 пользователей весьма не удобно и затратно для предприятия. Затем как-то заполнять значения настроек для каждого пользователя. Затем они все должны перезайти, чтобы изменения вступили в силу.

Я предлагаю альтернативный вариант — механизм, который позволит мгновенно задать для всех любые настройки заполнения любых реквизитов любых объектов метаданных. В итоге нам не нужны обновления, не надо дергать пользователей. Все настройки применяются сразу после их записи. Обрабатываются как шапки, так и табличные части. Настройка имеет дружественный интерфейс. Механизм работает для любых типов форм и прост в использовании.

Для управляемых форм достаточно вставить в процедуру при создании формы следующий код:

АвтозаполнениеДокументов.ЗаполнитьЗначенияРевизитовОбъекта(ЭтаФорма, Объект);

 

Для неуправляемых форм код будет вот таким:

АвтозаполнениеДокументов.ЗаполнитьЗначенияРевизитовОбъектаПриОткрытииФормы(ЭтотОбъект, АвтозаполнениеДокументов.ТипЗначенияСтр(ЭтотОбъект));

 

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

5 Comments

  1. pepe

    А не планируете добавить отбор по виду операции и привязку к группе или к пользователю?

    Reply
  2. burlakov

    (1) pepe, да есть такая задумка. еще возможно сделаю привязку к справочнику алгоритмов и заполнение реквизитов в результате выполнения функций алгоритма. ну типа ответственный = глзначениепеременной(«глТекущийПользователь»).

    Reply
  3. kapustinag

    (2) Да, заполнение реквизитов не фиксированными значениями, а возвращаемыми какой-либо функцией — очень хорошая вещь, жизненная, если можно так выразиться. Но как раз то, что Вы написали (типа ответственный = глзначениепеременной(«глТекущийПользователь»).) — уже есть в типовых. Например, в УПП, если в настройках пользователя указан «Основной ответственный» — он подставляется в документ.

    Само собой, этот момент нисколько не принижает ценность Вашей обработки.

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

    Reply
  4. burlakov

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

    Reply
  5. SeiOkami

    Не опробовал, но уже по описанию — плюс =)

    Reply

Leave a Comment

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