Здравствуйте, Я хочу чтобы по нажатия на кнопке "Печать" вызвался "Бизнес-процесс" и внутри "Бизнес-процесс" создать файл с содержанием в формате ".docx", дальше сохранить файл в Деталь "Файлы и ссылки". Подскажите пожалуйста как сделать и есть пример?

Нравится

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

Добрый день.



Вы можете создать указанный вами бизнес процесс, использовав данную инструкцию с Академии: https://academy.creatio.com/docs/user/bpm_tools/process_elements_refere…

 

Malika,

Спасибо, Вам Малика

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

Как переопределить метод Печати в разделах? 

 

Нравится

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

Добрый день!

Нужно переопределить метод

generatePrintForm: function(printForm)

в вашем разделе. Само описание метода лежит в PrintReportUtilities

Добрый день!

Нужно переопределить метод

generatePrintForm: function(printForm)

в вашем разделе. Само описание метода лежит в PrintReportUtilities

Сидоров Александр В., 

Можно пример переопределения метода печти?

 

См. тут. Но для 7.13 и выше такое не подойдёт, поскольку переопределение модулей запретили.

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

У меня развернуто именно 7.13 . Получается запрещено? Нельзя хотя бы видимость убрать в зависимости от значения какого ниб поля ? Было бы неплохо если бы разработчики дали возможность такие вещи сделать с помощью бизнес правил 

Можете завести идею прав на такую операцию. Стандартно такой не вижу.

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

Доброго времени суток!
Возникла потребность в зависимости от одного из полей на странице редактирования скрывать кнопку "Печать". подозреваю что стоит это делать на этапе инициализации, с помощью изменения свойства visible. но никак не могу найти метод который нужно переопределить, что бы получить доступ к данной кнопке.
Заранее спасибо!

Нравится

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

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

Видимость кнопки печать определяется значением параметра IsCardPrintButtonVisible. Этот параметр задается в методе getCardPrintButtonVisible().

Вам необходимо переопределить указанный метод.

"Мотков Илья" написал:

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

Видимость кнопки печать определяется значением параметра IsCardPrintButtonVisible. Этот параметр задается в методе getCardPrintButtonVisible().

Вам необходимо переопределить указанный метод.


А можно пример пожалуйста? Кусок кода если Вас не затруднит.

Добрый день, Максим!
Код данного метода приведен ниже. Свою логику можете указать любую, вплоть до return true;

getCardPrintButtonVisible: function() {
  var cardPrintFormsCollection = this.get(this.moduleCardPrintFormsCollectionName);
  var result = MenuUtilities.getMenuVisible(cardPrintFormsCollection, this);
  this.set("IsCardPrintButtonVisible", result);
  return result;
}

"Мотков Илья" написал:getCardPrintButtonVisible: function() {
  var cardPrintFormsCollection = this.get(this.moduleCardPrintFormsCollectionName);
  var result = MenuUtilities.getMenuVisible(cardPrintFormsCollection, this);
  this.set("IsCardPrintButtonVisible", result);
  return result;
}

Большое Вам спасибо. :-)

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

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

В нашей системе есть раздел Отправка писем почтой и необходимо, чтобы была возможность массовой печати писем. Если пользоваться штатными средствами (multiselect и выбор печатной формы в меню печать), то у нас открываются множество диалогов с предложением сохранить файл печатной формы (количество соответствует количеству выбранных записей в реестре), что очень неудобно. Можно ли, и как сделать, чтобы в случае такой массовой печати не открывались диалоги, а печатные формы сохранялись сразу, например, в папку указанную в специально созданной системной настройке?

Нравится

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

Добрый день Андрей!!!

а из какого браузера выполняете массовое сохранение файлов на диск? к примеру у меня Google Chrome. И настройка "предлагать куда сохранять файл" выключена. И файлы сохраняются в любом количестве в определенное место на моем диске. Но я данный функционал еще и реализовал через бизнес-процесс. Т.е запускается бизнес-процесс и сохраняет файлы в опеределенную папке. Задача стояла выгрузить из программы Файлы со структурой проекта. Я ее решал посредствам логики бизнес-процесса.

