Добрый день!
Хотела бы создать такой маршрут (запускающийся с определенной периодичностью),
которой бы считал кол-во обращений в группе,
и руководителю группу отправлял бы письмо по шаблону:
"В вашей группе столько-то ( кол-во) обращений"

Как запускать маршрут с определенной периодичностью понятно
Кол-во обращений в группе считать с помощью сценария на C#

А вот как в шаблон передать параметр - "кол-во обращений", и к нему потом в шаблоне обратиться?
Сейчас в шаблон можно только передать идентификатор конкретного обращения.

Можно ли сделать это средствами шаблонов в bpm?

Нравится

20 комментариев

Добрый день Дарья!!!

уточняющий вопрос. о каком шаблоне идет речь в вашем обращение. уточните пожалуйста, чтобы сформировалась полная картина. спасибо!!!

Добрый день, Михаил!
Шаблон почтового сообщения

Добрый день Дарья!!!

вопрос второй какими инструментами инициируете рассылку, или отправку сообщения? где происходит обращение к Шаблону сообщений, на уровне Бизнес-процесса, или на уровне приложения (клиента)? поясните пожалуйста еще данный вопрос. Спасибо!!!

на уровне бизнес-процесса

Вашу задачу Дарья можно решить следующим путем.

Первый способ
1. Редактируете шаблон сообщения. добавляете требуемый параметр, к примеру "#CountGroupCase#.
2. Создаете новое действие процесса, по образу и подобию как схема действия "FillEmailTemplateUserTask".
3. Редактируете "Сценарий" действия процесса. В конце добавляете строчку

UpdateConsts("#CountGroupCase#", GetCountGroupCaseString());

Функцию конечно создаете заранее внутри Нового Действия процесса или Отдельным сервисом.
4. Изменяете существующий бизнес-процесс, удаляете старое действие "Обработать шаблон письма с макросами" и добавляете на процесс новое созданное действие процесса.

Второй способ
Подсмотреть в схему "RegistrationHelper" и создать свои функции по обработке и замещению Шаблона, отправки почты.

Вот такие предложения.

Подскажите, пожалуйста, а где у самого шаблона сообщения можно добавить требуемый параметр?
Шаблон сообщения находится в Справочники-Шаблоны сообщений

Дарья, Шаблоны да находятся Справочники --> Шаблоны e-mail сообщений. Открываете данный справочник, находите требуемый шаблон и редактируете его.

Дарья, просто редактируйте текст сообщения, дополнительных действий вроде бы не требуется...

Дарья день добрый!!!

по вашей задачи, что вы публиковали ранее, у вас все получилось? остались ли еще вопросы или трудности. Дайте пожалуйста знать. Спасибо!!!

Добрый день! как раз хотела написать)

Создала новое действие процесса, по образу и подобию как схема действия "FillEmailTemplateUserTask"
Отредактировала "Сценарий" действия процесса. В конце добавила строчку
UpdateConsts("#CountGroupCase#", "5");
Вместо функции пока константа - для проверки вывода.

