Многие пользователи системы версии Terrasoft CRM 3.2 и выше сталкивались с вопросом импорта из MS Excel в конкретную статическую группу раздела. Ниже приведу настройки такого импорта (пример со скриншотами прикреплен).

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

1) Основная таблица - Контрагенты.
2) Перетянуть название контрагента, Тип (справочник и поле названия)и другие поля из шаблоны, которые должны быть проимпортированы в таблицу контрагентов.
3) Из обратных связей контрагента (Контрагент в группе - Контрагент перетянуть поле-справочник и название контрагента).
4) Перетянуть из настроек колонку "Контрагент в группе.Контрагент" на закладку "Проверка уникальности".
5) Из обратных связей контрагента (Контрагент в группе - Группа) перетянуть поле-справочник на закладку "Проверка уникальности" и указать значение группы из справочника.
6) Сохранить настройки.

Хочу заметить, что для версии Terrasoft CRM 3.2.0, чтобы избежать дублей записей того раздела, основная таблица которого выбрана в настройках импорта, не нужно импортировать название контрагента в основную таблицу ( Контрагент - Название), а только через обратные связи (для примера, который во вложении).

Нравится

Поделиться

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

Добрый вечер, путник зашедший на мой блог.
Если ты еще не спишь (а завтра рано вставать) вот тебе мой совет по исправлению Delete Query на администрируемую по записям таблицу, который использует Exist фильтры со ссылками на основную таблицу Delete Query.
Если ты, дорогой путник, не заснул после предыдущей фразы, вот тебе функция, которая исправляет данную проблему:

function ReplaceDQTablesAliasesByViewsInExistFilters(DeleteQuery, TableName, ViewName) {
        var IsAdmin = Connector.CurrentUser.IsAdmin;
        if (IsAdmin) {
                return;
        };             
        var Filters, ExistFilter, Filter, LeftTableAlias, RightTableAlias;
        for (var i = 0; i DeleteQuery.Filters.Count; i++) {
                ExistFilter =
                        DeleteQuery.Filters.Items(i);
                if (ExistFilter.FilterType != ftExists) {
                        continue;
                };
                for (var j = 0; j ExistFilter.TestExpression.ExpressionSelectQuery.Count; j++) {
                        Filters = ExistFilter.TestExpression.ExpressionSelectQuery.Items(j).Filters;
                        for (var k = 0; k Filters.Count; k++) {
                                Filter = Filters.Items(k);
                                if (!IsStringInArray(Filter.FilterType, [ftIsNull, ftCompare, ftLike, ftBetween, ftInclude])) {
                                        continue;
                                };
                                LeftTableAlias = Filter.TestExpression.TableAlias;
                                if (!IsEmptyValue(LeftTableAlias)) {
                                        Filter.TestExpression.TableAlias =
                                                LeftTableAlias.replace(TableName, ViewName);
                                };
                                if (Filter.FilterType == ftCompare) {
                                        RightTableAlias = Filter.ValueExpression.TableAlias;
                                        if (!IsEmptyValue(RightTableAlias)) {
                                                Filter.ValueExpression.TableAlias =
                                                        RightTableAlias.replace(TableName, ViewName);
                                        };                                     
                                };                             
                        }
                }
        }
}

Данная проблема может возникнуть где-угодно в версиях вплоть до 3.2.1.17 (а может и выше), но в базовой версии на написание сего меня подвергла операция "Раздать права доступа как у родительского элемента" детали Файлы. Под пользователем данная операция просто валится, т.к. для выполнения использует dq_GiveRightsByParentItem, которая не лишена проблемы описанной выше. Для исправления можно в scr_FilesDetailGridArea подправить ф-ию DeleteExistingFileAccessRecordsByParentItem: перед "DeleteQuery.Execute()" вызвать ф-ию описанную выше как-то так:

ReplaceDQTablesAliasesByViewsInExistFilters(DeleteQuery, 'tbl_FilesRight', 'vw_FilesRight');

