Бизнес-процесс: работа с рекламациями по сделкам
Есть такой интересный кейс: автоматизация процесса работы с рекламациями (претензиями) по сделкам в Битрикс24. Детали процесса у разных компаний (сфер деятельности) могут быть разными, но в целом процесс можно описать следующим образом:
От клиента поступает претензия по выполненному заказу. Эту претензию необходимо зафиксировать с указанием всех необходимых данных, после чего запускается внутренний процесс по обработке рекламации. В заказ/сделку прикрепляется информация по итогам обработки рекламации.
В реализации этого процесса есть одна небольшая сложность: рекламация относится к конкретной сделке (заказу), поэтому будет логично запускать бизнес-процесс непосредственно из сделки. С другой стороны, обработка рекламации — это внутренний процесс, для которого удобнее было бы использовать процессы живой ленты: в этом случае задания на утверждение/отклонение, ввод дополнительной информации будут поступать в живую ленту. Это также позволит сохранить все рекламации в отдельной таблице/базе.
Попробуем совместить запуск процесса обработки рекламации для сделки с процессами в живой ленте 🙂
Для этого будет настроено сразу три процесса:
- Бизнес-процесс для сделки: запуск и ввод входной информации
- Бизнес-процесс для живой ленты: согласования и ввод дополнительных данных. Этот процесс должен запускаться из бизнес-процесса для сделки — из п.1
- Ещё один бизнес-процесс для сделки: сохранение информации по итогам обработки рекламации — из п.2
И начать удобнее всего с настройки бизнес-процесса для живой ленты.
Бизнес-процесс для живой ленты
Процесс будет называться «Рекламация». Обязательно должен быть отмечен чекбокс «Показать в живой ленте»:

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

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


Бизнес-процесс для сделки
Этап заполнение формы нужно убрать, так как запускать данный процесс планируется из карточки сделки, а идентификатор и основную информацию автоматически отправлять из сделки.
Создаем бизнес-процесс для сделки. Его можно также назвать «Рекламация». Запускаться этот бизнес-процесс будет вручную менеджером.
У этого бизнес-процесса должны быть параметры, обязательные для запуска процесса:

Первое действие в бизнес-процессе — это создания новой рекламации — блок «Создание элемента списка»:

Второе действие — запуск бизнес-процесса для созданного элемента — действие «Запуск бизнес-процесса»:

На данном этапе процесс уже практически настроен, осталось записать результаты обработки рекламации в сделку.
Процесс для сделки для записи результатов обработки рекламации
Бизнес-процесс можно назвать «Запись результатов обработки рекламации».
У этого процесса должен быть только 1 параметр: «Результат обработки рекламации» с типом строка или текст.
Сам процесс в простом случае может состоять из одного действия: записи переданной информации в предварительно созданное поле сделки «Результат обработки информации»:

И теперь нужно вернуться к настройкам бизнес-процесса для живой ленты(!) и после блока «Утверждение документа» добавить блок для запуска созданного на предыдущем этапе бизнес-процесса для записи результатов обработки рекламации:

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

Ввод информации в параметры процесса:

Задание в живой ленте — Принять/Отклонить претензию по заказу:

В сделке появилась информация по результатам обработки рекламации:

Итак, что в итоге мы получили:
- Запуск процесса по обработке рекламации и ввод данных непосредственно из карточки сделки.
- Вывод заданий процесса в живую ленту
- Запись результатов обработки в сделку
- Базу данных по рекламациям:

Если оценивать конкретно этот пример, то такой простой процесс, конечно же, нет смысла разбивать на несколько, проще было было из одного бизнес-процесса по сделке поставить задание ответственному и записать результат в поле. Но, повторюсь, реальные процессы состоят из намного большего количества данных (ответственные, штрафы, статус рассмотрения претензии, прикрепленные документы и т.д.) и согласований, и в этом случае уже есть смысл для рекламаций вести отдельную базу данных, а в сделку записывать только итоги обработки рекламации.
Всем хорошего дня! 🙂
Популярные сообщения
Поскольку позиции масштабируются или иным образом изменяются между ScrollViewers, вы не можете использовать простую привязку, но будет ли работать Converter?
<Window x:Class="Application1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SurfaceApplication21"
Title="SurfaceApplication21"
>
<Window.Resources>
<local:InvertDoubleConverter x:Key="idc" />
</Window.Resources>
<Grid>
<StackPanel>
<Slider Minimum="-100" Maximum="100" Name="a" Height="23" HorizontalAlignment="Left" Margin="30,12,0,0" VerticalAlignment="Top" Width="100" />
<Slider Minimum="-100" Maximum="100" Value="{Binding ElementName=a, Path=Value, Converter={StaticResource idc}}" Name="b" Height="23" HorizontalAlignment="Left" Margin="30,12,0,0" VerticalAlignment="Top" Width="100" />
</StackPanel>
</Grid>
</Window>
код, в котором вы могли бы реализовать любую математику, необходимую для масштабирования между двумя представлениями.
[ValueConversion(typeof(double), typeof(double))]
public class InvertDoubleConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, System.Globalization.CultureInfo ci)
{
return -(double)value;
}
public object ConvertBack(object value, Type targetType,
object parameter, System.Globalization.CultureInfo ci)
{
return -(double)value;
}
}
Я не пробовал использовать ScrollViewers, но поскольку полосы прокрутки, которые являются частью шаблона ScrollViewer и слайдеры, происходят от RangeBase, что-то вроде этого должно работать, но вам, возможно, придется повторно шаблон и / или создать подкласс ваших ScrollViewers.
Я хочу реализовать рекурсивный рендеринг шаблонов django для получения пользователей и их подчиненных. Однако у меня есть ошибка ErrorRuntimeError в /admin/users/3. превышена максимальная глубина рекурсии в instancecheck. Я использую джанго 1.9. Код приведен ниже
Ввод такой: [{name: 'user1@mail.com', id: 1, next: True}, {name: 'user2@mail.com', id: 2, далее: True}, {name: 'user3@mail.com', id: 3, next: False}]
Users_hierarchy.html
<ul>
{% for user in users %}
<li>{{ user.name }}</li>
{% if user.next %}
<ul>
{% include 'users/user_hierarchy.html' with data=user %}
</ul>
{% endif %}
{% endfor %}
Я ожидаю html, например:
<ul>
<li>user1@mail.com
<ul>
<li>user2@mail.com
<ul>
<li>user3@mail.com</li>
</ul>
</li>
</ul>
</li>
Что я делаю не так?
1 ответ
Я объясняю, почему вы находитесь в бесконечной рекурсии
Из djan, чтобы включить шаблоны документов:
Включенный шаблон отображается в контексте шаблона, который его включает.
Это означает, что вы повторяете users снова и снова:
<ul>
{% for user in users %} <-----(1)<------------------------<
<li>{{ user.name }}</li> |
{% if user.next %} |
<ul> |
{% include 'users/user_hierarchy.html' with data=user %} --(2)->
В (1) вы перебираете users. На первой итерации вы вызываете include (2). В этот момент вы переходите к (1) (во вложенном включенном шаблоне) и снова начинаете итерацию.
0
dani herrera
8 Фев 2019 в 16:28
а условие выхода с рекурсии?
нужно сделать частичную перегрузкуспециализацию шаблона при условии, что мы посчитали суму всех элементов.
также в этой строке:
| C++ | ||
|
по сути используется та самая функция (уже инстанцирований шаблон), что и вызвал/ла его, а мне надо, чтоб в середине шаблона создавался новый шаблон с новыми параметрами(параметрами шаблона а не функции)
Добавлено через 2 минуты
все дело в том, что мне нужно воспроизвести все расчеты еще на этапе компиляции и макропрограммирование шаблонами — лучшее решение.
Добавлено через 3 минуты
а для выхода с рекурсии надо как-то (как???) сделать специализацию, когда второй параметр шаблона будет 0.
похожий пример я уже видел на соседней ветке обсуждений где считали факториал, однако там используются шаблоны классов и у них очень отличается синтаксис от шаблонов функций
Добавлено через 2 минуты
Рекурсия:написать функцию которая возвращает степень числа
вот тот пост, но там классы
В процессе разработки проекта существует требование предоставить изображение в приложении для функции WeChat Moments. Ниже приводится часть кода, который реализует требование загрузки изображения. Поделитесь им с нуждающимися друзьями или попросите богов дать указатели.
Это мой другой пост оДелитесь несколькими изображениями в WeChat MomentsСтатья.
Сначала организуйте требования
1. Поделитесь массивом изображений в проекте с Moments (совместное использование нескольких изображений)
Когда я впервые получил этот запрос, первое, о чем я подумал, это регулярное совместное использование третьими лицами, напримерУменгИнтегрированный SDK илиOpenShare SDK Однако было обнаружено, что можно совместно использовать только одно изображение или URL-адрес, а совместное использование нескольких изображений не может быть реализовано.После изучения данных метод WeChat Extension был наконец использован для реализации связи между приложениями. Однако при передаче параметров можно использовать только объект изображения или локальный путь. , Таким образом, вам нужно сначала загрузить изображения на локальный компьютер, а затем передать параметры. Требование состоит в том, чтобы порядок загруженных изображений не мог быть нарушен. Чтобы сохранить код, я использовал рекурсивную загрузку SDWebImage + (изображения здесь не более 9 изображений), поэтому вы можете игнорировать Проблемы с производительностью.
begin
// Долго многословно -> Вот главное блюдо!
/ ******* Великолепная разделительная линия ******* /
/***
* Описание параметра:
* donloadImage: массив URL-адресов изображений (массив URL-адресов изображений)
* images: используется для рекурсивного сохранения загруженного массива изображений и передачи инициализированного массива переменных при внешнем вызове
* currentIndex: Рекурсивный индекс, при внешнем вызове передайте 0, чтобы указать начало с 0
* успех: обратный вызов успешной загрузки после завершения рекурсии, обратный вызов здесь - это общий обратный вызов после завершения рекурсии, одна загрузка не удалась или ошибка не будет возвращаться до тех пор, пока рекурсия не будет завершена. Обработка одной ошибки может быть завершена в рекурсивной логике
* ошибка: обратный вызов ошибки после завершения рекурсии
***/
- (void)shareBtnClickAction{
[self donloadImage:[self.detailModel.strace_content copy] images:[@[] mutableCopy] currentIndex:0 success:^(NSArray *images) {
// После того, как изображение загружено, поделитесь им с кругом друзей через расширение WeChat
[self wxExtensionShare:images];
} failure:^{
// Ошибка обработки изображения! Оставьте сеть открытой!
}];
}
Рекурсивный код
// Рекурсивно загружать изображения по порядку
- (void)donloadImage:(NSArray *)imageUrls images:(NSMutableArray *)images currentIndex:(NSUInteger)index success:(void (^)(NSArray*images))success failure:(void (^)())failure{
__block NSUInteger currentIndex = index;
__weak typeof(self) weakSelf = self;
[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:imageUrls[currentIndex]]
options:SDWebImageDownloaderUseNSURLCache progress:^(NSInteger receivedSize, NSInteger expectedSize) {
}
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
@strongify(self);
currentIndex++;
if (finished && !error) {
// Картинка успешно загружена
[images addObject:image];
// NSLog (@ "Загрузка прошла успешно!:% Ld", currentIndex);
}else{
// NSLog (@ "Ошибка загрузки!:% Ld error:% @", currentIndex, error);
}
// Если currentIndex == imageUrls.count, то остановить рекурсию и вернуть
if(currentIndex == imageUrls.count){
if(images.count>0){
if(success){
success([images copy]);
}
}else{
if(failure){
failure();
}
}
return ;
}else{
// Продолжаем рекурсивную загрузку ... и передаем параметры, иначе Boloc не сможет нормально перезвонить во время успеха или неудачи
[weakSelf donloadImage:imageUrls images:images currentIndex:currentIndex success:success failure:failure];
}
}];
}
end