Отредактировала шаблон сообщения - добавилатребуемый параметр "#CountGroupCase#.
Вот так вот [#CountGroupCase#]

При формировании письма по шаблону в макрос #CountGroupCase# в итоге ничего не подставляется.
То есть он так и выглядит в результате - [#CountGroupCase#]

Более того, в самом шаблоне есть уже какие-то предустановленные макросы - хотела на них проверить подстановку таких макросов

А они оказываются тоже не работают почему-то.

"Татаровская Дарья" написал:Создала новое действие процесса, по образу и подобию как схема действия "FillEmailTemplateUserTask"

Добрый день Дарья!!!

а новое действие, что создали на бизнес-процессе разместили, т.е на бизнес-процессе вы должны были удалить старое действие "Обработать шаблон письма с макросами" и добавить свое новой действие на схему бизнес-процесса. После выполнить публикацию бизнес-процесса, и проверить работоспособность. Вы так сделали?

Добрый день!
Да, конечно, делала - процесс работает, письмо по нему отправляется.
Только вот письмо выглядит вот так

т.е. в макрос нужное значение не подставляется

Спасибо Дарья за информацию, сейчас воспроизведу вашу ситуацию на своей Базе данных, проанализирую почему не заполняется и дам вам ответ.

Спасибо. У меня 7.6

Дарья день добрый еще раз!!!

очень интересный инцидент попался :) У меня все работает, у вас нет. Мистика. Расскажу как я делал.
1. Я создал новое действие процесса FillEmailTemplateUserTask, назвал его MpoFillEmailTemplateUserTask. Имя новому действию присвоил "Обработать шаблон письма с макросами (Customer), чтобы при подборе в Бизнес-процессе можно было быстро найти и не перепутать "Действия".
В конец "сценария" нового действия добавил тестовый код:

UpdateConsts("#CountGroupCase#", "5");

2. Далее я создал Шаблон в котором просто указал один параметр "#CountGroupCase#", Сохранил его. Дал шаблону название.
3. Чтобы воспроизвести все в реальной ситуации, решил клонировать бизнес процессы "SendEmailToCaseContactProcess", "IncidentManagement".
4. в первом клонированном бизнес-процессе "SendEmailToCaseContactProcess", под названием "MpoSendEmailToCaseContactProcess" и именем "Отправка email сообщения контакту обращения (customer)", я удалил элемент бизнес процесс "FillEmailUserTask" и добавил свое
"пользовательское действие процесса", под названием "Обработать шаблон письма с макросами (Customer)", Входящие параметры действия - RecordId, TemplateId, SysEntitySchemaId, заполнил как было в исходном процессе. Соединил связи между элементами процесса и опубликовал его.
5. во втором клонированном бизнес-процессе "IncidentManagement" , под названием "Процесс управления инцидентами (customer), у элемента процесса "SubProcess4", я изменил связь подпроцесса с "Отправка email сообщения контакту обращения" на "Отправка email сообщения контакту обращения (customer)". Во входящем параметре "TemplateId" - указал ссылку на свой созданный новый шаблон с единственным параметром. Все сохранил и опубликовал

После я исполнил новый бизнес-процесс "Процесс управления инцидентами (customer)" дошел до момента отправки уведомления, и посмотрел что мне придет на почту. Пришло письмо с цифрой "5" в теле письма.

Вот теперь думаю чтобы уже голову не ломать. Поделитесь своими бизнес-процессами Дарья. Я их из MD файлов загружу себе и попробую через дебаггер найти где спотыкается бизнес-процесс и из-за чего у вас не происходит замена параметра.

Добрый день!
Да, конечно
Во вложении - действие и процесс.

Скажите, пожалуйста, а какая у вас версия bpm?
У вас отрабатывают в шаблоне вот такие вот предустановленные макросы(которые в шаблонах предлагаются во всех)

У меня Дарья как у мамонта :smile: старая версия ITIL еще первую 7.6 когда раздавали, я ее скачал и после этого не обновлял. Недавно запрашивал актуальные версии, вот обновлюсь сегодня и уже завтра с утра, посмотрю на ваши процессы. Сегодня я просто физически не осилю. Очень много было умственного процесса. Поэтому если терпит до завтра, то посмотрю на ваши процессы обязательно с самого утра.

да, конечно, спасибо вам

Добрый день, Михаил!
Подскажите, пожалуйста, у вас тоже не отображается макрос из шаблона или отображается?

Получилось решить данную задачу другим способом:
Вычислять кол-во обращений, записывать в параметр.
И уже этот параметр указывать для поля "Тело активности" в элементе добавление данных (добавление данных письма)

Показать все комментарии

Здравствуйте!

Стоит задача реализовать внесение фирменного шаблона в создаваемые письма.
Теоретически можно сделать, как предложено здесь:
https://community.terrasoft.ru/blogs/7765

Но насколько я понимаю, по предложенной схеме, шаблон невозможно будет персонифицировать, он будет фиксирован по своему содержанию.

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

Нравится

5 комментариев

Говорят, в 7.6 будет мощный движок шаблонов писем, в том числе и персонифицированных.

Послушаем завтра :-)