Я не сомневаюсь, дорогой путник, что ты давно спишь. Счастливых тебе снов.

Нравится

Поделиться

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

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

Научилась проверять наличие значений в пределах карточки договора:
wnd_ContractEditScript:
function btnOKOnClick(Control)
{
var Dataset = BaseDBEdit.Dataset;

if (Dataset.ValIsNull('CustomerID'))
{
ShowInformationDialog('Заполните инфо о контрагенте!!! ');
return;
}
else {
scr_BaseDBEdit.btnOKOnClick(Control);

}

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

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

С уважением, Гашникова Екатерина

Нравится

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

Здравствуйте, Екатерина!
Насколько мы поняли из предоставленного Вами описания, Вам необходимо со скрипта карточки редактирования договора получить значения полей контрагента, указанного в поле "Контрагент" этого же договора. Для реализации данной функциональности можно использовать следующие варианты:
1. Использовать функцию из скрипта scr_DB

\\ scr_DocumentEditScript

function GetDatasetFieldValueByID(DatasetUSI, ID, FieldName);

Так получим значение поля ‘OfficialName’ который указан в поле ‘AccountID’ карточки редактирования например:

var DocumentDataset = dlData.Dataset;
var AccountID = DocumentDataset.Values(‘AccountID’);
var AccountOfficialName = GetDatasetFieldValueByID(‘ds_Account’, AccountID, ‘OfficialName’);

В этом случае будет выполняться запрос с фильтром по ID для получения значения поля. В этом случае в запрос могут попасть ненужные данные (обязательные поля), что всегда может быть приемлемым. И кроме того хотим обратить Ваше внимание на то, что дополнительное время будет потрачено на получение сервиса ds_Account. И еще если вам потребуется получить больше одного поля по данному контрагенту, то желательно использовать последовательно код типа:

var AccountPrimaryContactID = GetDatasetFieldValueByID(‘ds_Account’, AccountID, ‘PrimaryContactID’);
var AccountZip = GetDatasetFieldValueByID(‘ds_Account’, AccountID, ‘ZIP’);

2. Вы можете написать свою функцию инициализации нужного вида датасета:

// scr_DocumentEditScript
var DocumentEdit = new Object();


function GetAccountDataset() {
if (Assigned(DocumentEdit.AccountDataset)) {
DocumentEdit.AccountDataset = Services.GetNewItemByUSI(‘ds_Account’); // здесь можем использовать свой сервис датасета, в который вынесите только нужные вам колонки, например только ‘PrimaryContactID’, ‘ZIP’ и ‘OfficialName’

}

var AccountDataset = DocumentEdit.AccountDataset;
EnableDatasetFilters(AccountDataset, false); // отключим все фильтры которые были раньше
if (AccountDataset.IsActive) {
AccountDataset.Close(); //закроем датасет если был открыт и не закрыли
}
return AccountDataset;
}

//теперь использование функции:

var AccountDataset = GetAccountDataset();
var DocumentDataset = dlData.Dataset;
var AccountID = DocumentDataset.Values(‘AccountID’);
ApplyDatasetFilter(AccountDataset, ‘ID’, AccountID, true);
AccountDataset.Open();
var AccountOfficialName = AccountDataset.Values(‘OfficialName’);
var AccountPrimaryContactID = AccountDataset.Values(‘PrimaryContactID);
var AccountZip = AccountDataset.Values(‘ZIP);
AccountDataset.Close();

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

Желаем Вам успехов!

спасибо за ответ!
Использовала первый вариант. При попытке нажать кнопку ОК на карточке договора при незаполненном поле "Клиент", все работает правильно - выдается сообщение, но при попытке нажать ОК при заполненном поле "Клиент" возникает ошибка "Ошибка выполнения метода 'btnOKOnClick'. Object 'DataField OfficialAccountName' is not assigned" - а должна производиться проверка на наличие в карточке контрагента в поле "Полное наименование" значения, и если его нет, то выдаваться сообщение о том, что его нужно также заполнить ...

так выглядит моя функция btnOKOnClick:

Карточка договора
Скрипт wnd_ContractEditScript:
function btnOKOnClick(Control) {
var Dataset = BaseDBEdit.Dataset;
var CotractDataset = dlData.Dataset;
var CustomerID = Dataset.Values('CustomerID');
if (Dataset.ValIsNull('CustomerID'))
{
ShowInformationDialog('Заполните клиента!!!');
return;
}
else
{
var ContractDataset = dlData.Dataset;
var AccountID = ContractDataset.Values('AccountID');
var OfficialAccountName = GetDatasetFieldValueByID('ds_Account', AccountID, 'OfficialAccountName');
if (ContractDataset.ValIsNull ('OfficialAccountName'))
{
ShowInformationDialog('Заполните в карточке клиента поле 'Полное наименование'!!!');
return;
}
else
{
scr_BaseDBEdit.btnOKOnClick(Control);
}
scr_BaseDBEdit.btnOKOnClick(Control);

}
}

Что я делаю неправильно, подскажите очень прошу)
С УВАЖЕНИЕМ, Гашникова Екатерина

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

