Доброго дня,

Есть ли возможность дебажить C# код и получать подсказки о том, какие классы, методы, свойства и т.п. доступны? Если возможно, то как?

Спасибо

Нравится

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

Добрый день!

К сожалею полноценная отладка, как Вы спрашиваете не возможна.
1. Но вы можете отлаживаться наше предложение, как предложение размещенное на сервере IIS
Здесь приведена ссылка, как это возможно сделать.
http://www.cyberguru.ru/microsoft-net/asp-net/aspnet-debugging-iss-remo…
2. Когда Вы компилируете с конфигурации наше приложение, то часть исходных файлов выгружается локально по указанному в web.config пути

(<add key="CompilerSourcesTempFolderPath" value="…).
Показать все комментарии

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

Есть сущность Вакансия. В ней добавлено виртуальное вычисляемое поле в клиентском коде модуля, Recent vacancy status. Необходимо отобразить это поле на list page вакансий (не знаю как это называется на русском в терминологии BPM). Однако, его нет в списке. Есть ли возможность добавить?

1

"UsrMostFarthestCandStatusVirtual":
{
        type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
        referenceSchemaName: "UsrVacancies",
        dataValueType: Terrasoft.DataValueType.TEXT
}

2

Спасибо

Нравится

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

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

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

Доброго дня,

Пропал стандартный справочник 'AddressType' из UI. Поискал его в базе SQL запросом - есть, должен быть в папке General, однако там его нет.

пропал лукап, какая досада

Возможно, это результат прямого вмешательства в БД, либо какой то баг BPM, который кто-то случайно воспроизвёл.

Вот SQL запрос.

SELECT
        *
FROM SysSchema sch
JOIN SysLookup l ON l.SysEntitySchemaUId = sch.UId
JOIN SysLookupFolder lf ON lf.Id = l.SysFolderId
WHERE sch.Name = 'AddressType'

Результат: addresstypelookupdisappeared.xlsx

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

Заранее благодарю!

Нравится

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

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

Для того чтобы имелась возможность редактировать данный справочник необходимо зарегистрировать его нажав [Add], при добавлении укажите уже имеющийся в системе Объект и Страницу редактирования.

Спасибо за ответ!
Мне как раз дали задачу удалить ненужные значения из справочника AddressType, чтобы не запутывать сотрудников :sad: Какой наиболее безболезненный путь вы посоветуете для решения этой задачи?

Какие именно значения Вам не нужны? Пришлите список.
Собираетесь ли добавлять новые, возможно некоторые из них стоит переименовать

Сказали сделать такое:
1. Удалить из CommunicationType - alternate phone, primary phone, extension number, business phone, fax
2. AddressType - удалить всё, кроме home i business
Подозреваю, в дальнейшем также будут подобные запросы :lol: Как добавления, так и удаления значений..

Я пока сказал заказчикам, что поддержка посоветовала мне не удалять существующие значения из справочников, т.к. это может "поломать" приложение.

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

"trickbz" написал:Я пока сказал заказчикам, что поддержка посоветовала мне не удалять существующие значения из справочников, т.к. это может "поломать" приложение.

Да, это "поломает" импорт из Excel, так как он завязан на ID конкретных типов :(

В справочнике, кажется, есть поля "Использовать для контрагентов" и "Использовать для контактов"

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

Впроваджую ручний розподіл контент-менеджерів по запитах.
Зустрівся з таким фактом:
При формуванні списку пар дат випадають деякі дні із загального списку.

Дослідив,- використовується для роботи "Базовый календарь".

Загалом є такі календарі в системі:
Базовый календарь
Тестовый календарь
Капран Владислав

Для роботи список днів має бути без вихідних (які, я так розумію, і випадають із загального списку дат ).

Мені можна взяти до роботи "Тестовый календарь" ? (Я подивився за червень - всі дні присутні)

Чи потрібно забезпечувати якесь інше рішення ?

Нравится

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

Можно создать свой календарь в справочника «Календари» и там определить все дни рабочими. Или отредактировать какой-то из существующих.
Обычно есть один базовый календарь, он определяется системной настройкой. А остальные календари определены относительно него, то есть в новом календаре для дней недели «Суббота» и «Воскресенье» поставить галочку «Отличается от родительского календаря» и задать их рабочими.
calendar

Проставив у базовому всі дні робочими з 07:00 до 20:00.
Все добре, окрім дати 2015.06.05, вона у мене чомусь відображається в 3-х екземплярах:
StartDate EndDate
2015-06-05 14:16:49.000 2015-06-05 18:00:00.000
2015-06-05 14:16:49.000 2015-06-05 20:00:00.000
2015-06-05 14:16:49.000 2015-06-05 18:00:00.000

і, як видно, у двох у кінечний час підставлено попереднє значення - 18:00.

Де це воно визначено, чи можу я зайве прибрати, в у списку періодів всі три і відображаються

Хоча візуально важко розпізнати, що саме відображається.

Думаю, лучше не трогать базовый календарь, а создать или изменить какой-то другой.
Окна «Страница выбора Content-менеджера» я у себя не вижу. Вероятно, это какая-то проектная доработка. Обратитесь лучше к тем, кто его разрабатывал.

Це в календарних таблицях зафіксувались записи для різних часових інтервалів.
Інструменту для чистки немає. Та для тестової бази воно й неважливо.

Краще створити новий календар і прописати його в карточках контент-менеджерів ?

Да, лучше новый.

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

Доброго дня!

BPM 7.5. Сценарий - кто то открыл одну из вакансий, заполнил пару полей, перешел на другую - изменения не сохранились без нажатия кнопки Save. Поступило требование реализовать функциональность, чтобы при переходе между сущностями появлялся диалог с просьбой сохранить изменения, если они конечно были. Есть стандартный способ это реализовать?

Спасибо

Нравится

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

Данную функциональность возможно реализовать переопределив метод onGridRowChanged базового модуля BasePageV2 в пользовательском пакете.
Добавив туда логику в начало метода:
1. на проверку изменений if this.isChanged()
2. задать вопрос с помощью showConfirmationDialog
3. если ответ положительный сохранить this.save();

Спасибо, Валерий, попробую, обязательно отпишусь!

Добавил код ниже в клиенсткий код страницы UsrVacanciesPage. Работает.
Но есть пару вопросов:
1. Я добавил это лишь в UsrVacanciesPage. Возможно, это нужно будет добавить в базовую страницу BasePageV2 , чтобы это было унифицированно для всех страниц. Я так понимаю, её нужно "заместить", "унаследоваться", и переопределить под себя. Однако я еще не пробовал делать этого. Вы не подскажите алгоритм и ньюансы?
2. Диалог появляется уже тогда, когда выбрана другая сущность в списке и отображаются её детали., дальше диалог блокирует ввод пользователя. Возможно ли сделать так, чтобы диалог появлялся ДО того, как происходит переход на другую сущность, чтобы пользователь видел текущую сущность и её детали, и лишь после нажатия кнопки на диалоге переходил на слудующую?
3. Как мне сделать, чтобы кнпока "Yes" называлась скажем "Save changes" и "No" - "Discard changes"?
4. Может есть какая-то документация?

onGridRowChanged: function()
{
	if (this.isChanged())
	{
		var cfg = {
			style: Terrasoft.MessageBoxStyles.BLUE
		};
		var changedEntityPrimaryColumnValue = this.get(this.primaryDisplayColumnName);
		this.showConfirmationDialog(
			"You have unsaved changes on the the '" + changedEntityPrimaryColumnValue + ' page. Do you want to save changes?",
			function getSelectedButton(returnCode)
			{
				if (returnCode === Terrasoft.MessageBoxButtons.YES.returnCode)
				{
					this.save();
				}
			}, ['yes', 'no'], cfg
		);
	}
},

По пунктам:
1. Вы правильно думаете, что необходимо расширить страницу BasePageV2, тогда все внесенные изменения распространяться на все страницы.
Расширение страницу BasePageV2 необходимо делать в пользовательском модуле, и таким образом все страницы унаследованные от BasePageV2 получат новую логику автоматически.

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

3. Это возможно сделать. Ниже приведен пример из модуля OrderPageV2:

this.Terrasoft.utils.showMessage({
   caption: this.get("Resources.Strings.LinkProductCaption"),
   buttons: [{
      className: "Terrasoft.Button",
      returnCode: "ButtonAll",
      style: "blue",
      caption: this.get("Resources.Strings.QuestionAllCaption"),
      markerValue: this.get("Resources.Strings.QuestionAllCaption")
   }, {
      className: "Terrasoft.Button",
      returnCode: "ButtonChoice",
      style: this.Terrasoft.controls.ButtonEnums.style.GREY,
      caption: this.get("Resources.Strings.QuestionChoiceCaption"),
      markerValue: this.get("Resources.Strings.QuestionChoiceCaption")
   }, "cancel"],
   defaultButton: 0,
   style: this.Terrasoft.MessageBoxStyles.BLUE,
   handler: function(buttonCode) {
      if (buttonCode === "ButtonAll") {
         this.connectProducts(contractId);
      }
      if (buttonCode === "ButtonChoice") {
         this.openProductLookupToLink(contractId);
      }
      if (buttonCode === "cancel") {
         this.openContractPage(contractId);
      }
   },
   scope: this
});

4. К сожалению документации нет.

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

Спасибо за ответ!
А вы не могли бы по шагам в обзорном виде расписать как правильно замещать страницы? Никогда этого не делал, боюсь что-то поломать. Нужно ли копировать полный код замещаемого модуля? Если не нужно, то какой минимальный скрипт дожен быть скопирован? Как правильно в этом скрипте заместить метод, может какой то особый синтаксис?

Код копировать не надо, нужно указать в качестве родителя BasePageV2, особого синтаксиса нет.
Минимальный код нового модуля:

define("BasePageV2", [],
                function() {
                               return {
                                               diff:  []
                               };
                });

Замещение метода происходит путем вставки нужного кода в метод, который имеет такое же название как родитель.
Если необходимо добавить вызов код родительского метода это делается строкой:
this.callParent(arguments);

Пример двух методов из страницы ActivityPageV2

                methods: {
                /**
                * Получает признак отображения меню добавления.
                * @overridden
                * @return {Boolean}
*/
                getAddButtonMenuVisible: function() {
                                return true;
                },
 
                /**
                * Инициализирует контекстную справку
                * @overridden
                */
                                initContextHelp: function() {
                                this.set("ContextHelpId", 1010);
                                this.callParent(arguments);
                },

Здесь ссылка на видео, где это объясняется подробней

https://www.youtube.com/watch?v=T5uciYziKxY&feature=youtu.be&t=1h5m7s

Также прикрепляю файл "Требования к формату схемы, необходимые для корректной работы мастеров", в котором описано какие маркерные комментарии необходимы при создании страницы
trebovaniyakformatushemyneobhodimyedlyakorrektnoyrabotymasterov.doc

Спасибо, Дмитрий, всё получилось!
Также я нагуглил вот такое, может кому пригодится
http://www.community.terrasoft.ru/system/files/bocu/rasshirenie_i_zames…

Еще вопрос - а что такое "markerValue" ?

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

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

Мне нужно создавать что-то в "Идеях", чтобы это было рассмотрено?

Спасибо!

MarkerValue это способ находить элемент в DOM'e. Можно находить по ID, а можно находить по MarkerValue. Например если ID автогенерируемый, а Вам необходимо с данным контроллером проделать конкретные действия, то для этого можно использовать MarkerValue.

Пример:

"trickbz" написал:
trickbz пишет:

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

Данная идея будет зарегистрирована как пожелания и будет рассмотрена департаментом разработки для реализации подобного функционала в будущих версиях.
Спасибо!

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

Мне нужно создавать что-то в "Идеях", чтобы это было рассмотрено?

Спасибо!

Данная идея будет зарегистрирована как пожелания и будет рассмотрена департаментом разработки для реализации подобного функционала в будущих версиях.

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

Добрый день!

Как быстро создать новый тип активности в 7.3?
Пробовала через Мастер раздела, но выдает ошибку, что активность можно добавить только через справочник. Хотя новый тип документа через мастер раздела добавить получилось.
В чем может быть проблема?

Нравится

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

Добрый день,

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

Спасибо!

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

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

Ошибка возникла из неоткуда. При открытии сервиса "wnd_OfferingsDetailTreeArea" возникает ошибка: "Дублируется значение свойства 'UID'. Значение '{91DAAD2E-F7A3-4382-AD0C-2D3B63EF870C}' уже существует". Такая же ошибка выбивает когда пытаюсь перенести сервис со старого работающего бекапа. Изначально ошибка обнаружилась через клиент, открыли раздел "Продукты"

Нравится

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

Чтобы понять, в чём дело, нужно выгрузить сервис в XML-файл (в администраторе из контекстного меню или по Ctrl+Shift+S), открыть в блокноте и найти все места, где встречается "91DAAD2EF7A34382AD0C2D3B63EF870C" (без фигурных скобок и дефисов).

Дальше смотреть по обстоятельствам. Возможно, поможет, если в файле просто удалить текст «UID="91DAAD2EF7A34382AD0C2D3B63EF870C" », сохранить файл и загрузить обратно в администратор, оно само сгенерирует новый UID.

На всякий случай перед манипуляциями сделайте бекап базы.

даже когда пытаюсь выгрузить сервис выдает журнал с ошибкой:
Ошибка получения элемента по USI 'Opportunities\Details\Offerings\wnd_OfferingInOpportunitiesDetailTreeArea'. Дублируется значение свойства 'UID'. Значение '{91DAAD2E-F7A3-4382-AD0C-2D3B63EF870C}' уже существует «Call Stack»
-------------------------------
Поднял старый бекап, там сервис работает нормально...

Так ругается на wnd_OfferingInOpportunitiesDetailTreeArea или wnd_OfferingsDetailTreeArea? Или на оба?

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

Так ругается на wnd_OfferingInOpportunitiesDetailTreeArea или wnd_OfferingsDetailTreeArea? Или на оба?


на wnd_OfferingInOpportunitiesDetailTreeArea
сервис не редактировался, не переливался, сегодня впервые попытались использовать.
На тестовой попытался удалить сервис и заново залить, сервис удалился но при загрузке выбила таже ошибка...

Если такой же сервис есть в старой резервной копии, можно попробовать неработающий из дерева в TSAdmin удалить, а на его место залить такой же со старого. Поскольку это сервис окна, а не таблицы, то при удалении данные не должны пропасть. Возможно, но не факт, после удаления и заливки новой-старой надо будет перезалить окно раздела, в котором используется эта деталь.

"Зверев Александр" написал:Если такой же сервис есть в старой резервной копии, можно попробовать неработающий из дерева в TSAdmin удалить, а на его место залить такой же со старого.

только что пробовал на тестовой, удаляется, но при заливке ошибка приложения и такое же сообщение

После удаления?

Может, сервис с таким же UID есть ещё один?
Предлагаю после удаления выгрузить все схемы в виде файлов в одну папку (правой кнопкой по корню дерева в TSAdmin) и поискать по их тексту упоминания "91DAAD2EF7A34382AD0C2D3B63EF870C".

выгрузил все разделы кроме продаж. Я даже проверять не стал на нормальность этих сервисов, в журнале выбило 2 одинаковых ошибки на 2 сервиса: wnd_OfferingInInvoiceGridArea и wnd_OfferingInInvoiceInProjectGridArea. После их удаление проблема не исчезла, залить старый-новый неудется

После удаления удалось выгрузить в папку все остальные? Может, ещё и третий есть.:lol:

"Зверев Александр" написал:После удаления удалось выгрузить в папку все остальные? Может, ещё и третий есть.

да, был еще один, удалил и его... не помогло... поискал в папке, нашел и там упоминание этой ИД, удалил и этот сервис, это тож не помогло!!

То есть на текущий момент в конфигурации нет ни одного сервиса с таким UID и при этом загрузить в конфигурацию сервис с этим UID не даёт?

"Зверев Александр" написал:То есть на текущий момент в конфигурации нет ни одного сервиса с таким UID и при этом загрузить в конфигурацию сервис с этим UID не даёт?

Фантастика, но так и есть...

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

"Терещук Павел" написал:

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


3.4.0.130

НАШЕЛ!!! Оказывается был еще один сервис где вспоминалось это UID - "wnd_OfferingsDetailTreeArea"(я просто не дождался второго файла при поиске). Когда там удалил строку «UID="91DAAD2EF7A34382AD0C2D3B63EF870C" » - все ошибки пропали!!!

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

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

Допустим, есть таблица UsrIssues, в ней есть лукапная колонка UsrIssueType - внешний ключ на таблицу UsrIssueType. Т.е. исходные данные для SQL - строки "UsrIssues" и "UsrIssueType". Необходимо получить UId колонки UsrIssueType, тот, что мы получаем, открывая метаданные объекта UsrIssue, и поиском по тексту ищем строку "UsrIssueType", и копируем UId сверху.

Вообщем, вопрос - можно ли забрать данные из метаданных с помощью SQL.

Спасибо!

Нравится

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

Можно:

select p.name, p.value
from sys.extended_properties p
inner join sys.tables t on p.major_id = t.object_id
inner join sys.columns c on c.object_id = t.object_id
where t.Name = 'FIAS' --таблица
and c.Name = 'Address' --колонка
and p.Name = 'TS.EntitySchema.UId' --extended property name

Здесь пример запроса получение UId для таблицы 'Contact'и колонки 'SalutationTypeId'

SELECT value AS [UId]
FROM sys.extended_properties AS ep
INNER JOIN sys.tables AS t ON ep.major_id = t.object_id
INNER JOIN sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
WHERE class = 1
and ep.name = 'TS.EntitySchemaColumn.UId'
and t.name = 'Contact'
and c.name = 'SalutationTypeId'
order by t.name;

Спасибо обоим! Валерий, у меня получилось длиннее, спасибо за коротку версию :lol:

declare @detailObjectName nvarchar(255) = 'UsrCandNotewortev';
declare @typeColumnName nvarchar(255) = 'AnniversaryType';
declare @typeColumnNameFull nvarchar(255) = @typeColumnName + 'Id';
declare @majorId int, @minorId int;
 
select top 1 @majorId = p.major_id, @minorId = p.minor_id
FROM sys.extended_properties p
INNER JOIN sys.TABLES t ON p.major_id = t.object_id
INNER JOIN sys.COLUMNS c ON c.object_id = t.object_id
WHERE 
	t.Name = @detailObjectName
	AND c.Name = @typeColumnNameFull
	AND p.name = 'TS.ColumnName' 
	AND p.value = @typeColumnNameFull;
declare @typeColumnUId uniqueidentifier = 
(
	select top 1 CONVERT(uniqueidentifier, p.value) 
	from sys.extended_properties p 
	where 
		p.major_id = @majorId 
		and p.minor_id = @minorId 
		and p.name = 'TS.EntitySchemaColumn.UId'
);
select @typeColumnUId as TypColumnUId

Сделал функцией:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[GetColumnUId]
(
	@tableName nvarchar(255)
	,@columnName nvarchar(255)
)
RETURNS uniqueidentifier
AS
BEGIN
	declare @columnUId uniqueidentifier;
 
	SELECT @columnUId= CONVERT(uniqueidentifier, value)
	FROM sys.extended_properties AS ep
	INNER JOIN sys.tables AS t ON ep.major_id = t.object_id
	INNER JOIN sys.columns AS c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id
	WHERE 
		class = 1
		and ep.name = 'TS.EntitySchemaColumn.UId'
		and t.name = @tableName
		and c.name = @columnName
	order by t.name;
 
	return @columnUId;
END
GO

Вариант покороче, ну точно попроще, оказывается, есть спец-таблица..

declare @tableName nvarchar(255) = 'UsrVacancies';
declare @columnName nvarchar(255) = 'UsrCustomer';
 
select
	sch.Name TableName
	,esr.ColumnName
	,esr.ColumnCaption
	,ColumnUId
from SysEntitySchemaReference esr
join SysSchema sch on sch.Id = esr.SysSchemaId
where 
	sch.Name = @tableName
	and esr.ColumnName like @columnName
Показать все комментарии

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

Наверное большинству пользователей форума вопрос покажется примитивным, но все же помогите разобраться чайнику. :wink:

  • bpm'online 7.5.0

Нравится

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

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

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

Добрый день!

Подскажите как скрыть печатную форму одного типа карточки для других?
Например, есть печатная форма Договора, если ее просто добавить в справочник печатных форм, то она будет добавлена во все карточки документов: и в акт, и в договор и т.д.

Нравится

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

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

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

Один из возможных вариантов для реализации подобного разграничения - дорабатывать логику приложения путем замещения схемы объекта и добавлением необходимой фильтрации.

"Резвов Роман" написал:

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

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

Один из возможных вариантов для реализации подобного разграничения - дорабатывать логику приложения путем замещения схемы объекта и добавлением необходимой фильтрации.

С уважением,

Роман Резвов

Специалист службы поддержки II линии

Группа компаний Terrasoft

Можете описать пример фильтрации для данного вопроса?

Здравствуйте.
В таблице печатных форм добавить поле Value Type ссылающиеся на тип карточки.
При формировании списка печатных форм прописать код фильтрации по данному полю в соответсвии с типом открытой карточки.

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