Фариз Эльдарович, здравствуйте!

На данный момент шаблоны E-mail сообщений могут быть настроены только через справочник "Шаблоны e-mail сообщений".

Нововведения в версии 7.6 касательно e-mail будут относиться к продуктам Service и Merketing.

Спасибо

Ок, а шаблоны email сообщений из справочника могут быть применены к любому вновь создаваемому письму?

Фариз Эльдарович,

справочник "Шаблоны e-mail сообщений" используется только при рассылках (Например в Sales + Marketing).

Существует другой способ настройки персонализации через БП - через элементы "Чтение данных" и "Отправить e-mail" (Таким образом будет некий аналог макроса).

Спасибо!

Показать все комментарии

Здравствуйте!
Меня "угораздило" удалить несколько FastReport-форм отчетов (счетов-фактур) для документов, которые не надо было удалять. Но имеются другие FastReport-формы, в этом же подразделе, для других отчётов, из которых очень просто сделать такие-же как удалённые. Что я и сделал, однако эти формы не видны в разделе отчёты в TSClient.exe. То есть сервисы есть, но не понятно как их привязать к отчётам Подскажите, как создать FastReport-форму отчета по шаблону существующей FastReport-формы?

P.S.
Восстановление из бэкапа не желательно, так как косяк замечен поздно и 1,5 дня работы будет на смарку... ОЧЕНЬ надеюсь на вашу помощь.

Нравится

2 комментария

если нужно восстановить удаленные формы - восстановите только записи из таблицы tbl_Services
например, удалили fr_ReportReport, тогда:

insert into [WORKBASE_Name].[dbo].[tbl_Services]
select * from [BACKUPBASE_Name].[dbo].[tbl_Services] where code = 'fr_ReportReport'

если вам надо восстановить настройки удаленных отчетов (в разделе отчеты) можете сделать тоже самое с отчетами (tbl_Reports)

Дмитрий, спасибо, всё восстановил. Маленькие заметочки для тех кто столкнётся с подобным:
1) Таблицы называются tbl_Service и tbl_Report (без 's' на конце).
2) Права также нужно восстановить (я это сделал не из бэкапа, но можно из таблиц tbl_ReportRight и tbl_ReportGroupRight).

Показать все комментарии

Добрый день!

Windows 7 x64, MS Office 10 x64, TS 3.3.2.174

Создаю новый отчет с шаблоном офиса, в ворде или экселе нет надстройки ТерраСофта. Утилиту TSMSOfficeLibraryConfigurator использовал, галочки стоят. Офис видит надстройку, но говорит что она не активна, при попытке ее включить ничего не происходит, но пишет что надстройка не может быть загружена - ошибка времени выполнения.

Также при выборе любого отчета ворд/ эксель (начальные отчеты нашей конфигурации) TS зависает намертво.

Что было раньше не знаю, отчетами не пользовались вообще.

Что это может быть? Куда копать?

Заранее спасибо за советы!

Нравится

5 комментариев

насколько я знаю ТС не поддерживает офис х64

Вот я тоже такое краем уха слышал... И обходных путей никаких не существует?

Можно обновиться до TS 3.4.1, либо же установить 32-битный Office.

Дмитрий, действительно, поддержку MS Office x64 мы начали только с версии 3.4.1, так же сильно были доработаны другие возможности, детально можете почитать тут : http://www.community.terrasoft.ua/blogs/8555

Спасибо!

Показать все комментарии