var OfficialAccountName = GetDatasetFieldValueByID('ds_Account', AccountID, 'OfficialAccountName');
if (ContractDataset.ValIsNull ('OfficialAccountName'))
{
ShowInformationDialog('Заполните в карточке клиента поле 'Полное наименование'!!!');
return;
}

прописать:
var OfficialAccountName = GetDatasetFieldValueByID('ds_Account', AccountID, 'OfficialAccountName');
if (!OfficialAccountName)
{
ShowInformationDialog('Заполните в карточке клиента поле 'Полное наименование'!!!');
return;
}

А также в скрипте:

var AccountID = ContractDataset.Values('AccountID');
var OfficialAccountName = GetDatasetFieldValueByID('ds_Account', AccountID, 'OfficialAccountName');
if (ContractDataset.ValIsNull ('OfficialAccountName'))
{
ShowInformationDialog('Заполните в карточке клиента поле 'Полное наименование'!!!');
return;
}

Нужно проверять заполнено ли поле Контрагент в карточке договора.
if (!AccountID)
{
return;
}

Желаем Вам успехов!

спасибо большое, все работает!!

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

Здравствуйте!
Имеется две схемы Террасофт. Проблема с обновлением вкладок деталей. Скрипты все одинаковые. Все сравнила. В момент перехода на вкладку Детали запустила SQL Monitor. В правильной конфигурации идет обращение к таблице tbl_НовыйРаздел, а в неправильной - tbl_Files. Речь идет об обновении вкладок деталей с разными типами файлов. Пробовала отлаживать по шагам в Visual Studio. Нигде не нашла обращение к какой-либо из этих таблиц. Скажите, пожалуйста, в чем может быть ошибка?

Нравится

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

Здравствуйте!
Трудно что либо ответить, нужны примеры сервисов и скриптов, где по Вы думаете, что присутствует ошибка.

Здравствуйте!
Спасибо за ответ!
Проблема была связана с дополнительным обновлением деталей http://community.terrasoft.ua/forum/topic/2076 .
В тестовой базе все получилось, в рабочей со скриптами сделала то же самое, но в итоге с помощью SQL Monitor нашла отличие в том, что обращение происходит к разным таблицам, поэтому и не работает. В чем может быть причина?

Трудно сказать, необходимо более точно описание.

Суть проблемы. Существует в деталях нового раздела 3 вкладки с файлами: Файлы1, Файлы2, Файлы3. Добавляем новый файл на определенную вкладку. Переходим на другую вкладку и видим этот же файл, т. е. фильтр по типу файла не отработал. Относительно фильтров в файле прописано такое.