Браузер Опера 35. Действительно забыл про эту настройку. Выгружать нужно на сетевую папку. То есть, чтобы это работало через клиента, нужно, чтобы каждый клиент был настроен на сохранение в эту папку и чтобы имел доступ к ней. Все же лучше бы это (сохранение куда следует) выполнял сервер. Можно чуть подробнее про Ваш бизнес-процесс? Откуда в нем берутся файлы и как сохраняются.

"Орленко Андрей Николаевич" написал:Браузер Опера 35. Действительно забыл про эту настройку. Выгружать нужно на сетевую папку. То есть, чтобы это работало через клиента, нужно, чтобы каждый клиент был настроен на сохранение в эту папку и чтобы имел доступ к ней. Все же лучше бы это (сохранение куда следует) выполнял сервер.

Вопросы:
1. Конфигурация у вас On-Site или On-Demand?
2. Как вы хотите чтобы Пользователь узнал о сохранение через уведомление или как?
3. Настройка на папку выгрузки для каждого пользователя должны быть своя или для всех идентичная?
4. Как часто данную задачу будут выполнять пользователи?

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

Спасибо!!!

1. On-Site
2. Да было бы замечательно, чтобы было какое-то уведомление.
3. Для всех идентичная
4. Ежедневно. Может раз в несколько дней.

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

Здравствуйте!
Проблема: есть 44 вида печатных форм и необходимо от выбора типа объекта, запускать "Печать"--> И выбрать элемент меню "Печать". Выбирать среди 44 айтемов неудобно.

Хочу повесить условия на метода печати в зависимости от значения поля выбранного справочника.

Вижу два варианта решения:

1. В зависимости от значения поля справочника мы управляем значением свойства visible всех элементов.
Много проверок.

2. Делаю свою кнопку "Печать". При нажатии на нее, определяю значения поля выбранного в справочнике. И посредством switch-case запускаю printMethod(printCollection[itemТNumber]).
Как мне получить доступ к колекции Печатных форм для данной страницы и вызвать метод печать(элемент)?

Нравится

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

Здравствуйте, Валерий!

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

Для этого необходимо переопределить метод «initPrintButtonMenu», который определен в PrintReportUtilities.
Переопределять следует на странице редактирования. В частности, чтобы срабатывала проверка на тип необходимо в базовом методе заменить

printMenuItems.addItem(this.getActionsMenuItem({
"Caption": item.caption,
"Click": { bindTo: item.methodName },
"Tag": item.tag,
"Enabled": (type === "Section") ? { bindTo: "isAnySelected" } : true,
"Visible": (item.tag.typeColumnValue) ? { bindTo: "getPrintMenuItemVisible" } : true
}));

printMenuItems.addItem(this.getActionsMenuItem({
"Caption": item.caption,
"Click": { bindTo: item.methodName },
"Tag": item.tag,
"Enabled": (type === "Section") ? { bindTo: "isAnySelected" } : true,
"Visible": { bindTo: "getPrintMenuItemVisible" }
}));

...чтобы метод проверки видимости всегда срабатывал. А в методе getPrintMenuItemVisible осуществлять проверку.

Андрей, огромной спасибо Вам!!!

Вы как "ангел-хранитель", как только проблема, вы сразу тут с ее решением!

На 10+ ))

Здравствуйте! Подскажите, пожалуйста, как реализовать функционал скрытия отчетов по условию в стандартной кнопке "Печать" в версии 7.5 ?
Также необходимо добавить в эту кнопку еще несколько отчетов excel.

Здравствуйте, Александр!

Для реализации скрытия должен подойти метод, описанный Андреем выше.

Илья, добрый день!
Я не нашел в PrintReportUtilities метода initPrintButtonMenu.
Также в добавлении элементов ниже не совсем понятно, откуда взять printMenuItems и item, а также type.

"Безродный Андрей" написал:"Enabled": (type === "Section") ? { bindTo: "isAnySelected" } : true,

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

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

Стоит задача в invoiceSection в грид для каждой записи добавить 2 собственных кнопки "печать 1" и "печать 2", которые будут открывать 2 различных отчета.
Также необходимо либо подменить отчет, который печатается по кнопке печать, либо скрыть её.

Подскажите, пожалуйста, как можно реализовать данную задачу?

Нравится

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

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

Здравствуйте, Александр!

Рекомендации предоставлены в дублирующемся топике

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

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

