Создание механизма вперед-назад
или
Система возврата - отмены действий в 1С
Задача
Обеспечить систему быстрой отмены и восстановления изменений в перечисленных справочниках и документах в программе 1С Предприятие.
Описание
Часто сложные документы, такие как входящие заявки, содержат большое количество данных. Особенно много реквизитов добавлено в учетных программ, если предусмотрен автоматический расчет стоимости индивидуальной продукции, так как для такого расчета требуется учет всех параметров, от которых зависит цена (например такие параметры как: размер, материал, цвет, форма, крепление, дополнительный материал, набор комплектующих или комплектация и так далее).
При этом частая корректировка обусловлена неточными начальными данными и масштабами заявок. Часть продукции при этом отдается в отдел снабжения для детального просчета, откуда данные передаются обратно в отдел продаж. В случае необходимости доставки и ограниченных сроков поставки, данные для расчета (вес, объем, адреса поставщиков и требуемый адрес доставки и сроки) передаются от менеджера по продажам в отдел снабжения, затем в отдел логистики и только после возвращаются в отдел продаж, для формирования коммерческого предложения и/или условий договора. Такое количество данных и число отделов задействованных в расчетах, безусловно влечет увеличение ценности данных.
Учитывая это, быстрая отмена действий и возврат того или иного состояния документа предоставляет огромную свободу действий для сотрудников работающих с документом.
Функционал должен быть похож на стрелки назад и вперед присущие веб браузерам, но при этом должны учитывать особенности учетных данных документов (например нельзя изменить количество без изменения суммы или изменение сумм без изменения количества или цен, а также при изменении количества или адресов доставки, нужно учитывать, что ранее учтенная сумма и срок доставки уже не действительны).
Большая часть использования механизма отмены действия / изменений, будет использована в результате неосторожности или случайной ошибки сотрудника работающего с документом и следует учитывать количество итераций, так как на основании большого количества итераций можно выявить невнимательных сотрудников или неудобно организованное рабочее место, а также клиентов с которыми приходится необъяснимо много изменять условия заявки.
Решение:
Для каждого из указанного типа объекта метаданных (справочников и документов), создается дубликат (копированием), в имени добавляем «История», а также добавляем реквизиты:
- Ссылка на оригинал объекта;
- Дата и время изменения;
- Автор изменений;
- Признак записи;
- Признак текущего значения;
- Ограниченный системный комментарий о проделанных изменениях;
Добавляем модуль создания истории и добавляем его выполнение при изменении каждого реквизита и реквизитов таблиц объектов, а также при записи объекта.
(Модули создания историй изменений удобно генерировать с помощью предварительно написанного помощника, который генерирует код программы, перебирая реквизиты указанного объекта)
Для отладки и наглядности добавляем на формах объектов списки историй с отбором по оригиналу. В любом удобном пользователю месте добавляем кнопки возврата и отмены действий.
Создаем процедуры нажатия на кнопки возврата и отмены действий, при этом важно учитывать какое состояние объекта восстановлено, чтобы ориентироваться, какую историю требуется восстановить или отменить действия при дальнейшей работе с историями.
Добавляем механизм очистки историй, который удаляет записи историй по наступлению значимых событий, например установка статусов «Сделка закрыта» или «Сделка не актуальна», а также можно предусмотреть максимальный срок давности историй объектов.
Для учета количества изменений – создаем регистр операций с заявками, в котором учитываем клиента, заявку, сотрудника и описание действий. Запись в регистр добавляется в модуль создания историй и при нажатии на кнопки отмены действий и возврата.