// wnd_FilesDetailGridAreaScript
function RefreshAllFileDetailRecord(){
var ParentID = FilesDetailGridArea.ParentItemID;
var ChildDataset = FilesDetailGridArea.Dataset;
var ChildFilterName = BaseGridArea.ParentItemFieldName;
if (Self.Attributes('TableUSI') == 'tbl_FileInRequest') { // имя таблицы интересующей детали Файлы
ChildDataset.Close();
ApplyDatasetFilter(ChildDataset, ChildFilterName, ParentID, true);
// <здесь накладываем дополнительные фильтры>
ChildDataset.Open();
} else {
RefreshDetailDataByParentID(ParentID, ChildDataset, ChildFilterName);
}
}

// scr_DB
function ApplyDatasetFilter(Dataset, FilterName, ParamValue, Enabled) {
var SelectQuery = Dataset.SelectQuery;
ApplySelectQueryFilter(SelectQuery, FilterName, ParamValue, Enabled);
}

Ну пока ничего "криминального" не видно :)
Хотелось бы увидеть "// <здесь накладываем дополнительные фильтры>"
и как построен запрос.

Я же для этого и написала функцию ApplyDatasetFilter. А то просто комментарий к предыдущей строке.

Непонятно тогда как вы фильтруете по типу файла?

Вот запрос. sq_FileInItem
Добавила выключенный фильтр сравнения
tbl_FileInRequest"."FileTypeID" = :pFileTypeID (параметр Строка Unicode)

А где Вы указываете значение параметра и включаете этот фильтр?

//wnd_МойРазделScript

function InitializeFilesDetail() {
WWCWorkspace.FileWindow = wndFilesDetail.Window;
SetAttribute(WWCWorkspace.FileWindow, 'DatasetUSI',
'ds_FileInItem');
SetAttribute(WWCWorkspace.FileWindow, 'TableUSI',
'tbl_FileInRequest');
SetAttribute(WWCWorkspace.FileWindow, 'InsertLinkUSI',
'iq_FileInRequest');
SetAttribute(WWCWorkspace.FileWindow, 'ParentItemFieldName',
'RequestID');

//-----Установить атрибут типа файла-------------
WWCWorkspace.FileWindow.Attributes('FileTypeID') = rft_File;

WWCWorkspace.FileWindow.Prepare();
WWCWorkspace.FileDataset =
WWCWorkspace.FileWindow.ComponentsByName('dlData').Dataset;

//-----Включить фильтр по типам файлов
ApplyDatasetFilter(WWCWorkspace.FileDataset ,'FileTypeID', '{CF1AEBB6-9E3D-4303-B036-40EBD1E47A91}', true);
}

function RefreshFilesDetail() {
InitializeFilesDetail();
WWCWorkspace.InitializeFileFlag = true;
var RequestID =
BaseWorkspace.GridDataset.ValAsGUID('ID');
if (RequestID == WWCWorkspace.FilesOldRequestID) {
return;
} else {
WWCWorkspace.FilesOldRequestID = RequestID;
}

SetAttribute(WWCWorkspace.FileWindow, 'ParentItemID',
RequestID);

RefreshDetailData(BaseWorkspace.GridDataset, 'ID',
WWCWorkspace.FileDataset, 'ItemID', 1); // Не выключать включенные фильтры
}

И Вы этот код продублировали для всех трех деталей с разным указанием значения FileTypeID:

...
ApplyDatasetFilter(WWCWorkspace.FileDataset ,'FileTypeID', '{CF1AEBB6-9E3D-4303-B036-40EBD1E47A91}', true);
...

?

Да, с разным значеним. И аттрибут в строке
WWCWorkspace.FileWindow.Attributes('FileTypeID') = rft_File;
тоже 3 раза разный устанавливала.

А что показывает SQL Server Profiler? Параметр меняется?

У нас Oracle. По шагам отлаживала. Параметр меняется. Фильтр применяется. Но в итоге в деталях неправильно отображены файлы.