Если вы загрузили файл из Интернета, отдельно или внутри файла .zip или аналогичного, он мог быть «заблокирован», поскольку помечен как исходящий из зоны Интернета. Многие программы будут использовать это как знак того, что контенту нельзя доверять.
Самое простое решение — щелкнуть файл правой кнопкой мыши в проводнике Windows, выбрать «Свойства», и в нижней части этого диалогового окна у вас должна быть опция «Разблокировать». Не забудьте нажать ОК, чтобы принять изменение.
Если вы получили файл из архива, обычно лучше сначала разблокировать архив. Если файл помечен как поступающий из зоны Интернета, и вы его распаковываете, этот флаг может распространиться на многие файлы, которые вы только что разархивировали. Если вы сначала разблокируете, с разархивированными файлами все будет в порядке.
Для этого также есть команда Powershell, Unblock-File :
Кроме того, есть способы написать код, который также снимет блокировку.
Из комментариев @ Defcon1: Вы также можете объединить Unblock-File с, Get-ChildItem чтобы создать конвейер, который рекурсивно разблокирует файл. Поскольку Unblock-File у вас нет возможности найти файлы рекурсивно, вы должны использовать Get-ChildItem эту часть.
Visual Studio 2017 — C # — Не удалось обработать файл (* .resx) из-за того, что он находится в Интернете или зоне ограниченного доступа или имеет отметку в Интернете
Я получаю следующее сообщение об ошибке при выполнении (сборка) ->
« Не удалось обработать файл 123.resx из-за того, что он находится в Интернете, в зоне ограниченного доступа или на нем имеется отметка Интернета. Удалите отметку Интернета. если вы хотите , чтобы обработать эти файлы. »
Есть 4 формы в проекте и студии 2017 (VS2017) показывает ошибку Визуальная для всех 4 -х смежных Resx файлов в проекте C #.
Вот ключевые моменты.
- Я использую VS2017 Ent в системе Win10x64 Ent, и все (ОС, программное обеспечение, включая драйверы VS2017 и sys) в этой системе обновляется по мере того, как она становится доступной.
- У меня есть доступ к хранилищу OneDrive объемом 1 ТБ через корпоративный Office365 Ent, и я использую это облачное хранилище для хранения всех своих данных. Местоположение проекта VS2017 настроено для хранения в этом OneDrive.
- Я не вносил никаких изменений ни на этом компьютере, ни на VS2017, ни даже в этот проект, кроме обновления своей ОС .
Я попробовал выполнить следующие действия, но это не решило мою проблему.
- Решение «РАЗБЛОКИРОВАТЬ», как упомянуто здесь .
Мои файлы .RESX не имеют этой опции РАЗБЛОКИРОВАТЬ на вкладке «Свойства». (Проводник Виндоус).
Кроме того, я удостоверился, что в настоящее время нет ресурсов (изображений или значков, загруженных из Интернета, которые используются в этом проекте), у которых есть опция «Разблокировать» в свойстве проводника Windows. (Были некоторые с выделенными опциями «Разблокировать», которые я сразу РАЗБЛОКИРОВАЛ).
Интересно, что одна из форм в этом проекте, которая получает эту ошибку, не имеет внешних ресурсов (форма плана), поэтому теория использования элементов, загруженных из Интернета, здесь аннулируется. - В разделе «Свойства обозревателя» -> «Безопасность» -> «Зона локальной интрасети» -> «Сайты» -> «Дополнительно» =
- Введен «file: // [имя моего компьютера]» в «Добавить этот веб-сайт в зону:» -> и подтвердил, что это же находится в разделе «Сайты:»
- Подтверждено, что флажок «Требовать проверку сервера (бла-бла-бла) . » снят (не установлен).
- Удаление и воссоздание решения с файлом .resx, как упомянуто здесь .
Резервное копирование файлов .ResX в каталог diff -> Удаление того же из каталога проекта -> Воссоздание его с помощью блокнота (копирование / вставка информации из его резервной копии) -> Перезапуск VS -> Повторная компиляция = Моя проблема не устранена.
Кстати, недавно я заметил, что перетаскивание (также называемое копией с помощью мыши) любых файлов на ONEDRIVE (источник и место назначения на одном диске) выдает следующее сообщение об ошибке:
«Эти файлы могут быть вредными для вашего компьютера. Ваш Интернет настройки безопасности предполагают, что один или несколько файлов могут быть опасными. Вы все равно хотите его использовать? « .
Поскольку я недавно начал видеть это сообщение, мне интересно, связано ли это и все, что происходит в VS, с недавним Центром обновления Windows, в котором были обновления для Office 2016 Pro Plus вместе с другими обновлениями.