Используя посты 7302 и 8466 на форуме Terrasoft подкорректировал и доработал функционал создания отчета Excel с использованием шаблона.
Мои основные доработки касались реализации функционала вставки табличной части отчета (например, для возможности вывода детали продукты документа), остальные изменения касались исправлений ошибок и совершенствования кода для версии 3.4. Ниже я опишу как формируется табличная часть отчета.
Тестировалось пока только на MS Excel 2003.
В качестве основы бралась базовая конфигурация Terrasoft XRM 3.4.0.130.

Форма добавления отчета Excel в системе была доработана с возможностью указания шаблона Excel. Выглядит она вот так:
Окно редактирования отчета Excel

Чтобы использовать отчет Excel с шаблоном, в карточке отчета небоходимо проставить признак "Отчет по шаблону" и загрузить шаблон.
Excel шаблон можно добавить в отчет либо через окно редактирования отчета (Шаблон -> Изменить шаблон отчета), либо из окна Excel, используя панель инструментов Terrasoft.

Добавление шаблона из окна Excel:

1. Открыть сохраненную ранее заготовку Excel шаблона
2. Соединиться с Terrasoft, нажав кнопку "Соединить":
соединить
3. Далее меню "Операции" -> "Связать с отчетом":
связь с отчетом
4. Выбрать отчет Excel для связки:
выбор отчета
5. Excel шаблон изменяется, сохраняется и при его закрытии Terrasoft задаст вопрос о сохранении этого шаблона в базу данных CRM:
вопрос

Создание шаблона:

1. Для вставки поля используется кнопка "Вставить поле" панели инструментов Terrasoft:
Пример шаблона
2. Появляется окно с полями из запроса, которая содержит поля главной таблицы и поля деталей запроса:
Пример шаблона
3. В шаблон добавляются поля главной таблицы и добавляются поля деталей для вывода табличной части, например, продуктов.

Пример внешнего вида шаблона отчета:

Пример шаблона
(см. shablon.xls)

Краткий алгоритм формирования отчета Excel по шаблону:

1. Заполняются все поля, которые берутся из основной таблицы
2. Если в какой-либо строчке встречается использование поля из табличной части отчета, то эта строчка считается шаблонной.
2.1. Далее эта строчка копируется N раз и заполняется данными табличной части отчета, где N - количество записей табличной части
2.2. Для нумерации строк табличной части используется шаблон #NN>
3. Все вставки, где используется, #CuurentDate> заменяются текущей датой, например, 21.11.2012.

Пример полученного результата:

пример отчета
(см. rezultat.xls)

Все изменения, внесенные в стандартные скрипты авторами этой доработки, выделены такими блоками:

// ExcelTemplate. [Added/Edited]
........
// * ExcelTemplate

Список измененных сервисов прикреплен ниже (см. exceltemplate.rar).

Как и писалось ранее в родительских постах, перед "накатыванием" этих сервисов настоятельно рекомендуется сделать бэкап базы.
Функционал предоставляется как есть и используется пользователем без каких-либо претензий к тем, кто участвовал в разработке этого функционала :smile:

Можно перед загрузкой сервиса сравнить его с текущим сервисом вашей конфигурации используя утилиту сравнения, например, WinMerge (бесплатная).

В скриптах используется функция вызова функций из скрипта, который не подключен (я разместил ее в scr_Utils):