Кажется я понял... У Вас WWCWorkspace.FileDataset перетирается при инициализации новой детали. Вам надо для каждой детали свою переменную завести.

В функции InitializeFilesDetail я же каждый раз переопределяю Dataset.

WWCWorkspace.FileDataset =
WWCWorkspace.FileWindow.ComponentsByName('dlData').Dataset;

А... я почему-то подумал, что Вы флаг InitializeFileFlag проверяете... Ну это очень не оптимально... У Вас каждый раз при переходе по записям выполняется очень много лишнего кода.
Какой запрос идет на сервер когда Вы нажимаете F5(Refresh) в детали? Приведите пример из трех деталей.

С помощью SQL Monitor в момент нажатия кнопки "Обновить" в деталях находим запрос:

SELECT * FROM (
SELECT 
	"tbl_Files"."ID" "ID",
	"FileInInvoice"."ID" "FileInItemID",
	"FileInInvoice"."RequestID" "ItemID",
	"tbl_Files"."ItemTypeID" "ItemTypeID",
	"tbl_Files"."Link" "Link",
	"tbl_Files"."Description" "Description",
	"tbl_Files"."Revision" "Revision",
	"tbl_Files"."LockedByID" "LockedByID",
	"Contact"."Name" "LockedByName",
	"tbl_Files"."IsArchive" "IsArchive",
	"tbl_Files"."ModifiedByID" "ModifiedByID",
	"Modifier"."Name" "ModifiedByName"
FROM 
	"tbl_Files" "tbl_Files", 
	"tbl_FileInRequest" "FileInInvoice", 
	"tbl_Contact" "Contact", 
	"tbl_Contact" "Modifier"
WHERE 
	"tbl_Files"."ID" = "FileInInvoice"."FileID"(+)
AND
	"tbl_Files"."LockedByID" = "Contact"."ID"(+)
AND
	"tbl_Files"."ModifiedByID" = "Modifier"."ID"(+)
AND 
	("tbl_Files"."ID" = :pID)
) WHERE ROWNUM <= 1
pID = '{9E10BE43-256C-46B3-9F5E-4E390B119BAA}'

Хм... Это Вы карточку открываете?

Это я нажимаю кнопку Обновить в деталях.

Но фильтр у Вас не по типу файла, как Вы писали, а по ID. Опубликуйте xml сервиса запроса детали.

В правильной версии тоже этот запрос отрабатывает при нажатии кнопки Обновить в деталях.

Сервис запроса с файлами.

  <?xml version="1.0" encoding="UTF-8" ?> 
- <Service UID="98AEEBAA44CC487B9DCD95DFDA592C9A" USI="X15\Workspaces\Common\GridAreas\Files\sq_FileInItem" ServiceTypeCode="SelectQuery" Caption="sq_FileInItem">
- <Parameters>
  <Item Name="ID" UID="63AF7502B9224DDF8294878A306B350C" DataType="7" Value_ValueType="0" /> 
  <Item Name="ItemID" UID="19306BE4AA96466E83C3783095BA07D6" DataType="7" Value_ValueType="0" /> 
  <Item Name="FileItemTypeID" UID="8E58543501FD483FA930E923543C20B9" DataType="7" Value_ValueType="0" /> 
  <Item Name="LinkItemTypeID" UID="577A1245CCB64BE390E9467B41A5EFBB" DataType="7" Value_ValueType="0" /> 
  <Item Name="MSProjectFileMask" UID="ED2A9C31E51B4EE0A9B4E1DBBAA7D44F" Value="%.mp%" /> 
  <Item Name="FileTypeID" UID="597151D80B04482B8D5A348F806974EE" Value_ValueType="0" /> 
  </Parameters>