немного старый вопрос, но мое решение использует Powershell:
Сегодня я смог решить свою проблему. Я знал, что проблема как-то связана с облачным хранилищем «один диск», но я ошибочно подозревал, что проблема как-то связана с недавними обновлениями ОС Windows10.
Сегодня я понял, что не могу найти рабочий диск (1 ТБ) на жестком диске с таким же названием. Итак, при ближайшем рассмотрении я понял, что не только работа на жестком диске отсутствует в его настраиваемом пути (в пользовательском каталоге (D: users «MyUserName»), но также есть эта новая папка «Избранное». При открытии папку, я получил флуд, чтобы увидеть ее содержимое, такое же, как и моя рабочая папка на жестком диске. Именно тогда меня осенило, и я вспомнил конкретный инцидент примерно в то время, когда меня изменили расположение избранного в Windows по умолчанию на OneDrive (для лучшей непрерывности и перекрестной связи). платформа / устройство) .Теперь я, должно быть, сделал ошибку при определении пути к избранному, что привело бы к тому, что работа на жестком диске была назначена как избранное.
Итак, я внес следующие изменения, и это решило мою проблему.
- Восстановлено расположение избранного по умолчанию (C: users «MyUserName» Favorites).
Щелкните правой кнопкой мыши -> Свойство -> Местоположение -> Внесение вышеуказанных изменений -> Переместить -> Вариант «Не копировать существующие файлы в новое место» . - Переименование D: users «MyUserName» Favorites -> OneDrive «MyWorkName» .
После внесенных выше изменений я теперь могу скомпилировать проект из «work onedrive» без каких-либо сообщений об ошибках.
Таким образом, если кто-либо когда-либо сталкивался с той же проблемой, а также если решение UnBlock не устраняет проблему, обязательно проверьте и подтвердите путь ко всем настраиваемым местоположениям, а именно ко всей библиотеке Windows и One Drive.
Couldn’t process file resx due to its being in the Internet or Restricted zone or having the mark of the web on the file
Couldn’t process file resx due to its being in the Internet or Restricted zone or having the mark of the web on the file. Remove the mark of the web if you want to process these files.
Any idea about this error message?
16 Answers 16
If you downloaded the file from the internet, either separately or inside a .zip file or similar, it may have been «locked» because it is flagged as coming from the internet zone. Many programs will use this as a sign that the content should not be trusted.
The simplest solution is to right-click the file in Windows Explorer, select Properties, and along the bottom of this dialog, you should have an «Unblock» option. Remember to click OK to accept the change.
If you got the file from an archive, it is usually better to unblock the archive first, if the file is flagged as coming from the internet zone, and you unzip it, that flag might propagate to many of the files you just unarchived. If you unblock first, the unarchived files should be fine.
There’s also a Powershell command for this, Unblock-File:
Additionally, there are ways to write code that will remove the lock as well.
From the comments by @Defcon1: You can also combine Unblock-File with Get-ChildItem to create a pipeline that unblocks file recursively. Since Unblock-File has no way to find files recursively by itself, you have to use Get-ChildItem to do that part.
Я пытаюсь написать небольшой скрипт bash, чтобы помочь отсортировать некоторые восстановленные каталоги/файлы до их исходной файловой структуры до восстановления. В двух словах я восстановил пул дисков, которые были объединены с использованием файловой системы aufs union, после восстановления удаленных каталогов/файлов я заметил, что во многих каталогах есть каталоги с именем «.wh..wh.original_dir_name.4_random_characters «например».wh..wh.Images.1E7W «. Этот каталог будет находиться в том же каталоге, где находится фактический каталог «Изображения». Эти.wh-каталоги называются пробелами и создаются файловой системой aufs, как правило, во время операций удаления, но я заметил, что в них есть много восстанавливаемых файлов/каталогов, но я хотел бы интегрировать их обратно в нормальную структуру.
Перефразируя, это то, что я хочу сделать, но не знаю, как собрать его вместе в сценарии bash.
Мне нужно рекурсивно пересекать структуру, когда я нахожу каталог с именем что-то вроде.wh..wh. то мне нужно проанализировать настоящее имя каталога, и если этот каталог уже существует в том же каталоге, то выполните cp -r --backup=numbered.wh..wh./* real_directory_name/ а затем удалите.wh.. wh или если каталог не существует, просто переименуйте каталог с помощью команды mv. Я предполагаю, что я бы использовал команду find чтобы пересечь структуру, но опять же не уверен, как ее полностью удалить. Любая помощь была бы потрясающей.
Вот пример файловой структуры, чтобы прояснить ситуацию:
/home/
/home/.wh..wh.Images.67TY/
/home/.wh..wh.Images.67TY/Camping/
/home/Images/
/home/Images/Camping/
В приведенном выше примере я хотел бы использовать команду cp для копирования содержимого /home/.wh..wh.Images.67TY в /home/Images, а затем удалить /home/.wh..wh.Images.67TY