Всем доброго времени суток.

Столкнулся с проблемой фильтрации в разделе активностей в списочном представлении.

Создал ModuleConfig, прописал в нем фильтрацию, название модуля добавил в манифест, но при отработке вываливается ошибка - http://prntscr.com/nns86h

 

Terrasoft.sdk.Module.addFilter("Activity", Ext.create("Terrasoft.Filter", {
	property: "Owner",
	value: Terrasoft.CurrentUserInfo.contactId
}));

так же не работает сортировка - http://prntscr.com/nns8sc

 

Terrasoft.sdk.GridPage.setOrderByColumns("Activity", {
	column: "StartDate",
	orderType: Terrasoft.OrderTypes.DESC
});

В чем может быть проблема?

Нравится

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

Судя по тексту сообщения, код пытается сделать вставку (push) элемента в массив, а массив равен null. Где именно и почему это происходит, можно увидеть, открыв скрипты filter.js, sdk-utils.js и module-sdk.js в указанных на экране номерах строк.

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

Пытаюсь отсортировать активности по дате начала и получаю вот что:

Изображение удалено.

Никаких дополнений в код секции не вносилось. Версия 7.11.2 Sales Enterprise + Marketing

Нравится

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

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

 

Данная проблема была решена в версии 7.12.0 

Для исправления на Вашем сайте, пожалуйста, обновитесь до указанной версии.

А есть ли способ проще? Например, сделать замещающую схему и что-то в нее внести?

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

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

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

Исправить текущую сортировку текстовых записей и привести ее в соответствие с правилами сортировки в Excel. Сейчас при сортировке текстовых колонок в реестре активностей результат будет таким: 1-А 11-А 2-А Результат Excel будет таким: 1-А 2-А 11-А Т.к. 99% пользователей работают с Excel, работа с системой в этом случае доставляет неудобства.

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

Здравствуйте, Наталья!

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

Спасибо за Ваш отзыв!

Марина

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

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

Добрый день, Коллеги!
Возникла проблема с сортировкой записей в печатной форме.

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

Вопрос: Как именно можно реализовать сортировку продуктов в распечатанном файле при его генерации по колонке "Номер продукта" детали, содержащей актуальную нумерацию? Возможно есть какой-то стандартный функционал сортировки при настройке печатной формы?

Заранее спасибо за помощь, Коллеги!

Нравится

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

Здравствуйте,
Есть справочник «Печатные формы», там открываете вашу печатную форму. Там есть закладка «Табличные части», табличные части можно изменить, и нужному полю, установить нужную сортировку. См скр:

Максим, огромное спасибо! Глупая невнимательность

Добрый день!

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

Руслан, например, можно формировать Excel-отчёт и затем уже в Excel сортировать так, как нужно.

Как вариант, да. Но если это, допустим, коммерческое предложение, которое формируется в PDF?

Тогда либо сделать несколько копий отчёта с сортировкой по разным колонкам, либо переделывать механизм формирования отчёта. К тому же, это тема о старой версии системы, сейчас в PDF можно выводить только отчёты на движке FastReport.

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

Нельзя просто так отбросить формат вывода, отчёты Word и PDF генерируются принципиально различно.

 

Если речь о Word, нужно смотреть ReportService, там направления определяют в коде функции GetAdditionalMacrosesData.

Почему же принципиально? Я как раз использую ReportService в котором с помощью флага задается формат формирования отчета (WORD или PDF), т.е. не надо писать дополнительный код, просто true/false. Печатная форма разрабатывалась еще на версии 7.14.х. Новую версию построителя отчетов еще не пробовал, вы наверно его имеете ввиду упоминая принципиальные отличия.

Спасибо за подсказку с функцией GetAdditionalMacrosesData. Глянул на нее, все методы приватные, видимо нужно будет дублировать класс ReportService с переопределением методов. Может как нибудь, но пока руки не поднимаются.

 

Руслан Хасанов пишет:

Почему же принципиально? Я как раз использую ReportService в котором с помощью флага задается формат формирования отчета (WORD или PDF), т.е. не надо писать дополнительный код, просто true/false.

Руслан, в более новых версиях вывод Word-отчёта в PDF отключили. На днях обсуждали. Тем, кто уже у себя использовали, пока оставили.

Руслан Хасанов пишет:

Спасибо за подсказку с функцией GetAdditionalMacrosesData. Глянул на нее, все методы приватные, видимо нужно будет дублировать класс ReportService с переопределением методов. Может как нибудь, но пока руки не поднимаются.

Либо же подойти с другой стороны и модифицировать саму информацию в базе о табличной части отчёта. Она хранится в таблице SysModuleReportTable в текстовом поле MacrosList структурами вроде:

  {
    "caption": "Активность.Фактическое завершение",
    "metaPath": "6d33ae9b-e8b1-46d0-bd42-b8a8ca3d4f6b.f944fa96-ddd0-4cb5-ab5b-19c08048beed",
    "metaPathCaption": "Активность.Фактическое завершение",
    "aggregationType": "",
    "subFilters": null,
    "dataValueType": "DateTime",
    "sort": "Descending"
  },

Модифицировали, выгрузили и вернули прежнее значение. Маловероятно, что будут несколько пользователь грузить одновременно. Хотя, может помешать кеширование в ESQ, нужно пробовать.

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

Зверев Александр пишет:

Модифицировали, выгрузили и вернули прежнее значение. Маловероятно, что будут несколько пользователь грузить одновременно. Хотя, может помешать кеширование в ESQ, нужно пробовать.

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

Тогда проще всего без доработок логики насоздавать копий отчёта с разными настройками сортировки. Для ускорения, чтобы не вручную, сделать копирование записей о настройках в этих таблицах через базу.

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

var reportGenerator = ClassFactory.Get<IReportGenerator>("Word"); 

выбрасывается исключение:

Error creating an instance of the "Terrasoft.Configuration.IReportGenerator" class

Потыкался и обнаружил что инструкция: 

ClassFactory.Get<Terrasoft.Configuration.ReportService.ReportHelper>();

в Visual Studio выполняется без ошибок.

В чем разница? Почему первая инструкция вылетает с ошибкой? Из-за этого не могу продолжить работу. Кто нибудь знает как ее побороть?

Руслан, видимо, разница в том, что в во втором случае создают класс по названию, а в первом — по интерфейсу IReportGenerator и параметру. Может, такой способ при запуске не из системы не подходит?

 

Класс отчёта Word задан в схеме WordReportGenerator:

#region Class: WordReportGenerator
/// <summary>
/// Provides report generating functionality.
/// </summary>
[DefaultBinding(typeof(IReportGenerator), Name = "Word")]
public class WordReportGenerator : IReportGenerator
{

Видны те самые интерфейс, от которого наследуется класс, и параметр Word, который у Вас передаётся в ClassFactory.

 

Может, для целей отладки из Studio, создавать класс по полному названию, а уже потом, когда готовую логику будете размещать в схеме, напишете ClassFactory.Get<IReportGenerator>("Word"). Судя по схеме PdfAsyncReportGenerator, где использован именно этот вариант, он сам по себе допустим.

Спасибо, Александр, за помощь. Попробую пойти предложенным вами способом.

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

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