Вопрос

Добрый день!

Подскажите, пожалуйста, возможно ли передавать дополнительные параметры в макрос, вызываемый в email-шаблоне через [#@Invoke.MyMacros#] ?

Например, нужно реализовать конвертацию значения поля типа boolean из true/false в "да"/"нет". Или преобразовать дату в специальный формат.

Метод GetMacrosValue(object arguments) интерфейса IMacrosInvokable принимает объект с аргументами, но по умолчанию в нем - только идентификатор текущей записи.

У меня такой же вопрос

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

Стандартно в системе есть макрос EstimateLinksGenerator для голосования за оценку, он находится в одноимённой схеме. Но там тоже получают Id и далее работают с ним. Если дата или логическое значение находятся в полях этой записи, то к ним можно получить доступ по её Id.

Зверев Александр,

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

Может, есть какой-то альтернативный вариант решения проблемы?

Нужно смотреть в MacrosHelper, который это всё обрабатывает, как там устроено и есть ли возможность для расширения.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Доброго времени суток, дорогое сообщество!

В облаке есть 7.12.2. Впервые столкнулась с тем, что при попытке сохранить настройку колонок ПФ, ругается на любые макросы (стандартные и нет). С чем может быть связана такая проблема? Если убрать колонку с макросом, то все сохраняется корректно.

У меня такой же вопрос

2 комментария
Лучший ответ

Это ошибка в версии 7.12.2. Напишите в поддержку - они предоставят Вам патч) или обновляйтесь на 7.12.3.

Это ошибка в версии 7.12.2. Напишите в поддержку - они предоставят Вам патч) или обновляйтесь на 7.12.3.

Алла Савельева,

Спасибо!

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

У меня такой же вопрос

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

Вашу задачу можно реализовать используя отчет FastReport. Для этого, в датасет который используется для построения MasterDetail добавьте вычисляемое поле CurrentUser, например. На событие этого датасета "OnDatasetCalcFields" реализуйте функцию, котороая будет помещать в поле CurrentUser значение Connector.CurrentUser.ContactName:

Dataset.Values('CurrentUser') = Connector.CurrentUser.ContactName;

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

а если обязательно делать через Ворд?то никак?хммм а есть ли возможность в таблице создать колонку новую и там определять текущего пользователя?если да то каким образом?какой скрипт писать?

Егор, нужно добавить статическое поле типа Строка Unicode в таблицу раздела, из которого вызывается такой отчет. К примеру, пусть это будет раздел "Договора" и мы хотим в печатную форму договора вставить имя сотрудника, печатающего договор.

После того, как добавите строковое поле CurrentUser в сервисы tbl_Contract, sq_Contract и ds_Contract, измените и запрос данных, который производит выборку для отчета - это запрос Договор. Добавьте в него поле CurrentUser в основную деталь. У меня получилось так: Договор.Current User. Соответсвенно макрос для подстановки в шаблон WORD (в моем случае): <#Договор.Current User>

Затем определите уникальный ID интересующего Вас отчет, я это сделал в SQL Management Studio простым запросом:  select * from tbl_Report where name = 'Печатная форма договора' (sq_Report требует дополнительных параметров, а создавать новый сервис запроса мне было лень :smile:). В используемой мною конфигурации, для отчета "Печатная форма договора" ID оказался равным "{288C8C1D-3722-434A-B010-92101BB1BEC7}".

Вооружившись этим знанием я пошел в сервис Common\Window Templates\BaseWorkspace\scr_BaseWorkspace, нашел там фнкцию function amiReportsOnPrepare(ActionMenuItem) и в цикл for (var i = 0; i < RootMenuItem.Count; i++) после var MenuIsVisible = true; вставил свое условие:

  if (MenuItem.Tag == '{288C8C1D-3722-434A-B010-92101BB1BEC7}') {	 //debugger;		
      		var ContractDataset = Services.GetNewItemByUSI('ds_Contract');
      		ApplyDatasetFilter(ContractDataset, 'ID', BaseWorkspace.GridDataset('ID'),true);
      		  ContractDataset.DisableEvents();
	          ContractDataset.Open();
      		  ContractDataset.Edit();
      		  ContractDataset.Values('CurrentUser') = Connector.CurrentUser.ContactName;
      		  ContractDataset.Post();
      		  ContractDataset.Close();
      		  ContractDataset.EnableEvents();
		}

Суть работы такова: при нажатии на контрол "Отчеты", система отрисовывает выпадающее меню со списком отчетов, закрепленных за данным разделом. Дойдя до нашего "Печатная форма договора" она открывает датасет выделенного в реестре записей договора и вписывает в поле CurrentUser его таблицы tbl_Contract имя текущего пользователя.