- <Selects>
- <Item Code="Select" UID="4E5092BEC662477D9B5300D14CC9C723" FromTableAlias="tbl_Files" FromTableUSI="tbl_Files">
- <Joins>
  <Item LeftTableAlias="FileInInvoice" UID="CD7A6FCC4A1A40F0B3C426E5EE5EF6FF" LeftFieldTableUSI="tbl_FileInInvoice" RightFieldTableUSI="tbl_Files" LeftFieldSQLName="FileID" RightFieldSQLName="ID" /> 
  <Item LeftTableAlias="Contact" UID="7E4D76F5212E4F89AF53F1C27828171A" LeftFieldTableUSI="tbl_Contact" RightFieldTableUSI="tbl_Files" LeftFieldSQLName="ID" RightFieldSQLName="LockedByID" /> 
  <Item LeftTableAlias="Modifier" UID="629110ACFA7047E0A665BDF166092EF4" LeftFieldTableUSI="tbl_Contact" RightFieldTableUSI="tbl_Files" LeftFieldSQLName="ID" RightFieldSQLName="ModifiedByID" /> 
  <Item LeftTableAlias="Creator" UID="3AF568C2DE014C729578A1E2A5DFB7B6" LeftFieldTableUSI="tbl_Contact" RightFieldTableUSI="tbl_Files" LeftFieldSQLName="ID" RightFieldSQLName="CreatedByID" /> 
  <Item LeftTableAlias="tbl_FileInRequest" UID="3AEB6A2220674B4C8F6B0FABF3BFB371" LeftFieldTableUSI="tbl_FileInRequest" RightFieldTableUSI="tbl_Files" LeftFieldSQLName="FileID" RightFieldSQLName="ID" IsAdministrated="True" /> 
  </Joins>
- <Columns>
  <Item ColumnAlias="ID" UID="2AE81BE7C50A41459EEFA8BEC95E4C48" Type="GeneralColumn" CanDisable="False" FieldSQLName="ID" FieldTableUSI="tbl_Files" /> 
- <Item ColumnAlias="FileInItemID" UID="F071AD3449604D0E817CE04AC873FCFF" Type="GeneralColumn" ParentJoinCode="FileInInvoice" CanDisable="False" FieldSQLName="ID" FieldTableUSI="tbl_FileInInvoice">
- <DependsOn>
  <Item Value="FileInInvoice" UID="F3254AEC92D84299BC0391E11B45E212" /> 
  </DependsOn>
  </Item>
- <Item ColumnAlias="ItemID" UID="DFCA0AB0128C4A599D4067B61BA85319" Type="GeneralColumn" ParentJoinCode="FileInInvoice" CanDisable="False" FieldSQLName="InvoiceID" FieldTableUSI="tbl_FileInInvoice">
- <DependsOn>
  <Item Value="FileInInvoice" UID="DEEEEC806E244DCBBBD38229BCEF3637" /> 
  </DependsOn>
  </Item>
  <Item ColumnAlias="ItemTypeID" UID="96436049388B4DD1A880089BBDD5007A" Type="GeneralColumn" CanDisable="False" FieldSQLName="ItemTypeID" FieldTableUSI="tbl_Files" /> 
  <Item ColumnAlias="Link" UID="F3DEFD7323C34BBDA250CE5A276FF441" Type="GeneralColumn" FieldSQLName="Link" FieldTableUSI="tbl_Files" /> 
  <Item ColumnAlias="Description" UID="5C96487BBD6E4232A4D94925673446E9" Type="GeneralColumn" CanDisable="False" FieldSQLName="Description" FieldTableUSI="tbl_Files" /> 
  <Item ColumnAlias="Revision" UID="D279341C1DAD4AC8869FF3D6E9823396" Type="GeneralColumn" FieldSQLName="Revision" FieldTableUSI="tbl_Files" /> 
  <Item ColumnAlias="LockedByID" UID="056A9DFF11304DEDB65627386E14C515" Type="GeneralColumn" CanDisable="False" FieldSQLName="LockedByID" FieldTableUSI="tbl_Files" /> 