function ExecuteScriptMethod(ScriptName, MethodName) {
     var Script = GetSingleItemByCode(ScriptName);
     var CodeObject = Script.ScriptControl.CodeObject;
     var Arg;
     var Args = new Array();
     var FuncDict;
     var CustomFunction;
     if (Assigned(Connector.Attributes('FuncDict'))) {
          FuncDict = Connector.Attributes('FuncDict');
     } else {
          FuncDict = GetNewDictionary();
     }
     if (FuncDict.Exists(ScriptName+'_'+MethodName)) {
          CustomFunction = FuncDict(ScriptName+'_'+MethodName);
          for (var i = 2; i arguments.length; i++) {
               Args.push(arguments[i]);
          }
     } else {
          var Code = 'return CodeObject.'+MethodName+'(';
          for (var i = 2; i arguments.length; i++) {
               if (i > 2) {
                    Code += ',';
               }
               Args.push(arguments[i]);
               Code += 'Args['+(Args.length-1)+']';
          }
          Code += ');';
          CustomFunction = new Function('CodeObject', 'Args', Code);
          FuncDict(ScriptName+'_'+MethodName) = CustomFunction;
          Connector.Attributes('FuncDict') = FuncDict;
     }
     return CustomFunction(CodeObject, Args);
}

Дальнейшая доработка приветствуется :wink:

Даром получили, даром давайте :twisted: (с) Христос

Нравится

Поделиться

1 комментарий

"Кошкаров Андрей" написал:Даром получили, даром давайте (с) Христос

Спасибо огромное за то что поделились опытом, я буду переносить решение на 3.3.2 и заодно расскажу про подводные камни. Вы сделали отличную работу - спасибо вам еще раз!

Показать все комментарии

Добрый день. Есть отчет Word по шаблону. При выборе изменить шаблон - он открывается, но в шаблоне при выборе "Соединить"(для соединения с TS) ничего не происходит. Вчера переустановил Office, и проблема решилась. Сегодня тоже самое. Как решить эту проблему, подскажите пож-ста...

Нравится

9 комментариев

В таком случае нужно сделать:

  1. Перерегистрировать библиотеки
  2. Перенастроить интеграцию через утилиту - "c:\Program Files\Terrasoft\Bin\TSMSOfficeLibraryConfigurator.exe"

Бинарные файлы и библиотеки должны быть зарегистрированы в системе во врем работы с интеграцией TS+Word.

а как перерегистрировать библиотеки? 2-ой пункт это снять и поставить галочки?

"Каневский Антон Владимирович" написал:

а как перерегистрировать библиотеки?


Для перерегистрации библиотек достаточно открыть один из файлов *.dll (TSObjectLibrary.dll например) «с помощью» – выбрать программу c:\Windows\System32\regsvr32.exe

"Каневский Антон Владимирович" написал:

2-ой пункт это снять и поставить галочки?


Совершенно верно.

tsmsofficeconfig.png

Не помогает это.

Здравствуйте, Антон!
Какие используются версии Office и Terrasoft?
Проверьте не находится ли плагин Terrasoft в отключенных объектах Office (см. скриншот ниже).
Отключите безопасность макросов в Office.

office2k3.png

Версия Office 2007, TS 3.3.2.173. Надстройка Terrasoft активна..

Добрый день, Антон.
Подобная ситуация уже наблюдалась нами, на ранних бинарных файлов. Текущая сборка 3.3.2.275.
Обратитесь пожалуйста в техническую поддержку по е-майл support@terrasoft.ru с просьбой предоставить Вам ссылку на актуальные бинарные файлы.

После обновления, нужно будет перерегистрировать библиотеки и через утилиту интеграции (TSMSOfficeLibraryConfigurator.exe) отключить и заново включить интеграцию с MS WORD.

Показать все комментарии

Добрый день!

Подскажите, есть ли подробное пошаговое руководство по созданию рассылки, начиная от создания запроса и до непосредственно процесса отправки?

В частности, интересуют следующие вопросы:

1. Действительно ли в качестве основной таблицы можно использовать только "Средства связи контакта" или "Средства связи контрагента"?
2. Нужно ли делать фильтр по полю Код ("Код" содержит "EMAIL")?
3. Обязательно ли создавать дополнительные детали? Или можно вынести поле "ФИО" из обратной связи в основную деталь?
4. Нужно ли в свойствах запроса выбирать поле фильтрации?
5. Нужно ли в шаблоне сообщения для рассылки заполнять деталь "Получатели"?