Возможно сюда еще нужно будет добавить проверку на наличие датасета Договора. Т.к. если по фильтру раздела не будет ни одной записи договра в реестре, на нашей логике может произойти "свал". Добавить внутрь условия if () {} конструкцию try() catch(e).

Успехов и приятной работы!

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

В базовой конфигурации в разделе "Запросы" есть пользовательский запрос "Задача".
В нем есть главная деталь (по таблице "Задачи"), и несколько подчиненных деталей (например, деталь "Ответственный", по таблице "Средства связи контакта").

На основании этого пользовательского запроса в разделе "Шаблоны сообщений" есть шаблон письма Outlook с названием "Уведомление по задаче", в тексте которого используются ссылки на поля основной детали пользовательского запроса (в виде #Заголовок# и т.п.).

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

У меня такой же вопрос

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

Валерий, добрый день.

В шаблоне сообщений можно использовать поля только из основной детали. Возможность добавлять в шаблон письма поля подчинённых деталей необходимо реализовывать дополнительно. Но возникает вопрос в целесообразности. Реализация такого функционала достаточно сложная (фактически, для шаблонов сообщений придётся реализовать механизм, подобный механизму формирования отчётов Word). Мне кажется, проще и быстрее будет создать новый запрос, который содержал бы все необходимые данные в основной детали, и на его основании сформировать шаблон письма.

Добрый день, спасибо за ответ.
Этот запрос я привел просто в качестве примера. На самом деле не получается составить запрос для такой ситуации:
- шаблон письма для контакта, при этом в шаблон письма необходимо подставить факс ответственного за контакт.

Получается, что основная таблица пользовательского запроса - "Контакт". Оттуда выбираются разные поля, также выбирается его Ответственный, а вот у Ответственного может быть несколько средств связи, и факс может быть указан в любом из них (то есть нельзя выбрать как поле Ответственный.Средство связи 1, надо искать по детали Средства связи). Вот это и не получается сделать...

update:
В принципе можно так, как Вы ответили в этой теме, но это слегка избыточно:
http://community.terrasoft.ua/forum/topic/5023

Валерий, конкретно Вашу задачу можно решить так:

1) Вытягиваем в основную деталь запроса колонки "Номер" и "Тип средства связи" через обратные связи ответственного из таблицы средств связи. Назвать их можно, например, "Факс ответственного" и "Тип средства связи факс".
2) На закладке "Фильтры" основной детали запроса добавляем такие фильтры:

Тип средства связи факс равно факс или
Тип средства связи факс пусто

В итоге получим те записи, у которых указан факс на детали "Средства связи" и те, у которых факса нет вообще. Если у контактов факс указан два раза, он продублируется. В шаблон письма можно вынести только колонку "Факс", а тип будет использоваться только для фильтрации.

Спасибо, Олег!

Здравствуйте! Такой функционал уже доработан.
http://www.community.terrasoft.ua/blogs/7535

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

Создаю email-шаблон.
Необходимо в зависимости от пола выбрать обращение. Пример просто скопипастил с руководства пользователя:
[#Пол;Мужской:Уважаемый;Женский:Уважаемая#]
Этот пример не работает. Запрос настроен, кажется, нормально. По крайней мере макрос #Пол# правильно подставляет значение пола.
Подскажите, пожалуйста, что я делаю не так?

Версия Террасофта 3.3.1.98

У меня такой же вопрос

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

Виталий, попробуйте следующий вариант макроса:

#[Пол;Мужской:Уважаемый;Женский:Уважаемая]#

Большое спасибо, работает :smile:.
Вот только интересно почему в руководстве дан неправильный пример...

Виталий, всегда пожалуйста!:)
Дело в том, что данный макрос ([#Пол;Мужской:Уважаемый;Женский:Уважаемая#])работал во всех версиях до 3.3.1.
Возможно, у Вас руководство более ранней версии.

Если мне не изменяет память, руководство от версии 3.3.1.40.

В 3.3.2.157 есть еще одна беда с использовании макросов. Если название колонки состоит с двух слов например "Тип элемента", то парсер (а именно в функции ParseConditionMacros скпирт scr_MacrosUtils) при анализе письма сделает с ее названием "типэлемента" и колонки такой не найдет. Короче говоря что бы использовать в запросе условия, нужно использовать колонки без пробелов т.е переименовать в конструкторе запросов "Тип элемента" -> "ТипЭлемента", после чего все работает корректно.

Войдите или зарегистрируйтесь, чтобы комментировать