При разработке учетных систем, CRM или подсистем технической поддержки (Helpdesk) часто возникает типовая архитектурная задача: необходимо фиксировать историю работы с заявкой или документом. Пользователи и бизнес-процессы должны оставлять комментарии, прикреплять звонки, письма, фиксировать списание ТМЦ и промежуточные статусы. При этом основной документ должен оставаться неизменным, защищенным от случайного редактирования и не блокироваться другими сеансами.
Рассмотрим подробнее основные способы реализации ленты событий и логов в парадигме платформы 1С:Предприятие.
Проанализируем распространенную ошибку начинающих разработчиков — добавление табличной части ИсторияСобытий непосредственно в сам документ заявки. Такой подход имеет критические недостатки:
Разберем классический и надежный способ — создание независимого непериодического регистра сведений ИсторияСобытийЗаявок.
Структура регистра может выглядеть следующим образом:
Заявка (тип: ДокументСсылка.Заявка), ИдентификаторСобытия (тип: УникальныйИдентификатор или Строка).ДатаСобытия (тип: Дата), Автор (тип: СправочникСсылка.Пользователи), ВидСобытия (тип: ПеречислениеСсылка.ВидыСобытийЗаявок), Текст (тип: Строка), ДокументСобытия (составной ссылочный тип для привязки созданных документов).Посмотрим на пример добавления записи в лог без изменения основного документа:
МенеджерЗаписи = РегистрыСведений.ИсторияСобытийЗаявок.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Заявка = СсылкаНаЗаявку;
МенеджерЗаписи.ИдентификаторСобытия = Новый УникальныйИдентификатор;
МенеджерЗаписи.ДатаСобытия = ТекущаяДатаСеанса();
МенеджерЗаписи.Автор = ПользователиИнформационнойБазы.ТекущийПользователь();
МенеджерЗаписи.ВидСобытия = Перечисления.ВидыСобытийЗаявок.Комментарий;
МенеджерЗаписи.Текст = "Уточнили требования у клиента по телефону.";
МенеджерЗаписи.Записать();
На форме заявки создаем динамический список с отбором по текущему документу. Это позволяет пользователям добавлять новые комментарии и просматривать полную историю даже в режиме «Только просмотр» для самой заявки.
В современных версиях платформы 1С встроен удобный механизм контекстных обсуждений. Выясним причину его популярности для задач саппорта и взаимодействия пользователей:
@) хранятся на сервере взаимодействия и не утяжеляют транзакции основной базы данных.Для включения контекстного обсуждения достаточно настроить интеграцию с Системой взаимодействия и активировать показ обсуждений для требуемых метаданных в конфигураторе или свойствах формы.
Если в конфигурации используется Библиотека стандартных подсистем (БСП), оптимальным решением будет применение готовых механизмов:
ТелефонныйЗвонок, ЭлектронноеПисьмо, ЗапланированноеВзаимодействие, СообщениеSMS.Чтобы привязать типовые взаимодействия к новому документу заявки, достаточно включить тип ДокументСсылка.Заявка в состав ОпределяемыйТип.ПредметВзаимодействия. После этого в документе автоматически становится доступна панель регистрации входящих и исходящих коммуникаций с полной историей переписки и звонков.
Когда событие порождает учетные действия (например, списание материалов со склада или выставление счета), правильным решением платформы является механизм ввода на основании.
Разберем по шагам, как организовать доступ к цепочке документов:
РасходнаяНакладная, СписаниеТоваров) с реквизитом ДокументОснование (тип: ДокументСсылка.Заявка).КритерийОтбора (или используем подсистему БСП «Связанные документы»), включив в состав отбора реквизиты оснований подчиненных документов.Если требуется объединить в один хронологический список разнородные события (письма, задачи, списания, комментарии), на форме заявки настраивается динамический список с произвольным запросом. Запрос объединяет данные из нескольких таблиц через оператор ОБЪЕДИНИТЬ ВСЕ:
ВЫБРАТЬ
История.ДатаСобытия КАК Период,
История.Автор КАК Автор,
История.ВидСобытия КАК ВидСобытия,
История.Текст КАК Описание,
История.ДокументСобытия КАК СсылкаНаОбъект
ИЗ
РегистрСведений.ИсторияСобытийЗаявок КАК История
ГДЕ
История.Заявка = &ТекущаяЗаявка
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
Звонки.Дата КАК Период,
Звонки.Ответственный КАК Автор,
"Телефонный звонок" КАК ВидСобытия,
Звонки.Описание КАК Описание,
Звонки.Ссылка КАК СсылкаНаОбъект
ИЗ
Документ.ТелефонныйЗвонок КАК Звонки
ГДЕ
Звонки.Предмет = &ТекущаяЗаявка
Такой интерфейс обеспечивает быстрый и наглядный доступ ко всем этапам жизненного цикла документа без риска блокировок и конфликтов версий.