Дело в том, что по всем пунктам у меня "Да", но рассылка не уходит (Состояние = Ошибка). При этом не рассылочная почта из Terrasoft'a уходит нормально.

Нравится

1 комментарий

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

В этой теме детально расписано, как реализовать такое. Но. Как показала практика, -- это для версии 3.3.2. Поскольку версии Террасофт разные, то, соответственно, у них и функционал различный -- значит, "тупо" загружать сервисы из той темы не стоит -- отладчик будет ругаться (и не только отладчик) :smile: В общем, пришлось покопаться в этих сервисах, выяснить доработки и загружать только изменения. Делюсь опытом -- может, кому-то тоже пригодится.

Алгоритм такой:
0. Настоятельно рекомендуется сделать бекап базы.
1. Добавить поле в таблицу tbl_Report IsExcelReportByTemplate, булевское.
2. Добавить это поле в запрос sq_Report +галочка "всегда выбирать в запросе". Добавить в датасет ds_Report. Заголовок -- "Отчет по шаблону".
3. В скрипт scr_UserReportCommon добавить след.функции:

/* s.t.a.s - Show Excel report by Template */
function ShowExcelReportByQueryID(QueryID, Workbook, RecordIDs) {
        var QueryObj = CreateUserQueryObject(QueryID);
        var Sections = QueryObj.Data.Sections;
        var RootSection = QueryObj.RootSection;
        var RootDataset = GetDatasetBySectionAndSetupDatasetLink(QueryObj.RootSection, Sections);      
        var DontApplyIDsFilter = false;
        AddIDsIncludeFilter(RootDataset.SelectQuery);
        ApplyDatasetIncludeFilter(RootDataset, 'IDs', RecordIDs, true);
        RootDataset.Open();
        if (RootDataset.IsEmptyPage) {
                return;
        }
        var ChildSectionsArray = GetChildSectionsArray(RootSection, Sections);
        var ChildDatasetsArray = GetChildDatasetsArray(ChildSectionsArray, Sections);  
function ReplaceTag(DatasetCaption, Dataset, Section) {
                var DatasetCaption = Dataset.Caption;
                while((Res) && (!IsEmptyValue(Res))) {
                        var Cell = ExcelActiveSheet.Cells(Res.Row, Res.Column);
                        if (Cell) {
                                var Value = Cell.Value;
                                if (!IsEmptyValue(Value)) {
                                        var TextArray = Value.split('#' + DatasetCaption +  '>.');
                                        for (var i = 0; i TextArray.length; i++) {
                                                if (TextArray[i].indexOf('') == -1) {
                                                        delete TextArray[i];
                                                } else {
                                                        var Start = TextArray[i].indexOf('');
                                                        var End = TextArray[i].indexOf('>');
                                                        TextArray[i] = TextArray[i].substring(Start + 1, End - Start);
                                                }
                                        }
                                        var Columns = Section.Columns;
                                        var Keys = new VBArray(Columns.Keys()).toArray();
                                        var Length = Keys.length;
                                        for (var k = 0; k Length; k++) {
                                                var Column = Columns(Keys[k]);
                                                FieldCaption = Column.Caption;
                                                if (IsStringInArray(FieldCaption, TextArray)) {
                                                        DataField = GetDataFieldByCaption(Dataset, FieldCaption);
                                                        if (!DataField) continue;
                                                        if (DataField.FieldType == dftDateTime) {
                                                                if (!IsEmptyValue(DataField.Value)){
                                                                        DataFieldValue =
                                                                                DateToStr(DataField.Value);
                                                                } else {
                                                                        DataFieldValue = '';
                                                                }
                                                        } else {
                                                                DataFieldValue = DataField.Value;
                                                        }
                                                        if (IsEmptyValue(DataFieldValue)){
                                                                DataFieldValue = '―';
                                                        }
                                                        Value = Value.replace('#' + DatasetCaption +
                                                                '>.' + FieldCaption + '>', DataFieldValue);
                                                }
                                        }
                                        Cell.Value = Value;
                                }
                        }
                        Res = ExcelActiveSheet.Cells.Find('#' + DatasetCaption +  '>.');
                }
        }      
        var ExcelActiveSheet = Workbook.ActiveSheet;
        while (!RootDataset.IsEOF) {
                SetChildSectionsFilter(ChildSectionsArray, Sections);
            OpenChildDatasets(ChildSectionsArray);
                var Res = ExcelActiveSheet.Cells.Find('#' + RootDataset.Caption +  '>.');
            if (Res) {
                ReplaceTag(RootDataset.Caption, RootDataset, RootSection);
            }
            for (var j = 0; j ChildSectionsArray.length; j++) {
                        var Res = ExcelActiveSheet.Cells.Find('#' +
                                ChildSectionsArray[j].DatasetLink.Dataset.Caption +  '>.');
                        if (Res) {
                        ReplaceTag(ChildSectionsArray[j].DatasetLink.Dataset.Caption,
                                        ChildSectionsArray[j].DatasetLink.Dataset, ChildSectionsArray[j]);
                        }
                }
                RootDataset.GotoNext();
        }
        RootDataset.Close();
        if (Workbook) {
                Workbook.Application.Visible = true;
        }
}
function OpenChildDatasets(ChildSectionsArray) {
        var Section;
        for (var i = 0; i ChildSectionsArray.length; i++) {
                Section = ChildSectionsArray[i];
                Section.DatasetLink.Dataset.Open();
        }
}