- <Item ColumnAlias="LockedByName" UID="6A7975767348495F800DC59705693B2A" Type="GeneralColumn" ParentJoinCode="Contact" FieldSQLName="Name" FieldTableUSI="tbl_Contact">
- <DependsOn>
  <Item Value="Contact" UID="A83F8A449367426A856A31E3FB7A4623" /> 
  </DependsOn>
  </Item>
  <Item ColumnAlias="FileData" UID="63F283E151974E96BD92B3D6052B25FF" Type="GeneralColumn" FieldSQLName="FileData" FieldTableUSI="tbl_Files" /> 
  <Item ColumnAlias="IsArchive" UID="3758E521217148BEA915F886FD40FDE7" Type="GeneralColumn" CanDisable="False" FieldSQLName="IsArchive" FieldTableUSI="tbl_Files" /> 
  <Item ColumnAlias="ModifiedByID" UID="0ED2D9E51EAE495F919C4177F46DD33B" Type="GeneralColumn" FieldSQLName="ModifiedByID" FieldTableUSI="tbl_Files" /> 
- <Item ColumnAlias="ModifiedByName" UID="AB9ED79F535B42769A364CB598E17E7C" Type="GeneralColumn" ParentJoinCode="Modifier" FieldSQLName="Name" FieldTableUSI="tbl_Contact">
- <DependsOn>
  <Item Value="Modifier" UID="8BFC082E37184A938139334952075430" /> 
  </DependsOn>
  </Item>
  <Item ColumnAlias="CreatedByID" UID="859CCA428EB44294966E9F01D6781AA6" Type="GeneralColumn" FieldSQLName="CreatedByID" FieldTableUSI="tbl_Files" /> 
- <Item ColumnAlias="CreatedByName" UID="B6F702972CA84169966BEBDCF235C128" Type="GeneralColumn" ParentJoinCode="Creator" FieldSQLName="Name" FieldTableUSI="tbl_Contact">
- <DependsOn>
  <Item Value="Creator" UID="F60D2E9B21704550850FD562E3B66645" /> 
  </DependsOn>
  </Item>
  <Item ColumnAlias="ModifiedOn" UID="B8E8E96E1FCB4A548A3364A7BB9AE1A1" Type="GeneralColumn" FieldSQLName="ModifiedOn" FieldTableUSI="tbl_Files" /> 
  <Item ColumnAlias="CreatedOn" UID="FFED574110514432BA8CB879B7B0395B" Type="GeneralColumn" FieldSQLName="CreatedOn" FieldTableUSI="tbl_Files" /> 
- <Item ColumnAlias="FileTypeID" UID="B7A01D2AC8A748FD80BB87B88F2A358D" Type="GeneralColumn" ParentJoinCode="tbl_FileInRequest" FieldSQLName="FileTypeID" FieldTableUSI="tbl_FileInRequest">
- <DependsOn>
  <Item Value="tbl_FileInRequest" UID="B2710F0614614648B0CE16091E541929" /> 
  </DependsOn>
  </Item>
  </Columns>
- <Filters Code="Where" Type="Filters">
  <UserFilters /> 
- <Item Code="ID" UID="90405FC1909A44618B977F405E31C28D" Type="CompareFilter" IsEnabled="False" ExpressionTypeCode="FieldFilterExpression" ValueExpressionTypeCode="ParamFilterExpression">
  <TestExpression Type="FieldFilterExpression" FieldSQLName="ID" FieldTableUSI="tbl_Files" TableAlias="tbl_Files" /> 
  <ValueExpression Type="ParamFilterExpression" ParameterName="ID" /> 
  </Item>
- <Item Code="ItemID" UID="8E0628FB030F40AC9C784E513CCD089B" Type="CompareFilter" IsEnabled="False" ExpressionTypeCode="FieldFilterExpression" ValueExpressionTypeCode="ParamFilterExpression">
  <TestExpression Type="FieldFilterExpression" FieldSQLName="InvoiceID" FieldTableUSI="tbl_FileInInvoice" TableAlias="FileInInvoice" /> 
  <ValueExpression Type="ParamFilterExpression" ParameterName="ItemID" /> 
  </Item>
