Добрый день!
В карточке документов было создано поле "Вендор", которое подтягивает контрагентов с типом "Вендор". Т.е. получилось 2 поля с контрагентами Контрагенты(стандартное) и Вендор.
В разделе "Контрагенты" -> деталь "Документы". В стандартном функционале данные о документах подтягиваются у тех контрагентов, которые были указаны в карточке документов в поле "Контрагенты". Нужно реализовать точно такой же функционал(что бы подтягивалась информация о документах) и для тех контрагентов, что были указаны в поле "Вендор"(карточка документов) на этой же детали "Документы".
Подскажите как это можно сделать?
Заранее спасибо!!
Нравится
в sq_Document создайте новы набор фильтров с логическим оператором OR:

в нем создайте два фильтра сравнения:
tbl_Document.AccountID = AccountID2 (parameter) с названием AccountID2 (главное чтобы не AccountID, т.к. такой уже существует)
tbl_Document.VendorID = VendorID (parameter) с названием VendorID
и соответствующие параметры
сделайте активным оба или только VendorID - главное не сам набор.
в scr_AccountsWorkspace
найдите место
[javascript]
/* MODULE DOCUMENTS */
if (pcDetails.ActivePage.Name == pgDocumentsDetail.Name) {
[/javascript]
и после него поменяйте второй AccountID на AccountID2
должно получиться:
[javascript]
/* MODULE DOCUMENTS */
if (pcDetails.ActivePage.Name == pgDocumentsDetail.Name) {
RefreshCommonDetail(BaseWorkspace, wndDocumentsDetail,
'AccountID', 'AccountID2');
} else
/* ENDMODULE DOCUMENTS */
[/javascript]
все, должно работать
но обратите внимание, что при создании документа с детали в него просталяется AccountID от записи контрагента
Добрый день Николай!!!
для решения вашего вопроса вам требуется сделать следующее:
1. в скрипте wnd_DocumentsGridArea, в DataGrid "grdData" добавить новый "DataGridView". к примеру назвать его "gvDocumentsVendor". Определить поля. На закладке Свойства, установить курсор FilterSetCode и присвоить Имя к примеру "DocumentsVendor"
2. открыть запрос sq_Document и добавить "Compare Filter" c именем "DocumentsVendor" и условием к примеру [javascript] tbl_Document.VendorID = :VendorID [/javascript]
3. в скрипте scr_AccountsWorkspace добавить следующий код
изменить функцию RefreshDetails() и добавить следующий код:
[javascript]
function RefreshDetails() {
...
/* MODULE DOCUMENTS */
if (pcDetails.ActivePage.Name == pgDocumentsDetail.Name) {
SetAttribute(wndDocumentsDetail.Window, 'ParentDataset', BaseWorkspace.GridDataset);
SetAttribute(wndDocumentsDetail.Window, 'ParentItemID', BaseWorkspace.GridDataset.ValAsStr('ID'));
RefreshCommonDetail(BaseWorkspace, wndDocumentsDetail,
'AccountID', 'AccountID');
} else
/* ENDMODULE DOCUMENTS */
...
[/javascript]
4. в скрипте scr_DocumentsGridArea добавить следующий код
в самом начале скрипта
[javascript]
var DocumentsGridArea = new Object();
[/javascript]
изменить функцию Initialize(Window) и добавить в начало функции следующий код:
[javascript]
function Initialize(Window) {
DocumentsGridArea.ParentItemID = GetAttribute(Window, 'ParentItemID');
...
}
[/javascript]
изменить функцию dlDataOnDatasetBeforeOpen(Dataset, DoOpen) и добавить следующий код:
[javascript]
function dlDataOnDatasetBeforeOpen(Dataset, DoOpen) {
...
if (grdData.ActiveView.Name == gvDocumentsVendor.Name) {
Dataset.Close();
ApplyDatasetFilter(Dataset, 'DocumentsVendor', DocumentsGridArea.ParentItemID, true);
Dataset.Open();
} else {
EnableDatasetFilters(Dataset, false, 'DocumentsVendor');
}
if (grdData.ActiveView.Name == dgvData.Name) {
Dataset.Close();
ApplyDatasetFilter(Dataset, 'AccountID', DocumentsGridArea.ParentItemID, true);
Dataset.Open();
} else {
EnableDatasetFilters(Dataset, false, 'AccountID');
}
...
}
[/javascript]
вот и все и ваша задача будет решена.
Добрый день
Первое решение не дало результатов, контрагенты подтягиваются, а те кто стоят в вендорах нет.
Второе решение выдаёт ошибку что стек переполнен. Debugger прошёл, не входит в
if (grdData.ActiveView.Name == gvDocumentsVendor.Name) {
Может я что не так сделал в wnd_DocumentsGridArea. скрин прилагаю
"Арефьев Николай Николаевич" написал:Первое решение не дало результатов
действительно)
надо было tbl_Document.VendorID = AccountID :redface:
"Андросов Дмитрий" написал:
Арефьев Николай Николаевич пишет:
Первое решение не дало результатов
действительно)
надо было tbl_Document.VendorID = AccountID
Поменял, всё равно ничего.... скрин в аттаче
блин, простите :exclaim:
tbl_Document.VendorID = AccountID2
"Андросов Дмитрий" написал:блин, простите
tbl_Document.VendorID = AccountID2
Огромное спасибо!!!) Получилось!)
Только теперь не показывает документы у контрагентов(((
не совсем понятно, я проверил у себя - все работает.
попробуйте очистить кеш, сначала удалить, а потом опять создать заново набор фильтров, фильтры и параметр AccountID2, попробуйте не включать фильтр AccountID2
"Андросов Дмитрий" написал:не совсем понятно, я проверил у себя - все работает.
попробуйте очистить кеш, сначала удалить, а потом опять создать заново набор фильтров, фильтры и параметр AccountID2, попробуйте не включать фильтр AccountID2
Всё) понял в чём проблема была, надо было везде AccountID2 выставить как параметр!) Всё ещё раз спасибо!)