+ подключить скрипт scr_UserQueryUtils.
4. В скрипте в функции ReportMenuItemExecute в блоке
switch (FilteringTypeID) {
  case rftSelectedRecords:
        if (SourceTypeID == rstExcel) { //...

заменить строчку
ProcessPrepareExcelReport(QueryID, WorkspaceWindow, SelectedIDs);

на блок (авторские права сохранены:smile:):
if (!Dataset('IsExcelReportByTemplate')) {
/* s.t.a.s - Base product implementation */
  ProcessPrepareExcelReport(QueryID, WorkspaceWindow, SelectedIDs);
} else {
/* s.t.a.s - Project implementation */
  var QueryID = Dataset.Values('QueryID');
  PrepareExcelReportByTemplate(QueryID, ID, SelectedIDs);
}

+ подключить скрипт scr_MSExcelLibrary.
еще была заменена строчка ProcessPrepareExcelReport(QueryID, WorkspaceWindow); в блоке default (на блок, написанный выше), на всякий случай.
5. Остальные сервисы из темы-источниказагрузить без изменений.

Все переделанные сервисы прикреплены к теме.
excel_reports_by_template_ts_3_4.rar

Нравится

Поделиться

4 комментария

кстати, если нужен функционал для отображений отчетов в определенном разделе+для определенных значений, то нужно в загруженном скрипте wnd_ExcelReportEditScript подкорректировать функцию ShowControlsForExcel():

function ShowControlsForExcel() {
	try {
		Self.BeginUpdate();
		var Dataset = dlData.Dataset;
		var IsVisible = !!Dataset('IsExcelReportByTemplate');
		//fgFilter.IsVisible = fgFiltering.IsVisible = frmValues.IsVisible = 
		//	fgValues.IsVisible = !IsVisible;
		btnLoadTemplate.IsVisible = IsVisible;
		Dataset.DataFields('QueryID').IsRequired = IsVisible;
		//Self.Height = (!IsVisible) ? 422 : 160;
	} finally {
		Self.EndUpdate();
	}
}

Ольга, здравствуйте.
Не совсем понял как это функция ReplaceTag объявляется внутри другой функции ShowExcelReportByQueryID. Разве оно так работать будет? С какой целью так написано?

"Кошкаров Андрей" написал:Не совсем понял как это функция ReplaceTag объявляется внутри другой функции ShowExcelReportByQueryID. Разве оно так работать будет? С какой целью так написано?

интересно, я не заметила этого... эта часть кода не моя.. наверное, нужно уточнять у автора))