Стоит задача в invoiceSection в грид для каждой записи добавить 2 собственных кнопки "печать 1" и "печать 2", которые будут открывать 2 различных отчета.
Также необходимо либо подменить отчет, который печатается по кнопке печать, либо скрыть её.

Подскажите, пожалуйста, как можно реализовать данную задачу?

Нравится

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

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

Здравствуйте, Александр!
Отчеты регистрируются в справочнике "Печатные формы". Базовая кнопка добавляется следующим образом:

			diff: /**SCHEMA_DIFF*/[
				{
					"operation": "insert",
					"name": "DataGridActiveRowPrintAction",
					"parentName": "DataGrid",
					"propertyName": "activeRowActions",
					"values": {
						"className": "Terrasoft.Button",
						"style": Terrasoft.controls.ButtonEnums.style.GREY,
						"caption": {"bindTo": "Resources.Strings.PrintRecordGridRowButtonCaption"},
						"tag": "print"
					}
				}
			]/**SCHEMA_DIFF*/

Добавляйте свои по аналогии.
Обработка нажатия определяется в методе "onActiveRowAction" в BaseSectionV2:

				onActiveRowAction: function(buttonTag, primaryColumnValue) {
					switch (buttonTag) {
						case "edit":
							this.editRecord(primaryColumnValue);
							break;
						case "copy":
							this.copyRecord(primaryColumnValue);
							break;
						case "delete":
							this.deleteRecords();
							break;
						case "print":
							this.printRecord(primaryColumnValue);
							break;
						case "processEntryPoint":
							this.onProcessEntryPointGridRowButtonClick();
							break;
					}
				},
Показать все комментарии

Здравствуйте! Стоит задача распечатывать большое кол-во документов без показа стандартного окна параметров печати. Печатные формы в FR. По нажатию кнопки печать в фоновом режиме должны формироваться отчеты, и отправляться на печать. Для одного док-та делал такое(с окном параметров печати), но для пачки не представляю, возможно ли такое реализовать?

Нравится

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

Добрый день.

Окно параметров печати системное, Вы его средствами конфигурирования ТС не пропустите. Разве что напишете ком, который будет нажимать ОК на верхнем\активном окне.

может быть, стоит подумать, чтобы слить все отчеты в один? особенно, если речь идет о нескольких экземплярах одного и того же

Да, именно так и решил поступить... но, возникла проблема, которую описал в теме форума http://www.community.terrasoft.ru/forum/topic/9434.
Эту тему закрываю.

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

Добрый день!
Возникла такая необходимость, печатать напрямую отчет fast report из скрипта заранее указав кол-во копий и без окошка выбора параметров печати.
Реализация следующая:
1. В скрипте TS передаю аттрибутом в отчет кол-во копий и вызываю print:
ReportPreviewer.ComponentsByName('frpMain').Report.Attributes('Copies') = 5;
ReportPreviewer.ComponentsByName('frpMain').PreviewReport();
ReportPreviewer.ComponentsByName('frpMain').Print();
2. В отчете создал переменную Copies, в скрипте отчета выполняюю след. действия:
function frxReportOnStartReport(Sender)
{
var Copies = ;
Report.EngineOptions.DestroyForms = false;
if (Copies != null) {
Report.PrintOptions.ShowDialog = false;
Report.PrintOptions.Copies = Copies;
}
ShowMessage(Report.PrintOptions.Copies);
}
Из дизайнера отчета эта конструкция с доп. условием (else Report.PrintOptions.Copies = 3) отрабатывает правильно, при ShowDialog = true, по умолчанию стоят 3 копии.
При вызове печати из формы отчета, если заменить в коде Print() на Show() тоже все работает правильно.
Но при печати без показа отчета стоят параметры по умолчанию.
В чем может быть дело? Заранее благодарен..

Нравится

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

Иван, без предварительного показа вероятнее всего не получится распечатать отчет с заданным количеством копий (так как не срабатывают все скрипты отчета).
Попробуйте обходной вариант - показать окно и сразу же закрыть его. Похожий вопрос обсуждался здесь: http://www.community.terrasoft.ua/forum/topic/3389

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

Задача:
Реализовать корректную печать для раздела проекты для выделенного в реестре проекта
Подробнее о проблеме описано тут
Для построения выборки нам потребуется рекурсивный запрос, с помощью базовых компонентов SQ Terrasoft'a у меня такой придумать не получилось так как синтаксис CTE начинается со слова with. Решение - создать ADO Dataset, где можно написать любой запрос
1. Создаем ADO Dataset, пишем Connection string, задаем сам запрос :