- <Item Code="ItemType" UID="05C989E1B2CD417EA968A226494F9359" Type="Filters" LogicalOperator="1" IsEnabled="False">
- <Item Code="FileItemTypeID" UID="80CA2D11980D4006AD0F0F3668351391" Type="CompareFilter" IsEnabled="False" ExpressionTypeCode="FieldFilterExpression" ValueExpressionTypeCode="ParamFilterExpression">
  <TestExpression Type="FieldFilterExpression" FieldSQLName="ItemTypeID" FieldTableUSI="tbl_Files" TableAlias="tbl_Files" /> 
  <ValueExpression Type="ParamFilterExpression" ParameterName="FileItemTypeID" /> 
  </Item>
- <Item Code="LinkItemTypeID" UID="D2DAADE11C1740989BDDADEBD5C7B800" Type="CompareFilter" IsEnabled="False" ExpressionTypeCode="FieldFilterExpression" ValueExpressionTypeCode="ParamFilterExpression">
  <TestExpression Type="FieldFilterExpression" FieldSQLName="ItemTypeID" FieldTableUSI="tbl_Files" TableAlias="tbl_Files" /> 
  <ValueExpression Type="ParamFilterExpression" ParameterName="LinkItemTypeID" /> 
  </Item>
  </Item>
- <Item Code="MSProjectFile" UID="EF60F3DDBD4349578972FEADD5202532" Type="LikeFilter" IsEnabled="False" ExpressionTypeCode="FieldFilterExpression" ValueExpressionTypeCode="ParamFilterExpression" LikeType="1">
  <TestExpression Type="FieldFilterExpression" FieldSQLName="Link" FieldTableUSI="tbl_Files" TableAlias="tbl_Files" /> 
  <ValueExpression Type="ParamFilterExpression" ParameterName="MSProjectFileMask" /> 
  </Item>
- <Item Code="FileTypeID" UID="EB5A5C312DD44C4D9E458E6B9A917E31" Type="CompareFilter" IsEnabled="False" ExpressionTypeCode="FieldFilterExpression" ValueExpressionTypeCode="ParamFilterExpression">
  <TestExpression Type="FieldFilterExpression" FieldSQLName="FileTypeID" FieldTableUSI="tbl_FileInRequest" TableAlias="tbl_FileInRequest" /> 
  <ValueExpression Type="ParamFilterExpression" ParameterName="FileTypeID" /> 
  </Item>
  </Filters>
  </Item>
  </Selects>
  </Service>

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

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

Как выглядит функция RefreshDetailData и RefreshDetailDataByParentID?

// scr_DB

Эти функции я не меняла.

function RefreshDetailDataByParentID(ParentID, ChildDataset, ChildFilterName) {
	if (ParentID == EmptyStr) {
		ParentID = GUID_NULL;
	}
	if (ChildDataset.State != dstInactive) {
		ChildDataset.Close();
	}
	EnableDatasetFilters(ChildDataset, false);
	ApplyDatasetFilter(ChildDataset, ChildFilterName, ParentID, true);	
	ChildDataset.Open();
}
function RefreshDetailData(ParentDataset, ParentFieldName, ChildDataset,
		ChildFilterName) {
	var ParentFieldValue = ParentDataset.ValAsStr(ParentFieldName);	
	RefreshDetailDataByParentID(ParentFieldValue, ChildDataset, 
		ChildFilterName);
}

Тогда как работает эта реализация?

...
RefreshDetailData(BaseWorkspace.GridDataset, 'ID',
WWCWorkspace.FileDataset, 'ItemID', 1); // Не выключать включенные фильтры
...

Судя по scr_DB то фильтры отключаются...

Большое спасибо!

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