"Кошкаров Андрей" написал:

Ольга, здравствуйте.

Не совсем понял как это функция ReplaceTag объявляется внутри другой функции ShowExcelReportByQueryID. Разве оно так работать будет? С какой целью так написано?

http://javascript.ru/basic/closure

Показать все комментарии

Всем привет!

У меня возник вопрос касательно создания красивых шаблонов писем для рассылок.

Для этого я воспользовался приложением MS Word.
Вот как это выглядело.

Я открыл word документ и создал обычную таблицу с красивым оформлением и текстом. Вставил несколько картинок. Одним словом, поигрался возможностями редактора:

После этого, я открыл Terrasoft и в разделе [Шаблоны сообщений] создал новый шаблон:

Нажав кнопку [Изменить шаблон] я скопировал свою таблицу из Word в Outlook:

Хочу заметить, что значки, отмечены на скриншоте стрелками пропадут при рассылке. так что можно не переживать :wink:

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

С уважением,
Белецкий Арсений
Группа компаний Terrasoft

Нравится

1 комментарий

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

Как же добавить подобный фирменный бланк в BPMonline?

Сделать это можно следующим образом:

1. Создать активность с типом Email, в теле которой будет наш бланк.

01

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

01

01

2. Найдите в базе данных запись нужного шаблона и скопируйте содержимое поля HtmlBody:

SELECT Title, HtmlBody FROM Activity

01

3. Откройте объект Активности и добавьте содержимое поля HtmlBody в значения по умолчанию:

01

Опубликуйте схему.

Обратите внимание, в значении константы все двойные кавычки " нужно продублировать: ""

Это необходимо для того, чтобы в сгенерированном исходном коде схемы константа сохранилась корректно.

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

Нравится

Поделиться

6 комментариев

Добрый день
Анна, не могли бы вы подсказать:
мне в шаблоне на уведомление (в е-мейл акт-ти) нужно, чтобы отображалась ссылка на активность-задачу (url-адрес). Т.е. сотрудник, получивший по эл.почте это уведомление, перейдя по этой ссылке, открыл саму активность-задачу. Подскажите, как "выцепить" этот url-адрес ? Заранее спасибо

Здравствуйте, Татьяна.
Ссылка на активность состоит из константы (постоянной части ссылки) и идентификатора конкретной активности. Например: «http://localhost:8094/0/ViewPage.aspx?Id=f2bf397b-8fa3-48ba-b691-573608…» – константа, «23731a65-f9bb-4b75-b983-8c815cae6050» – идентификатор конкретной активности.
Для подстановки конкретной активности в шаблоне, необходимо в url после константы поставить %id% для передачи в эту ссылку идентификатора конкретной записи. Например: «http://localhost:8094/0/ViewPage.aspx?Id=f2bf397b-8fa3-48ba-b691-573608…%».

А как в подпись попадают данные сотрудника?

Владимир,

Изначально вы просто вводите все в редакторе и сохраняете как шаблон. А потом уже вытягиваете из базы данных в виде сохраненного кода и вставляете его в как константу, понятную системе.

Кстати, к предыдущему вопросу о ссылках на другую активность: я бы рекомендовала конструировать их иначе, примерно как тут, чтобы не приходилось хардкодить адрес сайта и ссылки не ломались при переносе сервера на другой домен.

"Обуховский Александр Сергеевич" написал:Для подстановки конкретной активности в шаблоне, необходимо в url после константы поставить %id% для передачи в эту ссылку идентификатора конкретной записи. Например: «http://localhost:8094/0/ViewPage.aspx?Id=f2bf397b-8fa3-48ba-b691-573608…%».

а в шаблоне сообщения это тоже через макрос можно как-то сделать?

Показать все комментарии