fixin (fixin) wrote,
fixin
fixin

Гипер-рефакторинг силами Гения 1С

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

Был создан собственный бизнес-процесс, связанный с документом и тут:

1. Реквизиты документа дублировались в бизнес-процессе, с мало понятной целью, видимо, чтобы не лазить за ними в заявку.

2. Реквизиты состояния бизнес-процесса дублировались в задачах, видимо, цель, чтобы в упростить вывод форм списка задач по исполнителю.

3. Помимо основного списка задач по исполнителю, было реализовано три рабочих места для исполнителей в трех точках бизнес-процесса, по сути в них выводился список задач по исполнителю, но можно было смотреть задачи исполнителей на других этапах (соседних). Например, директор мог посмотреть задачи, согласуемые у подчиненного. Причем формы списка задач были скопипащены.

4. Формы исполнителей для задачи на каждом из этапов бизнес-процесса были скопипащены.

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

Я пошел путем оптимизации всего этого бардака.

1. Сначала объединил три рабочих места в одно, видимость колонок и поведение зависело от этапа бизнес-процесса. Дал пользователям поработать в обобщенной форме списка задач, когда все ошибки были выявлены, пошел дальше.

2. Объединил все формы задачи на  каждом из этапов в одну, универсальную. Тут возникло чуть больше проблем с видимостью, доступом и поведением, но все же и этот этап завершился успешно.

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

4. Добавил новую точку в бизнес-процесс. Настроил универсальную форму списка задач и универсальную форму задачи на работу с новой точкой бизнес-процесса.

Все заработало просто и предсказуемо.

Единственно, что остались еще не вычищенные нюансы:

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

2. Реквизиты документа по-прежнему надо показывать в форме документа и универсальной (одной) форме задачи. Но теперь вместо сонма форм используется всего две. И реквизиты хранятся только в документе. Но это касается только новых реквизитов, старые трогать я уже не стал.

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

Участок, где назначается видимость по умолчанию. Используется наиболее частое состояние полей и кнопок:


 УдалятьКнопкуЗапуститьНаОплату = истина;
 
УдалятьКнопкуНаДоработку = ложь;
 
УдалятьКнопкуОтклонить = ложь;
 
УдалятьКнопкуПечать = истина;
 
УдалятьКнопкуПечатьПП = истина;
 
ЗаголовокКнопкиОК = "Согласовать";
 
ЗаголовокТекущаяСанкция = "Сумма к оплате:";

Создается список запрещенных и разрешенных полей:


 СписокРазрешенныхПолей = Новый СписокЗначений();
 
СписокЗапрещенныхПолей = Новый СписокЗначений();

Длинный оператор CASE, в котором для каждого этапа может устанавливаться, сбрасываться видимость:


 Если ИмяТочкиМаршрута = "Этап1" Тогда
 
ТолькоПросмотрВсехПолей = ложь;
 
УдалятьКнопкуЗапуститьНаОплату = ложь;
 
УдалятьКнопкуНаДоработку = истина;
 
УдалятьКнопкуОтклонить = истина;
 
СписокРазрешенныхПолей.Добавить("НазначениеПлатежа");
 ИначеЕсли
ИмяТочкиМаршрута = "Этап2" Тогда

 КонецЕсли;

По умолчанию все поля в форме доступны по редактированию. На этом этапе все поля блокируются только на просмотр, кроме полей из СписокРазрешенныхПолей.

Далее в зависимости от назначенных флажков устанавливается видимость кнопок и команд:


 Если УдалятьКнопкуЗапуститьНаОплату Тогда
 
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Удалить(ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ЗапуститьНаОплату);
 КонецЕсли;
 Если
УдалятьКнопкуСогласовать Тогда
 
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Удалить(ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ОК);
 КонецЕсли;
 Если
УдалятьКнопкуНаДоработку Тогда
 
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Удалить(ЭлементыФормы.ОсновныеДействияФормы.Кнопки.НаДоработку);
 КонецЕсли;

Далее вызывается процедура синхронизации реквизитов документа, к которому привязан бизнес-процесс и элементов на форме бизнес-процесса. При записи вызывается эта же процедура, только в другую сторону:


 СинхронизироватьРеквизитыЗаявкиИБизнесПроцесса("ИзЗаявки", ЗаявкаНаРасходованиеСредств, ЭтаФорма);

Всё, форма нарисована так, как надо на нужной точке маршрута.

Tags:
Subscribe

Posts from This Journal “1С” Tag

  • Visual Basic + 1С всё?

    Вот и верь после этого Одину Эссу!? Как-то, еще на работе в Максимусе, мне понадобилось написать внешнюю компоненту для управления сканером…

  • Вы всё еще кастрируете?

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

  • Коварный ввод на основании в УФ

    На основании документа Х можно вводить два документа А и Б. Но конкретный вид документа зависит от содержимого документа Х (вида операции). Решили…

  • Правило назначения ролей – не запрещать!

    Есть одно правило назначения ролей пользователей, которое выработано эмпирически и скорее обосновано чутьём. Нельзя делать запреты пользователям с…

  • Гуру-тест 1С: обмануть при записи

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

  • Долгострои 1С

    Если вы хотите узнать, почему программисты 1С любят платформу 1С и местами ненавидят разработчиков этой платформы, то сейчас я Вам расскажу. Уже 10…

  • Ловкость рук и обработка результата запроса

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

  • 1С и искусственные серверные барьеры

    Заметил, что в управляемых формах 1С принуждает программистов к плохой архитектуре решений. Вкратце упомяну, что теперь большинство внешних…

  • Особенности белорусского Налогоплательщика

    Взял подработку у одного знакомого чувака из Беларуси. Платил мало (я то беру 1500 в час, а там по 800), но знакомый хороший, грех было отказывать,…

promo fixin december 28, 2020 16:57 1403
Buy for 30 tokens
Добро пожаловать в журнал Осипова Сергея Александровича, известного также как Fixin и Гений 1С. Рекомендую ознакомиться с Часто Задаваемыми Вопросами обо мне. Что я хочу в подарок - список. Мой проект " Секс за Ваши". Если вы хотите написать пост обо мне или почитать, что пишут…
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 21 comments