WITH MyProject
AS
(
SELECT tbl_Project.*, 0 AS Level
 FROM tbl_Project
WHERE ID = :ID
UNION ALL
SELECT p.*, Level+1
 FROM tbl_Project p
INNER JOIN MyProject AS mp
        ON p.ParentID = mp.id
)
SELECT
                MyProject.ID,
                MyProject.ParentID,
                MyProject.Name,
                MyProject.EstimatedStartDate,          
                MyProject.EstimatedDueDate,            
                ContactOwner.Name AS OwnerName,
                ProjectState.Name AS StateName,
        Level
                FROM
                MyProject,
                tbl_Contact AS ContactOwner,
                tbl_ProjectState AS ProjectState
WHERE MyProject.OwnerID = ContactOwner.ID
AND ProjectState.ID = MyProject.StateID
ORDER BY MyProject.SortOrder

Колонки которые вынесены в последнем запросе нужно создать руками, также необходимо создать параметр ID с типом уникального идентификатора
Настройки Dataset'a следующие
1

2. Кнопка в реестре раздела [Проекты], передача параметра ID записи в отчет:

function btnPrintProjectOnClick(Control) {
                var SelectedIDs = GetProjectSelectedIDsArray();
                var Dataset = Services.GetNewItemByUSI('adods_PrintProject');
                var Report = Services.GetNewItemByUSI('fr_PrintProject');
                        if (!IsEmptyValue(SelectedIDs[0]))
                        {
                        SetAttribute(Report,'ProjectIDtoPrint',SelectedIDs[0]);
                ShowReport(Report);
                }
                else
                        MessageBox('Не выбран ни один проект');
}

ShowReport c скрипта scr_ReportUtils

3. Сама печатная форма
Получение параметров

function fr_PrintProjectOnPreview(ReportPreviewer) {
 var DatasetNameStr = "adods_PrintProject"; //датасет в котором мы хотим делать фильтрацию (необходимо помнить о том, что у отчета может быть несколько датасетов)
 var str = ReportPreviewer.DatasetUSIList.CommaText; //в строчке ReportPreviewer.DatasetUSIList.CommaText передаются USI датасетов, через запятую
 var ReportDatasetUSI =  str.substr(str.indexOf(DatasetNameStr), DatasetNameStr.length);
 var Dataset = ReportPreviewer.DatasetByUSI(ReportDatasetUSI);
 
                var ProjectIDtoPrint = GetAttribute(ReportPreviewer.Report,'ProjectIDtoPrint');
                Dataset.Parameters.ItemsByName('ID').Value = ProjectIDtoPrint;                                
}

К параметру ID в ADO Dataset получаем доступ так:

                Dataset.Parameters.ItemsByName('ID').Value = ...;

3. Сам отчет

var
 oldCurXBand: Extended;    
 oldBandWidth: Extended;    

procedure ProjectNameOnBeforePrint(Sender: TfrxComponent);
begin
 oldCurXBand := ProjectName.Left;
 oldBandWidth := ProjectName.Width;                      
ProjectName.Left := ProjectName.Left + 20 * Project.Value('Level');                                            
ProjectName.Width := ProjectName.Width - 20 * Project.Value('Level');                                            
end;

procedure ProjectNameOnAfterPrint(Sender: TfrxComponent);
begin
ProjectName.Left := oldCurXBand;
ProjectName.Width := oldBandWidth;                  
end;

begin

end.

Идея отступа взята с FastReport. Отчёты с деревьями, все остальное в статье у меня не заработало, даже на тестовых таблицах с совпадающими типами + в статье есть ошибки. Реализовано лучше с Документации по методам FR берем
Left (Integer) - Координата Х левого верхнего угла объекта.
Width (Integer) - Ширина объекта.
Отступаем по x нужную длину и кушаем это число с ширины бэнда. Выходит более красивее чем прыгающий бэнд.
Результат :
2

p.s Пожелания по улучшению:
1.Использовать текущие данные подключения для получения данных с ADO Dataset

Нравится

Поделиться

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

Отличная инструкция :smile: +1 лайк!

Спасибо!

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